tinybase 8.0.0-beta.1 → 8.0.0-beta.3
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 +151 -29
- package/@types/middleware/with-schemas/index.d.ts +174 -29
- package/@types/store/index.d.ts +132 -79
- package/@types/store/with-schemas/index.d.ts +137 -81
- package/checkpoints/index.js +2 -8
- package/checkpoints/with-schemas/index.js +2 -8
- package/index.js +272 -143
- package/mergeable-store/index.js +271 -156
- package/mergeable-store/with-schemas/index.js +271 -156
- package/middleware/index.js +40 -1
- package/middleware/with-schemas/index.js +40 -1
- 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 +356 -154
- package/omni/with-schemas/index.js +356 -154
- package/package.json +7 -7
- 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 +19 -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 +195 -104
- package/store/with-schemas/index.js +195 -104
- 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 +91 -6
- package/ui-react-dom/with-schemas/index.js +91 -6
- package/ui-react-inspector/index.js +248 -84
- package/ui-react-inspector/with-schemas/index.js +248 -84
- package/with-schemas/index.js +272 -143
package/omni/index.js
CHANGED
|
@@ -15,6 +15,8 @@ const STRING = getTypeOf(EMPTY_STRING);
|
|
|
15
15
|
const BOOLEAN = getTypeOf(true);
|
|
16
16
|
const NUMBER = getTypeOf(0);
|
|
17
17
|
const FUNCTION$1 = getTypeOf(getTypeOf);
|
|
18
|
+
const OBJECT = 'object';
|
|
19
|
+
const ARRAY = 'array';
|
|
18
20
|
const TRUE = 'true';
|
|
19
21
|
const TYPE = 'type';
|
|
20
22
|
const DEFAULT = 'default';
|
|
@@ -68,6 +70,7 @@ const EXTRA = 'extra';
|
|
|
68
70
|
const T = 't';
|
|
69
71
|
const V = 'v';
|
|
70
72
|
const UNDEFINED = '\uFFFC';
|
|
73
|
+
const JSON_PREFIX = '\uFFFD';
|
|
71
74
|
const id = (key) => EMPTY_STRING + key;
|
|
72
75
|
const strStartsWith = (str, prefix) => str.startsWith(prefix);
|
|
73
76
|
const strEndsWith = (str, suffix) => str.endsWith(suffix);
|
|
@@ -619,18 +622,12 @@ const createCheckpoints = getCreateFunction(
|
|
|
619
622
|
collForEach(cellsDelta2, (table, tableId) =>
|
|
620
623
|
collForEach(table, (row, rowId) =>
|
|
621
624
|
collForEach(row, (oldNew, cellId) =>
|
|
622
|
-
store.
|
|
623
|
-
tableId,
|
|
624
|
-
rowId,
|
|
625
|
-
cellId,
|
|
626
|
-
oldNew[oldOrNew],
|
|
627
|
-
true,
|
|
628
|
-
),
|
|
625
|
+
store._[5](tableId, rowId, cellId, oldNew[oldOrNew], true),
|
|
629
626
|
),
|
|
630
627
|
),
|
|
631
628
|
);
|
|
632
629
|
collForEach(valuesDelta2, (oldNew, valueId) =>
|
|
633
|
-
store.
|
|
630
|
+
store._[6](valueId, oldNew[oldOrNew], true),
|
|
634
631
|
);
|
|
635
632
|
});
|
|
636
633
|
listening = 1;
|
|
@@ -1233,6 +1230,12 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
1233
1230
|
if (isNull(cellOrValue)) {
|
|
1234
1231
|
return NULL;
|
|
1235
1232
|
}
|
|
1233
|
+
if (isArray(cellOrValue)) {
|
|
1234
|
+
return ARRAY;
|
|
1235
|
+
}
|
|
1236
|
+
if (isObject(cellOrValue)) {
|
|
1237
|
+
return OBJECT;
|
|
1238
|
+
}
|
|
1236
1239
|
const type = getTypeOf(cellOrValue);
|
|
1237
1240
|
return isTypeStringOrBoolean(type) ||
|
|
1238
1241
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
@@ -1241,17 +1244,33 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
1241
1244
|
};
|
|
1242
1245
|
const isCellOrValueOrUndefined = (cellOrValue) =>
|
|
1243
1246
|
isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
|
|
1244
|
-
const
|
|
1247
|
+
const isJsonType = (type) => type == OBJECT || type == ARRAY;
|
|
1248
|
+
const encodeIfJson = (value) =>
|
|
1249
|
+
isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
|
|
1250
|
+
const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
|
|
1251
|
+
const decodeIfJson = (raw, _id, encoded) =>
|
|
1252
|
+
!encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
|
|
1253
|
+
const getTypeCase = (
|
|
1254
|
+
type,
|
|
1255
|
+
stringCase,
|
|
1256
|
+
numberCase,
|
|
1257
|
+
booleanCase,
|
|
1258
|
+
objectCase,
|
|
1259
|
+
arrayCase,
|
|
1260
|
+
) =>
|
|
1245
1261
|
type == STRING
|
|
1246
1262
|
? stringCase
|
|
1247
1263
|
: type == NUMBER
|
|
1248
1264
|
? numberCase
|
|
1249
1265
|
: type == BOOLEAN
|
|
1250
1266
|
? booleanCase
|
|
1251
|
-
:
|
|
1267
|
+
: type == OBJECT
|
|
1268
|
+
? objectCase
|
|
1269
|
+
: type == ARRAY
|
|
1270
|
+
? arrayCase
|
|
1271
|
+
: null;
|
|
1252
1272
|
|
|
1253
1273
|
const stampClone = ([value, hlc]) => stampNew(value, hlc);
|
|
1254
|
-
const stampCloneWithHash = ([value, hlc, hash]) => [value, hlc, hash];
|
|
1255
1274
|
const stampNew = (value, hlc) => (hlc ? [value, hlc] : [value]);
|
|
1256
1275
|
const stampNewWithHash = (value, hlc, hash) => [value, hlc, hash];
|
|
1257
1276
|
const getStampHash = (stamp) => stamp[2];
|
|
@@ -1268,10 +1287,11 @@ const stampUpdate = (stamp, hlc, hash) => {
|
|
|
1268
1287
|
};
|
|
1269
1288
|
const stampNewObj = (hlc = EMPTY_STRING) => stampNew(objNew(), hlc);
|
|
1270
1289
|
const stampNewMap = (hlc = EMPTY_STRING) => [mapNew(), hlc, 0];
|
|
1271
|
-
const stampMapToObjWithHash = (
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1290
|
+
const stampMapToObjWithHash = ([map, hlc, hash], mapper) => [
|
|
1291
|
+
mapToObj(map, mapper),
|
|
1292
|
+
hlc,
|
|
1293
|
+
hash,
|
|
1294
|
+
];
|
|
1275
1295
|
const stampMapToObjWithoutHash = ([map, hlc], mapper = stampClone) =>
|
|
1276
1296
|
stampNew(mapToObj(map, mapper), hlc);
|
|
1277
1297
|
const stampValidate = (stamp, validateThing) =>
|
|
@@ -1378,15 +1398,19 @@ const createStore = () => {
|
|
|
1378
1398
|
return false;
|
|
1379
1399
|
}
|
|
1380
1400
|
const type = schema[TYPE];
|
|
1381
|
-
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
1401
|
+
if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
|
|
1382
1402
|
return false;
|
|
1383
1403
|
}
|
|
1384
1404
|
const defaultValue = schema[DEFAULT];
|
|
1385
1405
|
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
1386
1406
|
return false;
|
|
1387
1407
|
}
|
|
1388
|
-
if (!isNull(defaultValue)
|
|
1389
|
-
|
|
1408
|
+
if (!isNull(defaultValue)) {
|
|
1409
|
+
if (getCellOrValueType(defaultValue) != type) {
|
|
1410
|
+
objDel(schema, DEFAULT);
|
|
1411
|
+
} else {
|
|
1412
|
+
schema[DEFAULT] = encodeIfJson(defaultValue);
|
|
1413
|
+
}
|
|
1390
1414
|
}
|
|
1391
1415
|
return true;
|
|
1392
1416
|
};
|
|
@@ -1426,20 +1450,22 @@ const createStore = () => {
|
|
|
1426
1450
|
? cellSchema[ALLOW_NULL]
|
|
1427
1451
|
? cell
|
|
1428
1452
|
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
1429
|
-
: getCellOrValueType(cell)
|
|
1430
|
-
? cell
|
|
1431
|
-
:
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1453
|
+
: getCellOrValueType(cell) === cellSchema[TYPE]
|
|
1454
|
+
? encodeIfJson(cell)
|
|
1455
|
+
: isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
|
|
1456
|
+
? cell
|
|
1457
|
+
: cellInvalid(
|
|
1458
|
+
tableId,
|
|
1459
|
+
rowId,
|
|
1460
|
+
cellId,
|
|
1461
|
+
cell,
|
|
1462
|
+
cellSchema[DEFAULT],
|
|
1463
|
+
),
|
|
1438
1464
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
1439
1465
|
)
|
|
1440
1466
|
: isUndefined(getCellOrValueType(cell))
|
|
1441
1467
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1442
|
-
: cell;
|
|
1468
|
+
: encodeIfJson(cell);
|
|
1443
1469
|
const validateValues = (values, skipDefaults) =>
|
|
1444
1470
|
objValidate(
|
|
1445
1471
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
@@ -1463,14 +1489,16 @@ const createStore = () => {
|
|
|
1463
1489
|
? valueSchema[ALLOW_NULL]
|
|
1464
1490
|
? value
|
|
1465
1491
|
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
1466
|
-
: getCellOrValueType(value)
|
|
1467
|
-
? value
|
|
1468
|
-
:
|
|
1492
|
+
: getCellOrValueType(value) === valueSchema[TYPE]
|
|
1493
|
+
? encodeIfJson(value)
|
|
1494
|
+
: isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
|
|
1495
|
+
? value
|
|
1496
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
1469
1497
|
() => valueInvalid(valueId, value),
|
|
1470
1498
|
)
|
|
1471
1499
|
: isUndefined(getCellOrValueType(value))
|
|
1472
1500
|
? valueInvalid(valueId, value)
|
|
1473
|
-
: value;
|
|
1501
|
+
: encodeIfJson(value);
|
|
1474
1502
|
const addDefaultsToRow = (row, tableId, rowId) => {
|
|
1475
1503
|
ifNotUndefined(
|
|
1476
1504
|
mapGet(tablesSchemaRowCache, tableId),
|
|
@@ -1893,13 +1921,21 @@ const createStore = () => {
|
|
|
1893
1921
|
const getCellChange = (tableId, rowId, cellId) =>
|
|
1894
1922
|
ifNotUndefined(
|
|
1895
1923
|
mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
|
|
1896
|
-
([oldCell, newCell]) => [
|
|
1924
|
+
([oldCell, newCell]) => [
|
|
1925
|
+
true,
|
|
1926
|
+
decodeIfJson(oldCell),
|
|
1927
|
+
decodeIfJson(newCell),
|
|
1928
|
+
],
|
|
1897
1929
|
() => [false, ...pairNew(getCell(tableId, rowId, cellId))],
|
|
1898
1930
|
);
|
|
1899
1931
|
const getValueChange = (valueId) =>
|
|
1900
1932
|
ifNotUndefined(
|
|
1901
1933
|
mapGet(changedValues, valueId),
|
|
1902
|
-
([oldValue, newValue]) => [
|
|
1934
|
+
([oldValue, newValue]) => [
|
|
1935
|
+
true,
|
|
1936
|
+
decodeIfJson(oldValue),
|
|
1937
|
+
decodeIfJson(newValue),
|
|
1938
|
+
],
|
|
1903
1939
|
() => [false, ...pairNew(getValue(valueId))],
|
|
1904
1940
|
);
|
|
1905
1941
|
const callInvalidCellListeners = (mutator) =>
|
|
@@ -1944,6 +1980,10 @@ const createStore = () => {
|
|
|
1944
1980
|
return 1;
|
|
1945
1981
|
}
|
|
1946
1982
|
};
|
|
1983
|
+
const clonedChangedCells = (changedCells2) =>
|
|
1984
|
+
mapClone(changedCells2, (map) =>
|
|
1985
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1986
|
+
);
|
|
1947
1987
|
const callTabularListenersForChanges = (mutator) => {
|
|
1948
1988
|
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1949
1989
|
const hasSortedRowIdListeners = !collIsEmpty(
|
|
@@ -1975,9 +2015,7 @@ const createStore = () => {
|
|
|
1975
2015
|
mapClone(changedRowCount),
|
|
1976
2016
|
mapClone2(changedRowIds),
|
|
1977
2017
|
mapClone3(changedCellIds),
|
|
1978
|
-
|
|
1979
|
-
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1980
|
-
),
|
|
2018
|
+
clonedChangedCells(changedCells),
|
|
1981
2019
|
]
|
|
1982
2020
|
: [
|
|
1983
2021
|
changedTableIds,
|
|
@@ -2073,8 +2111,8 @@ const createStore = () => {
|
|
|
2073
2111
|
callListeners(
|
|
2074
2112
|
cellListeners[mutator],
|
|
2075
2113
|
[tableId, rowId, cellId],
|
|
2076
|
-
newCell,
|
|
2077
|
-
oldCell,
|
|
2114
|
+
decodeIfJson(newCell),
|
|
2115
|
+
decodeIfJson(oldCell),
|
|
2078
2116
|
getCellChange,
|
|
2079
2117
|
);
|
|
2080
2118
|
tablesChanged = tableChanged = rowChanged = 1;
|
|
@@ -2130,8 +2168,8 @@ const createStore = () => {
|
|
|
2130
2168
|
callListeners(
|
|
2131
2169
|
valueListeners[mutator],
|
|
2132
2170
|
[valueId],
|
|
2133
|
-
newValue,
|
|
2134
|
-
oldValue,
|
|
2171
|
+
decodeIfJson(newValue),
|
|
2172
|
+
decodeIfJson(oldValue),
|
|
2135
2173
|
getValueChange,
|
|
2136
2174
|
);
|
|
2137
2175
|
valuesChanged = 1;
|
|
@@ -2168,10 +2206,42 @@ const createStore = () => {
|
|
|
2168
2206
|
[getTableIds],
|
|
2169
2207
|
);
|
|
2170
2208
|
};
|
|
2209
|
+
const getTransactionChangesImpl = (encoded = false) => [
|
|
2210
|
+
mapToObj(
|
|
2211
|
+
changedCells,
|
|
2212
|
+
(table, tableId) =>
|
|
2213
|
+
mapGet(changedTableIds, tableId) === -1
|
|
2214
|
+
? void 0
|
|
2215
|
+
: mapToObj(
|
|
2216
|
+
table,
|
|
2217
|
+
(row, rowId) =>
|
|
2218
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2219
|
+
? void 0
|
|
2220
|
+
: mapToObj(
|
|
2221
|
+
row,
|
|
2222
|
+
([, newCell]) =>
|
|
2223
|
+
decodeIfJson(newCell, EMPTY_STRING, encoded),
|
|
2224
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
2225
|
+
),
|
|
2226
|
+
collIsEmpty,
|
|
2227
|
+
objIsEmpty,
|
|
2228
|
+
),
|
|
2229
|
+
collIsEmpty,
|
|
2230
|
+
objIsEmpty,
|
|
2231
|
+
),
|
|
2232
|
+
mapToObj(
|
|
2233
|
+
changedValues,
|
|
2234
|
+
([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
|
|
2235
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
2236
|
+
),
|
|
2237
|
+
1,
|
|
2238
|
+
];
|
|
2171
2239
|
const getContent = () => [getTables(), getValues()];
|
|
2172
|
-
const
|
|
2240
|
+
const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
|
|
2241
|
+
const getTables = () => mapToObj3(tablesMap, decodeIfJson);
|
|
2173
2242
|
const getTableIds = () => mapKeys(tablesMap);
|
|
2174
|
-
const getTable = (tableId) =>
|
|
2243
|
+
const getTable = (tableId) =>
|
|
2244
|
+
mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
|
|
2175
2245
|
const getTableCellIds = (tableId) =>
|
|
2176
2246
|
mapKeys(mapGet(tableCellIds, id(tableId)));
|
|
2177
2247
|
const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
|
|
@@ -2207,14 +2277,16 @@ const createStore = () => {
|
|
|
2207
2277
|
([, rowId]) => rowId,
|
|
2208
2278
|
);
|
|
2209
2279
|
const getRow = (tableId, rowId) =>
|
|
2210
|
-
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
2280
|
+
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
|
|
2211
2281
|
const getCellIds = (tableId, rowId) =>
|
|
2212
2282
|
mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
2213
2283
|
const getCell = (tableId, rowId, cellId) =>
|
|
2214
|
-
|
|
2215
|
-
|
|
2284
|
+
decodeIfJson(
|
|
2285
|
+
mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
|
|
2286
|
+
);
|
|
2287
|
+
const getValues = () => mapToObj(valuesMap, decodeIfJson);
|
|
2216
2288
|
const getValueIds = () => mapKeys(valuesMap);
|
|
2217
|
-
const getValue = (valueId) => mapGet(valuesMap, id(valueId));
|
|
2289
|
+
const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
|
|
2218
2290
|
const hasTables = () => !collIsEmpty(tablesMap);
|
|
2219
2291
|
const hasTable = (tableId) => collHas(tablesMap, id(tableId));
|
|
2220
2292
|
const hasTableCell = (tableId, cellId) =>
|
|
@@ -2501,35 +2573,8 @@ const createStore = () => {
|
|
|
2501
2573
|
}
|
|
2502
2574
|
return store;
|
|
2503
2575
|
};
|
|
2504
|
-
const getTransactionChanges = () =>
|
|
2505
|
-
|
|
2506
|
-
changedCells,
|
|
2507
|
-
(table, tableId) =>
|
|
2508
|
-
mapGet(changedTableIds, tableId) === -1
|
|
2509
|
-
? void 0
|
|
2510
|
-
: mapToObj(
|
|
2511
|
-
table,
|
|
2512
|
-
(row, rowId) =>
|
|
2513
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
2514
|
-
? void 0
|
|
2515
|
-
: mapToObj(
|
|
2516
|
-
row,
|
|
2517
|
-
([, newCell]) => newCell,
|
|
2518
|
-
(changedCell) => pairIsEqual(changedCell),
|
|
2519
|
-
),
|
|
2520
|
-
collIsEmpty,
|
|
2521
|
-
objIsEmpty,
|
|
2522
|
-
),
|
|
2523
|
-
collIsEmpty,
|
|
2524
|
-
objIsEmpty,
|
|
2525
|
-
),
|
|
2526
|
-
mapToObj(
|
|
2527
|
-
changedValues,
|
|
2528
|
-
([, newValue]) => newValue,
|
|
2529
|
-
(changedValue) => pairIsEqual(changedValue),
|
|
2530
|
-
),
|
|
2531
|
-
1,
|
|
2532
|
-
];
|
|
2576
|
+
const getTransactionChanges = () => getTransactionChangesImpl();
|
|
2577
|
+
const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
|
|
2533
2578
|
const getTransactionLog = () => [
|
|
2534
2579
|
!collIsEmpty(changedCells),
|
|
2535
2580
|
!collIsEmpty(changedValues),
|
|
@@ -2542,6 +2587,37 @@ const createStore = () => {
|
|
|
2542
2587
|
mapToObj3(changedCellIds),
|
|
2543
2588
|
mapToObj(changedValueIds),
|
|
2544
2589
|
];
|
|
2590
|
+
const doDidSetRows = () => {
|
|
2591
|
+
if (middleware[14]) {
|
|
2592
|
+
const changedCells2 = clonedChangedCells(changedCells);
|
|
2593
|
+
collForEach(changedCells2, (rows, tableId) =>
|
|
2594
|
+
collForEach(rows, (cells, rowId) => {
|
|
2595
|
+
if (
|
|
2596
|
+
!arrayEvery(
|
|
2597
|
+
collValues(cells),
|
|
2598
|
+
([oldCell, newCell]) => oldCell === newCell,
|
|
2599
|
+
)
|
|
2600
|
+
) {
|
|
2601
|
+
const newRow = getRow(tableId, rowId);
|
|
2602
|
+
const oldRow = objMerge(newRow);
|
|
2603
|
+
collForEach(cells, ([oldCell], cellId) =>
|
|
2604
|
+
isUndefined(oldCell)
|
|
2605
|
+
? objDel(oldRow, cellId)
|
|
2606
|
+
: (oldRow[cellId] = oldCell),
|
|
2607
|
+
);
|
|
2608
|
+
const didSetRow = middleware[14](tableId, rowId, oldRow, newRow);
|
|
2609
|
+
if (!objIsEqual(didSetRow, newRow)) {
|
|
2610
|
+
const setOrDelRow = objMap(newRow, () => void 0);
|
|
2611
|
+
objMap(didSetRow, (cell, cellId) => (setOrDelRow[cellId] = cell));
|
|
2612
|
+
objMap(setOrDelRow, (cell, cellId) =>
|
|
2613
|
+
setOrDelCell(tableId, rowId, cellId, cell, true),
|
|
2614
|
+
);
|
|
2615
|
+
}
|
|
2616
|
+
}
|
|
2617
|
+
}),
|
|
2618
|
+
);
|
|
2619
|
+
}
|
|
2620
|
+
};
|
|
2545
2621
|
const finishTransaction = (doRollback) => {
|
|
2546
2622
|
if (transactions > 0) {
|
|
2547
2623
|
transactions--;
|
|
@@ -2551,6 +2627,7 @@ const createStore = () => {
|
|
|
2551
2627
|
callInvalidCellListeners(1);
|
|
2552
2628
|
if (!collIsEmpty(changedCells)) {
|
|
2553
2629
|
callTabularListenersForChanges(1);
|
|
2630
|
+
doDidSetRows();
|
|
2554
2631
|
}
|
|
2555
2632
|
callInvalidValueListeners(1);
|
|
2556
2633
|
if (!collIsEmpty(changedValues)) {
|
|
@@ -2611,7 +2688,9 @@ const createStore = () => {
|
|
|
2611
2688
|
tableCallback(tableId, (rowCallback) =>
|
|
2612
2689
|
collForEach(tableMap, (rowMap, rowId) =>
|
|
2613
2690
|
rowCallback(rowId, (cellCallback) =>
|
|
2614
|
-
mapForEach(rowMap,
|
|
2691
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2692
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2693
|
+
),
|
|
2615
2694
|
),
|
|
2616
2695
|
),
|
|
2617
2696
|
),
|
|
@@ -2620,11 +2699,21 @@ const createStore = () => {
|
|
|
2620
2699
|
mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
|
|
2621
2700
|
const forEachRow = (tableId, rowCallback) =>
|
|
2622
2701
|
collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
|
|
2623
|
-
rowCallback(rowId, (cellCallback) =>
|
|
2702
|
+
rowCallback(rowId, (cellCallback) =>
|
|
2703
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2704
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2705
|
+
),
|
|
2706
|
+
),
|
|
2624
2707
|
);
|
|
2625
2708
|
const forEachCell = (tableId, rowId, cellCallback) =>
|
|
2626
|
-
mapForEach(
|
|
2627
|
-
|
|
2709
|
+
mapForEach(
|
|
2710
|
+
mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
|
|
2711
|
+
(cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
|
|
2712
|
+
);
|
|
2713
|
+
const forEachValue = (valueCallback) =>
|
|
2714
|
+
mapForEach(valuesMap, (valueId, value) =>
|
|
2715
|
+
valueCallback(valueId, decodeIfJson(value)),
|
|
2716
|
+
);
|
|
2628
2717
|
const addSortedRowIdsListener = (
|
|
2629
2718
|
tableIdOrArgs,
|
|
2630
2719
|
cellIdOrListener,
|
|
@@ -2709,6 +2798,7 @@ const createStore = () => {
|
|
|
2709
2798
|
willDelValues,
|
|
2710
2799
|
willDelValue,
|
|
2711
2800
|
willApplyChanges,
|
|
2801
|
+
didSetRow,
|
|
2712
2802
|
) =>
|
|
2713
2803
|
(middleware = [
|
|
2714
2804
|
willSetContent,
|
|
@@ -2725,6 +2815,7 @@ const createStore = () => {
|
|
|
2725
2815
|
willDelValues,
|
|
2726
2816
|
willDelValue,
|
|
2727
2817
|
willApplyChanges,
|
|
2818
|
+
didSetRow,
|
|
2728
2819
|
]);
|
|
2729
2820
|
const setInternalListeners = (
|
|
2730
2821
|
preStartTransaction,
|
|
@@ -2814,14 +2905,17 @@ const createStore = () => {
|
|
|
2814
2905
|
delListener,
|
|
2815
2906
|
getListenerStats,
|
|
2816
2907
|
isMergeable: () => false,
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2908
|
+
_: [
|
|
2909
|
+
createStore,
|
|
2910
|
+
addListener,
|
|
2911
|
+
callListeners,
|
|
2912
|
+
setInternalListeners,
|
|
2913
|
+
setMiddleware,
|
|
2914
|
+
setOrDelCell,
|
|
2915
|
+
setOrDelValue,
|
|
2916
|
+
getEncodedContent,
|
|
2917
|
+
getEncodedTransactionChanges,
|
|
2918
|
+
],
|
|
2825
2919
|
};
|
|
2826
2920
|
objMap(
|
|
2827
2921
|
{
|
|
@@ -3136,14 +3230,78 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3136
3230
|
]);
|
|
3137
3231
|
}
|
|
3138
3232
|
};
|
|
3139
|
-
const
|
|
3233
|
+
const getMergeableContentImpl = (encoded = false) => [
|
|
3140
3234
|
stampMapToObjWithHash(contentStampMap[0], (tableStampMap) =>
|
|
3141
3235
|
stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
|
|
3142
|
-
stampMapToObjWithHash(rowStampMap)
|
|
3236
|
+
stampMapToObjWithHash(rowStampMap, ([cell, hlc, hash]) => [
|
|
3237
|
+
decodeIfJson(cell, EMPTY_STRING, encoded),
|
|
3238
|
+
hlc,
|
|
3239
|
+
hash,
|
|
3240
|
+
]),
|
|
3143
3241
|
),
|
|
3144
3242
|
),
|
|
3145
|
-
stampMapToObjWithHash(contentStampMap[1])
|
|
3243
|
+
stampMapToObjWithHash(contentStampMap[1], ([value, hlc, hash]) => [
|
|
3244
|
+
decodeIfJson(value, EMPTY_STRING, encoded),
|
|
3245
|
+
hlc,
|
|
3246
|
+
hash,
|
|
3247
|
+
]),
|
|
3146
3248
|
];
|
|
3249
|
+
const getTransactionMergeableChangesImpl = (withHashes, encoded = false) => {
|
|
3250
|
+
const [
|
|
3251
|
+
[tableStampMaps, tablesHlc, tablesHash],
|
|
3252
|
+
[valueStampMaps, valuesHlc, valuesHash],
|
|
3253
|
+
] = contentStampMap;
|
|
3254
|
+
const newStamp = withHashes ? stampNewWithHash : stampNew;
|
|
3255
|
+
const tablesObj = {};
|
|
3256
|
+
collForEach(touchedCells, (touchedTable, tableId) =>
|
|
3257
|
+
ifNotUndefined(
|
|
3258
|
+
mapGet(tableStampMaps, tableId),
|
|
3259
|
+
([rowStampMaps, tableHlc, tableHash]) => {
|
|
3260
|
+
const tableObj = {};
|
|
3261
|
+
collForEach(touchedTable, (touchedRow, rowId) =>
|
|
3262
|
+
ifNotUndefined(
|
|
3263
|
+
mapGet(rowStampMaps, rowId),
|
|
3264
|
+
([cellStampMaps, rowHlc, rowHash]) => {
|
|
3265
|
+
const rowObj = {};
|
|
3266
|
+
collForEach(touchedRow, (cellId) => {
|
|
3267
|
+
ifNotUndefined(
|
|
3268
|
+
mapGet(cellStampMaps, cellId),
|
|
3269
|
+
([cell, time, hash]) =>
|
|
3270
|
+
(rowObj[cellId] = newStamp(
|
|
3271
|
+
encoded ? cell : decodeIfJson(cell),
|
|
3272
|
+
time,
|
|
3273
|
+
hash,
|
|
3274
|
+
)),
|
|
3275
|
+
);
|
|
3276
|
+
});
|
|
3277
|
+
tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
|
|
3278
|
+
},
|
|
3279
|
+
),
|
|
3280
|
+
);
|
|
3281
|
+
tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
|
|
3282
|
+
},
|
|
3283
|
+
),
|
|
3284
|
+
);
|
|
3285
|
+
const valuesObj = {};
|
|
3286
|
+
collForEach(touchedValues, (valueId) =>
|
|
3287
|
+
ifNotUndefined(
|
|
3288
|
+
mapGet(valueStampMaps, valueId),
|
|
3289
|
+
([value, time, hash]) =>
|
|
3290
|
+
(valuesObj[valueId] = newStamp(
|
|
3291
|
+
encoded ? value : decodeIfJson(value),
|
|
3292
|
+
time,
|
|
3293
|
+
hash,
|
|
3294
|
+
)),
|
|
3295
|
+
),
|
|
3296
|
+
);
|
|
3297
|
+
return [
|
|
3298
|
+
newStamp(tablesObj, tablesHlc, tablesHash),
|
|
3299
|
+
newStamp(valuesObj, valuesHlc, valuesHash),
|
|
3300
|
+
1,
|
|
3301
|
+
];
|
|
3302
|
+
};
|
|
3303
|
+
const getMergeableContent = () => getMergeableContentImpl();
|
|
3304
|
+
const getEncodedMergeableContent = () => getMergeableContentImpl(true);
|
|
3147
3305
|
const getMergeableContentHashes = () => [
|
|
3148
3306
|
contentStampMap[0][2],
|
|
3149
3307
|
contentStampMap[1][2],
|
|
@@ -3283,52 +3441,10 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3283
3441
|
});
|
|
3284
3442
|
return mergeableStore;
|
|
3285
3443
|
};
|
|
3286
|
-
const getTransactionMergeableChanges = (withHashes = false) =>
|
|
3287
|
-
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
] = contentStampMap;
|
|
3291
|
-
const newStamp = withHashes ? stampNewWithHash : stampNew;
|
|
3292
|
-
const tablesObj = {};
|
|
3293
|
-
collForEach(touchedCells, (touchedTable, tableId) =>
|
|
3294
|
-
ifNotUndefined(
|
|
3295
|
-
mapGet(tableStampMaps, tableId),
|
|
3296
|
-
([rowStampMaps, tableHlc, tableHash]) => {
|
|
3297
|
-
const tableObj = {};
|
|
3298
|
-
collForEach(touchedTable, (touchedRow, rowId) =>
|
|
3299
|
-
ifNotUndefined(
|
|
3300
|
-
mapGet(rowStampMaps, rowId),
|
|
3301
|
-
([cellStampMaps, rowHlc, rowHash]) => {
|
|
3302
|
-
const rowObj = {};
|
|
3303
|
-
collForEach(touchedRow, (cellId) => {
|
|
3304
|
-
ifNotUndefined(
|
|
3305
|
-
mapGet(cellStampMaps, cellId),
|
|
3306
|
-
([cell, time, hash]) =>
|
|
3307
|
-
(rowObj[cellId] = newStamp(cell, time, hash)),
|
|
3308
|
-
);
|
|
3309
|
-
});
|
|
3310
|
-
tableObj[rowId] = newStamp(rowObj, rowHlc, rowHash);
|
|
3311
|
-
},
|
|
3312
|
-
),
|
|
3313
|
-
);
|
|
3314
|
-
tablesObj[tableId] = newStamp(tableObj, tableHlc, tableHash);
|
|
3315
|
-
},
|
|
3316
|
-
),
|
|
3317
|
-
);
|
|
3318
|
-
const valuesObj = {};
|
|
3319
|
-
collForEach(touchedValues, (valueId) =>
|
|
3320
|
-
ifNotUndefined(
|
|
3321
|
-
mapGet(valueStampMaps, valueId),
|
|
3322
|
-
([value, time, hash]) =>
|
|
3323
|
-
(valuesObj[valueId] = newStamp(value, time, hash)),
|
|
3324
|
-
),
|
|
3325
|
-
);
|
|
3326
|
-
return [
|
|
3327
|
-
newStamp(tablesObj, tablesHlc, tablesHash),
|
|
3328
|
-
newStamp(valuesObj, valuesHlc, valuesHash),
|
|
3329
|
-
1,
|
|
3330
|
-
];
|
|
3331
|
-
};
|
|
3444
|
+
const getTransactionMergeableChanges = (withHashes = false) =>
|
|
3445
|
+
getTransactionMergeableChangesImpl(withHashes);
|
|
3446
|
+
const getEncodedTransactionMergeableChanges = (withHashes) =>
|
|
3447
|
+
getTransactionMergeableChangesImpl(withHashes, true);
|
|
3332
3448
|
const applyMergeableChanges = (mergeableChanges) =>
|
|
3333
3449
|
disableListeningToRawStoreChanges(() =>
|
|
3334
3450
|
store.applyChanges(mergeContentOrChanges(mergeableChanges)),
|
|
@@ -3360,10 +3476,13 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3360
3476
|
getTransactionMergeableChanges,
|
|
3361
3477
|
applyMergeableChanges,
|
|
3362
3478
|
merge,
|
|
3363
|
-
|
|
3364
|
-
|
|
3479
|
+
__: [
|
|
3480
|
+
hadMutated,
|
|
3481
|
+
getEncodedMergeableContent,
|
|
3482
|
+
getEncodedTransactionMergeableChanges,
|
|
3483
|
+
],
|
|
3365
3484
|
};
|
|
3366
|
-
store.
|
|
3485
|
+
store._[3](
|
|
3367
3486
|
preStartTransaction,
|
|
3368
3487
|
preFinishTransaction,
|
|
3369
3488
|
postFinishTransaction,
|
|
@@ -3602,6 +3721,7 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3602
3721
|
const willDelValuesCallbacks = [];
|
|
3603
3722
|
const willDelValueCallbacks = [];
|
|
3604
3723
|
const willApplyChangesCallbacks = [];
|
|
3724
|
+
const didSetRowCallbacksMap = mapNew();
|
|
3605
3725
|
const willSetContent = (content) =>
|
|
3606
3726
|
reduceCallbacks(willSetContentCallbacks, content);
|
|
3607
3727
|
const willSetTables = (tables) =>
|
|
@@ -3628,6 +3748,17 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3628
3748
|
everyCallback(willDelValueCallbacks, valueId);
|
|
3629
3749
|
const willApplyChanges = (changes) =>
|
|
3630
3750
|
reduceCallbacks(willApplyChangesCallbacks, changes);
|
|
3751
|
+
const didSetRow = (tableId, rowId, oldRow, newRow) =>
|
|
3752
|
+
ifNotUndefined(
|
|
3753
|
+
mapGet(didSetRowCallbacksMap, tableId),
|
|
3754
|
+
(callbacks) =>
|
|
3755
|
+
arrayReduce(
|
|
3756
|
+
callbacks,
|
|
3757
|
+
(current, callback) => callback(tableId, rowId, oldRow, current),
|
|
3758
|
+
newRow,
|
|
3759
|
+
),
|
|
3760
|
+
() => newRow,
|
|
3761
|
+
);
|
|
3631
3762
|
const getStore = () => store;
|
|
3632
3763
|
const addWillSetContentCallback = addCallback(willSetContentCallbacks);
|
|
3633
3764
|
const addWillSetTablesCallback = addCallback(willSetTablesCallbacks);
|
|
@@ -3643,6 +3774,13 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3643
3774
|
const addWillDelValuesCallback = addCallback(willDelValuesCallbacks);
|
|
3644
3775
|
const addWillDelValueCallback = addCallback(willDelValueCallbacks);
|
|
3645
3776
|
const addWillApplyChangesCallback = addCallback(willApplyChangesCallbacks);
|
|
3777
|
+
const addDidSetRowCallback = (tableId, callback) =>
|
|
3778
|
+
fluent(() =>
|
|
3779
|
+
arrayPush(
|
|
3780
|
+
mapEnsure(didSetRowCallbacksMap, tableId, () => []),
|
|
3781
|
+
callback,
|
|
3782
|
+
),
|
|
3783
|
+
);
|
|
3646
3784
|
const destroy = () => {};
|
|
3647
3785
|
const middleware = objFreeze({
|
|
3648
3786
|
getStore,
|
|
@@ -3660,9 +3798,10 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3660
3798
|
addWillDelValuesCallback,
|
|
3661
3799
|
addWillDelValueCallback,
|
|
3662
3800
|
addWillApplyChangesCallback,
|
|
3801
|
+
addDidSetRowCallback,
|
|
3663
3802
|
destroy,
|
|
3664
3803
|
});
|
|
3665
|
-
store.
|
|
3804
|
+
store._[4](
|
|
3666
3805
|
willSetContent,
|
|
3667
3806
|
willSetTables,
|
|
3668
3807
|
willSetTable,
|
|
@@ -3677,6 +3816,7 @@ const createMiddleware = getCreateFunction((store) => {
|
|
|
3677
3816
|
willDelValues,
|
|
3678
3817
|
willDelValue,
|
|
3679
3818
|
willApplyChanges,
|
|
3819
|
+
didSetRow,
|
|
3680
3820
|
);
|
|
3681
3821
|
return middleware;
|
|
3682
3822
|
});
|
|
@@ -3701,8 +3841,8 @@ const getStoreFunctions = (
|
|
|
3701
3841
|
persist != 1 /* StoreOnly */ && store.isMergeable()
|
|
3702
3842
|
? [
|
|
3703
3843
|
1,
|
|
3704
|
-
store.
|
|
3705
|
-
() => store.
|
|
3844
|
+
store.__[1],
|
|
3845
|
+
() => store.__[2](!isSynchronizer),
|
|
3706
3846
|
([[changedTables], [changedValues]]) =>
|
|
3707
3847
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
3708
3848
|
store.setDefaultContent,
|
|
@@ -3710,8 +3850,8 @@ const getStoreFunctions = (
|
|
|
3710
3850
|
: persist != 2 /* MergeableStoreOnly */
|
|
3711
3851
|
? [
|
|
3712
3852
|
0,
|
|
3713
|
-
store.
|
|
3714
|
-
store.
|
|
3853
|
+
store._[7],
|
|
3854
|
+
store._[8],
|
|
3715
3855
|
([changedTables, changedValues]) =>
|
|
3716
3856
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
3717
3857
|
store.setContent,
|
|
@@ -3776,7 +3916,7 @@ const createCustomPersister = (
|
|
|
3776
3916
|
: store.setContent)(contentOrChanges);
|
|
3777
3917
|
};
|
|
3778
3918
|
const saveAfterMutated = async () => {
|
|
3779
|
-
if (isAutoSaving() && store.
|
|
3919
|
+
if (isAutoSaving() && store.__?.[0]?.()) {
|
|
3780
3920
|
await save();
|
|
3781
3921
|
}
|
|
3782
3922
|
};
|
|
@@ -6189,15 +6329,14 @@ const createYjsPersister = (
|
|
|
6189
6329
|
};
|
|
6190
6330
|
|
|
6191
6331
|
const createQueries = getCreateFunction((store) => {
|
|
6192
|
-
const createStore = store.
|
|
6332
|
+
const createStore = store._[0];
|
|
6193
6333
|
const preStore = createStore();
|
|
6194
6334
|
const resultStore = createStore();
|
|
6195
6335
|
const preStoreListenerIds = mapNew();
|
|
6196
6336
|
const paramValuesListeners = mapNew();
|
|
6197
6337
|
const paramValueListeners = mapNew();
|
|
6198
6338
|
const {
|
|
6199
|
-
addListener,
|
|
6200
|
-
callListeners,
|
|
6339
|
+
_: [, addListener, callListeners],
|
|
6201
6340
|
delListener: delListenerImpl,
|
|
6202
6341
|
} = resultStore;
|
|
6203
6342
|
const [
|
|
@@ -6516,7 +6655,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
6516
6655
|
selectJoinWhereStore.transaction(() =>
|
|
6517
6656
|
arrayEvery(wheres, (where2) => where2(getTableCell))
|
|
6518
6657
|
? mapForEach(selects, (asCellId, tableCellGetter) =>
|
|
6519
|
-
selectJoinWhereStore.
|
|
6658
|
+
selectJoinWhereStore._[5](
|
|
6520
6659
|
queryId,
|
|
6521
6660
|
rootRowId,
|
|
6522
6661
|
asCellId,
|
|
@@ -7837,6 +7976,10 @@ const IS_EQUALS = [
|
|
|
7837
7976
|
(paramValues1, paramValues2) =>
|
|
7838
7977
|
objIsEqual(paramValues1, paramValues2, arrayOrValueEqual),
|
|
7839
7978
|
arrayOrValueEqual,
|
|
7979
|
+
(thing1, thing2) =>
|
|
7980
|
+
thing1 === thing2 ||
|
|
7981
|
+
((isObject(thing1) || isArray(thing1)) &&
|
|
7982
|
+
jsonString(thing1) === jsonString(thing2)),
|
|
7840
7983
|
];
|
|
7841
7984
|
const isEqual = (thing1, thing2) => thing1 === thing2;
|
|
7842
7985
|
const useCreate = (store, create, createDeps = EMPTY_ARRAY) => {
|
|
@@ -9578,12 +9721,20 @@ const EditableThing = ({
|
|
|
9578
9721
|
const [stringThing, setStringThing] = useState();
|
|
9579
9722
|
const [numberThing, setNumberThing] = useState();
|
|
9580
9723
|
const [booleanThing, setBooleanThing] = useState();
|
|
9724
|
+
const [objectThingJson, setObjectThingJson] = useState(EMPTY_STRING);
|
|
9725
|
+
const [arrayThingJson, setArrayThingJson] = useState(EMPTY_STRING);
|
|
9581
9726
|
if (currentThing !== thing) {
|
|
9582
9727
|
setThingType(getCellOrValueType(thing));
|
|
9583
9728
|
setCurrentThing(thing);
|
|
9584
|
-
|
|
9585
|
-
|
|
9586
|
-
|
|
9729
|
+
if (isObject(thing)) {
|
|
9730
|
+
setObjectThingJson(jsonString(thing));
|
|
9731
|
+
} else if (isArray(thing)) {
|
|
9732
|
+
setArrayThingJson(jsonString(thing));
|
|
9733
|
+
} else {
|
|
9734
|
+
setStringThing(String(thing));
|
|
9735
|
+
setNumberThing(Number(thing) || 0);
|
|
9736
|
+
setBooleanThing(Boolean(thing));
|
|
9737
|
+
}
|
|
9587
9738
|
}
|
|
9588
9739
|
const handleThingChange = useCallback(
|
|
9589
9740
|
(thing2, setTypedThing) => {
|
|
@@ -9595,12 +9746,21 @@ const EditableThing = ({
|
|
|
9595
9746
|
);
|
|
9596
9747
|
const handleTypeChange = useCallback(() => {
|
|
9597
9748
|
if (!hasSchema?.()) {
|
|
9598
|
-
const nextType = getTypeCase(
|
|
9749
|
+
const nextType = getTypeCase(
|
|
9750
|
+
thingType,
|
|
9751
|
+
NUMBER,
|
|
9752
|
+
BOOLEAN,
|
|
9753
|
+
OBJECT,
|
|
9754
|
+
ARRAY,
|
|
9755
|
+
STRING,
|
|
9756
|
+
);
|
|
9599
9757
|
const thing2 = getTypeCase(
|
|
9600
9758
|
nextType,
|
|
9601
9759
|
stringThing,
|
|
9602
9760
|
numberThing,
|
|
9603
9761
|
booleanThing,
|
|
9762
|
+
objectThingJson ? jsonParse(objectThingJson) : {},
|
|
9763
|
+
arrayThingJson ? jsonParse(arrayThingJson) : [],
|
|
9604
9764
|
);
|
|
9605
9765
|
setThingType(nextType);
|
|
9606
9766
|
setCurrentThing(thing2);
|
|
@@ -9612,6 +9772,8 @@ const EditableThing = ({
|
|
|
9612
9772
|
stringThing,
|
|
9613
9773
|
numberThing,
|
|
9614
9774
|
booleanThing,
|
|
9775
|
+
objectThingJson,
|
|
9776
|
+
arrayThingJson,
|
|
9615
9777
|
thingType,
|
|
9616
9778
|
]);
|
|
9617
9779
|
const widget = getTypeCase(
|
|
@@ -9663,6 +9825,46 @@ const EditableThing = ({
|
|
|
9663
9825
|
},
|
|
9664
9826
|
thingType,
|
|
9665
9827
|
),
|
|
9828
|
+
/* @__PURE__ */ jsx(
|
|
9829
|
+
'textarea',
|
|
9830
|
+
{
|
|
9831
|
+
value: objectThingJson,
|
|
9832
|
+
onChange: useCallback(
|
|
9833
|
+
(event) => {
|
|
9834
|
+
const str = event[CURRENT_TARGET][_VALUE];
|
|
9835
|
+
setObjectThingJson(str);
|
|
9836
|
+
try {
|
|
9837
|
+
const parsed = jsonParse(str);
|
|
9838
|
+
if (isObject(parsed)) {
|
|
9839
|
+
onThingChange(parsed);
|
|
9840
|
+
}
|
|
9841
|
+
} catch {}
|
|
9842
|
+
},
|
|
9843
|
+
[onThingChange],
|
|
9844
|
+
),
|
|
9845
|
+
},
|
|
9846
|
+
thingType,
|
|
9847
|
+
),
|
|
9848
|
+
/* @__PURE__ */ jsx(
|
|
9849
|
+
'textarea',
|
|
9850
|
+
{
|
|
9851
|
+
value: arrayThingJson,
|
|
9852
|
+
onChange: useCallback(
|
|
9853
|
+
(event) => {
|
|
9854
|
+
const str = event[CURRENT_TARGET][_VALUE];
|
|
9855
|
+
setArrayThingJson(str);
|
|
9856
|
+
try {
|
|
9857
|
+
const parsed = jsonParse(str);
|
|
9858
|
+
if (isArray(parsed)) {
|
|
9859
|
+
onThingChange(parsed);
|
|
9860
|
+
}
|
|
9861
|
+
} catch {}
|
|
9862
|
+
},
|
|
9863
|
+
[onThingChange],
|
|
9864
|
+
),
|
|
9865
|
+
},
|
|
9866
|
+
thingType,
|
|
9867
|
+
),
|
|
9666
9868
|
);
|
|
9667
9869
|
return /* @__PURE__ */ jsxs('div', {
|
|
9668
9870
|
className,
|