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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinybase",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-beta.1",
|
|
4
4
|
"author": "jamesgpearce",
|
|
5
5
|
"repository": "github:tinyplex/tinybase",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"sideEffects": false,
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@automerge/automerge-repo": "^2.5.6",
|
|
27
|
-
"@cloudflare/workers-types": "^4.
|
|
27
|
+
"@cloudflare/workers-types": "^4.20260701.1",
|
|
28
28
|
"@electric-sql/pglite": "^0.5.3",
|
|
29
29
|
"@libsql/client": "^0.17.4",
|
|
30
|
-
"@powersync/common": "^1.
|
|
30
|
+
"@powersync/common": "^1.57.0",
|
|
31
31
|
"@sinclair/typebox": "^0.34.49",
|
|
32
32
|
"@sqlite.org/sqlite-wasm": "^3.53.0-build1",
|
|
33
33
|
"@vlcn.io/crsqlite-wasm": "^0.16.0",
|
|
@@ -35,19 +35,19 @@
|
|
|
35
35
|
"bun": "^1.3.14",
|
|
36
36
|
"effect": "^3.21.4",
|
|
37
37
|
"electric-sql": "^0.12.1",
|
|
38
|
-
"expo": "^
|
|
38
|
+
"expo": "^57.0.1",
|
|
39
39
|
"expo-sqlite": "^56.0.5",
|
|
40
40
|
"partykit": "^0.0.115",
|
|
41
|
-
"partysocket": "^1.
|
|
41
|
+
"partysocket": "^1.3.0",
|
|
42
42
|
"postgres": "^3.4.9",
|
|
43
43
|
"react": "^19.2.7",
|
|
44
44
|
"react-dom": "^19.2.7",
|
|
45
|
-
"react-native-mmkv": "4.3.
|
|
45
|
+
"react-native-mmkv": "4.3.2",
|
|
46
46
|
"react-native-sqlite-storage": "^6.0.1",
|
|
47
47
|
"solid-js": "^1.9.13",
|
|
48
48
|
"sqlite3": "^5.1.7",
|
|
49
|
-
"svelte": "^5.56.
|
|
50
|
-
"valibot": "^1.4.
|
|
49
|
+
"svelte": "^5.56.4",
|
|
50
|
+
"valibot": "^1.4.2",
|
|
51
51
|
"ws": "^8.21.0",
|
|
52
52
|
"yjs": "^13.6.31",
|
|
53
53
|
"zod": "^4.4.3"
|
package/persisters/index.js
CHANGED
|
@@ -49,6 +49,7 @@ const tryCatch = async (action, then1, then2) => {
|
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
+
const arrayHas = (array, value) => array.includes(value);
|
|
52
53
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
53
54
|
const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
|
|
54
55
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -340,13 +341,14 @@ const createCustomPersister = (
|
|
|
340
341
|
const content = await getPersisted();
|
|
341
342
|
if (isArray(content)) {
|
|
342
343
|
setContentOrChanges(content);
|
|
343
|
-
} else if (initialContent) {
|
|
344
|
+
} else if (isUndefined(content) && initialContent) {
|
|
344
345
|
setDefaultContent(initialContent);
|
|
345
|
-
} else {
|
|
346
|
+
} else if (!isUndefined(content)) {
|
|
346
347
|
errorNew(`Content is not an array: ${content}`);
|
|
347
348
|
}
|
|
348
349
|
},
|
|
349
|
-
() => {
|
|
350
|
+
(error) => {
|
|
351
|
+
onIgnoredError?.(error);
|
|
350
352
|
if (initialContent) {
|
|
351
353
|
setDefaultContent(initialContent);
|
|
352
354
|
}
|
|
@@ -579,6 +581,8 @@ const DEFAULT_TABULAR_VALUES_CONFIG = {
|
|
|
579
581
|
save: 0,
|
|
580
582
|
[TABLE_NAME]: TINYBASE + '_values',
|
|
581
583
|
};
|
|
584
|
+
const getValuesIn = (config) => (isArray(config) ? config : void 0);
|
|
585
|
+
const hasValues = (config) => isTrue(config) || isArray(config);
|
|
582
586
|
const getDefaultedConfig = (configOrStoreTableName) =>
|
|
583
587
|
objMerge(
|
|
584
588
|
DEFAULT_CONFIG,
|
|
@@ -629,11 +633,15 @@ const getConfigStructures = (configOrStoreTableName) => {
|
|
|
629
633
|
];
|
|
630
634
|
}
|
|
631
635
|
const {tables: {load = {}, save = {}} = {}, values = {}} = config;
|
|
632
|
-
const
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
636
|
+
const valuesConfigObj = objMerge(DEFAULT_TABULAR_VALUES_CONFIG, values);
|
|
637
|
+
const {load: valuesLoad, save: valuesSave} = valuesConfigObj;
|
|
638
|
+
const valuesConfig = [
|
|
639
|
+
hasValues(valuesLoad),
|
|
640
|
+
hasValues(valuesSave),
|
|
641
|
+
valuesConfigObj[TABLE_NAME],
|
|
642
|
+
getValuesIn(valuesLoad),
|
|
643
|
+
getValuesIn(valuesSave),
|
|
644
|
+
];
|
|
637
645
|
const valuesTable = valuesConfig[2];
|
|
638
646
|
const managedTableNames = setNew(valuesTable);
|
|
639
647
|
const excludedTableNames = setNew(valuesTable);
|
|
@@ -695,8 +703,18 @@ const getCommandFunctions = (
|
|
|
695
703
|
({tn, cn}) => setAdd(mapEnsure(schemaMap, tn, setNew), cn),
|
|
696
704
|
);
|
|
697
705
|
};
|
|
698
|
-
const loadTable = async (
|
|
699
|
-
|
|
706
|
+
const loadTable = async (
|
|
707
|
+
tableName,
|
|
708
|
+
rowIdColumnName,
|
|
709
|
+
condition,
|
|
710
|
+
contentSubIds,
|
|
711
|
+
) => {
|
|
712
|
+
const contentSubIdSet = isUndefined(contentSubIds)
|
|
713
|
+
? void 0
|
|
714
|
+
: setNew(contentSubIds);
|
|
715
|
+
const includeContentSubId = (contentSubId) =>
|
|
716
|
+
isUndefined(contentSubIdSet) || collHas(contentSubIdSet, contentSubId);
|
|
717
|
+
return canSelect(tableName, rowIdColumnName)
|
|
700
718
|
? objNew(
|
|
701
719
|
arrayFilter(
|
|
702
720
|
arrayMap(
|
|
@@ -705,17 +723,35 @@ const getCommandFunctions = (
|
|
|
705
723
|
escapeId(tableName) +
|
|
706
724
|
getWhereCondition(tableName, condition),
|
|
707
725
|
),
|
|
708
|
-
(row) =>
|
|
709
|
-
row[rowIdColumnName]
|
|
710
|
-
decode
|
|
726
|
+
(row) => {
|
|
727
|
+
const rowId = row[rowIdColumnName];
|
|
728
|
+
const rowContent = decode
|
|
711
729
|
? objMap(objDel(row, rowIdColumnName), decode)
|
|
712
|
-
: objDel(row, rowIdColumnName)
|
|
713
|
-
|
|
730
|
+
: objDel(row, rowIdColumnName);
|
|
731
|
+
return [
|
|
732
|
+
rowId,
|
|
733
|
+
isUndefined(contentSubIdSet)
|
|
734
|
+
? rowContent
|
|
735
|
+
: objNew(
|
|
736
|
+
arrayFilter(
|
|
737
|
+
objToArray(
|
|
738
|
+
rowContent,
|
|
739
|
+
(cellOrValue, contentSubId) => [
|
|
740
|
+
contentSubId,
|
|
741
|
+
cellOrValue,
|
|
742
|
+
],
|
|
743
|
+
),
|
|
744
|
+
([contentSubId]) => includeContentSubId(contentSubId),
|
|
745
|
+
),
|
|
746
|
+
),
|
|
747
|
+
];
|
|
748
|
+
},
|
|
714
749
|
),
|
|
715
750
|
(entry) => !isUndefined(entry[0]) && !objIsEmpty(entry[1]),
|
|
716
751
|
),
|
|
717
752
|
)
|
|
718
753
|
: {};
|
|
754
|
+
};
|
|
719
755
|
const saveTable = async (
|
|
720
756
|
tableName,
|
|
721
757
|
rowIdColumnName,
|
|
@@ -724,15 +760,23 @@ const getCommandFunctions = (
|
|
|
724
760
|
deleteEmptyTable,
|
|
725
761
|
partial = false,
|
|
726
762
|
condition = TRUE,
|
|
763
|
+
contentSubIds,
|
|
727
764
|
) => {
|
|
765
|
+
const contentSubIdSet = isUndefined(contentSubIds)
|
|
766
|
+
? void 0
|
|
767
|
+
: setNew(contentSubIds);
|
|
768
|
+
const includeContentSubId = (contentSubId) =>
|
|
769
|
+
isUndefined(contentSubIdSet) || collHas(contentSubIdSet, contentSubId);
|
|
728
770
|
const settingColumnNameSet = setNew();
|
|
729
771
|
objMap(content ?? {}, (contentRow) =>
|
|
730
|
-
arrayMap(
|
|
731
|
-
|
|
772
|
+
arrayMap(
|
|
773
|
+
arrayFilter(objIds(contentRow ?? {}), includeContentSubId),
|
|
774
|
+
(cellOrValueId) => setAdd(settingColumnNameSet, cellOrValueId),
|
|
732
775
|
),
|
|
733
776
|
);
|
|
734
777
|
const settingColumnNames = collValues(settingColumnNameSet);
|
|
735
778
|
if (
|
|
779
|
+
isUndefined(contentSubIdSet) &&
|
|
736
780
|
!partial &&
|
|
737
781
|
deleteEmptyTable &&
|
|
738
782
|
condition == TRUE &&
|
|
@@ -744,7 +788,13 @@ const getCommandFunctions = (
|
|
|
744
788
|
return;
|
|
745
789
|
}
|
|
746
790
|
const currentColumnNames = mapGet(schemaMap, tableName);
|
|
747
|
-
const unaccountedColumnNames = setNew(
|
|
791
|
+
const unaccountedColumnNames = setNew(
|
|
792
|
+
arrayFilter(
|
|
793
|
+
collValues(currentColumnNames),
|
|
794
|
+
(columnName) =>
|
|
795
|
+
columnName == rowIdColumnName || includeContentSubId(columnName),
|
|
796
|
+
),
|
|
797
|
+
);
|
|
748
798
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
749
799
|
if (!collHas(schemaMap, tableName)) {
|
|
750
800
|
await databaseExecuteCommand(
|
|
@@ -810,11 +860,13 @@ const getCommandFunctions = (
|
|
|
810
860
|
]);
|
|
811
861
|
if (partial) {
|
|
812
862
|
if (isUndefined(content)) {
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
863
|
+
if (isUndefined(contentSubIdSet)) {
|
|
864
|
+
await databaseExecuteCommand(
|
|
865
|
+
DELETE_FROM +
|
|
866
|
+
escapeId(tableName) +
|
|
867
|
+
getWhereCondition(tableName, condition),
|
|
868
|
+
);
|
|
869
|
+
}
|
|
818
870
|
} else {
|
|
819
871
|
await promiseAll(
|
|
820
872
|
objToArray(content, async (row, rowId) => {
|
|
@@ -827,18 +879,24 @@ const getCommandFunctions = (
|
|
|
827
879
|
[rowId],
|
|
828
880
|
);
|
|
829
881
|
} else if (!arrayIsEmpty(settingColumnNames)) {
|
|
830
|
-
|
|
831
|
-
databaseExecuteCommand,
|
|
832
|
-
tableName,
|
|
833
|
-
rowIdColumnName,
|
|
882
|
+
const changingColumnNames = arrayFilter(
|
|
834
883
|
objIds(row),
|
|
835
|
-
|
|
836
|
-
[rowId]: encode
|
|
837
|
-
? arrayMap(objValues(row), encode)
|
|
838
|
-
: objValues(row),
|
|
839
|
-
},
|
|
840
|
-
currentColumnNames,
|
|
884
|
+
includeContentSubId,
|
|
841
885
|
);
|
|
886
|
+
if (!arrayIsEmpty(changingColumnNames)) {
|
|
887
|
+
await upsert(
|
|
888
|
+
databaseExecuteCommand,
|
|
889
|
+
tableName,
|
|
890
|
+
rowIdColumnName,
|
|
891
|
+
changingColumnNames,
|
|
892
|
+
{
|
|
893
|
+
[rowId]: arrayMap(changingColumnNames, (cellId) =>
|
|
894
|
+
encode ? encode(row[cellId]) : row[cellId],
|
|
895
|
+
),
|
|
896
|
+
},
|
|
897
|
+
currentColumnNames,
|
|
898
|
+
);
|
|
899
|
+
}
|
|
842
900
|
}
|
|
843
901
|
}),
|
|
844
902
|
);
|
|
@@ -847,7 +905,9 @@ const getCommandFunctions = (
|
|
|
847
905
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
848
906
|
const changingColumnNames = arrayFilter(
|
|
849
907
|
collValues(mapGet(schemaMap, tableName)),
|
|
850
|
-
(changingColumnName) =>
|
|
908
|
+
(changingColumnName) =>
|
|
909
|
+
changingColumnName != rowIdColumnName &&
|
|
910
|
+
includeContentSubId(changingColumnName),
|
|
851
911
|
);
|
|
852
912
|
const rows = {};
|
|
853
913
|
const deleteRowIds = [];
|
|
@@ -863,6 +923,7 @@ const getCommandFunctions = (
|
|
|
863
923
|
rowIdColumnName,
|
|
864
924
|
changingColumnNames,
|
|
865
925
|
rows,
|
|
926
|
+
currentColumnNames,
|
|
866
927
|
);
|
|
867
928
|
await databaseExecuteCommand(
|
|
868
929
|
DELETE_FROM +
|
|
@@ -871,7 +932,10 @@ const getCommandFunctions = (
|
|
|
871
932
|
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
872
933
|
deleteRowIds,
|
|
873
934
|
);
|
|
874
|
-
} else if (
|
|
935
|
+
} else if (
|
|
936
|
+
isUndefined(contentSubIdSet) &&
|
|
937
|
+
collHas(schemaMap, tableName)
|
|
938
|
+
) {
|
|
875
939
|
await databaseExecuteCommand(
|
|
876
940
|
DELETE_FROM +
|
|
877
941
|
escapeId(tableName) +
|
|
@@ -1010,7 +1074,13 @@ const createTabularPersister = (
|
|
|
1010
1074
|
[
|
|
1011
1075
|
tablesLoadConfig,
|
|
1012
1076
|
tablesSaveConfig,
|
|
1013
|
-
[
|
|
1077
|
+
[
|
|
1078
|
+
valuesLoad,
|
|
1079
|
+
valuesSave,
|
|
1080
|
+
valuesTableName,
|
|
1081
|
+
valuesLoadValueIds,
|
|
1082
|
+
valuesSaveValueIds,
|
|
1083
|
+
],
|
|
1014
1084
|
],
|
|
1015
1085
|
managedTableNames,
|
|
1016
1086
|
querySchema,
|
|
@@ -1060,15 +1130,33 @@ const createTabularPersister = (
|
|
|
1060
1130
|
},
|
|
1061
1131
|
),
|
|
1062
1132
|
);
|
|
1133
|
+
const getValuesSubset = (values, valueIds, partial) =>
|
|
1134
|
+
objNew(
|
|
1135
|
+
partial == true
|
|
1136
|
+
? arrayFilter(
|
|
1137
|
+
objToArray(values, (value, valueId) => [valueId, value]),
|
|
1138
|
+
([valueId]) => arrayHas(valueIds, valueId),
|
|
1139
|
+
)
|
|
1140
|
+
: arrayFilter(
|
|
1141
|
+
arrayMap(valueIds, (valueId) => [valueId, values[valueId]]),
|
|
1142
|
+
([, value]) => !isUndefined(value),
|
|
1143
|
+
),
|
|
1144
|
+
);
|
|
1063
1145
|
const saveValues = async (values, partial) =>
|
|
1064
1146
|
valuesSave
|
|
1065
1147
|
? await saveTable(
|
|
1066
1148
|
valuesTableName,
|
|
1067
1149
|
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
1068
|
-
{
|
|
1150
|
+
{
|
|
1151
|
+
[SINGLE_ROW_ID]: isUndefined(valuesSaveValueIds)
|
|
1152
|
+
? values
|
|
1153
|
+
: getValuesSubset(values, valuesSaveValueIds, partial),
|
|
1154
|
+
},
|
|
1069
1155
|
true,
|
|
1070
1156
|
true,
|
|
1071
1157
|
partial,
|
|
1158
|
+
void 0,
|
|
1159
|
+
valuesSaveValueIds,
|
|
1072
1160
|
)
|
|
1073
1161
|
: null;
|
|
1074
1162
|
const loadTables = async () =>
|
|
@@ -1088,9 +1176,14 @@ const createTabularPersister = (
|
|
|
1088
1176
|
);
|
|
1089
1177
|
const loadValues = async () =>
|
|
1090
1178
|
valuesLoad
|
|
1091
|
-
? (
|
|
1092
|
-
|
|
1093
|
-
|
|
1179
|
+
? (
|
|
1180
|
+
await loadTable(
|
|
1181
|
+
valuesTableName,
|
|
1182
|
+
DEFAULT_ROW_ID_COLUMN_NAME,
|
|
1183
|
+
void 0,
|
|
1184
|
+
valuesLoadValueIds,
|
|
1185
|
+
)
|
|
1186
|
+
)[SINGLE_ROW_ID]
|
|
1094
1187
|
: {};
|
|
1095
1188
|
const getPersisted = () =>
|
|
1096
1189
|
transaction(async () => {
|
|
@@ -303,13 +303,14 @@ const createCustomPersister = (
|
|
|
303
303
|
const content = await getPersisted();
|
|
304
304
|
if (isArray(content)) {
|
|
305
305
|
setContentOrChanges(content);
|
|
306
|
-
} else if (initialContent) {
|
|
306
|
+
} else if (isUndefined(content) && initialContent) {
|
|
307
307
|
setDefaultContent(initialContent);
|
|
308
|
-
} else {
|
|
308
|
+
} else if (!isUndefined(content)) {
|
|
309
309
|
errorNew(`Content is not an array: ${content}`);
|
|
310
310
|
}
|
|
311
311
|
},
|
|
312
|
-
() => {
|
|
312
|
+
(error) => {
|
|
313
|
+
onIgnoredError?.(error);
|
|
313
314
|
if (initialContent) {
|
|
314
315
|
setDefaultContent(initialContent);
|
|
315
316
|
}
|
|
@@ -303,13 +303,14 @@ const createCustomPersister = (
|
|
|
303
303
|
const content = await getPersisted();
|
|
304
304
|
if (isArray(content)) {
|
|
305
305
|
setContentOrChanges(content);
|
|
306
|
-
} else if (initialContent) {
|
|
306
|
+
} else if (isUndefined(content) && initialContent) {
|
|
307
307
|
setDefaultContent(initialContent);
|
|
308
|
-
} else {
|
|
308
|
+
} else if (!isUndefined(content)) {
|
|
309
309
|
errorNew(`Content is not an array: ${content}`);
|
|
310
310
|
}
|
|
311
311
|
},
|
|
312
|
-
() => {
|
|
312
|
+
(error) => {
|
|
313
|
+
onIgnoredError?.(error);
|
|
313
314
|
if (initialContent) {
|
|
314
315
|
setDefaultContent(initialContent);
|
|
315
316
|
}
|
|
@@ -309,13 +309,14 @@ const createCustomPersister = (
|
|
|
309
309
|
const content = await getPersisted();
|
|
310
310
|
if (isArray(content)) {
|
|
311
311
|
setContentOrChanges(content);
|
|
312
|
-
} else if (initialContent) {
|
|
312
|
+
} else if (isUndefined(content) && initialContent) {
|
|
313
313
|
setDefaultContent(initialContent);
|
|
314
|
-
} else {
|
|
314
|
+
} else if (!isUndefined(content)) {
|
|
315
315
|
errorNew(`Content is not an array: ${content}`);
|
|
316
316
|
}
|
|
317
317
|
},
|
|
318
|
-
() => {
|
|
318
|
+
(error) => {
|
|
319
|
+
onIgnoredError?.(error);
|
|
319
320
|
if (initialContent) {
|
|
320
321
|
setDefaultContent(initialContent);
|
|
321
322
|
}
|
|
@@ -309,13 +309,14 @@ const createCustomPersister = (
|
|
|
309
309
|
const content = await getPersisted();
|
|
310
310
|
if (isArray(content)) {
|
|
311
311
|
setContentOrChanges(content);
|
|
312
|
-
} else if (initialContent) {
|
|
312
|
+
} else if (isUndefined(content) && initialContent) {
|
|
313
313
|
setDefaultContent(initialContent);
|
|
314
|
-
} else {
|
|
314
|
+
} else if (!isUndefined(content)) {
|
|
315
315
|
errorNew(`Content is not an array: ${content}`);
|
|
316
316
|
}
|
|
317
317
|
},
|
|
318
|
-
() => {
|
|
318
|
+
(error) => {
|
|
319
|
+
onIgnoredError?.(error);
|
|
319
320
|
if (initialContent) {
|
|
320
321
|
setDefaultContent(initialContent);
|
|
321
322
|
}
|