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
|
@@ -18,6 +18,7 @@ const FUNCTION$1 = getTypeOf(getTypeOf);
|
|
|
18
18
|
const TRUE = 'true';
|
|
19
19
|
const TYPE = 'type';
|
|
20
20
|
const DEFAULT = 'default';
|
|
21
|
+
const ALLOW_NULL = 'allowNull';
|
|
21
22
|
const UTF8 = 'utf8';
|
|
22
23
|
const SUM = 'sum';
|
|
23
24
|
const AVG = 'avg';
|
|
@@ -76,6 +77,8 @@ const strReplace = (str, searchValue, replaceValue) =>
|
|
|
76
77
|
str.replace(searchValue, replaceValue);
|
|
77
78
|
|
|
78
79
|
const promise = Promise;
|
|
80
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
81
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
79
82
|
const GLOBAL = globalThis;
|
|
80
83
|
const WINDOW = GLOBAL.window;
|
|
81
84
|
const THOUSAND = 1e3;
|
|
@@ -91,9 +94,11 @@ const mathMin = math.min;
|
|
|
91
94
|
const mathFloor = math.floor;
|
|
92
95
|
const isFiniteNumber = isFinite;
|
|
93
96
|
const isInstanceOf = (thing, cls) => thing instanceof cls;
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
+
const isNullish = (thing) => thing == null;
|
|
98
|
+
const isUndefined = (thing) => thing === void 0;
|
|
99
|
+
const isNull = (thing) => thing === null;
|
|
100
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
101
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
97
102
|
const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
|
|
98
103
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
99
104
|
const isFunction = (thing) => getTypeOf(thing) == FUNCTION$1;
|
|
@@ -145,13 +150,16 @@ const arrayShift = (array) => array.shift();
|
|
|
145
150
|
const arrayWith = (array, index, value) => array.with(index, value);
|
|
146
151
|
|
|
147
152
|
const getCellOrValueType = (cellOrValue) => {
|
|
153
|
+
if (isNull(cellOrValue)) {
|
|
154
|
+
return 'null';
|
|
155
|
+
}
|
|
148
156
|
const type = getTypeOf(cellOrValue);
|
|
149
157
|
return isTypeStringOrBoolean(type) ||
|
|
150
158
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
151
159
|
? type
|
|
152
160
|
: void 0;
|
|
153
161
|
};
|
|
154
|
-
const
|
|
162
|
+
const isCellOrValueOrUndefined = (cellOrValue) =>
|
|
155
163
|
isUndefined(cellOrValue) || !isUndefined(getCellOrValueType(cellOrValue));
|
|
156
164
|
const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
|
|
157
165
|
isUndefined(cell)
|
|
@@ -186,12 +194,12 @@ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
|
186
194
|
const objFrozen = object.isFrozen;
|
|
187
195
|
const objEntries = object.entries;
|
|
188
196
|
const isObject = (obj) =>
|
|
189
|
-
!
|
|
190
|
-
|
|
197
|
+
!isNullish(obj) &&
|
|
198
|
+
ifNotNullish(
|
|
191
199
|
getPrototypeOf(obj),
|
|
192
200
|
(objPrototype) =>
|
|
193
201
|
objPrototype == object.prototype ||
|
|
194
|
-
|
|
202
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
195
203
|
|
|
196
204
|
/* istanbul ignore next */
|
|
197
205
|
() => true,
|
|
@@ -236,7 +244,7 @@ const objEnsure = (obj, id, getDefaultValue) => {
|
|
|
236
244
|
};
|
|
237
245
|
const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
238
246
|
if (
|
|
239
|
-
|
|
247
|
+
isNullish(obj) ||
|
|
240
248
|
!isObject(obj) ||
|
|
241
249
|
(!emptyIsValid && objIsEmpty(obj)) ||
|
|
242
250
|
objFrozen(obj)
|
|
@@ -260,7 +268,7 @@ const mapForEach = (map, cb) =>
|
|
|
260
268
|
const mapMap = (coll, cb) =>
|
|
261
269
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
262
270
|
const mapSet = (map, key, value) =>
|
|
263
|
-
|
|
271
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
264
272
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
265
273
|
if (!collHas(map, key)) {
|
|
266
274
|
mapSet(map, key, getDefaultValue());
|
|
@@ -581,7 +589,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
581
589
|
const index = size(ids);
|
|
582
590
|
if (index == size(path)) {
|
|
583
591
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
584
|
-
} else if (
|
|
592
|
+
} else if (isNull(path[index])) {
|
|
585
593
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
586
594
|
callWithIds(...ids, id2),
|
|
587
595
|
);
|
|
@@ -734,7 +742,7 @@ const createCheckpoints = getCreateFunction(
|
|
|
734
742
|
? goBackwardImpl
|
|
735
743
|
: arrayHas(forwardIds, checkpointId)
|
|
736
744
|
? goForwardImpl
|
|
737
|
-
:
|
|
745
|
+
: void 0;
|
|
738
746
|
while (!isUndefined(action) && checkpointId != currentId) {
|
|
739
747
|
action();
|
|
740
748
|
}
|
|
@@ -1318,14 +1326,22 @@ const createStore = () => {
|
|
|
1318
1326
|
const validateValuesSchema = (valuesSchema) =>
|
|
1319
1327
|
objValidate(valuesSchema, validateCellOrValueSchema);
|
|
1320
1328
|
const validateCellOrValueSchema = (schema) => {
|
|
1321
|
-
if (
|
|
1329
|
+
if (
|
|
1330
|
+
!objValidate(schema, (_child, id2) =>
|
|
1331
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
1332
|
+
)
|
|
1333
|
+
) {
|
|
1322
1334
|
return false;
|
|
1323
1335
|
}
|
|
1324
1336
|
const type = schema[TYPE];
|
|
1325
1337
|
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
1326
1338
|
return false;
|
|
1327
1339
|
}
|
|
1328
|
-
|
|
1340
|
+
const defaultValue = schema[DEFAULT];
|
|
1341
|
+
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
1342
|
+
return false;
|
|
1343
|
+
}
|
|
1344
|
+
if (!isNull(defaultValue) && getCellOrValueType(defaultValue) != type) {
|
|
1329
1345
|
objDel(schema, DEFAULT);
|
|
1330
1346
|
}
|
|
1331
1347
|
return true;
|
|
@@ -1362,9 +1378,19 @@ const createStore = () => {
|
|
|
1362
1378
|
? ifNotUndefined(
|
|
1363
1379
|
mapGet(mapGet(tablesSchemaMap, tableId), cellId),
|
|
1364
1380
|
(cellSchema) =>
|
|
1365
|
-
|
|
1366
|
-
?
|
|
1367
|
-
|
|
1381
|
+
isNull(cell)
|
|
1382
|
+
? cellSchema[ALLOW_NULL]
|
|
1383
|
+
? cell
|
|
1384
|
+
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
1385
|
+
: getCellOrValueType(cell) == cellSchema[TYPE]
|
|
1386
|
+
? cell
|
|
1387
|
+
: cellInvalid(
|
|
1388
|
+
tableId,
|
|
1389
|
+
rowId,
|
|
1390
|
+
cellId,
|
|
1391
|
+
cell,
|
|
1392
|
+
cellSchema[DEFAULT],
|
|
1393
|
+
),
|
|
1368
1394
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
1369
1395
|
)
|
|
1370
1396
|
: isUndefined(getCellOrValueType(cell))
|
|
@@ -1389,9 +1415,13 @@ const createStore = () => {
|
|
|
1389
1415
|
? ifNotUndefined(
|
|
1390
1416
|
mapGet(valuesSchemaMap, valueId),
|
|
1391
1417
|
(valueSchema) =>
|
|
1392
|
-
|
|
1393
|
-
?
|
|
1394
|
-
|
|
1418
|
+
isNull(value)
|
|
1419
|
+
? valueSchema[ALLOW_NULL]
|
|
1420
|
+
? value
|
|
1421
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
1422
|
+
: getCellOrValueType(value) == valueSchema[TYPE]
|
|
1423
|
+
? value
|
|
1424
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
1395
1425
|
() => valueInvalid(valueId, value),
|
|
1396
1426
|
)
|
|
1397
1427
|
: isUndefined(getCellOrValueType(value))
|
|
@@ -1634,7 +1664,7 @@ const createStore = () => {
|
|
|
1634
1664
|
mapSet(
|
|
1635
1665
|
cellIds,
|
|
1636
1666
|
cellId,
|
|
1637
|
-
count != -addedOrRemoved ? count + addedOrRemoved :
|
|
1667
|
+
count != -addedOrRemoved ? count + addedOrRemoved : void 0,
|
|
1638
1668
|
);
|
|
1639
1669
|
idsChanged(
|
|
1640
1670
|
mapEnsure(mapEnsure(changedCellIds, tableId, mapNew), rowId, mapNew),
|
|
@@ -2643,7 +2673,7 @@ const validateMergeableContent = (mergeableContent) =>
|
|
|
2643
2673
|
objValidate(
|
|
2644
2674
|
cellStamps,
|
|
2645
2675
|
(cellStamp) =>
|
|
2646
|
-
stampValidate(cellStamp,
|
|
2676
|
+
stampValidate(cellStamp, isCellOrValueOrUndefined),
|
|
2647
2677
|
void 0,
|
|
2648
2678
|
1,
|
|
2649
2679
|
),
|
|
@@ -2659,7 +2689,7 @@ const validateMergeableContent = (mergeableContent) =>
|
|
|
2659
2689
|
stampValidate(mergeableContent[1], (values) =>
|
|
2660
2690
|
objValidate(
|
|
2661
2691
|
values,
|
|
2662
|
-
(value) => stampValidate(value,
|
|
2692
|
+
(value) => stampValidate(value, isCellOrValueOrUndefined),
|
|
2663
2693
|
void 0,
|
|
2664
2694
|
1,
|
|
2665
2695
|
),
|
|
@@ -3608,7 +3638,7 @@ const getDefaultedTabularConfigMap = (
|
|
|
3608
3638
|
0,
|
|
3609
3639
|
objSize(defaultObj),
|
|
3610
3640
|
);
|
|
3611
|
-
if (!
|
|
3641
|
+
if (!isNull(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
|
|
3612
3642
|
then(id, defaultedConfig[0]);
|
|
3613
3643
|
mapSet(configMap, id, defaultedConfig);
|
|
3614
3644
|
}
|
|
@@ -4335,7 +4365,7 @@ const createCustomSqlitePersister = (
|
|
|
4335
4365
|
` ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
|
|
4336
4366
|
);
|
|
4337
4367
|
if (d != dataVersion || s != schemaVersion || c != totalChanges) {
|
|
4338
|
-
if (dataVersion
|
|
4368
|
+
if (!isNullish(dataVersion)) {
|
|
4339
4369
|
listener();
|
|
4340
4370
|
}
|
|
4341
4371
|
dataVersion = d;
|
|
@@ -5483,8 +5513,8 @@ const createRemotePersister = (
|
|
|
5483
5513
|
const response = await fetch(loadUrl, {method: 'HEAD'});
|
|
5484
5514
|
const currentEtag = getETag(response);
|
|
5485
5515
|
if (
|
|
5486
|
-
!
|
|
5487
|
-
!
|
|
5516
|
+
!isNull(lastEtag) &&
|
|
5517
|
+
!isNull(currentEtag) &&
|
|
5488
5518
|
currentEtag != lastEtag
|
|
5489
5519
|
) {
|
|
5490
5520
|
lastEtag = currentEtag;
|
|
@@ -5611,7 +5641,8 @@ const getChangesFromYDoc = (yContent, events) => {
|
|
|
5611
5641
|
mapForEach(
|
|
5612
5642
|
keys,
|
|
5613
5643
|
(cellId, {action}) =>
|
|
5614
|
-
(row[cellId] =
|
|
5644
|
+
(row[cellId] =
|
|
5645
|
+
action == DELETE ? void 0 : yRow.get(cellId)),
|
|
5615
5646
|
);
|
|
5616
5647
|
},
|
|
5617
5648
|
() =>
|
|
@@ -5619,7 +5650,7 @@ const getChangesFromYDoc = (yContent, events) => {
|
|
|
5619
5650
|
keys,
|
|
5620
5651
|
(rowId, {action}) =>
|
|
5621
5652
|
(table[rowId] =
|
|
5622
|
-
action == DELETE ?
|
|
5653
|
+
action == DELETE ? void 0 : yTable.get(rowId)?.toJSON()),
|
|
5623
5654
|
),
|
|
5624
5655
|
);
|
|
5625
5656
|
},
|
|
@@ -5628,13 +5659,14 @@ const getChangesFromYDoc = (yContent, events) => {
|
|
|
5628
5659
|
keys,
|
|
5629
5660
|
(tableId, {action}) =>
|
|
5630
5661
|
(tables[tableId] =
|
|
5631
|
-
action == DELETE ?
|
|
5662
|
+
action == DELETE ? void 0 : yTables.get(tableId)?.toJSON()),
|
|
5632
5663
|
),
|
|
5633
5664
|
)
|
|
5634
5665
|
: mapForEach(
|
|
5635
5666
|
keys,
|
|
5636
5667
|
(valueId, {action}) =>
|
|
5637
|
-
(values[valueId] =
|
|
5668
|
+
(values[valueId] =
|
|
5669
|
+
action == DELETE ? void 0 : yValues.get(valueId)),
|
|
5638
5670
|
),
|
|
5639
5671
|
);
|
|
5640
5672
|
return [tables, values, 1];
|
|
@@ -5832,7 +5864,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5832
5864
|
setDefinition(queryId, tableId);
|
|
5833
5865
|
resetPreStores(queryId);
|
|
5834
5866
|
const selectEntries = [];
|
|
5835
|
-
const joinEntries = [[
|
|
5867
|
+
const joinEntries = [[void 0, [tableId, void 0, void 0, [], mapNew()]]];
|
|
5836
5868
|
const wheres = [];
|
|
5837
5869
|
const groupEntries = [];
|
|
5838
5870
|
const havings = [];
|
|
@@ -5848,7 +5880,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5848
5880
|
};
|
|
5849
5881
|
const join = (joinedTableId, arg1, arg2) => {
|
|
5850
5882
|
const fromIntermediateJoinedTableId =
|
|
5851
|
-
isUndefined(arg2) || isFunction(arg1) ?
|
|
5883
|
+
isUndefined(arg2) || isFunction(arg1) ? void 0 : arg1;
|
|
5852
5884
|
const onArg = isUndefined(fromIntermediateJoinedTableId) ? arg1 : arg2;
|
|
5853
5885
|
const joinEntry = [
|
|
5854
5886
|
joinedTableId,
|
|
@@ -5968,7 +6000,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5968
6000
|
groupRow[groupedCellId] = isUndefined(
|
|
5969
6001
|
getCellOrValueType(aggregateValue),
|
|
5970
6002
|
)
|
|
5971
|
-
?
|
|
6003
|
+
? void 0
|
|
5972
6004
|
: aggregateValue;
|
|
5973
6005
|
},
|
|
5974
6006
|
);
|
|
@@ -6097,20 +6129,20 @@ const createQueries = getCreateFunction((store) => {
|
|
|
6097
6129
|
const listenToTable = (rootRowId, tableId2, rowId, joinedTableIds2) => {
|
|
6098
6130
|
const getCell = (cellId) => store.getCell(tableId2, rowId, cellId);
|
|
6099
6131
|
arrayForEach(joinedTableIds2, (remoteAsTableId) => {
|
|
6100
|
-
const [realJoinedTableId, , on, nextJoinedTableIds,
|
|
6132
|
+
const [realJoinedTableId, , on, nextJoinedTableIds, remoteIdPairs] =
|
|
6101
6133
|
mapGet(joins, remoteAsTableId);
|
|
6102
6134
|
const remoteRowId = on?.(getCell, rootRowId);
|
|
6103
6135
|
const [previousRemoteRowId, previousRemoteListenerId] =
|
|
6104
|
-
mapGet(
|
|
6136
|
+
mapGet(remoteIdPairs, rootRowId) ?? [];
|
|
6105
6137
|
if (remoteRowId != previousRemoteRowId) {
|
|
6106
6138
|
if (!isUndefined(previousRemoteListenerId)) {
|
|
6107
6139
|
delStoreListeners(queryId, previousRemoteListenerId);
|
|
6108
6140
|
}
|
|
6109
6141
|
mapSet(
|
|
6110
|
-
|
|
6142
|
+
remoteIdPairs,
|
|
6111
6143
|
rootRowId,
|
|
6112
6144
|
isUndefined(remoteRowId)
|
|
6113
|
-
?
|
|
6145
|
+
? void 0
|
|
6114
6146
|
: [
|
|
6115
6147
|
remoteRowId,
|
|
6116
6148
|
...addStoreListeners(
|
|
@@ -6131,7 +6163,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
6131
6163
|
});
|
|
6132
6164
|
writeSelectRow(rootRowId);
|
|
6133
6165
|
};
|
|
6134
|
-
const {3: joinedTableIds} = mapGet(joins,
|
|
6166
|
+
const {3: joinedTableIds} = mapGet(joins, void 0);
|
|
6135
6167
|
selectJoinWhereStore.transaction(() =>
|
|
6136
6168
|
addStoreListeners(
|
|
6137
6169
|
queryId,
|
|
@@ -6595,7 +6627,7 @@ const createCustomSynchronizer = (
|
|
|
6595
6627
|
ifNotUndefined(
|
|
6596
6628
|
mapGet(pendingRequests, transactionOrRequestId),
|
|
6597
6629
|
([toClientId, handleResponse]) =>
|
|
6598
|
-
|
|
6630
|
+
isNull(toClientId) || toClientId == fromClientId
|
|
6599
6631
|
? handleResponse(body, fromClientId)
|
|
6600
6632
|
: /* istanbul ignore next */
|
|
6601
6633
|
0,
|
|
@@ -6655,7 +6687,7 @@ const createBroadcastChannelSynchronizer = (
|
|
|
6655
6687
|
channel.onmessage = ({
|
|
6656
6688
|
data: [fromClientId, toClientId, requestId, message, body],
|
|
6657
6689
|
}) =>
|
|
6658
|
-
|
|
6690
|
+
isNull(toClientId) || toClientId == clientId
|
|
6659
6691
|
? receive(fromClientId, requestId, message, body)
|
|
6660
6692
|
: 0;
|
|
6661
6693
|
};
|
|
@@ -6680,7 +6712,7 @@ const createLocalSynchronizer = (store, onSend, onReceive, onIgnoredError) => {
|
|
|
6680
6712
|
const clientId = getUniqueId$1();
|
|
6681
6713
|
const send = (toClientId, requestId, message, body) =>
|
|
6682
6714
|
startTimeout(() =>
|
|
6683
|
-
|
|
6715
|
+
isNull(toClientId)
|
|
6684
6716
|
? mapForEach(clients, (otherClientId, receive) =>
|
|
6685
6717
|
otherClientId != clientId
|
|
6686
6718
|
? receive(clientId, requestId, message, body)
|
|
@@ -9525,7 +9557,7 @@ const RelationshipInHtmlRow = ({
|
|
|
9525
9557
|
? localRowId
|
|
9526
9558
|
: tableId === remoteTableId
|
|
9527
9559
|
? remoteRowId
|
|
9528
|
-
:
|
|
9560
|
+
: void 0;
|
|
9529
9561
|
return isUndefined(rowId)
|
|
9530
9562
|
? null
|
|
9531
9563
|
: /* @__PURE__ */ jsx(
|
|
@@ -10268,11 +10300,11 @@ const getNewIdFromSuggestedId = (suggestedId, has) => {
|
|
|
10268
10300
|
};
|
|
10269
10301
|
const ConfirmableActions = ({actions, ...props}) => {
|
|
10270
10302
|
const [confirming, setConfirming] = useState();
|
|
10271
|
-
const handleDone = useCallback(() => setConfirming(
|
|
10303
|
+
const handleDone = useCallback(() => setConfirming(void 0), []);
|
|
10272
10304
|
useEffect(() => {
|
|
10273
|
-
if (confirming
|
|
10305
|
+
if (!isUndefined(confirming)) {
|
|
10274
10306
|
const handleKeyDown = (e) => {
|
|
10275
|
-
if (confirming
|
|
10307
|
+
if (!isUndefined(confirming) && e.key === 'Escape') {
|
|
10276
10308
|
e.preventDefault();
|
|
10277
10309
|
handleDone();
|
|
10278
10310
|
}
|
|
@@ -10281,7 +10313,7 @@ const ConfirmableActions = ({actions, ...props}) => {
|
|
|
10281
10313
|
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
10282
10314
|
}
|
|
10283
10315
|
}, [confirming, handleDone]);
|
|
10284
|
-
if (confirming
|
|
10316
|
+
if (!isUndefined(confirming)) {
|
|
10285
10317
|
const [, , Component] = actions[confirming];
|
|
10286
10318
|
return /* @__PURE__ */ jsxs(Fragment, {
|
|
10287
10319
|
children: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybase",
|
|
3
|
-
"version": "7.0.0
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"author": "jamesgpearce",
|
|
5
5
|
"repository": "github:tinyplex/tinybase",
|
|
6
6
|
"license": "MIT",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
},
|
|
22
22
|
"sideEffects": false,
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@automerge/automerge-repo": "^
|
|
25
|
-
"@cloudflare/workers-types": "^4.
|
|
24
|
+
"@automerge/automerge-repo": "^2.5.1",
|
|
25
|
+
"@cloudflare/workers-types": "^4.20251202.0",
|
|
26
26
|
"@electric-sql/pglite": "^0.3.14",
|
|
27
27
|
"@libsql/client": "^0.15.15",
|
|
28
28
|
"@powersync/common": "^1.43.1",
|
package/persisters/index.js
CHANGED
|
@@ -13,15 +13,19 @@ const strReplace = (str, searchValue, replaceValue) =>
|
|
|
13
13
|
str.replace(searchValue, replaceValue);
|
|
14
14
|
|
|
15
15
|
const promise = Promise;
|
|
16
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
17
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
16
18
|
const GLOBAL = globalThis;
|
|
17
19
|
const THOUSAND = 1e3;
|
|
18
20
|
const startInterval = (callback, sec, immediate) => {
|
|
19
21
|
return setInterval(callback, sec * THOUSAND);
|
|
20
22
|
};
|
|
21
23
|
const stopInterval = clearInterval;
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
|
|
24
|
+
const isNullish = (thing) => thing == null;
|
|
25
|
+
const isUndefined = (thing) => thing === void 0;
|
|
26
|
+
const isNull = (thing) => thing === null;
|
|
27
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
28
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
25
29
|
const isString = (thing) => getTypeOf(thing) == STRING;
|
|
26
30
|
const isArray = (thing) => Array.isArray(thing);
|
|
27
31
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
@@ -61,12 +65,12 @@ const object = Object;
|
|
|
61
65
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
62
66
|
const objEntries = object.entries;
|
|
63
67
|
const isObject = (obj) =>
|
|
64
|
-
!
|
|
65
|
-
|
|
68
|
+
!isNullish(obj) &&
|
|
69
|
+
ifNotNullish(
|
|
66
70
|
getPrototypeOf(obj),
|
|
67
71
|
(objPrototype) =>
|
|
68
72
|
objPrototype == object.prototype ||
|
|
69
|
-
|
|
73
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
70
74
|
|
|
71
75
|
/* istanbul ignore next */
|
|
72
76
|
() => true,
|
|
@@ -95,7 +99,7 @@ const mapForEach = (map, cb) =>
|
|
|
95
99
|
const mapMap = (coll, cb) =>
|
|
96
100
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
97
101
|
const mapSet = (map, key, value) =>
|
|
98
|
-
|
|
102
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
99
103
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
100
104
|
if (!collHas(map, key)) {
|
|
101
105
|
mapSet(map, key, getDefaultValue());
|
|
@@ -206,7 +210,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
206
210
|
const index = size(ids);
|
|
207
211
|
if (index == size(path)) {
|
|
208
212
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
209
|
-
} else if (
|
|
213
|
+
} else if (isNull(path[index])) {
|
|
210
214
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
211
215
|
callWithIds(...ids, id2),
|
|
212
216
|
);
|
|
@@ -579,7 +583,7 @@ const getDefaultedTabularConfigMap = (
|
|
|
579
583
|
0,
|
|
580
584
|
objSize(defaultObj),
|
|
581
585
|
);
|
|
582
|
-
if (!
|
|
586
|
+
if (!isNull(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
|
|
583
587
|
then(id, defaultedConfig[0]);
|
|
584
588
|
mapSet(configMap, id, defaultedConfig);
|
|
585
589
|
}
|
|
@@ -1306,7 +1310,7 @@ const createCustomSqlitePersister = (
|
|
|
1306
1310
|
` ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
|
|
1307
1311
|
);
|
|
1308
1312
|
if (d != dataVersion || s != schemaVersion || c != totalChanges) {
|
|
1309
|
-
if (dataVersion
|
|
1313
|
+
if (!isNullish(dataVersion)) {
|
|
1310
1314
|
listener();
|
|
1311
1315
|
}
|
|
1312
1316
|
dataVersion = d;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
const TINYBASE = 'tinybase';
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
5
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
6
|
+
const isNullish = (thing) => thing == null;
|
|
7
|
+
const isUndefined = (thing) => thing === void 0;
|
|
8
|
+
const isNull = (thing) => thing === null;
|
|
9
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
10
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
7
11
|
const isArray = (thing) => Array.isArray(thing);
|
|
8
12
|
const size = (arrayOrString) => arrayOrString.length;
|
|
9
13
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -29,12 +33,12 @@ const object = Object;
|
|
|
29
33
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
30
34
|
const objEntries = object.entries;
|
|
31
35
|
const isObject = (obj) =>
|
|
32
|
-
!
|
|
33
|
-
|
|
36
|
+
!isNullish(obj) &&
|
|
37
|
+
ifNotNullish(
|
|
34
38
|
getPrototypeOf(obj),
|
|
35
39
|
(objPrototype) =>
|
|
36
40
|
objPrototype == object.prototype ||
|
|
37
|
-
|
|
41
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
38
42
|
|
|
39
43
|
/* istanbul ignore next */
|
|
40
44
|
() => true,
|
|
@@ -70,7 +74,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
70
74
|
const mapNew = (entries) => new Map(entries);
|
|
71
75
|
const mapGet = (map, key) => map?.get(key);
|
|
72
76
|
const mapSet = (map, key, value) =>
|
|
73
|
-
|
|
77
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
74
78
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
75
79
|
if (!collHas(map, key)) {
|
|
76
80
|
mapSet(map, key, getDefaultValue());
|
|
@@ -181,7 +185,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
181
185
|
const index = size(ids);
|
|
182
186
|
if (index == size(path)) {
|
|
183
187
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
184
|
-
} else if (
|
|
188
|
+
} else if (isNull(path[index])) {
|
|
185
189
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
186
190
|
callWithIds(...ids, id2),
|
|
187
191
|
);
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
const TINYBASE = 'tinybase';
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
5
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
6
|
+
const isNullish = (thing) => thing == null;
|
|
7
|
+
const isUndefined = (thing) => thing === void 0;
|
|
8
|
+
const isNull = (thing) => thing === null;
|
|
9
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
10
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
7
11
|
const isArray = (thing) => Array.isArray(thing);
|
|
8
12
|
const size = (arrayOrString) => arrayOrString.length;
|
|
9
13
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -29,12 +33,12 @@ const object = Object;
|
|
|
29
33
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
30
34
|
const objEntries = object.entries;
|
|
31
35
|
const isObject = (obj) =>
|
|
32
|
-
!
|
|
33
|
-
|
|
36
|
+
!isNullish(obj) &&
|
|
37
|
+
ifNotNullish(
|
|
34
38
|
getPrototypeOf(obj),
|
|
35
39
|
(objPrototype) =>
|
|
36
40
|
objPrototype == object.prototype ||
|
|
37
|
-
|
|
41
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
38
42
|
|
|
39
43
|
/* istanbul ignore next */
|
|
40
44
|
() => true,
|
|
@@ -70,7 +74,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
70
74
|
const mapNew = (entries) => new Map(entries);
|
|
71
75
|
const mapGet = (map, key) => map?.get(key);
|
|
72
76
|
const mapSet = (map, key, value) =>
|
|
73
|
-
|
|
77
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
74
78
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
75
79
|
if (!collHas(map, key)) {
|
|
76
80
|
mapSet(map, key, getDefaultValue());
|
|
@@ -181,7 +185,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
181
185
|
const index = size(ids);
|
|
182
186
|
if (index == size(path)) {
|
|
183
187
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
184
|
-
} else if (
|
|
188
|
+
} else if (isNull(path[index])) {
|
|
185
189
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
186
190
|
callWithIds(...ids, id2),
|
|
187
191
|
);
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
const EMPTY_STRING = '';
|
|
2
2
|
const UNDEFINED = '\uFFFC';
|
|
3
3
|
|
|
4
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
5
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
4
6
|
const GLOBAL = globalThis;
|
|
5
7
|
const WINDOW = GLOBAL.window;
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
8
|
+
const isNullish = (thing) => thing == null;
|
|
9
|
+
const isUndefined = (thing) => thing === void 0;
|
|
10
|
+
const isNull = (thing) => thing === null;
|
|
11
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
12
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
9
13
|
const isArray = (thing) => Array.isArray(thing);
|
|
10
14
|
const size = (arrayOrString) => arrayOrString.length;
|
|
11
15
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -29,12 +33,12 @@ const arrayShift = (array) => array.shift();
|
|
|
29
33
|
const object = Object;
|
|
30
34
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
31
35
|
const isObject = (obj) =>
|
|
32
|
-
!
|
|
33
|
-
|
|
36
|
+
!isNullish(obj) &&
|
|
37
|
+
ifNotNullish(
|
|
34
38
|
getPrototypeOf(obj),
|
|
35
39
|
(objPrototype) =>
|
|
36
40
|
objPrototype == object.prototype ||
|
|
37
|
-
|
|
41
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
38
42
|
|
|
39
43
|
/* istanbul ignore next */
|
|
40
44
|
() => true,
|
|
@@ -60,7 +64,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
60
64
|
const mapNew = (entries) => new Map(entries);
|
|
61
65
|
const mapGet = (map, key) => map?.get(key);
|
|
62
66
|
const mapSet = (map, key, value) =>
|
|
63
|
-
|
|
67
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
64
68
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
65
69
|
if (!collHas(map, key)) {
|
|
66
70
|
mapSet(map, key, getDefaultValue());
|
|
@@ -171,7 +175,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
171
175
|
const index = size(ids);
|
|
172
176
|
if (index == size(path)) {
|
|
173
177
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
174
|
-
} else if (
|
|
178
|
+
} else if (isNull(path[index])) {
|
|
175
179
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
176
180
|
callWithIds(...ids, id2),
|
|
177
181
|
);
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
const EMPTY_STRING = '';
|
|
2
2
|
const UNDEFINED = '\uFFFC';
|
|
3
3
|
|
|
4
|
+
const getIfNotFunction = (predicate) => (value, then, otherwise) =>
|
|
5
|
+
predicate(value) ? otherwise?.() : then(value);
|
|
4
6
|
const GLOBAL = globalThis;
|
|
5
7
|
const WINDOW = GLOBAL.window;
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
8
|
+
const isNullish = (thing) => thing == null;
|
|
9
|
+
const isUndefined = (thing) => thing === void 0;
|
|
10
|
+
const isNull = (thing) => thing === null;
|
|
11
|
+
const ifNotNullish = getIfNotFunction(isNullish);
|
|
12
|
+
const ifNotUndefined = getIfNotFunction(isUndefined);
|
|
9
13
|
const isArray = (thing) => Array.isArray(thing);
|
|
10
14
|
const size = (arrayOrString) => arrayOrString.length;
|
|
11
15
|
const test = (regex, subject) => regex.test(subject);
|
|
@@ -29,12 +33,12 @@ const arrayShift = (array) => array.shift();
|
|
|
29
33
|
const object = Object;
|
|
30
34
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
31
35
|
const isObject = (obj) =>
|
|
32
|
-
!
|
|
33
|
-
|
|
36
|
+
!isNullish(obj) &&
|
|
37
|
+
ifNotNullish(
|
|
34
38
|
getPrototypeOf(obj),
|
|
35
39
|
(objPrototype) =>
|
|
36
40
|
objPrototype == object.prototype ||
|
|
37
|
-
|
|
41
|
+
isNullish(getPrototypeOf(objPrototype)),
|
|
38
42
|
|
|
39
43
|
/* istanbul ignore next */
|
|
40
44
|
() => true,
|
|
@@ -60,7 +64,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
|
60
64
|
const mapNew = (entries) => new Map(entries);
|
|
61
65
|
const mapGet = (map, key) => map?.get(key);
|
|
62
66
|
const mapSet = (map, key, value) =>
|
|
63
|
-
|
|
67
|
+
value === void 0 ? (collDel(map, key), map) : map?.set(key, value);
|
|
64
68
|
const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
|
|
65
69
|
if (!collHas(map, key)) {
|
|
66
70
|
mapSet(map, key, getDefaultValue());
|
|
@@ -171,7 +175,7 @@ const getListenerFunctions = (getThing) => {
|
|
|
171
175
|
const index = size(ids);
|
|
172
176
|
if (index == size(path)) {
|
|
173
177
|
listener(thing, ...ids, ...extraArgsGetter(ids));
|
|
174
|
-
} else if (
|
|
178
|
+
} else if (isNull(path[index])) {
|
|
175
179
|
arrayForEach(pathGetters[index]?.(...ids) ?? [], (id2) =>
|
|
176
180
|
callWithIds(...ids, id2),
|
|
177
181
|
);
|