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
|
@@ -41,6 +41,8 @@ const STRING = getTypeOf(EMPTY_STRING);
|
|
|
41
41
|
const BOOLEAN = getTypeOf(true);
|
|
42
42
|
const NUMBER = getTypeOf(0);
|
|
43
43
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
44
|
+
const OBJECT = 'object';
|
|
45
|
+
const ARRAY = 'array';
|
|
44
46
|
const TYPE = 'type';
|
|
45
47
|
const DEFAULT = 'default';
|
|
46
48
|
const ALLOW_NULL = 'allowNull';
|
|
@@ -72,6 +74,7 @@ const CURRENT_TARGET = 'currentTarget';
|
|
|
72
74
|
const _VALUE = 'value';
|
|
73
75
|
const EXTRA = 'extra';
|
|
74
76
|
const UNDEFINED = '\uFFFC';
|
|
77
|
+
const JSON_PREFIX = '\uFFFD';
|
|
75
78
|
const id = (key) => EMPTY_STRING + key;
|
|
76
79
|
const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
77
80
|
str.split(separator, limit);
|
|
@@ -105,6 +108,14 @@ const structuredClone = GLOBAL.structuredClone;
|
|
|
105
108
|
const errorNew = (message) => {
|
|
106
109
|
throw new Error(message);
|
|
107
110
|
};
|
|
111
|
+
const tryReturn = (tryF, catchReturn) => {
|
|
112
|
+
try {
|
|
113
|
+
return tryF();
|
|
114
|
+
} catch {
|
|
115
|
+
/* istanbul ignore next */
|
|
116
|
+
return catchReturn;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
108
119
|
const tryCatch = async (action, then1, then2) => {
|
|
109
120
|
try {
|
|
110
121
|
return await action();
|
|
@@ -152,7 +163,6 @@ const isObject = (obj) =>
|
|
|
152
163
|
const objIds = object.keys;
|
|
153
164
|
const objFreeze = object.freeze;
|
|
154
165
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
155
|
-
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
156
166
|
const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
|
|
157
167
|
const objHas = (obj, id) => id in obj;
|
|
158
168
|
const objDel = (obj, id) => {
|
|
@@ -420,8 +430,8 @@ const getStoreFunctions = (
|
|
|
420
430
|
persist != 1 /* StoreOnly */ && store.isMergeable()
|
|
421
431
|
? [
|
|
422
432
|
1,
|
|
423
|
-
store.
|
|
424
|
-
() => store.
|
|
433
|
+
store.__[1],
|
|
434
|
+
() => store.__[2](!isSynchronizer),
|
|
425
435
|
([[changedTables], [changedValues]]) =>
|
|
426
436
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
427
437
|
store.setDefaultContent,
|
|
@@ -429,8 +439,8 @@ const getStoreFunctions = (
|
|
|
429
439
|
: persist != 2 /* MergeableStoreOnly */
|
|
430
440
|
? [
|
|
431
441
|
0,
|
|
432
|
-
store.
|
|
433
|
-
store.
|
|
442
|
+
store._[7],
|
|
443
|
+
store._[8],
|
|
434
444
|
([changedTables, changedValues]) =>
|
|
435
445
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
436
446
|
store.setContent,
|
|
@@ -495,7 +505,7 @@ const createCustomPersister = (
|
|
|
495
505
|
: store.setContent)(contentOrChanges);
|
|
496
506
|
};
|
|
497
507
|
const saveAfterMutated = async () => {
|
|
498
|
-
if (isAutoSaving() && store.
|
|
508
|
+
if (isAutoSaving() && store.__?.[0]?.()) {
|
|
499
509
|
await save();
|
|
500
510
|
}
|
|
501
511
|
};
|
|
@@ -699,20 +709,43 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
699
709
|
if (isNull(cellOrValue)) {
|
|
700
710
|
return NULL;
|
|
701
711
|
}
|
|
712
|
+
if (isArray(cellOrValue)) {
|
|
713
|
+
return ARRAY;
|
|
714
|
+
}
|
|
715
|
+
if (isObject(cellOrValue)) {
|
|
716
|
+
return OBJECT;
|
|
717
|
+
}
|
|
702
718
|
const type = getTypeOf(cellOrValue);
|
|
703
719
|
return isTypeStringOrBoolean(type) ||
|
|
704
720
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
705
721
|
? type
|
|
706
722
|
: void 0;
|
|
707
723
|
};
|
|
708
|
-
const
|
|
724
|
+
const isJsonType = (type) => type == OBJECT || type == ARRAY;
|
|
725
|
+
const encodeIfJson = (value) =>
|
|
726
|
+
isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
|
|
727
|
+
const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
|
|
728
|
+
const decodeIfJson = (raw, _id, encoded) =>
|
|
729
|
+
!encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
|
|
730
|
+
const getTypeCase = (
|
|
731
|
+
type,
|
|
732
|
+
stringCase,
|
|
733
|
+
numberCase,
|
|
734
|
+
booleanCase,
|
|
735
|
+
objectCase,
|
|
736
|
+
arrayCase,
|
|
737
|
+
) =>
|
|
709
738
|
type == STRING
|
|
710
739
|
? stringCase
|
|
711
740
|
: type == NUMBER
|
|
712
741
|
? numberCase
|
|
713
742
|
: type == BOOLEAN
|
|
714
743
|
? booleanCase
|
|
715
|
-
:
|
|
744
|
+
: type == OBJECT
|
|
745
|
+
? objectCase
|
|
746
|
+
: type == ARRAY
|
|
747
|
+
? arrayCase
|
|
748
|
+
: null;
|
|
716
749
|
|
|
717
750
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
718
751
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
@@ -813,15 +846,19 @@ const createStore = () => {
|
|
|
813
846
|
return false;
|
|
814
847
|
}
|
|
815
848
|
const type = schema[TYPE];
|
|
816
|
-
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
849
|
+
if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
|
|
817
850
|
return false;
|
|
818
851
|
}
|
|
819
852
|
const defaultValue = schema[DEFAULT];
|
|
820
853
|
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
821
854
|
return false;
|
|
822
855
|
}
|
|
823
|
-
if (!isNull(defaultValue)
|
|
824
|
-
|
|
856
|
+
if (!isNull(defaultValue)) {
|
|
857
|
+
if (getCellOrValueType(defaultValue) != type) {
|
|
858
|
+
objDel(schema, DEFAULT);
|
|
859
|
+
} else {
|
|
860
|
+
schema[DEFAULT] = encodeIfJson(defaultValue);
|
|
861
|
+
}
|
|
825
862
|
}
|
|
826
863
|
return true;
|
|
827
864
|
};
|
|
@@ -861,20 +898,22 @@ const createStore = () => {
|
|
|
861
898
|
? cellSchema[ALLOW_NULL]
|
|
862
899
|
? cell
|
|
863
900
|
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
864
|
-
: getCellOrValueType(cell)
|
|
865
|
-
? cell
|
|
866
|
-
:
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
901
|
+
: getCellOrValueType(cell) === cellSchema[TYPE]
|
|
902
|
+
? encodeIfJson(cell)
|
|
903
|
+
: isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
|
|
904
|
+
? cell
|
|
905
|
+
: cellInvalid(
|
|
906
|
+
tableId,
|
|
907
|
+
rowId,
|
|
908
|
+
cellId,
|
|
909
|
+
cell,
|
|
910
|
+
cellSchema[DEFAULT],
|
|
911
|
+
),
|
|
873
912
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
874
913
|
)
|
|
875
914
|
: isUndefined(getCellOrValueType(cell))
|
|
876
915
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
877
|
-
: cell;
|
|
916
|
+
: encodeIfJson(cell);
|
|
878
917
|
const validateValues = (values, skipDefaults) =>
|
|
879
918
|
objValidate(
|
|
880
919
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
@@ -898,14 +937,16 @@ const createStore = () => {
|
|
|
898
937
|
? valueSchema[ALLOW_NULL]
|
|
899
938
|
? value
|
|
900
939
|
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
901
|
-
: getCellOrValueType(value)
|
|
902
|
-
? value
|
|
903
|
-
:
|
|
940
|
+
: getCellOrValueType(value) === valueSchema[TYPE]
|
|
941
|
+
? encodeIfJson(value)
|
|
942
|
+
: isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
|
|
943
|
+
? value
|
|
944
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
904
945
|
() => valueInvalid(valueId, value),
|
|
905
946
|
)
|
|
906
947
|
: isUndefined(getCellOrValueType(value))
|
|
907
948
|
? valueInvalid(valueId, value)
|
|
908
|
-
: value;
|
|
949
|
+
: encodeIfJson(value);
|
|
909
950
|
const addDefaultsToRow = (row, tableId, rowId) => {
|
|
910
951
|
ifNotUndefined(
|
|
911
952
|
mapGet(tablesSchemaRowCache, tableId),
|
|
@@ -985,10 +1026,24 @@ const createStore = () => {
|
|
|
985
1026
|
);
|
|
986
1027
|
const setOrDelTables = (tables) =>
|
|
987
1028
|
objIsEmpty(tables) ? delTables() : setTables(tables);
|
|
988
|
-
const setOrDelCell = (
|
|
1029
|
+
const setOrDelCell = (
|
|
1030
|
+
tableId,
|
|
1031
|
+
rowId,
|
|
1032
|
+
cellId,
|
|
1033
|
+
cell,
|
|
1034
|
+
skipMiddleware,
|
|
1035
|
+
skipRowMiddleware,
|
|
1036
|
+
) =>
|
|
989
1037
|
isUndefined(cell)
|
|
990
1038
|
? delCell(tableId, rowId, cellId, true, skipMiddleware)
|
|
991
|
-
: setCell(
|
|
1039
|
+
: setCell(
|
|
1040
|
+
tableId,
|
|
1041
|
+
rowId,
|
|
1042
|
+
cellId,
|
|
1043
|
+
cell,
|
|
1044
|
+
skipMiddleware,
|
|
1045
|
+
skipRowMiddleware,
|
|
1046
|
+
);
|
|
992
1047
|
const setOrDelValues = (values) =>
|
|
993
1048
|
objIsEmpty(values) ? delValues() : setValues(values);
|
|
994
1049
|
const setOrDelValue = (valueId, value, skipMiddleware) =>
|
|
@@ -1088,6 +1143,30 @@ const createStore = () => {
|
|
|
1088
1143
|
),
|
|
1089
1144
|
objIsEqual,
|
|
1090
1145
|
);
|
|
1146
|
+
const applyRowDirectly = (tableId, tableMap, rowId, row, skipMiddleware) => {
|
|
1147
|
+
mapMatch(
|
|
1148
|
+
mapEnsure(tableMap, rowId, () => {
|
|
1149
|
+
rowIdsChanged(tableId, rowId, 1);
|
|
1150
|
+
return mapNew();
|
|
1151
|
+
}),
|
|
1152
|
+
row,
|
|
1153
|
+
(rowMap, cellId, cell) =>
|
|
1154
|
+
ifNotUndefined(
|
|
1155
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
1156
|
+
(validCell) =>
|
|
1157
|
+
setValidCell(
|
|
1158
|
+
tableId,
|
|
1159
|
+
rowId,
|
|
1160
|
+
rowMap,
|
|
1161
|
+
cellId,
|
|
1162
|
+
validCell,
|
|
1163
|
+
skipMiddleware,
|
|
1164
|
+
),
|
|
1165
|
+
),
|
|
1166
|
+
(rowMap, cellId) =>
|
|
1167
|
+
delValidCell(tableId, tableMap, rowId, rowMap, cellId, true),
|
|
1168
|
+
);
|
|
1169
|
+
};
|
|
1091
1170
|
const setValidCell = (tableId, rowId, rowMap, cellId, cell, skipMiddleware) =>
|
|
1092
1171
|
ifTransformed(
|
|
1093
1172
|
cell,
|
|
@@ -1328,13 +1407,21 @@ const createStore = () => {
|
|
|
1328
1407
|
const getCellChange = (tableId, rowId, cellId) =>
|
|
1329
1408
|
ifNotUndefined(
|
|
1330
1409
|
mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
|
|
1331
|
-
([oldCell, newCell]) => [
|
|
1410
|
+
([oldCell, newCell]) => [
|
|
1411
|
+
true,
|
|
1412
|
+
decodeIfJson(oldCell),
|
|
1413
|
+
decodeIfJson(newCell),
|
|
1414
|
+
],
|
|
1332
1415
|
() => [false, ...pairNew(getCell(tableId, rowId, cellId))],
|
|
1333
1416
|
);
|
|
1334
1417
|
const getValueChange = (valueId) =>
|
|
1335
1418
|
ifNotUndefined(
|
|
1336
1419
|
mapGet(changedValues, valueId),
|
|
1337
|
-
([oldValue, newValue]) => [
|
|
1420
|
+
([oldValue, newValue]) => [
|
|
1421
|
+
true,
|
|
1422
|
+
decodeIfJson(oldValue),
|
|
1423
|
+
decodeIfJson(newValue),
|
|
1424
|
+
],
|
|
1338
1425
|
() => [false, ...pairNew(getValue(valueId))],
|
|
1339
1426
|
);
|
|
1340
1427
|
const callInvalidCellListeners = (mutator) =>
|
|
@@ -1510,8 +1597,8 @@ const createStore = () => {
|
|
|
1510
1597
|
callListeners(
|
|
1511
1598
|
cellListeners[mutator],
|
|
1512
1599
|
[tableId, rowId, cellId],
|
|
1513
|
-
newCell,
|
|
1514
|
-
oldCell,
|
|
1600
|
+
decodeIfJson(newCell),
|
|
1601
|
+
decodeIfJson(oldCell),
|
|
1515
1602
|
getCellChange,
|
|
1516
1603
|
);
|
|
1517
1604
|
tablesChanged = tableChanged = rowChanged = 1;
|
|
@@ -1567,8 +1654,8 @@ const createStore = () => {
|
|
|
1567
1654
|
callListeners(
|
|
1568
1655
|
valueListeners[mutator],
|
|
1569
1656
|
[valueId],
|
|
1570
|
-
newValue,
|
|
1571
|
-
oldValue,
|
|
1657
|
+
decodeIfJson(newValue),
|
|
1658
|
+
decodeIfJson(oldValue),
|
|
1572
1659
|
getValueChange,
|
|
1573
1660
|
);
|
|
1574
1661
|
valuesChanged = 1;
|
|
@@ -1605,10 +1692,42 @@ const createStore = () => {
|
|
|
1605
1692
|
[getTableIds],
|
|
1606
1693
|
);
|
|
1607
1694
|
};
|
|
1695
|
+
const getTransactionChangesImpl = (encoded = false) => [
|
|
1696
|
+
mapToObj(
|
|
1697
|
+
changedCells,
|
|
1698
|
+
(table, tableId) =>
|
|
1699
|
+
mapGet(changedTableIds, tableId) === -1
|
|
1700
|
+
? void 0
|
|
1701
|
+
: mapToObj(
|
|
1702
|
+
table,
|
|
1703
|
+
(row, rowId) =>
|
|
1704
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1705
|
+
? void 0
|
|
1706
|
+
: mapToObj(
|
|
1707
|
+
row,
|
|
1708
|
+
([, newCell]) =>
|
|
1709
|
+
decodeIfJson(newCell, EMPTY_STRING, encoded),
|
|
1710
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
1711
|
+
),
|
|
1712
|
+
collIsEmpty,
|
|
1713
|
+
objIsEmpty,
|
|
1714
|
+
),
|
|
1715
|
+
collIsEmpty,
|
|
1716
|
+
objIsEmpty,
|
|
1717
|
+
),
|
|
1718
|
+
mapToObj(
|
|
1719
|
+
changedValues,
|
|
1720
|
+
([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
|
|
1721
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
1722
|
+
),
|
|
1723
|
+
1,
|
|
1724
|
+
];
|
|
1608
1725
|
const getContent = () => [getTables(), getValues()];
|
|
1609
|
-
const
|
|
1726
|
+
const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
|
|
1727
|
+
const getTables = () => mapToObj3(tablesMap, decodeIfJson);
|
|
1610
1728
|
const getTableIds = () => mapKeys(tablesMap);
|
|
1611
|
-
const getTable = (tableId) =>
|
|
1729
|
+
const getTable = (tableId) =>
|
|
1730
|
+
mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
|
|
1612
1731
|
const getTableCellIds = (tableId) =>
|
|
1613
1732
|
mapKeys(mapGet(tableCellIds, id(tableId)));
|
|
1614
1733
|
const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
|
|
@@ -1644,14 +1763,16 @@ const createStore = () => {
|
|
|
1644
1763
|
([, rowId]) => rowId,
|
|
1645
1764
|
);
|
|
1646
1765
|
const getRow = (tableId, rowId) =>
|
|
1647
|
-
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
1766
|
+
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
|
|
1648
1767
|
const getCellIds = (tableId, rowId) =>
|
|
1649
1768
|
mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
1650
1769
|
const getCell = (tableId, rowId, cellId) =>
|
|
1651
|
-
|
|
1652
|
-
|
|
1770
|
+
decodeIfJson(
|
|
1771
|
+
mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
|
|
1772
|
+
);
|
|
1773
|
+
const getValues = () => mapToObj(valuesMap, decodeIfJson);
|
|
1653
1774
|
const getValueIds = () => mapKeys(valuesMap);
|
|
1654
|
-
const getValue = (valueId) => mapGet(valuesMap, id(valueId));
|
|
1775
|
+
const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
|
|
1655
1776
|
const hasTables = () => !collIsEmpty(tablesMap);
|
|
1656
1777
|
const hasTable = (tableId) => collHas(tablesMap, id(tableId));
|
|
1657
1778
|
const hasTableCell = (tableId, cellId) =>
|
|
@@ -1722,7 +1843,14 @@ const createStore = () => {
|
|
|
1722
1843
|
tableId,
|
|
1723
1844
|
rowId,
|
|
1724
1845
|
);
|
|
1725
|
-
const setCell = (
|
|
1846
|
+
const setCell = (
|
|
1847
|
+
tableId,
|
|
1848
|
+
rowId,
|
|
1849
|
+
cellId,
|
|
1850
|
+
cell,
|
|
1851
|
+
skipMiddleware,
|
|
1852
|
+
skipRowMiddleware,
|
|
1853
|
+
) =>
|
|
1726
1854
|
fluentTransaction(
|
|
1727
1855
|
(tableId2, rowId2, cellId2) =>
|
|
1728
1856
|
ifNotUndefined(
|
|
@@ -1732,15 +1860,47 @@ const createStore = () => {
|
|
|
1732
1860
|
cellId2,
|
|
1733
1861
|
isFunction(cell) ? cell(getCell(tableId2, rowId2, cellId2)) : cell,
|
|
1734
1862
|
),
|
|
1735
|
-
(validCell) =>
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1863
|
+
(validCell) => {
|
|
1864
|
+
const tableMap = getOrCreateTable(tableId2);
|
|
1865
|
+
ifNotUndefined(
|
|
1866
|
+
skipMiddleware || skipRowMiddleware || !middleware[14]?.()
|
|
1867
|
+
? void 0
|
|
1868
|
+
: middleware[3],
|
|
1869
|
+
(willSetRow) => {
|
|
1870
|
+
const existingRowMap = mapGet(tableMap, rowId2);
|
|
1871
|
+
const prospectiveRow = {
|
|
1872
|
+
...(existingRowMap ? mapToObj(existingRowMap) : {}),
|
|
1873
|
+
[cellId2]: validCell,
|
|
1874
|
+
};
|
|
1875
|
+
ifNotUndefined(
|
|
1876
|
+
whileMutating(() =>
|
|
1877
|
+
willSetRow(
|
|
1878
|
+
tableId2,
|
|
1879
|
+
rowId2,
|
|
1880
|
+
structuredClone(prospectiveRow),
|
|
1881
|
+
),
|
|
1882
|
+
),
|
|
1883
|
+
(row) =>
|
|
1884
|
+
applyRowDirectly(
|
|
1885
|
+
tableId2,
|
|
1886
|
+
tableMap,
|
|
1887
|
+
rowId2,
|
|
1888
|
+
row,
|
|
1889
|
+
skipMiddleware,
|
|
1890
|
+
),
|
|
1891
|
+
);
|
|
1892
|
+
},
|
|
1893
|
+
() =>
|
|
1894
|
+
setCellIntoNewRow(
|
|
1895
|
+
tableId2,
|
|
1896
|
+
tableMap,
|
|
1897
|
+
rowId2,
|
|
1898
|
+
cellId2,
|
|
1899
|
+
validCell,
|
|
1900
|
+
skipMiddleware,
|
|
1901
|
+
),
|
|
1902
|
+
);
|
|
1903
|
+
},
|
|
1744
1904
|
),
|
|
1745
1905
|
tableId,
|
|
1746
1906
|
rowId,
|
|
@@ -1789,7 +1949,14 @@ const createStore = () => {
|
|
|
1789
1949
|
isUndefined(row)
|
|
1790
1950
|
? delRow(tableId, rowId)
|
|
1791
1951
|
: objMap(row, (cell, cellId) =>
|
|
1792
|
-
setOrDelCell(
|
|
1952
|
+
setOrDelCell(
|
|
1953
|
+
tableId,
|
|
1954
|
+
rowId,
|
|
1955
|
+
cellId,
|
|
1956
|
+
cell,
|
|
1957
|
+
void 0,
|
|
1958
|
+
true,
|
|
1959
|
+
),
|
|
1793
1960
|
),
|
|
1794
1961
|
),
|
|
1795
1962
|
);
|
|
@@ -1938,35 +2105,8 @@ const createStore = () => {
|
|
|
1938
2105
|
}
|
|
1939
2106
|
return store;
|
|
1940
2107
|
};
|
|
1941
|
-
const getTransactionChanges = () =>
|
|
1942
|
-
|
|
1943
|
-
changedCells,
|
|
1944
|
-
(table, tableId) =>
|
|
1945
|
-
mapGet(changedTableIds, tableId) === -1
|
|
1946
|
-
? void 0
|
|
1947
|
-
: mapToObj(
|
|
1948
|
-
table,
|
|
1949
|
-
(row, rowId) =>
|
|
1950
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1951
|
-
? void 0
|
|
1952
|
-
: mapToObj(
|
|
1953
|
-
row,
|
|
1954
|
-
([, newCell]) => newCell,
|
|
1955
|
-
(changedCell) => pairIsEqual(changedCell),
|
|
1956
|
-
),
|
|
1957
|
-
collIsEmpty,
|
|
1958
|
-
objIsEmpty,
|
|
1959
|
-
),
|
|
1960
|
-
collIsEmpty,
|
|
1961
|
-
objIsEmpty,
|
|
1962
|
-
),
|
|
1963
|
-
mapToObj(
|
|
1964
|
-
changedValues,
|
|
1965
|
-
([, newValue]) => newValue,
|
|
1966
|
-
(changedValue) => pairIsEqual(changedValue),
|
|
1967
|
-
),
|
|
1968
|
-
1,
|
|
1969
|
-
];
|
|
2108
|
+
const getTransactionChanges = () => getTransactionChangesImpl();
|
|
2109
|
+
const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
|
|
1970
2110
|
const getTransactionLog = () => [
|
|
1971
2111
|
!collIsEmpty(changedCells),
|
|
1972
2112
|
!collIsEmpty(changedValues),
|
|
@@ -1979,37 +2119,6 @@ const createStore = () => {
|
|
|
1979
2119
|
mapToObj3(changedCellIds),
|
|
1980
2120
|
mapToObj(changedValueIds),
|
|
1981
2121
|
];
|
|
1982
|
-
const doDidSetRows = () => {
|
|
1983
|
-
if (middleware[14]) {
|
|
1984
|
-
const changedCells2 = clonedChangedCells(changedCells);
|
|
1985
|
-
collForEach(changedCells2, (rows, tableId) =>
|
|
1986
|
-
collForEach(rows, (cells, rowId) => {
|
|
1987
|
-
if (
|
|
1988
|
-
!arrayEvery(
|
|
1989
|
-
collValues(cells),
|
|
1990
|
-
([oldCell, newCell]) => oldCell === newCell,
|
|
1991
|
-
)
|
|
1992
|
-
) {
|
|
1993
|
-
const newRow = getRow(tableId, rowId);
|
|
1994
|
-
const oldRow = objMerge(newRow);
|
|
1995
|
-
collForEach(cells, ([oldCell], cellId) =>
|
|
1996
|
-
isUndefined(oldCell)
|
|
1997
|
-
? objDel(oldRow, cellId)
|
|
1998
|
-
: (oldRow[cellId] = oldCell),
|
|
1999
|
-
);
|
|
2000
|
-
const didSetRow = middleware[14](tableId, rowId, oldRow, newRow);
|
|
2001
|
-
if (!objIsEqual(didSetRow, newRow)) {
|
|
2002
|
-
const setOrDelRow = objMap(newRow, () => void 0);
|
|
2003
|
-
objMap(didSetRow, (cell, cellId) => (setOrDelRow[cellId] = cell));
|
|
2004
|
-
objMap(setOrDelRow, (cell, cellId) =>
|
|
2005
|
-
setOrDelCell(tableId, rowId, cellId, cell, true),
|
|
2006
|
-
);
|
|
2007
|
-
}
|
|
2008
|
-
}
|
|
2009
|
-
}),
|
|
2010
|
-
);
|
|
2011
|
-
}
|
|
2012
|
-
};
|
|
2013
2122
|
const finishTransaction = (doRollback) => {
|
|
2014
2123
|
if (transactions > 0) {
|
|
2015
2124
|
transactions--;
|
|
@@ -2019,7 +2128,6 @@ const createStore = () => {
|
|
|
2019
2128
|
callInvalidCellListeners(1);
|
|
2020
2129
|
if (!collIsEmpty(changedCells)) {
|
|
2021
2130
|
callTabularListenersForChanges(1);
|
|
2022
|
-
doDidSetRows();
|
|
2023
2131
|
}
|
|
2024
2132
|
callInvalidValueListeners(1);
|
|
2025
2133
|
if (!collIsEmpty(changedValues)) {
|
|
@@ -2080,7 +2188,9 @@ const createStore = () => {
|
|
|
2080
2188
|
tableCallback(tableId, (rowCallback) =>
|
|
2081
2189
|
collForEach(tableMap, (rowMap, rowId) =>
|
|
2082
2190
|
rowCallback(rowId, (cellCallback) =>
|
|
2083
|
-
mapForEach(rowMap,
|
|
2191
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2192
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2193
|
+
),
|
|
2084
2194
|
),
|
|
2085
2195
|
),
|
|
2086
2196
|
),
|
|
@@ -2089,11 +2199,21 @@ const createStore = () => {
|
|
|
2089
2199
|
mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
|
|
2090
2200
|
const forEachRow = (tableId, rowCallback) =>
|
|
2091
2201
|
collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
|
|
2092
|
-
rowCallback(rowId, (cellCallback) =>
|
|
2202
|
+
rowCallback(rowId, (cellCallback) =>
|
|
2203
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2204
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2205
|
+
),
|
|
2206
|
+
),
|
|
2093
2207
|
);
|
|
2094
2208
|
const forEachCell = (tableId, rowId, cellCallback) =>
|
|
2095
|
-
mapForEach(
|
|
2096
|
-
|
|
2209
|
+
mapForEach(
|
|
2210
|
+
mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
|
|
2211
|
+
(cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
|
|
2212
|
+
);
|
|
2213
|
+
const forEachValue = (valueCallback) =>
|
|
2214
|
+
mapForEach(valuesMap, (valueId, value) =>
|
|
2215
|
+
valueCallback(valueId, decodeIfJson(value)),
|
|
2216
|
+
);
|
|
2097
2217
|
const addSortedRowIdsListener = (
|
|
2098
2218
|
tableIdOrArgs,
|
|
2099
2219
|
cellIdOrListener,
|
|
@@ -2178,7 +2298,7 @@ const createStore = () => {
|
|
|
2178
2298
|
willDelValues,
|
|
2179
2299
|
willDelValue,
|
|
2180
2300
|
willApplyChanges,
|
|
2181
|
-
|
|
2301
|
+
hasWillSetRowCallbacks,
|
|
2182
2302
|
) =>
|
|
2183
2303
|
(middleware = [
|
|
2184
2304
|
willSetContent,
|
|
@@ -2195,7 +2315,7 @@ const createStore = () => {
|
|
|
2195
2315
|
willDelValues,
|
|
2196
2316
|
willDelValue,
|
|
2197
2317
|
willApplyChanges,
|
|
2198
|
-
|
|
2318
|
+
hasWillSetRowCallbacks,
|
|
2199
2319
|
]);
|
|
2200
2320
|
const setInternalListeners = (
|
|
2201
2321
|
preStartTransaction,
|
|
@@ -2285,14 +2405,17 @@ const createStore = () => {
|
|
|
2285
2405
|
delListener,
|
|
2286
2406
|
getListenerStats,
|
|
2287
2407
|
isMergeable: () => false,
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2408
|
+
_: [
|
|
2409
|
+
createStore,
|
|
2410
|
+
addListener,
|
|
2411
|
+
callListeners,
|
|
2412
|
+
setInternalListeners,
|
|
2413
|
+
setMiddleware,
|
|
2414
|
+
setOrDelCell,
|
|
2415
|
+
setOrDelValue,
|
|
2416
|
+
getEncodedContent,
|
|
2417
|
+
getEncodedTransactionChanges,
|
|
2418
|
+
],
|
|
2296
2419
|
};
|
|
2297
2420
|
objMap(
|
|
2298
2421
|
{
|
|
@@ -2476,6 +2599,10 @@ const IS_EQUALS = [
|
|
|
2476
2599
|
(paramValues1, paramValues2) =>
|
|
2477
2600
|
objIsEqual(paramValues1, paramValues2, arrayOrValueEqual),
|
|
2478
2601
|
arrayOrValueEqual,
|
|
2602
|
+
(thing1, thing2) =>
|
|
2603
|
+
thing1 === thing2 ||
|
|
2604
|
+
((isObject(thing1) || isArray(thing1)) &&
|
|
2605
|
+
jsonString(thing1) === jsonString(thing2)),
|
|
2479
2606
|
];
|
|
2480
2607
|
const isEqual = (thing1, thing2) => thing1 === thing2;
|
|
2481
2608
|
const addAndDelListener = (thing, listenable, ...args) => {
|
|
@@ -3010,12 +3137,22 @@ const EditableThing = ({
|
|
|
3010
3137
|
const [stringThing, setStringThing] = useState();
|
|
3011
3138
|
const [numberThing, setNumberThing] = useState();
|
|
3012
3139
|
const [booleanThing, setBooleanThing] = useState();
|
|
3140
|
+
const [objectThing, setObjectThing] = useState('{}');
|
|
3141
|
+
const [arrayThing, setArrayThing] = useState('[]');
|
|
3142
|
+
const [objectClassName, setObjectClassName] = useState('');
|
|
3143
|
+
const [arrayClassName, setArrayClassName] = useState('');
|
|
3013
3144
|
if (currentThing !== thing) {
|
|
3014
3145
|
setThingType(getCellOrValueType(thing));
|
|
3015
3146
|
setCurrentThing(thing);
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3147
|
+
if (isObject(thing)) {
|
|
3148
|
+
setObjectThing(jsonString(thing));
|
|
3149
|
+
} else if (isArray(thing)) {
|
|
3150
|
+
setArrayThing(jsonString(thing));
|
|
3151
|
+
} else {
|
|
3152
|
+
setStringThing(String(thing));
|
|
3153
|
+
setNumberThing(Number(thing) || 0);
|
|
3154
|
+
setBooleanThing(Boolean(thing));
|
|
3155
|
+
}
|
|
3019
3156
|
}
|
|
3020
3157
|
const handleThingChange = useCallback(
|
|
3021
3158
|
(thing2, setTypedThing) => {
|
|
@@ -3025,14 +3162,39 @@ const EditableThing = ({
|
|
|
3025
3162
|
},
|
|
3026
3163
|
[onThingChange],
|
|
3027
3164
|
);
|
|
3165
|
+
const handleJsonThingChange = useCallback(
|
|
3166
|
+
(value, setTypedThing, isThing, setTypedClassName) => {
|
|
3167
|
+
setTypedThing(value);
|
|
3168
|
+
try {
|
|
3169
|
+
const object = jsonParse(value);
|
|
3170
|
+
if (isThing(object)) {
|
|
3171
|
+
setCurrentThing(object);
|
|
3172
|
+
onThingChange(object);
|
|
3173
|
+
setTypedClassName('');
|
|
3174
|
+
}
|
|
3175
|
+
} catch {
|
|
3176
|
+
setTypedClassName('invalid');
|
|
3177
|
+
}
|
|
3178
|
+
},
|
|
3179
|
+
[onThingChange],
|
|
3180
|
+
);
|
|
3028
3181
|
const handleTypeChange = useCallback(() => {
|
|
3029
3182
|
if (!hasSchema?.()) {
|
|
3030
|
-
const nextType = getTypeCase(
|
|
3183
|
+
const nextType = getTypeCase(
|
|
3184
|
+
thingType,
|
|
3185
|
+
NUMBER,
|
|
3186
|
+
BOOLEAN,
|
|
3187
|
+
OBJECT,
|
|
3188
|
+
ARRAY,
|
|
3189
|
+
STRING,
|
|
3190
|
+
);
|
|
3031
3191
|
const thing2 = getTypeCase(
|
|
3032
3192
|
nextType,
|
|
3033
3193
|
stringThing,
|
|
3034
3194
|
numberThing,
|
|
3035
3195
|
booleanThing,
|
|
3196
|
+
tryReturn(() => jsonParse(objectThing), {}),
|
|
3197
|
+
tryReturn(() => jsonParse(arrayThing), []),
|
|
3036
3198
|
);
|
|
3037
3199
|
setThingType(nextType);
|
|
3038
3200
|
setCurrentThing(thing2);
|
|
@@ -3044,6 +3206,8 @@ const EditableThing = ({
|
|
|
3044
3206
|
stringThing,
|
|
3045
3207
|
numberThing,
|
|
3046
3208
|
booleanThing,
|
|
3209
|
+
objectThing,
|
|
3210
|
+
arrayThing,
|
|
3047
3211
|
thingType,
|
|
3048
3212
|
]);
|
|
3049
3213
|
const widget = getTypeCase(
|
|
@@ -3095,6 +3259,42 @@ const EditableThing = ({
|
|
|
3095
3259
|
},
|
|
3096
3260
|
thingType,
|
|
3097
3261
|
),
|
|
3262
|
+
/* @__PURE__ */ jsx(
|
|
3263
|
+
'input',
|
|
3264
|
+
{
|
|
3265
|
+
value: objectThing,
|
|
3266
|
+
className: objectClassName,
|
|
3267
|
+
onChange: useCallback(
|
|
3268
|
+
(event) =>
|
|
3269
|
+
handleJsonThingChange(
|
|
3270
|
+
event[CURRENT_TARGET][_VALUE],
|
|
3271
|
+
setObjectThing,
|
|
3272
|
+
isObject,
|
|
3273
|
+
setObjectClassName,
|
|
3274
|
+
),
|
|
3275
|
+
[handleJsonThingChange],
|
|
3276
|
+
),
|
|
3277
|
+
},
|
|
3278
|
+
thingType,
|
|
3279
|
+
),
|
|
3280
|
+
/* @__PURE__ */ jsx(
|
|
3281
|
+
'input',
|
|
3282
|
+
{
|
|
3283
|
+
value: arrayThing,
|
|
3284
|
+
className: arrayClassName,
|
|
3285
|
+
onChange: useCallback(
|
|
3286
|
+
(event) =>
|
|
3287
|
+
handleJsonThingChange(
|
|
3288
|
+
event[CURRENT_TARGET][_VALUE],
|
|
3289
|
+
setArrayThing,
|
|
3290
|
+
isArray,
|
|
3291
|
+
setArrayClassName,
|
|
3292
|
+
),
|
|
3293
|
+
[handleJsonThingChange],
|
|
3294
|
+
),
|
|
3295
|
+
},
|
|
3296
|
+
thingType,
|
|
3297
|
+
),
|
|
3098
3298
|
);
|
|
3099
3299
|
return /* @__PURE__ */ jsxs('div', {
|
|
3100
3300
|
className,
|