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
|
@@ -51,6 +51,7 @@ const tryCatch = async (action, then1, then2) => {
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
+
const arrayHas = (array, value) => array.includes(value);
|
|
54
55
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
55
56
|
const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
|
|
56
57
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -60,6 +61,14 @@ const arrayClear = (array, to) => array.splice(0, to);
|
|
|
60
61
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
61
62
|
const arrayShift = (array) => array.shift();
|
|
62
63
|
|
|
64
|
+
const collSize = (coll) => coll?.size ?? 0;
|
|
65
|
+
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
66
|
+
const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
|
|
67
|
+
const collValues = (coll) => [...(coll?.values() ?? [])];
|
|
68
|
+
const collClear = (coll) => coll.clear();
|
|
69
|
+
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
70
|
+
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
71
|
+
|
|
63
72
|
const object = Object;
|
|
64
73
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
65
74
|
const objEntries = object.entries;
|
|
@@ -115,13 +124,13 @@ const replaceUndefinedString = (obj) =>
|
|
|
115
124
|
? objMap(obj, replaceUndefinedString)
|
|
116
125
|
: obj;
|
|
117
126
|
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const
|
|
127
|
+
const setNew = (entryOrEntries) =>
|
|
128
|
+
new Set(
|
|
129
|
+
isArray(entryOrEntries) || isUndefined(entryOrEntries)
|
|
130
|
+
? entryOrEntries
|
|
131
|
+
: [entryOrEntries],
|
|
132
|
+
);
|
|
133
|
+
const setAdd = (set, value) => set?.add(value);
|
|
125
134
|
|
|
126
135
|
const map = Map;
|
|
127
136
|
const mapNew = (entries) => new map(entries);
|
|
@@ -184,14 +193,6 @@ const getPoolFunctions = () => {
|
|
|
184
193
|
];
|
|
185
194
|
};
|
|
186
195
|
|
|
187
|
-
const setNew = (entryOrEntries) =>
|
|
188
|
-
new Set(
|
|
189
|
-
isArray(entryOrEntries) || isUndefined(entryOrEntries)
|
|
190
|
-
? entryOrEntries
|
|
191
|
-
: [entryOrEntries],
|
|
192
|
-
);
|
|
193
|
-
const setAdd = (set, value) => set?.add(value);
|
|
194
|
-
|
|
195
196
|
const getWildcardedLeaves = (deepIdSet, path = [EMPTY_STRING]) => {
|
|
196
197
|
const leaves = [];
|
|
197
198
|
const deep = (node, p) =>
|
|
@@ -364,13 +365,14 @@ const createCustomPersister = (
|
|
|
364
365
|
const content = await getPersisted();
|
|
365
366
|
if (isArray(content)) {
|
|
366
367
|
setContentOrChanges(content);
|
|
367
|
-
} else if (initialContent) {
|
|
368
|
+
} else if (isUndefined(content) && initialContent) {
|
|
368
369
|
setDefaultContent(initialContent);
|
|
369
|
-
} else {
|
|
370
|
+
} else if (!isUndefined(content)) {
|
|
370
371
|
errorNew(`Content is not an array: ${content}`);
|
|
371
372
|
}
|
|
372
373
|
},
|
|
373
|
-
() => {
|
|
374
|
+
(error) => {
|
|
375
|
+
onIgnoredError?.(error);
|
|
374
376
|
if (initialContent) {
|
|
375
377
|
setDefaultContent(initialContent);
|
|
376
378
|
}
|
|
@@ -573,6 +575,8 @@ const DEFAULT_TABULAR_VALUES_CONFIG = {
|
|
|
573
575
|
save: 0,
|
|
574
576
|
[TABLE_NAME]: TINYBASE + '_values',
|
|
575
577
|
};
|
|
578
|
+
const getValuesIn = (config) => (isArray(config) ? config : void 0);
|
|
579
|
+
const hasValues = (config) => isTrue(config) || isArray(config);
|
|
576
580
|
const getDefaultedConfig = (configOrStoreTableName) =>
|
|
577
581
|
objMerge(
|
|
578
582
|
DEFAULT_CONFIG,
|
|
@@ -623,11 +627,15 @@ const getConfigStructures = (configOrStoreTableName) => {
|
|
|
623
627
|
];
|
|
624
628
|
}
|
|
625
629
|
const {tables: {load = {}, save = {}} = {}, values = {}} = config;
|
|
626
|
-
const
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
630
|
+
const valuesConfigObj = objMerge(DEFAULT_TABULAR_VALUES_CONFIG, values);
|
|
631
|
+
const {load: valuesLoad, save: valuesSave} = valuesConfigObj;
|
|
632
|
+
const valuesConfig = [
|
|
633
|
+
hasValues(valuesLoad),
|
|
634
|
+
hasValues(valuesSave),
|
|
635
|
+
valuesConfigObj[TABLE_NAME],
|
|
636
|
+
getValuesIn(valuesLoad),
|
|
637
|
+
getValuesIn(valuesSave),
|
|
638
|
+
];
|
|
631
639
|
const valuesTable = valuesConfig[2];
|
|
632
640
|
const managedTableNames = setNew(valuesTable);
|
|
633
641
|
const excludedTableNames = setNew(valuesTable);
|
|
@@ -689,8 +697,18 @@ const getCommandFunctions = (
|
|
|
689
697
|
({tn, cn}) => setAdd(mapEnsure(schemaMap, tn, setNew), cn),
|
|
690
698
|
);
|
|
691
699
|
};
|
|
692
|
-
const loadTable = async (
|
|
693
|
-
|
|
700
|
+
const loadTable = async (
|
|
701
|
+
tableName,
|
|
702
|
+
rowIdColumnName,
|
|
703
|
+
condition,
|
|
704
|
+
contentSubIds,
|
|
705
|
+
) => {
|
|
706
|
+
const contentSubIdSet = isUndefined(contentSubIds)
|
|
707
|
+
? void 0
|
|
708
|
+
: setNew(contentSubIds);
|
|
709
|
+
const includeContentSubId = (contentSubId) =>
|
|
710
|
+
isUndefined(contentSubIdSet) || collHas(contentSubIdSet, contentSubId);
|
|
711
|
+
return canSelect(tableName, rowIdColumnName)
|
|
694
712
|
? objNew(
|
|
695
713
|
arrayFilter(
|
|
696
714
|
arrayMap(
|
|
@@ -699,17 +717,35 @@ const getCommandFunctions = (
|
|
|
699
717
|
escapeId(tableName) +
|
|
700
718
|
getWhereCondition(tableName, condition),
|
|
701
719
|
),
|
|
702
|
-
(row) =>
|
|
703
|
-
row[rowIdColumnName]
|
|
704
|
-
decode
|
|
720
|
+
(row) => {
|
|
721
|
+
const rowId = row[rowIdColumnName];
|
|
722
|
+
const rowContent = decode
|
|
705
723
|
? objMap(objDel(row, rowIdColumnName), decode)
|
|
706
|
-
: objDel(row, rowIdColumnName)
|
|
707
|
-
|
|
724
|
+
: objDel(row, rowIdColumnName);
|
|
725
|
+
return [
|
|
726
|
+
rowId,
|
|
727
|
+
isUndefined(contentSubIdSet)
|
|
728
|
+
? rowContent
|
|
729
|
+
: objNew(
|
|
730
|
+
arrayFilter(
|
|
731
|
+
objToArray(
|
|
732
|
+
rowContent,
|
|
733
|
+
(cellOrValue, contentSubId) => [
|
|
734
|
+
contentSubId,
|
|
735
|
+
cellOrValue,
|
|
736
|
+
],
|
|
737
|
+
),
|
|
738
|
+
([contentSubId]) => includeContentSubId(contentSubId),
|
|
739
|
+
),
|
|
740
|
+
),
|
|
741
|
+
];
|
|
742
|
+
},
|
|
708
743
|
),
|
|
709
744
|
(entry) => !isUndefined(entry[0]) && !objIsEmpty(entry[1]),
|
|
710
745
|
),
|
|
711
746
|
)
|
|
712
747
|
: {};
|
|
748
|
+
};
|
|
713
749
|
const saveTable = async (
|
|
714
750
|
tableName,
|
|
715
751
|
rowIdColumnName,
|
|
@@ -718,15 +754,23 @@ const getCommandFunctions = (
|
|
|
718
754
|
deleteEmptyTable,
|
|
719
755
|
partial = false,
|
|
720
756
|
condition = TRUE,
|
|
757
|
+
contentSubIds,
|
|
721
758
|
) => {
|
|
759
|
+
const contentSubIdSet = isUndefined(contentSubIds)
|
|
760
|
+
? void 0
|
|
761
|
+
: setNew(contentSubIds);
|
|
762
|
+
const includeContentSubId = (contentSubId) =>
|
|
763
|
+
isUndefined(contentSubIdSet) || collHas(contentSubIdSet, contentSubId);
|
|
722
764
|
const settingColumnNameSet = setNew();
|
|
723
765
|
objMap(content ?? {}, (contentRow) =>
|
|
724
|
-
arrayMap(
|
|
725
|
-
|
|
766
|
+
arrayMap(
|
|
767
|
+
arrayFilter(objIds(contentRow ?? {}), includeContentSubId),
|
|
768
|
+
(cellOrValueId) => setAdd(settingColumnNameSet, cellOrValueId),
|
|
726
769
|
),
|
|
727
770
|
);
|
|
728
771
|
const settingColumnNames = collValues(settingColumnNameSet);
|
|
729
772
|
if (
|
|
773
|
+
isUndefined(contentSubIdSet) &&
|
|
730
774
|
!partial &&
|
|
731
775
|
deleteEmptyTable &&
|
|
732
776
|
condition == TRUE &&
|
|
@@ -738,7 +782,13 @@ const getCommandFunctions = (
|
|
|
738
782
|
return;
|
|
739
783
|
}
|
|
740
784
|
const currentColumnNames = mapGet(schemaMap, tableName);
|
|
741
|
-
const unaccountedColumnNames = setNew(
|
|
785
|
+
const unaccountedColumnNames = setNew(
|
|
786
|
+
arrayFilter(
|
|
787
|
+
collValues(currentColumnNames),
|
|
788
|
+
(columnName) =>
|
|
789
|
+
columnName == rowIdColumnName || includeContentSubId(columnName),
|
|
790
|
+
),
|
|
791
|
+
);
|
|
742
792
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
743
793
|
if (!collHas(schemaMap, tableName)) {
|
|
744
794
|
await databaseExecuteCommand(
|
|
@@ -804,11 +854,13 @@ const getCommandFunctions = (
|
|
|
804
854
|
]);
|
|
805
855
|
if (partial) {
|
|
806
856
|
if (isUndefined(content)) {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
857
|
+
if (isUndefined(contentSubIdSet)) {
|
|
858
|
+
await databaseExecuteCommand(
|
|
859
|
+
DELETE_FROM +
|
|
860
|
+
escapeId(tableName) +
|
|
861
|
+
getWhereCondition(tableName, condition),
|
|
862
|
+
);
|
|
863
|
+
}
|
|
812
864
|
} else {
|
|
813
865
|
await promiseAll(
|
|
814
866
|
objToArray(content, async (row, rowId) => {
|
|
@@ -821,18 +873,24 @@ const getCommandFunctions = (
|
|
|
821
873
|
[rowId],
|
|
822
874
|
);
|
|
823
875
|
} else if (!arrayIsEmpty(settingColumnNames)) {
|
|
824
|
-
|
|
825
|
-
databaseExecuteCommand,
|
|
826
|
-
tableName,
|
|
827
|
-
rowIdColumnName,
|
|
876
|
+
const changingColumnNames = arrayFilter(
|
|
828
877
|
objIds(row),
|
|
829
|
-
|
|
830
|
-
[rowId]: encode
|
|
831
|
-
? arrayMap(objValues(row), encode)
|
|
832
|
-
: objValues(row),
|
|
833
|
-
},
|
|
834
|
-
currentColumnNames,
|
|
878
|
+
includeContentSubId,
|
|
835
879
|
);
|
|
880
|
+
if (!arrayIsEmpty(changingColumnNames)) {
|
|
881
|
+
await upsert(
|
|
882
|
+
databaseExecuteCommand,
|
|
883
|
+
tableName,
|
|
884
|
+
rowIdColumnName,
|
|
885
|
+
changingColumnNames,
|
|
886
|
+
{
|
|
887
|
+
[rowId]: arrayMap(changingColumnNames, (cellId) =>
|
|
888
|
+
encode ? encode(row[cellId]) : row[cellId],
|
|
889
|
+
),
|
|
890
|
+
},
|
|
891
|
+
currentColumnNames,
|
|
892
|
+
);
|
|
893
|
+
}
|
|
836
894
|
}
|
|
837
895
|
}),
|
|
838
896
|
);
|
|
@@ -841,7 +899,9 @@ const getCommandFunctions = (
|
|
|
841
899
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
842
900
|
const changingColumnNames = arrayFilter(
|
|
843
901
|
collValues(mapGet(schemaMap, tableName)),
|
|
844
|
-
(changingColumnName) =>
|
|
902
|
+
(changingColumnName) =>
|
|
903
|
+
changingColumnName != rowIdColumnName &&
|
|
904
|
+
includeContentSubId(changingColumnName),
|
|
845
905
|
);
|
|
846
906
|
const rows = {};
|
|
847
907
|
const deleteRowIds = [];
|
|
@@ -857,6 +917,7 @@ const getCommandFunctions = (
|
|
|
857
917
|
rowIdColumnName,
|
|
858
918
|
changingColumnNames,
|
|
859
919
|
rows,
|
|
920
|
+
currentColumnNames,
|
|
860
921
|
);
|
|
861
922
|
await databaseExecuteCommand(
|
|
862
923
|
DELETE_FROM +
|
|
@@ -865,7 +926,10 @@ const getCommandFunctions = (
|
|
|
865
926
|
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
866
927
|
deleteRowIds,
|
|
867
928
|
);
|
|
868
|
-
} else if (
|
|
929
|
+
} else if (
|
|
930
|
+
isUndefined(contentSubIdSet) &&
|
|
931
|
+
collHas(schemaMap, tableName)
|
|
932
|
+
) {
|
|
869
933
|
await databaseExecuteCommand(
|
|
870
934
|
DELETE_FROM +
|
|
871
935
|
escapeId(tableName) +
|
|
@@ -1004,7 +1068,13 @@ const createTabularPersister = (
|
|
|
1004
1068
|
[
|
|
1005
1069
|
tablesLoadConfig,
|
|
1006
1070
|
tablesSaveConfig,
|
|
1007
|
-
[
|
|
1071
|
+
[
|
|
1072
|
+
valuesLoad,
|
|
1073
|
+
valuesSave,
|
|
1074
|
+
valuesTableName,
|
|
1075
|
+
valuesLoadValueIds,
|
|
1076
|
+
valuesSaveValueIds,
|
|
1077
|
+
],
|
|
1008
1078
|
],
|
|
1009
1079
|
managedTableNames,
|
|
1010
1080
|
querySchema,
|
|
@@ -1054,15 +1124,33 @@ const createTabularPersister = (
|
|
|
1054
1124
|
},
|
|
1055
1125
|
),
|
|
1056
1126
|
);
|
|
1127
|
+
const getValuesSubset = (values, valueIds, partial) =>
|
|
1128
|
+
objNew(
|
|
1129
|
+
partial == true
|
|
1130
|
+
? arrayFilter(
|
|
1131
|
+
objToArray(values, (value, valueId) => [valueId, value]),
|
|
1132
|
+
([valueId]) => arrayHas(valueIds, valueId),
|
|
1133
|
+
)
|
|
1134
|
+
: arrayFilter(
|
|
1135
|
+
arrayMap(valueIds, (valueId) => [valueId, values[valueId]]),
|
|
1136
|
+
([, value]) => !isUndefined(value),
|
|
1137
|
+
),
|
|
1138
|
+
);
|
|
1057
1139
|
const saveValues = async (values, partial) =>
|
|
1058
1140
|
valuesSave
|
|
1059
1141
|
? await saveTable(
|
|
1060
1142
|
valuesTableName,
|
|
1061
1143
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
1062
|
-
{
|
|
1144
|
+
{
|
|
1145
|
+
[SINGLE_ROW_ID]: isUndefined(valuesSaveValueIds)
|
|
1146
|
+
? values
|
|
1147
|
+
: getValuesSubset(values, valuesSaveValueIds, partial),
|
|
1148
|
+
},
|
|
1063
1149
|
true,
|
|
1064
1150
|
true,
|
|
1065
1151
|
partial,
|
|
1152
|
+
void 0,
|
|
1153
|
+
valuesSaveValueIds,
|
|
1066
1154
|
)
|
|
1067
1155
|
: null;
|
|
1068
1156
|
const loadTables = async () =>
|
|
@@ -1082,9 +1170,14 @@ const createTabularPersister = (
|
|
|
1082
1170
|
);
|
|
1083
1171
|
const loadValues = async () =>
|
|
1084
1172
|
valuesLoad
|
|
1085
|
-
? (
|
|
1086
|
-
|
|
1087
|
-
|
|
1173
|
+
? (
|
|
1174
|
+
await loadTable(
|
|
1175
|
+
valuesTableName,
|
|
1176
|
+
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
1177
|
+
void 0,
|
|
1178
|
+
valuesLoadValueIds,
|
|
1179
|
+
)
|
|
1180
|
+
)[SINGLE_ROW_ID]
|
|
1088
1181
|
: {};
|
|
1089
1182
|
const getPersisted = () =>
|
|
1090
1183
|
transaction(async () => {
|
|
@@ -1217,6 +1310,8 @@ const createCustomSqlitePersister = (
|
|
|
1217
1310
|
);
|
|
1218
1311
|
};
|
|
1219
1312
|
|
|
1313
|
+
const getSqlRows = (sqlStorage, sql, ...params) =>
|
|
1314
|
+
sqlStorage.exec(sql, ...params).toArray();
|
|
1220
1315
|
const createDurableObjectSqlStoragePersister = (
|
|
1221
1316
|
store,
|
|
1222
1317
|
sqlStorage,
|
|
@@ -1241,7 +1336,7 @@ const createDurableObjectSqlStoragePersister = (
|
|
|
1241
1336
|
async (sql, params = []) => {
|
|
1242
1337
|
if (!['BEGIN', 'END'].includes(sql)) {
|
|
1243
1338
|
sql = sql.replace(/\$\d+/g, '?');
|
|
1244
|
-
return sqlStorage
|
|
1339
|
+
return getSqlRows(sqlStorage, sql, ...params);
|
|
1245
1340
|
}
|
|
1246
1341
|
return [];
|
|
1247
1342
|
},
|
|
@@ -1266,6 +1361,10 @@ const createDurableObjectFragmentedSqlStoragePersister = (
|
|
|
1266
1361
|
const tablePrefix = storagePrefix.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
1267
1362
|
const tablesTable = `${tablePrefix}tinybase_tables`;
|
|
1268
1363
|
const valuesTable = `${tablePrefix}tinybase_values`;
|
|
1364
|
+
const insertTableSql = `INSERT INTO ${tablesTable} (type, table_id, row_id, cell_id, value_data, timestamp, hash) VALUES (?, ?, ?, ?, ?, ?, ?)`;
|
|
1365
|
+
const insertValueSql = `INSERT INTO ${valuesTable} (value_id, value_data, timestamp, hash) VALUES (?, ?, ?, ?)`;
|
|
1366
|
+
const getRowKey = (tableId, rowId) =>
|
|
1367
|
+
jsonStringWithUndefined([tableId, rowId]);
|
|
1269
1368
|
const initializeTables = () => {
|
|
1270
1369
|
sqlStorage.exec(`
|
|
1271
1370
|
CREATE TABLE IF NOT EXISTS ${tablesTable} (
|
|
@@ -1288,11 +1387,74 @@ const createDurableObjectFragmentedSqlStoragePersister = (
|
|
|
1288
1387
|
`);
|
|
1289
1388
|
};
|
|
1290
1389
|
initializeTables();
|
|
1390
|
+
const getCondition = (params, column, value) =>
|
|
1391
|
+
isNull(value)
|
|
1392
|
+
? `${column} IS NULL`
|
|
1393
|
+
: (arrayPush(params, value), `${column} = ?`);
|
|
1394
|
+
const delTablesRow = (tableId, rowId, cellId) => {
|
|
1395
|
+
const params = [T];
|
|
1396
|
+
sqlStorage.exec(
|
|
1397
|
+
`DELETE FROM ${tablesTable} WHERE type = ? AND ` +
|
|
1398
|
+
getCondition(params, 'table_id', tableId) +
|
|
1399
|
+
` AND ` +
|
|
1400
|
+
getCondition(params, 'row_id', rowId) +
|
|
1401
|
+
` AND ` +
|
|
1402
|
+
getCondition(params, 'cell_id', cellId),
|
|
1403
|
+
...params,
|
|
1404
|
+
);
|
|
1405
|
+
};
|
|
1406
|
+
const setTablesRow = (tableId, rowId, cellId, valueData, timestamp, hash) => {
|
|
1407
|
+
delTablesRow(tableId, rowId, cellId);
|
|
1408
|
+
sqlStorage.exec(
|
|
1409
|
+
insertTableSql,
|
|
1410
|
+
T,
|
|
1411
|
+
tableId,
|
|
1412
|
+
rowId,
|
|
1413
|
+
cellId,
|
|
1414
|
+
valueData,
|
|
1415
|
+
timestamp,
|
|
1416
|
+
hash,
|
|
1417
|
+
);
|
|
1418
|
+
};
|
|
1419
|
+
const delCellRows = (tableId, rowId) =>
|
|
1420
|
+
sqlStorage.exec(
|
|
1421
|
+
`DELETE FROM ${tablesTable} WHERE type = ? AND table_id = ? AND row_id = ? AND cell_id IS NOT NULL`,
|
|
1422
|
+
T,
|
|
1423
|
+
tableId,
|
|
1424
|
+
rowId,
|
|
1425
|
+
);
|
|
1426
|
+
const delValuesRow = (valueId) => {
|
|
1427
|
+
const params = [];
|
|
1428
|
+
sqlStorage.exec(
|
|
1429
|
+
`DELETE FROM ${valuesTable} WHERE ` +
|
|
1430
|
+
getCondition(params, 'value_id', valueId),
|
|
1431
|
+
...params,
|
|
1432
|
+
);
|
|
1433
|
+
};
|
|
1434
|
+
const setValuesRow = (valueId, valueData, timestamp, hash) => {
|
|
1435
|
+
delValuesRow(valueId);
|
|
1436
|
+
sqlStorage.exec(insertValueSql, valueId, valueData, timestamp, hash);
|
|
1437
|
+
};
|
|
1291
1438
|
const getPersisted = async () => {
|
|
1292
1439
|
const tables = stampNewObjectWithHash();
|
|
1293
1440
|
const values = stampNewObjectWithHash();
|
|
1294
|
-
const
|
|
1295
|
-
|
|
1441
|
+
const rowDataKeys = setNew();
|
|
1442
|
+
const tablesRows = getSqlRows(sqlStorage, `SELECT * FROM ${tablesTable}`);
|
|
1443
|
+
arrayForEach(tablesRows, (row) => {
|
|
1444
|
+
const table_id = row.table_id ? string(row.table_id) : null;
|
|
1445
|
+
const row_id = row.row_id ? string(row.row_id) : null;
|
|
1446
|
+
const cell_id = row.cell_id ? string(row.cell_id) : null;
|
|
1447
|
+
const value_data = string(row.value_data);
|
|
1448
|
+
const timestamp = string(row.timestamp);
|
|
1449
|
+
const hash = number(row.hash);
|
|
1450
|
+
const [zeroOrCells] = jsonParseWithUndefined(value_data);
|
|
1451
|
+
if (table_id && row_id && !cell_id && isObject(zeroOrCells)) {
|
|
1452
|
+
const table = objEnsure(tables[0], table_id, stampNewObjectWithHash);
|
|
1453
|
+
table[0][row_id] = [zeroOrCells, timestamp, hash];
|
|
1454
|
+
setAdd(rowDataKeys, getRowKey(table_id, row_id));
|
|
1455
|
+
}
|
|
1456
|
+
});
|
|
1457
|
+
arrayForEach(tablesRows, (row) => {
|
|
1296
1458
|
const type = string(row.type);
|
|
1297
1459
|
const table_id = row.table_id ? string(row.table_id) : null;
|
|
1298
1460
|
const row_id = row.row_id ? string(row.row_id) : null;
|
|
@@ -1300,16 +1462,36 @@ const createDurableObjectFragmentedSqlStoragePersister = (
|
|
|
1300
1462
|
const value_data = string(row.value_data);
|
|
1301
1463
|
const timestamp = string(row.timestamp);
|
|
1302
1464
|
const hash = number(row.hash);
|
|
1303
|
-
const [zeroOrCellOrValue] =
|
|
1465
|
+
const [zeroOrCellOrValue] = jsonParseWithUndefined(value_data);
|
|
1304
1466
|
if (type === T) {
|
|
1305
1467
|
if (table_id && row_id && cell_id) {
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1468
|
+
if (!collHas(rowDataKeys, getRowKey(table_id, row_id))) {
|
|
1469
|
+
const table = objEnsure(
|
|
1470
|
+
tables[0],
|
|
1471
|
+
table_id,
|
|
1472
|
+
stampNewObjectWithHash,
|
|
1473
|
+
);
|
|
1474
|
+
const tableRow = objEnsure(
|
|
1475
|
+
table[0],
|
|
1476
|
+
row_id,
|
|
1477
|
+
stampNewObjectWithHash,
|
|
1478
|
+
);
|
|
1479
|
+
tableRow[0][cell_id] = [zeroOrCellOrValue, timestamp, hash];
|
|
1480
|
+
}
|
|
1309
1481
|
} else if (table_id && row_id) {
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1482
|
+
if (!isObject(zeroOrCellOrValue)) {
|
|
1483
|
+
const table = objEnsure(
|
|
1484
|
+
tables[0],
|
|
1485
|
+
table_id,
|
|
1486
|
+
stampNewObjectWithHash,
|
|
1487
|
+
);
|
|
1488
|
+
const tableRow = objEnsure(
|
|
1489
|
+
table[0],
|
|
1490
|
+
row_id,
|
|
1491
|
+
stampNewObjectWithHash,
|
|
1492
|
+
);
|
|
1493
|
+
stampUpdate(tableRow, timestamp, hash);
|
|
1494
|
+
}
|
|
1313
1495
|
} else if (table_id) {
|
|
1314
1496
|
const table = objEnsure(tables[0], table_id, stampNewObjectWithHash);
|
|
1315
1497
|
stampUpdate(table, timestamp, hash);
|
|
@@ -1317,20 +1499,22 @@ const createDurableObjectFragmentedSqlStoragePersister = (
|
|
|
1317
1499
|
stampUpdate(tables, timestamp, hash);
|
|
1318
1500
|
}
|
|
1319
1501
|
}
|
|
1320
|
-
}
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1502
|
+
});
|
|
1503
|
+
arrayForEach(
|
|
1504
|
+
getSqlRows(sqlStorage, `SELECT * FROM ${valuesTable}`),
|
|
1505
|
+
(row) => {
|
|
1506
|
+
const value_id = row.value_id ? string(row.value_id) : null;
|
|
1507
|
+
const value_data = string(row.value_data);
|
|
1508
|
+
const timestamp = string(row.timestamp);
|
|
1509
|
+
const hash = number(row.hash);
|
|
1510
|
+
const [zeroOrCellOrValue] = jsonParseWithUndefined(value_data);
|
|
1511
|
+
if (value_id) {
|
|
1512
|
+
values[0][value_id] = [zeroOrCellOrValue, timestamp, hash];
|
|
1513
|
+
} else {
|
|
1514
|
+
stampUpdate(values, timestamp, hash);
|
|
1515
|
+
}
|
|
1516
|
+
},
|
|
1517
|
+
);
|
|
1334
1518
|
return [tables, values];
|
|
1335
1519
|
};
|
|
1336
1520
|
const setPersisted = async (
|
|
@@ -1340,64 +1524,42 @@ const createDurableObjectFragmentedSqlStoragePersister = (
|
|
|
1340
1524
|
[valuesObj, valuesTime, valuesHash],
|
|
1341
1525
|
] = getContent(),
|
|
1342
1526
|
) => {
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
T,
|
|
1527
|
+
const [fullTablesObj] = getContent()[0];
|
|
1528
|
+
setTablesRow(
|
|
1346
1529
|
null,
|
|
1347
1530
|
null,
|
|
1348
1531
|
null,
|
|
1349
|
-
|
|
1532
|
+
jsonStringWithUndefined([0]),
|
|
1350
1533
|
tablesTime,
|
|
1351
1534
|
tablesHash,
|
|
1352
1535
|
);
|
|
1353
1536
|
objForEach(tablesObj, ([tableObj, tableTime, tableHash], tableId) => {
|
|
1354
|
-
|
|
1355
|
-
`INSERT OR REPLACE INTO ${tablesTable} (type, table_id, row_id, cell_id, value_data, timestamp, hash) VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
|
1356
|
-
T,
|
|
1537
|
+
setTablesRow(
|
|
1357
1538
|
tableId,
|
|
1358
1539
|
null,
|
|
1359
1540
|
null,
|
|
1360
|
-
|
|
1541
|
+
jsonStringWithUndefined([0]),
|
|
1361
1542
|
tableTime,
|
|
1362
1543
|
tableHash,
|
|
1363
1544
|
);
|
|
1364
1545
|
objForEach(tableObj, ([rowObj, rowTime, rowHash], rowId) => {
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1546
|
+
const fullRowObj = fullTablesObj[tableId]?.[0]?.[rowId]?.[0] ?? rowObj;
|
|
1547
|
+
delCellRows(tableId, rowId);
|
|
1548
|
+
setTablesRow(
|
|
1368
1549
|
tableId,
|
|
1369
1550
|
rowId,
|
|
1370
1551
|
null,
|
|
1371
|
-
|
|
1552
|
+
jsonStringWithUndefined([fullRowObj]),
|
|
1372
1553
|
rowTime,
|
|
1373
1554
|
rowHash,
|
|
1374
1555
|
);
|
|
1375
|
-
objForEach(rowObj, (cellStamp, cellId) => {
|
|
1376
|
-
sqlStorage.exec(
|
|
1377
|
-
`INSERT OR REPLACE INTO ${tablesTable} (type, table_id, row_id, cell_id, value_data, timestamp, hash) VALUES (?, ?, ?, ?, ?, ?, ?)`,
|
|
1378
|
-
T,
|
|
1379
|
-
tableId,
|
|
1380
|
-
rowId,
|
|
1381
|
-
cellId,
|
|
1382
|
-
JSON.stringify([cellStamp[0]]),
|
|
1383
|
-
cellStamp[1],
|
|
1384
|
-
cellStamp[2],
|
|
1385
|
-
);
|
|
1386
|
-
});
|
|
1387
1556
|
});
|
|
1388
1557
|
});
|
|
1389
|
-
|
|
1390
|
-
`INSERT OR REPLACE INTO ${valuesTable} (value_id, value_data, timestamp, hash) VALUES (?, ?, ?, ?)`,
|
|
1391
|
-
null,
|
|
1392
|
-
JSON.stringify([0]),
|
|
1393
|
-
valuesTime,
|
|
1394
|
-
valuesHash,
|
|
1395
|
-
);
|
|
1558
|
+
setValuesRow(null, jsonStringWithUndefined([0]), valuesTime, valuesHash);
|
|
1396
1559
|
objForEach(valuesObj, (valueStamp, valueId) => {
|
|
1397
|
-
|
|
1398
|
-
`INSERT OR REPLACE INTO ${valuesTable} (value_id, value_data, timestamp, hash) VALUES (?, ?, ?, ?)`,
|
|
1560
|
+
setValuesRow(
|
|
1399
1561
|
valueId,
|
|
1400
|
-
|
|
1562
|
+
jsonStringWithUndefined([valueStamp[0]]),
|
|
1401
1563
|
valueStamp[1],
|
|
1402
1564
|
valueStamp[2],
|
|
1403
1565
|
);
|
|
@@ -323,13 +323,14 @@ const createCustomPersister = (
|
|
|
323
323
|
const content = await getPersisted();
|
|
324
324
|
if (isArray(content)) {
|
|
325
325
|
setContentOrChanges(content);
|
|
326
|
-
} else if (initialContent) {
|
|
326
|
+
} else if (isUndefined(content) && initialContent) {
|
|
327
327
|
setDefaultContent(initialContent);
|
|
328
|
-
} else {
|
|
328
|
+
} else if (!isUndefined(content)) {
|
|
329
329
|
errorNew(`Content is not an array: ${content}`);
|
|
330
330
|
}
|
|
331
331
|
},
|
|
332
|
-
() => {
|
|
332
|
+
(error) => {
|
|
333
|
+
onIgnoredError?.(error);
|
|
333
334
|
if (initialContent) {
|
|
334
335
|
setDefaultContent(initialContent);
|
|
335
336
|
}
|
|
@@ -323,13 +323,14 @@ const createCustomPersister = (
|
|
|
323
323
|
const content = await getPersisted();
|
|
324
324
|
if (isArray(content)) {
|
|
325
325
|
setContentOrChanges(content);
|
|
326
|
-
} else if (initialContent) {
|
|
326
|
+
} else if (isUndefined(content) && initialContent) {
|
|
327
327
|
setDefaultContent(initialContent);
|
|
328
|
-
} else {
|
|
328
|
+
} else if (!isUndefined(content)) {
|
|
329
329
|
errorNew(`Content is not an array: ${content}`);
|
|
330
330
|
}
|
|
331
331
|
},
|
|
332
|
-
() => {
|
|
332
|
+
(error) => {
|
|
333
|
+
onIgnoredError?.(error);
|
|
333
334
|
if (initialContent) {
|
|
334
335
|
setDefaultContent(initialContent);
|
|
335
336
|
}
|