tinybase 7.0.0-beta.2 → 7.0.0
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/common/index.d.ts +1 -1
- package/@types/mergeable-store/index.d.ts +1 -1
- package/@types/mergeable-store/with-schemas/index.d.ts +1 -1
- package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +4 -0
- package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +4 -0
- package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-electric-sql/index.d.ts +4 -0
- package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-expo-sqlite/index.d.ts +4 -0
- package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-libsql/index.d.ts +4 -0
- package/@types/persisters/persister-libsql/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-pglite/index.d.ts +5 -1
- package/@types/persisters/persister-pglite/with-schemas/index.d.ts +5 -1
- package/@types/persisters/persister-postgres/index.d.ts +4 -0
- package/@types/persisters/persister-postgres/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-powersync/index.d.ts +4 -0
- package/@types/persisters/persister-powersync/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-react-native-sqlite/index.d.ts +4 -0
- package/@types/persisters/persister-react-native-sqlite/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-sqlite-bun/index.d.ts +4 -0
- package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-sqlite-wasm/index.d.ts +4 -0
- package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +4 -0
- package/@types/persisters/persister-sqlite3/index.d.ts +4 -0
- package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +4 -0
- package/@types/queries/index.d.ts +1 -1
- package/@types/store/index.d.ts +21 -19
- package/@types/store/with-schemas/index.d.ts +15 -13
- package/agents.md +62 -0
- package/checkpoints/index.js +8 -6
- package/checkpoints/with-schemas/index.js +8 -6
- package/common/index.js +4 -3
- package/common/with-schemas/index.js +4 -3
- package/index.js +60 -30
- package/indexes/index.js +7 -5
- package/indexes/with-schemas/index.js +7 -5
- package/mergeable-store/index.js +51 -21
- package/mergeable-store/with-schemas/index.js +51 -21
- package/metrics/index.js +7 -5
- package/metrics/with-schemas/index.js +7 -5
- package/min/checkpoints/index.js +1 -1
- package/min/checkpoints/index.js.gz +0 -0
- package/min/checkpoints/with-schemas/index.js +1 -1
- package/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/min/common/index.js +1 -1
- package/min/common/index.js.gz +0 -0
- package/min/common/with-schemas/index.js +1 -1
- package/min/common/with-schemas/index.js.gz +0 -0
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/indexes/index.js +1 -1
- package/min/indexes/index.js.gz +0 -0
- package/min/indexes/with-schemas/index.js +1 -1
- package/min/indexes/with-schemas/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/metrics/index.js +1 -1
- package/min/metrics/index.js.gz +0 -0
- package/min/metrics/with-schemas/index.js +1 -1
- package/min/metrics/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/index.js +1 -1
- package/min/persisters/persister-partykit-server/index.js.gz +0 -0
- package/min/persisters/persister-partykit-server/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-server/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/relationships/index.js +1 -1
- package/min/relationships/index.js.gz +0 -0
- package/min/relationships/with-schemas/index.js +1 -1
- package/min/relationships/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react/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 +78 -46
- package/omni/with-schemas/index.js +78 -46
- package/package.json +3 -3
- package/persisters/index.js +14 -10
- package/persisters/persister-automerge/index.js +12 -8
- package/persisters/persister-automerge/with-schemas/index.js +12 -8
- package/persisters/persister-browser/index.js +12 -8
- package/persisters/persister-browser/with-schemas/index.js +12 -8
- package/persisters/persister-cr-sqlite-wasm/index.js +14 -10
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +14 -10
- package/persisters/persister-durable-object-sql-storage/index.js +14 -10
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +14 -10
- package/persisters/persister-durable-object-storage/index.js +12 -8
- package/persisters/persister-durable-object-storage/with-schemas/index.js +12 -8
- package/persisters/persister-electric-sql/index.js +14 -10
- package/persisters/persister-electric-sql/with-schemas/index.js +14 -10
- package/persisters/persister-expo-sqlite/index.js +14 -10
- package/persisters/persister-expo-sqlite/with-schemas/index.js +14 -10
- package/persisters/persister-file/index.js +12 -8
- package/persisters/persister-file/with-schemas/index.js +12 -8
- package/persisters/persister-indexed-db/index.js +12 -8
- package/persisters/persister-indexed-db/with-schemas/index.js +12 -8
- package/persisters/persister-libsql/index.js +14 -10
- package/persisters/persister-libsql/with-schemas/index.js +14 -10
- package/persisters/persister-partykit-client/index.js +12 -8
- package/persisters/persister-partykit-client/with-schemas/index.js +12 -8
- package/persisters/persister-partykit-server/index.js +4 -3
- package/persisters/persister-partykit-server/with-schemas/index.js +4 -3
- package/persisters/persister-pglite/index.js +13 -9
- package/persisters/persister-pglite/with-schemas/index.js +13 -9
- package/persisters/persister-postgres/index.js +13 -9
- package/persisters/persister-postgres/with-schemas/index.js +13 -9
- package/persisters/persister-powersync/index.js +14 -10
- package/persisters/persister-powersync/with-schemas/index.js +14 -10
- package/persisters/persister-react-native-mmkv/index.js +12 -8
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +12 -8
- package/persisters/persister-react-native-sqlite/index.js +14 -10
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +14 -10
- package/persisters/persister-remote/index.js +14 -10
- package/persisters/persister-remote/with-schemas/index.js +14 -10
- package/persisters/persister-sqlite-bun/index.js +14 -10
- package/persisters/persister-sqlite-bun/with-schemas/index.js +14 -10
- package/persisters/persister-sqlite-wasm/index.js +14 -10
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +14 -10
- package/persisters/persister-sqlite3/index.js +14 -10
- package/persisters/persister-sqlite3/with-schemas/index.js +14 -10
- package/persisters/persister-yjs/index.js +18 -12
- package/persisters/persister-yjs/with-schemas/index.js +18 -12
- package/persisters/with-schemas/index.js +14 -10
- package/queries/index.js +17 -12
- package/queries/with-schemas/index.js +17 -12
- package/readme.md +2 -2
- package/relationships/index.js +7 -5
- package/relationships/with-schemas/index.js +7 -5
- package/releases.md +100 -12
- package/store/index.js +48 -18
- package/store/with-schemas/index.js +48 -18
- package/synchronizers/index.js +13 -9
- package/synchronizers/synchronizer-broadcast-channel/index.js +14 -10
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +14 -10
- package/synchronizers/synchronizer-local/index.js +14 -10
- package/synchronizers/synchronizer-local/with-schemas/index.js +14 -10
- package/synchronizers/synchronizer-ws-client/index.js +13 -9
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +13 -9
- package/synchronizers/synchronizer-ws-server/index.js +13 -9
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +13 -9
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +13 -9
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +13 -9
- package/synchronizers/synchronizer-ws-server-simple/index.js +5 -4
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +5 -4
- package/synchronizers/with-schemas/index.js +13 -9
- package/ui-react/index.js +9 -6
- package/ui-react/with-schemas/index.js +9 -6
- package/ui-react-dom/index.js +14 -7
- package/ui-react-dom/with-schemas/index.js +14 -7
- package/ui-react-inspector/index.js +53 -23
- package/ui-react-inspector/with-schemas/index.js +53 -23
- package/with-schemas/index.js +60 -30
package/checkpoints/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
const EMPTY_STRING = '';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
4
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
5
|
+
const isUndefined = (thing) => thing === void 0;
|
|
6
|
+
const isNull = (thing) => thing === null;
|
|
7
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
6
8
|
const isArray = (thing) => Array.isArray(thing);
|
|
7
9
|
const size = (arrayOrString) => arrayOrString.length;
|
|
8
10
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -42,7 +44,7 @@ const mapGet = (map, key) => map?.get(key);
|
|
|
42
44
|
const mapForEach = (map, cb) =>
|
|
43
45
|
collForEach(map, (value, key) => cb(key, value));
|
|
44
46
|
const mapSet = (map, key, value) =>
|
|
45
|
-
|
|
47
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
46
48
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
47
49
|
if (!collHas(map, key)) {
|
|
48
50
|
mapSet(map, key, getDefaultValue());
|
|
@@ -165,7 +167,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
165
167
|
const index = size(ids);
|
|
166
168
|
if (index == size(path)) {
|
|
167
169
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
168
|
-
} else if (
|
|
170
|
+
} else if (isNull(path[index])) {
|
|
169
171
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
170
172
|
callWithIds(...ids, id2),
|
|
171
173
|
);
|
|
@@ -318,7 +320,7 @@ const createCheckpoints = getCreateFunction(
|
|
|
318
320
|
? goBackwardImpl
|
|
319
321
|
: arrayHas(forwardIds, checkpointId)
|
|
320
322
|
? goForwardImpl
|
|
321
|
-
:
|
|
323
|
+
: void 0;
|
|
322
324
|
while (!isUndefined(action) && checkpointId != currentId) {
|
|
323
325
|
action();
|
|
324
326
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
const EMPTY_STRING = '';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
4
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
5
|
+
const isUndefined = (thing) => thing === void 0;
|
|
6
|
+
const isNull = (thing) => thing === null;
|
|
7
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
6
8
|
const isArray = (thing) => Array.isArray(thing);
|
|
7
9
|
const size = (arrayOrString) => arrayOrString.length;
|
|
8
10
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -42,7 +44,7 @@ const mapGet = (map, key) => map?.get(key);
|
|
|
42
44
|
const mapForEach = (map, cb) =>
|
|
43
45
|
collForEach(map, (value, key) => cb(key, value));
|
|
44
46
|
const mapSet = (map, key, value) =>
|
|
45
|
-
|
|
47
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
46
48
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
47
49
|
if (!collHas(map, key)) {
|
|
48
50
|
mapSet(map, key, getDefaultValue());
|
|
@@ -165,7 +167,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
165
167
|
const index = size(ids);
|
|
166
168
|
if (index == size(path)) {
|
|
167
169
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
168
|
-
} else if (
|
|
170
|
+
} else if (isNull(path[index])) {
|
|
169
171
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
170
172
|
callWithIds(...ids, id2),
|
|
171
173
|
);
|
|
@@ -318,7 +320,7 @@ const createCheckpoints = getCreateFunction(
|
|
|
318
320
|
? goBackwardImpl
|
|
319
321
|
: arrayHas(forwardIds, checkpointId)
|
|
320
322
|
? goForwardImpl
|
|
321
|
-
:
|
|
323
|
+
: void 0;
|
|
322
324
|
while (!isUndefined(action) && checkpointId != currentId) {
|
|
323
325
|
action();
|
|
324
326
|
}
|
package/common/index.js
CHANGED
|
@@ -2,14 +2,15 @@ const EMPTY_STRING = '';
|
|
|
2
2
|
const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
3
3
|
str.split(separator, limit);
|
|
4
4
|
|
|
5
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
6
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
5
7
|
const GLOBAL = globalThis;
|
|
6
8
|
const math = Math;
|
|
7
9
|
const mathMax = math.max;
|
|
8
10
|
const mathFloor = math.floor;
|
|
9
11
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
10
|
-
const isUndefined = (thing) => thing
|
|
11
|
-
const ifNotUndefined = (
|
|
12
|
-
isUndefined(value) ? otherwise?.() : then(value);
|
|
12
|
+
const isUndefined = (thing) => thing === void 0;
|
|
13
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
13
14
|
|
|
14
15
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
15
16
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -2,14 +2,15 @@ const EMPTY_STRING = '';
|
|
|
2
2
|
const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
3
3
|
str.split(separator, limit);
|
|
4
4
|
|
|
5
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
6
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
5
7
|
const GLOBAL = globalThis;
|
|
6
8
|
const math = Math;
|
|
7
9
|
const mathMax = math.max;
|
|
8
10
|
const mathFloor = math.floor;
|
|
9
11
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
10
|
-
const isUndefined = (thing) => thing
|
|
11
|
-
const ifNotUndefined = (
|
|
12
|
-
isUndefined(value) ? otherwise?.() : then(value);
|
|
12
|
+
const isUndefined = (thing) => thing === void 0;
|
|
13
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
13
14
|
|
|
14
15
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
15
16
|
const arrayMap = (array, cb) => array.map(cb);
|
package/index.js
CHANGED
|
@@ -6,6 +6,7 @@ const NUMBER = getTypeOf(0);
|
|
|
6
6
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
7
7
|
const TYPE = 'type';
|
|
8
8
|
const DEFAULT = 'default';
|
|
9
|
+
const ALLOW_NULL = 'allowNull';
|
|
9
10
|
const SUM = 'sum';
|
|
10
11
|
const AVG = 'avg';
|
|
11
12
|
const MIN = 'min';
|
|
@@ -37,6 +38,8 @@ const strEndsWith = (str, suffix) => str.endsWith(suffix);
|
|
|
37
38
|
const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
38
39
|
str.split(separator, limit);
|
|
39
40
|
|
|
41
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
42
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
40
43
|
const GLOBAL = globalThis;
|
|
41
44
|
const math = Math;
|
|
42
45
|
const mathMax = math.max;
|
|
@@ -44,9 +47,11 @@ const mathMin = math.min;
|
|
|
44
47
|
const mathFloor = math.floor;
|
|
45
48
|
const isFiniteNumber = isFinite;
|
|
46
49
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
+
const isNullish = (thing) => thing == null;
|
|
51
|
+
const isUndefined = (thing) => thing === void 0;
|
|
52
|
+
const isNull = (thing) => thing === null;
|
|
53
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
54
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
50
55
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
51
56
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
52
57
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
@@ -88,13 +93,16 @@ const arrayUnshift = (array, ...values) => array.unshift(...values);
|
|
|
88
93
|
const arrayShift = (array) => array.shift();
|
|
89
94
|
|
|
90
95
|
const getCellOrValueType = (cellOrValue) => {
|
|
96
|
+
if (isNull(cellOrValue)) {
|
|
97
|
+
return 'null';
|
|
98
|
+
}
|
|
91
99
|
const type = getTypeOf(cellOrValue);
|
|
92
100
|
return isTypeStringOrBoolean(type) ||
|
|
93
101
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
94
102
|
? type
|
|
95
103
|
: void 0;
|
|
96
104
|
};
|
|
97
|
-
const
|
|
105
|
+
const isCellOrValueOrUndefined = (cellOrValue) =>
|
|
98
106
|
isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
|
|
99
107
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
100
108
|
isUndefined(cell)
|
|
@@ -121,12 +129,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
|
121
129
|
const objFrozen = object.isFrozen;
|
|
122
130
|
const objEntries = object.entries;
|
|
123
131
|
const isObject = (obj) =>
|
|
124
|
-
!
|
|
125
|
-
|
|
132
|
+
!isNullish(obj) &&
|
|
133
|
+
ifNotNullish(
|
|
126
134
|
getPrototypeOf(obj),
|
|
127
135
|
(objPrototype) =>
|
|
128
136
|
objPrototype == object.prototype ||
|
|
129
|
-
|
|
137
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
130
138
|
|
|
131
139
|
/* istanbul ignore next */
|
|
132
140
|
() => true,
|
|
@@ -155,7 +163,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
155
163
|
};
|
|
156
164
|
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
157
165
|
if (
|
|
158
|
-
|
|
166
|
+
isNullish(obj) ||
|
|
159
167
|
!isObject(obj) ||
|
|
160
168
|
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
161
169
|
objFrozen(obj)
|
|
@@ -179,7 +187,7 @@ const mapForEach = (map, cb) =>
|
|
|
179
187
|
const mapMap = (coll, cb) =>
|
|
180
188
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
181
189
|
const mapSet = (map, key, value) =>
|
|
182
|
-
|
|
190
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
183
191
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
184
192
|
if (!collHas(map, key)) {
|
|
185
193
|
mapSet(map, key, getDefaultValue());
|
|
@@ -500,7 +508,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
500
508
|
const index = size(ids);
|
|
501
509
|
if (index == size(path)) {
|
|
502
510
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
503
|
-
} else if (
|
|
511
|
+
} else if (isNull(path[index])) {
|
|
504
512
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
505
513
|
callWithIds(...ids, id2),
|
|
506
514
|
);
|
|
@@ -653,7 +661,7 @@ const createCheckpoints = getCreateFunction(
|
|
|
653
661
|
? goBackwardImpl
|
|
654
662
|
: arrayHas(forwardIds, checkpointId)
|
|
655
663
|
? goForwardImpl
|
|
656
|
-
:
|
|
664
|
+
: void 0;
|
|
657
665
|
while (!isUndefined(action) && checkpointId != currentId) {
|
|
658
666
|
action();
|
|
659
667
|
}
|
|
@@ -1233,14 +1241,22 @@ const createStore = () => {
|
|
|
1233
1241
|
const validateValuesSchema = (valuesSchema) =>
|
|
1234
1242
|
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
1235
1243
|
const validateCellOrValueSchema = (schema) => {
|
|
1236
|
-
if (
|
|
1244
|
+
if (
|
|
1245
|
+
!objValidate(schema, (_child, id2) =>
|
|
1246
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
1247
|
+
)
|
|
1248
|
+
) {
|
|
1237
1249
|
return false;
|
|
1238
1250
|
}
|
|
1239
1251
|
const type = schema[TYPE];
|
|
1240
1252
|
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
1241
1253
|
return false;
|
|
1242
1254
|
}
|
|
1243
|
-
|
|
1255
|
+
const defaultValue = schema[DEFAULT];
|
|
1256
|
+
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
1257
|
+
return false;
|
|
1258
|
+
}
|
|
1259
|
+
if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
|
|
1244
1260
|
objDel(schema, DEFAULT);
|
|
1245
1261
|
}
|
|
1246
1262
|
return true;
|
|
@@ -1277,9 +1293,19 @@ const createStore = () => {
|
|
|
1277
1293
|
? ifNotUndefined(
|
|
1278
1294
|
mapGet(mapGet(tablesSchemaMap, tableId), cellId),
|
|
1279
1295
|
(cellSchema) =>
|
|
1280
|
-
|
|
1281
|
-
?
|
|
1282
|
-
|
|
1296
|
+
isNull(cell)
|
|
1297
|
+
? cellSchema[ALLOW_NULL]
|
|
1298
|
+
? cell
|
|
1299
|
+
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
1300
|
+
: getCellOrValueType(cell) == cellSchema[TYPE]
|
|
1301
|
+
? cell
|
|
1302
|
+
: cellInvalid(
|
|
1303
|
+
tableId,
|
|
1304
|
+
rowId,
|
|
1305
|
+
cellId,
|
|
1306
|
+
cell,
|
|
1307
|
+
cellSchema[DEFAULT],
|
|
1308
|
+
),
|
|
1283
1309
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
1284
1310
|
)
|
|
1285
1311
|
: isUndefined(getCellOrValueType(cell))
|
|
@@ -1304,9 +1330,13 @@ const createStore = () => {
|
|
|
1304
1330
|
? ifNotUndefined(
|
|
1305
1331
|
mapGet(valuesSchemaMap, valueId),
|
|
1306
1332
|
(valueSchema) =>
|
|
1307
|
-
|
|
1308
|
-
?
|
|
1309
|
-
|
|
1333
|
+
isNull(value)
|
|
1334
|
+
? valueSchema[ALLOW_NULL]
|
|
1335
|
+
? value
|
|
1336
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
1337
|
+
: getCellOrValueType(value) == valueSchema[TYPE]
|
|
1338
|
+
? value
|
|
1339
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
1310
1340
|
() => valueInvalid(valueId, value),
|
|
1311
1341
|
)
|
|
1312
1342
|
: isUndefined(getCellOrValueType(value))
|
|
@@ -1549,7 +1579,7 @@ const createStore = () => {
|
|
|
1549
1579
|
mapSet(
|
|
1550
1580
|
cellIds,
|
|
1551
1581
|
cellId,
|
|
1552
|
-
count != -addedOrRemoved ? count + addedOrRemoved :
|
|
1582
|
+
count != -addedOrRemoved ? count + addedOrRemoved : void 0,
|
|
1553
1583
|
);
|
|
1554
1584
|
idsChanged(
|
|
1555
1585
|
mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
|
|
@@ -2558,7 +2588,7 @@ const validateMergeableContent = (mergeableContent) =>
|
|
|
2558
2588
|
objValidate(
|
|
2559
2589
|
cellStamps,
|
|
2560
2590
|
(cellStamp) =>
|
|
2561
|
-
stampValidate(cellStamp,
|
|
2591
|
+
stampValidate(cellStamp, isCellOrValueOrUndefined),
|
|
2562
2592
|
void 0,
|
|
2563
2593
|
1,
|
|
2564
2594
|
),
|
|
@@ -2574,7 +2604,7 @@ const validateMergeableContent = (mergeableContent) =>
|
|
|
2574
2604
|
stampValidate(mergeableContent[1], (values) =>
|
|
2575
2605
|
objValidate(
|
|
2576
2606
|
values,
|
|
2577
|
-
(value) => stampValidate(value,
|
|
2607
|
+
(value) => stampValidate(value, isCellOrValueOrUndefined),
|
|
2578
2608
|
void 0,
|
|
2579
2609
|
1,
|
|
2580
2610
|
),
|
|
@@ -3252,7 +3282,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
3252
3282
|
setDefinition(queryId, tableId);
|
|
3253
3283
|
resetPreStores(queryId);
|
|
3254
3284
|
const selectEntries = [];
|
|
3255
|
-
const joinEntries = [[
|
|
3285
|
+
const joinEntries = [[void 0, [tableId, void 0, void 0, [], mapNew()]]];
|
|
3256
3286
|
const wheres = [];
|
|
3257
3287
|
const groupEntries = [];
|
|
3258
3288
|
const havings = [];
|
|
@@ -3268,7 +3298,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
3268
3298
|
};
|
|
3269
3299
|
const join = (joinedTableId, arg1, arg2) => {
|
|
3270
3300
|
const fromIntermediateJoinedTableId =
|
|
3271
|
-
isUndefined(arg2) || isFunction(arg1) ?
|
|
3301
|
+
isUndefined(arg2) || isFunction(arg1) ? void 0 : arg1;
|
|
3272
3302
|
const onArg = isUndefined(fromIntermediateJoinedTableId) ? arg1 : arg2;
|
|
3273
3303
|
const joinEntry = [
|
|
3274
3304
|
joinedTableId,
|
|
@@ -3388,7 +3418,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
3388
3418
|
groupRow[groupedCellId] = isUndefined(
|
|
3389
3419
|
getCellOrValueType(aggregateValue),
|
|
3390
3420
|
)
|
|
3391
|
-
?
|
|
3421
|
+
? void 0
|
|
3392
3422
|
: aggregateValue;
|
|
3393
3423
|
},
|
|
3394
3424
|
);
|
|
@@ -3517,20 +3547,20 @@ const createQueries = getCreateFunction((store) => {
|
|
|
3517
3547
|
const listenToTable = (rootRowId, tableId2, rowId, joinedTableIds2) => {
|
|
3518
3548
|
const getCell = (cellId) => store.getCell(tableId2, rowId, cellId);
|
|
3519
3549
|
arrayForEach(joinedTableIds2, (remoteAsTableId) => {
|
|
3520
|
-
const [realJoinedTableId, , on, nextJoinedTableIds,
|
|
3550
|
+
const [realJoinedTableId, , on, nextJoinedTableIds, remoteIdPairs] =
|
|
3521
3551
|
mapGet(joins, remoteAsTableId);
|
|
3522
3552
|
const remoteRowId = on?.(getCell, rootRowId);
|
|
3523
3553
|
const [previousRemoteRowId, previousRemoteListenerId] =
|
|
3524
|
-
mapGet(
|
|
3554
|
+
mapGet(remoteIdPairs, rootRowId) ?? [];
|
|
3525
3555
|
if (remoteRowId != previousRemoteRowId) {
|
|
3526
3556
|
if (!isUndefined(previousRemoteListenerId)) {
|
|
3527
3557
|
delStoreListeners(queryId, previousRemoteListenerId);
|
|
3528
3558
|
}
|
|
3529
3559
|
mapSet(
|
|
3530
|
-
|
|
3560
|
+
remoteIdPairs,
|
|
3531
3561
|
rootRowId,
|
|
3532
3562
|
isUndefined(remoteRowId)
|
|
3533
|
-
?
|
|
3563
|
+
? void 0
|
|
3534
3564
|
: [
|
|
3535
3565
|
remoteRowId,
|
|
3536
3566
|
...addStoreListeners(
|
|
@@ -3551,7 +3581,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
3551
3581
|
});
|
|
3552
3582
|
writeSelectRow(rootRowId);
|
|
3553
3583
|
};
|
|
3554
|
-
const {3: joinedTableIds} = mapGet(joins,
|
|
3584
|
+
const {3: joinedTableIds} = mapGet(joins, void 0);
|
|
3555
3585
|
selectJoinWhereStore.transaction(() =>
|
|
3556
3586
|
addStoreListeners(
|
|
3557
3587
|
queryId,
|
package/indexes/index.js
CHANGED
|
@@ -3,9 +3,11 @@ const EMPTY_STRING = '';
|
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
const id = (key) => EMPTY_STRING + key;
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
7
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
8
|
+
const isUndefined = (thing) => thing === void 0;
|
|
9
|
+
const isNull = (thing) => thing === null;
|
|
10
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
9
11
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
10
12
|
const isArray = (thing) => Array.isArray(thing);
|
|
11
13
|
const size = (arrayOrString) => arrayOrString.length;
|
|
@@ -49,7 +51,7 @@ const mapGet = (map, key) => map?.get(key);
|
|
|
49
51
|
const mapForEach = (map, cb) =>
|
|
50
52
|
collForEach(map, (value, key) => cb(key, value));
|
|
51
53
|
const mapSet = (map, key, value) =>
|
|
52
|
-
|
|
54
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
53
55
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
54
56
|
if (!collHas(map, key)) {
|
|
55
57
|
mapSet(map, key, getDefaultValue());
|
|
@@ -334,7 +336,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
334
336
|
const index = size(ids);
|
|
335
337
|
if (index == size(path)) {
|
|
336
338
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
337
|
-
} else if (
|
|
339
|
+
} else if (isNull(path[index])) {
|
|
338
340
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
339
341
|
callWithIds(...ids, id2),
|
|
340
342
|
);
|
|
@@ -3,9 +3,11 @@ const EMPTY_STRING = '';
|
|
|
3
3
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
4
4
|
const id = (key) => EMPTY_STRING + key;
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
7
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
8
|
+
const isUndefined = (thing) => thing === void 0;
|
|
9
|
+
const isNull = (thing) => thing === null;
|
|
10
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
9
11
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
10
12
|
const isArray = (thing) => Array.isArray(thing);
|
|
11
13
|
const size = (arrayOrString) => arrayOrString.length;
|
|
@@ -49,7 +51,7 @@ const mapGet = (map, key) => map?.get(key);
|
|
|
49
51
|
const mapForEach = (map, cb) =>
|
|
50
52
|
collForEach(map, (value, key) => cb(key, value));
|
|
51
53
|
const mapSet = (map, key, value) =>
|
|
52
|
-
|
|
54
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
53
55
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
54
56
|
if (!collHas(map, key)) {
|
|
55
57
|
mapSet(map, key, getDefaultValue());
|
|
@@ -334,7 +336,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
334
336
|
const index = size(ids);
|
|
335
337
|
if (index == size(path)) {
|
|
336
338
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
337
|
-
} else if (
|
|
339
|
+
} else if (isNull(path[index])) {
|
|
338
340
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
339
341
|
callWithIds(...ids, id2),
|
|
340
342
|
);
|
package/mergeable-store/index.js
CHANGED
|
@@ -6,6 +6,7 @@ const NUMBER = getTypeOf(0);
|
|
|
6
6
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
7
7
|
const TYPE = 'type';
|
|
8
8
|
const DEFAULT = 'default';
|
|
9
|
+
const ALLOW_NULL = 'allowNull';
|
|
9
10
|
const LISTENER = 'Listener';
|
|
10
11
|
const SET = 'set';
|
|
11
12
|
const ADD = 'add';
|
|
@@ -30,15 +31,19 @@ const strEndsWith = (str, suffix) => str.endsWith(suffix);
|
|
|
30
31
|
const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
31
32
|
str.split(separator, limit);
|
|
32
33
|
|
|
34
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
35
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
33
36
|
const GLOBAL = globalThis;
|
|
34
37
|
const math = Math;
|
|
35
38
|
const mathMax = math.max;
|
|
36
39
|
const mathFloor = math.floor;
|
|
37
40
|
const isFiniteNumber = isFinite;
|
|
38
41
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
+
const isNullish = (thing) => thing == null;
|
|
43
|
+
const isUndefined = (thing) => thing === void 0;
|
|
44
|
+
const isNull = (thing) => thing === null;
|
|
45
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
46
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
42
47
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
43
48
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
44
49
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
|
|
@@ -57,13 +62,16 @@ const tryCatch = async (action, then1, then2) => {
|
|
|
57
62
|
};
|
|
58
63
|
|
|
59
64
|
const getCellOrValueType = (cellOrValue) => {
|
|
65
|
+
if (isNull(cellOrValue)) {
|
|
66
|
+
return 'null';
|
|
67
|
+
}
|
|
60
68
|
const type = getTypeOf(cellOrValue);
|
|
61
69
|
return isTypeStringOrBoolean(type) ||
|
|
62
70
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
63
71
|
? type
|
|
64
72
|
: void 0;
|
|
65
73
|
};
|
|
66
|
-
const
|
|
74
|
+
const isCellOrValueOrUndefined = (cellOrValue) =>
|
|
67
75
|
isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
|
|
68
76
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
69
77
|
isUndefined(cell)
|
|
@@ -102,12 +110,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
|
102
110
|
const objFrozen = object.isFrozen;
|
|
103
111
|
const objEntries = object.entries;
|
|
104
112
|
const isObject = (obj) =>
|
|
105
|
-
!
|
|
106
|
-
|
|
113
|
+
!isNullish(obj) &&
|
|
114
|
+
ifNotNullish(
|
|
107
115
|
getPrototypeOf(obj),
|
|
108
116
|
(objPrototype) =>
|
|
109
117
|
objPrototype == object.prototype ||
|
|
110
|
-
|
|
118
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
111
119
|
|
|
112
120
|
/* istanbul ignore next */
|
|
113
121
|
() => true,
|
|
@@ -136,7 +144,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
136
144
|
};
|
|
137
145
|
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
138
146
|
if (
|
|
139
|
-
|
|
147
|
+
isNullish(obj) ||
|
|
140
148
|
!isObject(obj) ||
|
|
141
149
|
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
142
150
|
objFrozen(obj)
|
|
@@ -183,7 +191,7 @@ const mapForEach = (map, cb) =>
|
|
|
183
191
|
const mapMap = (coll, cb) =>
|
|
184
192
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
185
193
|
const mapSet = (map, key, value) =>
|
|
186
|
-
|
|
194
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
187
195
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
188
196
|
if (!collHas(map, key)) {
|
|
189
197
|
mapSet(map, key, getDefaultValue());
|
|
@@ -468,7 +476,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
468
476
|
const index = size(ids);
|
|
469
477
|
if (index == size(path)) {
|
|
470
478
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
471
|
-
} else if (
|
|
479
|
+
} else if (isNull(path[index])) {
|
|
472
480
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
473
481
|
callWithIds(...ids, id2),
|
|
474
482
|
);
|
|
@@ -553,14 +561,22 @@ const createStore = () => {
|
|
|
553
561
|
const validateValuesSchema = (valuesSchema) =>
|
|
554
562
|
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
555
563
|
const validateCellOrValueSchema = (schema) => {
|
|
556
|
-
if (
|
|
564
|
+
if (
|
|
565
|
+
!objValidate(schema, (_child, id2) =>
|
|
566
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
567
|
+
)
|
|
568
|
+
) {
|
|
557
569
|
return false;
|
|
558
570
|
}
|
|
559
571
|
const type = schema[TYPE];
|
|
560
572
|
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
561
573
|
return false;
|
|
562
574
|
}
|
|
563
|
-
|
|
575
|
+
const defaultValue = schema[DEFAULT];
|
|
576
|
+
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
577
|
+
return false;
|
|
578
|
+
}
|
|
579
|
+
if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
|
|
564
580
|
objDel(schema, DEFAULT);
|
|
565
581
|
}
|
|
566
582
|
return true;
|
|
@@ -597,9 +613,19 @@ const createStore = () => {
|
|
|
597
613
|
? ifNotUndefined(
|
|
598
614
|
mapGet(mapGet(tablesSchemaMap, tableId), cellId),
|
|
599
615
|
(cellSchema) =>
|
|
600
|
-
|
|
601
|
-
?
|
|
602
|
-
|
|
616
|
+
isNull(cell)
|
|
617
|
+
? cellSchema[ALLOW_NULL]
|
|
618
|
+
? cell
|
|
619
|
+
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
620
|
+
: getCellOrValueType(cell) == cellSchema[TYPE]
|
|
621
|
+
? cell
|
|
622
|
+
: cellInvalid(
|
|
623
|
+
tableId,
|
|
624
|
+
rowId,
|
|
625
|
+
cellId,
|
|
626
|
+
cell,
|
|
627
|
+
cellSchema[DEFAULT],
|
|
628
|
+
),
|
|
603
629
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
604
630
|
)
|
|
605
631
|
: isUndefined(getCellOrValueType(cell))
|
|
@@ -624,9 +650,13 @@ const createStore = () => {
|
|
|
624
650
|
? ifNotUndefined(
|
|
625
651
|
mapGet(valuesSchemaMap, valueId),
|
|
626
652
|
(valueSchema) =>
|
|
627
|
-
|
|
628
|
-
?
|
|
629
|
-
|
|
653
|
+
isNull(value)
|
|
654
|
+
? valueSchema[ALLOW_NULL]
|
|
655
|
+
? value
|
|
656
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
657
|
+
: getCellOrValueType(value) == valueSchema[TYPE]
|
|
658
|
+
? value
|
|
659
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
630
660
|
() => valueInvalid(valueId, value),
|
|
631
661
|
)
|
|
632
662
|
: isUndefined(getCellOrValueType(value))
|
|
@@ -869,7 +899,7 @@ const createStore = () => {
|
|
|
869
899
|
mapSet(
|
|
870
900
|
cellIds,
|
|
871
901
|
cellId,
|
|
872
|
-
count != -addedOrRemoved ? count + addedOrRemoved :
|
|
902
|
+
count != -addedOrRemoved ? count + addedOrRemoved : void 0,
|
|
873
903
|
);
|
|
874
904
|
idsChanged(
|
|
875
905
|
mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
|
|
@@ -1878,7 +1908,7 @@ const validateMergeableContent = (mergeableContent) =>
|
|
|
1878
1908
|
objValidate(
|
|
1879
1909
|
cellStamps,
|
|
1880
1910
|
(cellStamp) =>
|
|
1881
|
-
stampValidate(cellStamp,
|
|
1911
|
+
stampValidate(cellStamp, isCellOrValueOrUndefined),
|
|
1882
1912
|
void 0,
|
|
1883
1913
|
1,
|
|
1884
1914
|
),
|
|
@@ -1894,7 +1924,7 @@ const validateMergeableContent = (mergeableContent) =>
|
|
|
1894
1924
|
stampValidate(mergeableContent[1], (values) =>
|
|
1895
1925
|
objValidate(
|
|
1896
1926
|
values,
|
|
1897
|
-
(value) => stampValidate(value,
|
|
1927
|
+
(value) => stampValidate(value, isCellOrValueOrUndefined),
|
|
1898
1928
|
void 0,
|
|
1899
1929
|
1,
|
|
1900
1930
|
),
|