tinybase 8.6.0-beta.0 → 9.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@types/_internal/queries/with-schemas/index.d.ts +1 -2
- package/@types/_internal/ui/with-schemas/index.d.ts +8 -16
- package/@types/mergeable-store/index.d.ts +4 -4
- package/@types/mergeable-store/with-schemas/index.d.ts +41 -17
- package/@types/persisters/index.d.ts +34 -13
- package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +9 -8
- package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +10 -10
- package/@types/persisters/with-schemas/index.d.ts +72 -30
- package/@types/queries/index.d.ts +5 -7
- package/@types/queries/with-schemas/index.d.ts +9 -15
- package/@types/store/index.d.ts +1 -2
- package/@types/store/with-schemas/index.d.ts +19 -29
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +9 -3
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +10 -3
- package/@types/synchronizers/synchronizer-ws-server/index.d.ts +15 -2
- package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +17 -2
- package/@types/synchronizers/synchronizer-ws-server-durable-object/index.d.ts +51 -0
- package/@types/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.d.ts +51 -0
- package/@types/ui-react/with-schemas/index.d.ts +3 -6
- package/@types/ui-react-dom/with-schemas/index.d.ts +6 -12
- package/@types/ui-react-dom-charts/with-schemas/index.d.ts +3 -4
- package/@types/ui-solid/with-schemas/index.d.ts +4 -8
- package/@types/ui-solid-dom/with-schemas/index.d.ts +6 -12
- package/@types/ui-svelte-dom/with-schemas/index.d.ts +6 -12
- package/index.js +67 -25
- package/indexes/index.js +6 -8
- package/indexes/with-schemas/index.js +6 -8
- package/mergeable-store/index.js +46 -6
- package/mergeable-store/with-schemas/index.js +46 -6
- package/metrics/index.js +6 -8
- package/metrics/with-schemas/index.js +6 -8
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-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/ui-solid-inspector/index.js +1 -1
- package/min/ui-solid-inspector/index.js.gz +0 -0
- package/min/ui-solid-inspector/with-schemas/index.js +1 -1
- package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte-inspector/index.js +1 -1
- package/min/ui-svelte-inspector/index.js.gz +0 -0
- package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
- package/min/ui-svelte-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 +364 -155
- package/omni/with-schemas/index.js +364 -155
- package/package.json +8 -8
- package/persisters/index.js +133 -40
- package/persisters/persister-automerge/index.js +4 -3
- package/persisters/persister-automerge/with-schemas/index.js +4 -3
- package/persisters/persister-browser/index.js +4 -3
- package/persisters/persister-browser/with-schemas/index.js +4 -3
- package/persisters/persister-cr-sqlite-wasm/index.js +133 -40
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +133 -40
- package/persisters/persister-durable-object-sql-storage/index.js +275 -113
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +275 -113
- package/persisters/persister-durable-object-storage/index.js +4 -3
- package/persisters/persister-durable-object-storage/with-schemas/index.js +4 -3
- package/persisters/persister-electric-sql/index.js +133 -40
- package/persisters/persister-electric-sql/with-schemas/index.js +133 -40
- package/persisters/persister-expo-sqlite/index.js +133 -40
- package/persisters/persister-expo-sqlite/with-schemas/index.js +133 -40
- package/persisters/persister-file/index.js +4 -3
- package/persisters/persister-file/with-schemas/index.js +4 -3
- package/persisters/persister-indexed-db/index.js +4 -3
- package/persisters/persister-indexed-db/with-schemas/index.js +4 -3
- package/persisters/persister-libsql/index.js +133 -40
- package/persisters/persister-libsql/with-schemas/index.js +133 -40
- package/persisters/persister-partykit-client/index.js +4 -3
- package/persisters/persister-partykit-client/with-schemas/index.js +4 -3
- package/persisters/persister-pglite/index.js +134 -40
- package/persisters/persister-pglite/with-schemas/index.js +134 -40
- package/persisters/persister-postgres/index.js +134 -40
- package/persisters/persister-postgres/with-schemas/index.js +134 -40
- package/persisters/persister-powersync/index.js +186 -120
- package/persisters/persister-powersync/with-schemas/index.js +186 -120
- package/persisters/persister-react-native-mmkv/index.js +4 -3
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +4 -3
- package/persisters/persister-react-native-sqlite/index.js +133 -40
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +133 -40
- package/persisters/persister-remote/index.js +4 -3
- package/persisters/persister-remote/with-schemas/index.js +4 -3
- package/persisters/persister-sqlite-bun/index.js +133 -40
- package/persisters/persister-sqlite-bun/with-schemas/index.js +133 -40
- package/persisters/persister-sqlite-wasm/index.js +133 -40
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +133 -40
- package/persisters/persister-sqlite3/index.js +133 -40
- package/persisters/persister-sqlite3/with-schemas/index.js +133 -40
- package/persisters/persister-yjs/index.js +4 -3
- package/persisters/persister-yjs/with-schemas/index.js +4 -3
- package/persisters/with-schemas/index.js +133 -40
- package/queries/index.js +21 -19
- package/queries/with-schemas/index.js +21 -19
- package/readme.md +14 -14
- package/relationships/index.js +6 -8
- package/relationships/with-schemas/index.js +6 -8
- package/releases.md +72 -57
- package/store/index.js +33 -2
- package/store/with-schemas/index.js +33 -2
- package/synchronizers/index.js +4 -3
- package/synchronizers/synchronizer-broadcast-channel/index.js +4 -3
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +4 -3
- package/synchronizers/synchronizer-local/index.js +4 -3
- package/synchronizers/synchronizer-local/with-schemas/index.js +4 -3
- package/synchronizers/synchronizer-ws-client/index.js +120 -45
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +120 -45
- package/synchronizers/synchronizer-ws-server/index.js +116 -36
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +116 -36
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +125 -41
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +125 -41
- package/synchronizers/with-schemas/index.js +4 -3
- package/ui-react-inspector/index.js +36 -5
- package/ui-react-inspector/with-schemas/index.js +36 -5
- package/ui-solid-inspector/index.js +36 -5
- package/ui-solid-inspector/with-schemas/index.js +36 -5
- package/ui-svelte/index.js +1 -1
- package/ui-svelte/with-schemas/index.js +1 -1
- package/ui-svelte-dom/index.js +2 -2
- package/ui-svelte-dom/with-schemas/index.js +2 -2
- package/ui-svelte-inspector/index.js +38 -7
- package/ui-svelte-inspector/with-schemas/index.js +38 -7
- package/with-schemas/index.js +67 -25
|
@@ -48,6 +48,7 @@ const tryCatch = async (action, then1, then2) => {
|
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
50
|
|
|
51
|
+
const arrayHas = (array, value) => array.includes(value);
|
|
51
52
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
52
53
|
const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
|
|
53
54
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -57,14 +58,6 @@ const arrayClear = (array, to) => array.splice(0, to);
|
|
|
57
58
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
58
59
|
const arrayShift = (array) => array.shift();
|
|
59
60
|
|
|
60
|
-
const collSize = (coll) => coll?.size ?? 0;
|
|
61
|
-
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
62
|
-
const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
63
|
-
const collValues = (coll) => [...(coll?.values() ?? [])];
|
|
64
|
-
const collClear = (coll) => coll.clear();
|
|
65
|
-
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
66
|
-
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
67
|
-
|
|
68
61
|
const object = Object;
|
|
69
62
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
70
63
|
const objEntries = object.entries;
|
|
@@ -96,14 +89,6 @@ const objValues = (obj) => object.values(obj);
|
|
|
96
89
|
const objSize = (obj) => size(objIds(obj));
|
|
97
90
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
98
91
|
|
|
99
|
-
const setNew = (entryOrEntries) =>
|
|
100
|
-
new Set(
|
|
101
|
-
isArray(entryOrEntries) || isUndefined(entryOrEntries)
|
|
102
|
-
? entryOrEntries
|
|
103
|
-
: [entryOrEntries],
|
|
104
|
-
);
|
|
105
|
-
const setAdd = (set, value) => set?.add(value);
|
|
106
|
-
|
|
107
92
|
const SINGLE_ROW_ID = '_';
|
|
108
93
|
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
109
94
|
const SELECT = 'SELECT';
|
|
@@ -122,7 +107,6 @@ const SCHEMA_VERSION = 'schema_version';
|
|
|
122
107
|
const PRAGMA_TABLE = 'pragma_table_';
|
|
123
108
|
const CREATE = 'CREATE ';
|
|
124
109
|
const CREATE_TABLE = CREATE + TABLE;
|
|
125
|
-
const OR_REPLACE = 'OR REPLACE ';
|
|
126
110
|
const TABLE_NAME_PLACEHOLDER = '$tableName';
|
|
127
111
|
const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
128
112
|
onSqlCommand
|
|
@@ -147,6 +131,14 @@ const getWhereCondition = (tableName, condition = TRUE) =>
|
|
|
147
131
|
WHERE +
|
|
148
132
|
`(${strReplace(condition, TABLE_NAME_PLACEHOLDER, escapeId(tableName))})`;
|
|
149
133
|
|
|
134
|
+
const collSize = (coll) => coll?.size ?? 0;
|
|
135
|
+
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
136
|
+
const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
137
|
+
const collValues = (coll) => [...(coll?.values() ?? [])];
|
|
138
|
+
const collClear = (coll) => coll.clear();
|
|
139
|
+
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
140
|
+
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
141
|
+
|
|
150
142
|
const map = Map;
|
|
151
143
|
const mapNew = (entries) => new map(entries);
|
|
152
144
|
const mapGet = (map2, key) => map2?.get(key);
|
|
@@ -186,6 +178,14 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
|
186
178
|
},
|
|
187
179
|
);
|
|
188
180
|
|
|
181
|
+
const setNew = (entryOrEntries) =>
|
|
182
|
+
new Set(
|
|
183
|
+
isArray(entryOrEntries) || isUndefined(entryOrEntries)
|
|
184
|
+
? entryOrEntries
|
|
185
|
+
: [entryOrEntries],
|
|
186
|
+
);
|
|
187
|
+
const setAdd = (set, value) => set?.add(value);
|
|
188
|
+
|
|
189
189
|
const COLUMN_NAME = 'ColumnName';
|
|
190
190
|
const STORE = 'store';
|
|
191
191
|
const JSON$1 = 'json';
|
|
@@ -208,6 +208,8 @@ const DEFAULT_TABULAR_VALUES_CONFIG = {
|
|
|
208
208
|
save: 0,
|
|
209
209
|
[TABLE_NAME]: TINYBASE + '_values',
|
|
210
210
|
};
|
|
211
|
+
const getValuesIn = (config) => (isArray(config) ? config : void 0);
|
|
212
|
+
const hasValues = (config) => isTrue(config) || isArray(config);
|
|
211
213
|
const getDefaultedConfig = (configOrStoreTableName) =>
|
|
212
214
|
objMerge(
|
|
213
215
|
DEFAULT_CONFIG,
|
|
@@ -258,11 +260,15 @@ const getConfigStructures = (configOrStoreTableName) => {
|
|
|
258
260
|
];
|
|
259
261
|
}
|
|
260
262
|
const {tables: {load = {}, save = {}} = {}, values = {}} = config;
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
const valuesConfigObj = objMerge(DEFAULT_TABULAR_VALUES_CONFIG, values);
|
|
264
|
+
const {load: valuesLoad, save: valuesSave} = valuesConfigObj;
|
|
265
|
+
const valuesConfig = [
|
|
266
|
+
hasValues(valuesLoad),
|
|
267
|
+
hasValues(valuesSave),
|
|
268
|
+
valuesConfigObj[TABLE_NAME],
|
|
269
|
+
getValuesIn(valuesLoad),
|
|
270
|
+
getValuesIn(valuesSave),
|
|
271
|
+
];
|
|
266
272
|
const valuesTable = valuesConfig[2];
|
|
267
273
|
const managedTableNames = setNew(valuesTable);
|
|
268
274
|
const excludedTableNames = setNew(valuesTable);
|
|
@@ -506,13 +512,14 @@ const createCustomPersister = (
|
|
|
506
512
|
const content = await getPersisted();
|
|
507
513
|
if (isArray(content)) {
|
|
508
514
|
setContentOrChanges(content);
|
|
509
|
-
} else if (initialContent) {
|
|
515
|
+
} else if (isUndefined(content) && initialContent) {
|
|
510
516
|
setDefaultContent(initialContent);
|
|
511
|
-
} else {
|
|
517
|
+
} else if (!isUndefined(content)) {
|
|
512
518
|
errorNew(`Content is not an array: ${content}`);
|
|
513
519
|
}
|
|
514
520
|
},
|
|
515
|
-
() => {
|
|
521
|
+
(error) => {
|
|
522
|
+
onIgnoredError?.(error);
|
|
516
523
|
if (initialContent) {
|
|
517
524
|
setDefaultContent(initialContent);
|
|
518
525
|
}
|
|
@@ -671,8 +678,18 @@ const getCommandFunctions = (
|
|
|
671
678
|
({tn, cn}) => setAdd(mapEnsure(schemaMap, tn, setNew), cn),
|
|
672
679
|
);
|
|
673
680
|
};
|
|
674
|
-
const loadTable = async (
|
|
675
|
-
|
|
681
|
+
const loadTable = async (
|
|
682
|
+
tableName,
|
|
683
|
+
rowIdColumnName,
|
|
684
|
+
condition,
|
|
685
|
+
contentSubIds,
|
|
686
|
+
) => {
|
|
687
|
+
const contentSubIdSet = isUndefined(contentSubIds)
|
|
688
|
+
? void 0
|
|
689
|
+
: setNew(contentSubIds);
|
|
690
|
+
const includeContentSubId = (contentSubId) =>
|
|
691
|
+
isUndefined(contentSubIdSet) || collHas(contentSubIdSet, contentSubId);
|
|
692
|
+
return canSelect(tableName, rowIdColumnName)
|
|
676
693
|
? objNew(
|
|
677
694
|
arrayFilter(
|
|
678
695
|
arrayMap(
|
|
@@ -681,17 +698,35 @@ const getCommandFunctions = (
|
|
|
681
698
|
escapeId(tableName) +
|
|
682
699
|
getWhereCondition(tableName, condition),
|
|
683
700
|
),
|
|
684
|
-
(row) =>
|
|
685
|
-
row[rowIdColumnName]
|
|
686
|
-
decode
|
|
701
|
+
(row) => {
|
|
702
|
+
const rowId = row[rowIdColumnName];
|
|
703
|
+
const rowContent = decode
|
|
687
704
|
? objMap(objDel(row, rowIdColumnName), decode)
|
|
688
|
-
: objDel(row, rowIdColumnName)
|
|
689
|
-
|
|
705
|
+
: objDel(row, rowIdColumnName);
|
|
706
|
+
return [
|
|
707
|
+
rowId,
|
|
708
|
+
isUndefined(contentSubIdSet)
|
|
709
|
+
? rowContent
|
|
710
|
+
: objNew(
|
|
711
|
+
arrayFilter(
|
|
712
|
+
objToArray(
|
|
713
|
+
rowContent,
|
|
714
|
+
(cellOrValue, contentSubId) => [
|
|
715
|
+
contentSubId,
|
|
716
|
+
cellOrValue,
|
|
717
|
+
],
|
|
718
|
+
),
|
|
719
|
+
([contentSubId]) => includeContentSubId(contentSubId),
|
|
720
|
+
),
|
|
721
|
+
),
|
|
722
|
+
];
|
|
723
|
+
},
|
|
690
724
|
),
|
|
691
725
|
(entry) => !isUndefined(entry[0]) && !objIsEmpty(entry[1]),
|
|
692
726
|
),
|
|
693
727
|
)
|
|
694
728
|
: {};
|
|
729
|
+
};
|
|
695
730
|
const saveTable = async (
|
|
696
731
|
tableName,
|
|
697
732
|
rowIdColumnName,
|
|
@@ -700,15 +735,23 @@ const getCommandFunctions = (
|
|
|
700
735
|
deleteEmptyTable,
|
|
701
736
|
partial = false,
|
|
702
737
|
condition = TRUE,
|
|
738
|
+
contentSubIds,
|
|
703
739
|
) => {
|
|
740
|
+
const contentSubIdSet = isUndefined(contentSubIds)
|
|
741
|
+
? void 0
|
|
742
|
+
: setNew(contentSubIds);
|
|
743
|
+
const includeContentSubId = (contentSubId) =>
|
|
744
|
+
isUndefined(contentSubIdSet) || collHas(contentSubIdSet, contentSubId);
|
|
704
745
|
const settingColumnNameSet = setNew();
|
|
705
746
|
objMap(content ?? {}, (contentRow) =>
|
|
706
|
-
arrayMap(
|
|
707
|
-
|
|
747
|
+
arrayMap(
|
|
748
|
+
arrayFilter(objIds(contentRow ?? {}), includeContentSubId),
|
|
749
|
+
(cellOrValueId) => setAdd(settingColumnNameSet, cellOrValueId),
|
|
708
750
|
),
|
|
709
751
|
);
|
|
710
752
|
const settingColumnNames = collValues(settingColumnNameSet);
|
|
711
753
|
if (
|
|
754
|
+
isUndefined(contentSubIdSet) &&
|
|
712
755
|
!partial &&
|
|
713
756
|
deleteEmptyTable &&
|
|
714
757
|
condition == TRUE &&
|
|
@@ -720,7 +763,13 @@ const getCommandFunctions = (
|
|
|
720
763
|
return;
|
|
721
764
|
}
|
|
722
765
|
const currentColumnNames = mapGet(schemaMap, tableName);
|
|
723
|
-
const unaccountedColumnNames = setNew(
|
|
766
|
+
const unaccountedColumnNames = setNew(
|
|
767
|
+
arrayFilter(
|
|
768
|
+
collValues(currentColumnNames),
|
|
769
|
+
(columnName) =>
|
|
770
|
+
columnName == rowIdColumnName || includeContentSubId(columnName),
|
|
771
|
+
),
|
|
772
|
+
);
|
|
724
773
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
725
774
|
if (!collHas(schemaMap, tableName)) {
|
|
726
775
|
await databaseExecuteCommand(
|
|
@@ -786,11 +835,13 @@ const getCommandFunctions = (
|
|
|
786
835
|
]);
|
|
787
836
|
if (partial) {
|
|
788
837
|
if (isUndefined(content)) {
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
838
|
+
if (isUndefined(contentSubIdSet)) {
|
|
839
|
+
await databaseExecuteCommand(
|
|
840
|
+
DELETE_FROM +
|
|
841
|
+
escapeId(tableName) +
|
|
842
|
+
getWhereCondition(tableName, condition),
|
|
843
|
+
);
|
|
844
|
+
}
|
|
794
845
|
} else {
|
|
795
846
|
await promiseAll(
|
|
796
847
|
objToArray(content, async (row, rowId) => {
|
|
@@ -803,18 +854,24 @@ const getCommandFunctions = (
|
|
|
803
854
|
[rowId],
|
|
804
855
|
);
|
|
805
856
|
} else if (!arrayIsEmpty(settingColumnNames)) {
|
|
806
|
-
|
|
807
|
-
databaseExecuteCommand,
|
|
808
|
-
tableName,
|
|
809
|
-
rowIdColumnName,
|
|
857
|
+
const changingColumnNames = arrayFilter(
|
|
810
858
|
objIds(row),
|
|
811
|
-
|
|
812
|
-
[rowId]: encode
|
|
813
|
-
? arrayMap(objValues(row), encode)
|
|
814
|
-
: objValues(row),
|
|
815
|
-
},
|
|
816
|
-
currentColumnNames,
|
|
859
|
+
includeContentSubId,
|
|
817
860
|
);
|
|
861
|
+
if (!arrayIsEmpty(changingColumnNames)) {
|
|
862
|
+
await upsert(
|
|
863
|
+
databaseExecuteCommand,
|
|
864
|
+
tableName,
|
|
865
|
+
rowIdColumnName,
|
|
866
|
+
changingColumnNames,
|
|
867
|
+
{
|
|
868
|
+
[rowId]: arrayMap(changingColumnNames, (cellId) =>
|
|
869
|
+
encode ? encode(row[cellId]) : row[cellId],
|
|
870
|
+
),
|
|
871
|
+
},
|
|
872
|
+
currentColumnNames,
|
|
873
|
+
);
|
|
874
|
+
}
|
|
818
875
|
}
|
|
819
876
|
}),
|
|
820
877
|
);
|
|
@@ -823,7 +880,9 @@ const getCommandFunctions = (
|
|
|
823
880
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
824
881
|
const changingColumnNames = arrayFilter(
|
|
825
882
|
collValues(mapGet(schemaMap, tableName)),
|
|
826
|
-
(changingColumnName) =>
|
|
883
|
+
(changingColumnName) =>
|
|
884
|
+
changingColumnName != rowIdColumnName &&
|
|
885
|
+
includeContentSubId(changingColumnName),
|
|
827
886
|
);
|
|
828
887
|
const rows = {};
|
|
829
888
|
const deleteRowIds = [];
|
|
@@ -839,6 +898,7 @@ const getCommandFunctions = (
|
|
|
839
898
|
rowIdColumnName,
|
|
840
899
|
changingColumnNames,
|
|
841
900
|
rows,
|
|
901
|
+
currentColumnNames,
|
|
842
902
|
);
|
|
843
903
|
await databaseExecuteCommand(
|
|
844
904
|
DELETE_FROM +
|
|
@@ -847,7 +907,10 @@ const getCommandFunctions = (
|
|
|
847
907
|
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
848
908
|
deleteRowIds,
|
|
849
909
|
);
|
|
850
|
-
} else if (
|
|
910
|
+
} else if (
|
|
911
|
+
isUndefined(contentSubIdSet) &&
|
|
912
|
+
collHas(schemaMap, tableName)
|
|
913
|
+
) {
|
|
851
914
|
await databaseExecuteCommand(
|
|
852
915
|
DELETE_FROM +
|
|
853
916
|
escapeId(tableName) +
|
|
@@ -986,7 +1049,13 @@ const createTabularPersister = (
|
|
|
986
1049
|
[
|
|
987
1050
|
tablesLoadConfig,
|
|
988
1051
|
tablesSaveConfig,
|
|
989
|
-
[
|
|
1052
|
+
[
|
|
1053
|
+
valuesLoad,
|
|
1054
|
+
valuesSave,
|
|
1055
|
+
valuesTableName,
|
|
1056
|
+
valuesLoadValueIds,
|
|
1057
|
+
valuesSaveValueIds,
|
|
1058
|
+
],
|
|
990
1059
|
],
|
|
991
1060
|
managedTableNames,
|
|
992
1061
|
querySchema,
|
|
@@ -1036,15 +1105,33 @@ const createTabularPersister = (
|
|
|
1036
1105
|
},
|
|
1037
1106
|
),
|
|
1038
1107
|
);
|
|
1108
|
+
const getValuesSubset = (values, valueIds, partial) =>
|
|
1109
|
+
objNew(
|
|
1110
|
+
partial == true
|
|
1111
|
+
? arrayFilter(
|
|
1112
|
+
objToArray(values, (value, valueId) => [valueId, value]),
|
|
1113
|
+
([valueId]) => arrayHas(valueIds, valueId),
|
|
1114
|
+
)
|
|
1115
|
+
: arrayFilter(
|
|
1116
|
+
arrayMap(valueIds, (valueId) => [valueId, values[valueId]]),
|
|
1117
|
+
([, value]) => !isUndefined(value),
|
|
1118
|
+
),
|
|
1119
|
+
);
|
|
1039
1120
|
const saveValues = async (values, partial) =>
|
|
1040
1121
|
valuesSave
|
|
1041
1122
|
? await saveTable(
|
|
1042
1123
|
valuesTableName,
|
|
1043
1124
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
1044
|
-
{
|
|
1125
|
+
{
|
|
1126
|
+
[SINGLE_ROW_ID]: isUndefined(valuesSaveValueIds)
|
|
1127
|
+
? values
|
|
1128
|
+
: getValuesSubset(values, valuesSaveValueIds, partial),
|
|
1129
|
+
},
|
|
1045
1130
|
true,
|
|
1046
1131
|
true,
|
|
1047
1132
|
partial,
|
|
1133
|
+
void 0,
|
|
1134
|
+
valuesSaveValueIds,
|
|
1048
1135
|
)
|
|
1049
1136
|
: null;
|
|
1050
1137
|
const loadTables = async () =>
|
|
@@ -1064,9 +1151,14 @@ const createTabularPersister = (
|
|
|
1064
1151
|
);
|
|
1065
1152
|
const loadValues = async () =>
|
|
1066
1153
|
valuesLoad
|
|
1067
|
-
? (
|
|
1068
|
-
|
|
1069
|
-
|
|
1154
|
+
? (
|
|
1155
|
+
await loadTable(
|
|
1156
|
+
valuesTableName,
|
|
1157
|
+
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
1158
|
+
void 0,
|
|
1159
|
+
valuesLoadValueIds,
|
|
1160
|
+
)
|
|
1161
|
+
)[SINGLE_ROW_ID]
|
|
1070
1162
|
: {};
|
|
1071
1163
|
const getPersisted = () =>
|
|
1072
1164
|
transaction(async () => {
|
|
@@ -1241,83 +1333,57 @@ const createPowerSyncPersister = (
|
|
|
1241
1333
|
// StoreOnly,
|
|
1242
1334
|
powerSync,
|
|
1243
1335
|
'getPowerSync',
|
|
1244
|
-
|
|
1336
|
+
powerSyncUpdateThenInsert,
|
|
1245
1337
|
);
|
|
1246
1338
|
};
|
|
1247
|
-
const
|
|
1339
|
+
const powerSyncUpdateThenInsert = async (
|
|
1248
1340
|
executeCommand,
|
|
1249
1341
|
tableName,
|
|
1250
1342
|
rowIdColumnName,
|
|
1251
1343
|
changingColumnNames,
|
|
1252
1344
|
rows,
|
|
1253
|
-
currentColumnNames,
|
|
1254
1345
|
) => {
|
|
1255
|
-
const
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
const ids = objIds(rows);
|
|
1267
|
-
const unchangingData = objNew(
|
|
1268
|
-
arrayMap(
|
|
1346
|
+
const assignments = arrayJoin(
|
|
1347
|
+
arrayMap(
|
|
1348
|
+
changingColumnNames,
|
|
1349
|
+
(columnName, index) => escapeId(columnName) + '=$' + (index + 1),
|
|
1350
|
+
),
|
|
1351
|
+
COMMA,
|
|
1352
|
+
);
|
|
1353
|
+
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
1354
|
+
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
1355
|
+
if (
|
|
1356
|
+
arrayIsEmpty(
|
|
1269
1357
|
await executeCommand(
|
|
1270
|
-
|
|
1271
|
-
escapeColumnNames(rowIdColumnName, ...unchangingColumnNames) +
|
|
1272
|
-
FROM +
|
|
1358
|
+
UPDATE +
|
|
1273
1359
|
escapeId(tableName) +
|
|
1360
|
+
' SET' +
|
|
1361
|
+
assignments +
|
|
1362
|
+
' ' +
|
|
1274
1363
|
WHERE +
|
|
1275
1364
|
escapeId(rowIdColumnName) +
|
|
1276
|
-
'
|
|
1277
|
-
|
|
1278
|
-
'
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
(unchangingRow) => [unchangingRow[rowIdColumnName], unchangingRow],
|
|
1282
|
-
),
|
|
1283
|
-
);
|
|
1284
|
-
arrayForEach(ids, (id) =>
|
|
1285
|
-
arrayPush(
|
|
1286
|
-
rows[id],
|
|
1287
|
-
...arrayMap(
|
|
1288
|
-
unchangingColumnNames,
|
|
1289
|
-
(unchangingColumnName) =>
|
|
1290
|
-
unchangingData?.[id]?.[unchangingColumnName] ?? null,
|
|
1365
|
+
'=$' +
|
|
1366
|
+
(row.length + 1) +
|
|
1367
|
+
' RETURNING' +
|
|
1368
|
+
escapeId(rowIdColumnName),
|
|
1369
|
+
[...rowParams, id],
|
|
1291
1370
|
),
|
|
1292
|
-
)
|
|
1293
|
-
)
|
|
1371
|
+
)
|
|
1372
|
+
) {
|
|
1373
|
+
const offset = [1];
|
|
1374
|
+
await executeCommand(
|
|
1375
|
+
INSERT +
|
|
1376
|
+
' INTO' +
|
|
1377
|
+
escapeId(tableName) +
|
|
1378
|
+
'(' +
|
|
1379
|
+
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
1380
|
+
')VALUES(' +
|
|
1381
|
+
getPlaceholders([id, ...row], offset) +
|
|
1382
|
+
')',
|
|
1383
|
+
[id, ...rowParams],
|
|
1384
|
+
);
|
|
1385
|
+
}
|
|
1294
1386
|
}
|
|
1295
|
-
await executeCommand(
|
|
1296
|
-
INSERT +
|
|
1297
|
-
' ' +
|
|
1298
|
-
OR_REPLACE +
|
|
1299
|
-
'INTO' +
|
|
1300
|
-
escapeId(tableName) +
|
|
1301
|
-
'(' +
|
|
1302
|
-
escapeColumnNames(
|
|
1303
|
-
rowIdColumnName,
|
|
1304
|
-
...changingColumnNames,
|
|
1305
|
-
...unchangingColumnNames,
|
|
1306
|
-
) +
|
|
1307
|
-
')VALUES' +
|
|
1308
|
-
arrayJoin(
|
|
1309
|
-
objToArray(
|
|
1310
|
-
rows,
|
|
1311
|
-
(row) =>
|
|
1312
|
-
'($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
|
|
1313
|
-
),
|
|
1314
|
-
COMMA,
|
|
1315
|
-
),
|
|
1316
|
-
objToArray(rows, (row, id) => [
|
|
1317
|
-
id,
|
|
1318
|
-
...arrayMap(row, (value) => value ?? null),
|
|
1319
|
-
]).flat(),
|
|
1320
|
-
);
|
|
1321
1387
|
};
|
|
1322
1388
|
|
|
1323
1389
|
export {createPowerSyncPersister};
|