tinybase 6.1.0-beta.4 → 6.1.0-beta.5
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/persisters/index.d.ts +82 -40
- package/@types/persisters/persister-automerge/index.d.ts +4 -4
- package/@types/persisters/persister-automerge/with-schemas/index.d.ts +4 -4
- package/@types/persisters/persister-browser/index.d.ts +4 -4
- package/@types/persisters/persister-browser/with-schemas/index.d.ts +4 -4
- package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +3 -3
- package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-electric-sql/index.d.ts +3 -3
- package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-expo-sqlite/index.d.ts +3 -3
- package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-file/index.d.ts +2 -2
- package/@types/persisters/persister-file/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-indexed-db/index.d.ts +2 -2
- package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-libsql/index.d.ts +3 -3
- package/@types/persisters/persister-libsql/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-partykit-client/index.d.ts +2 -2
- package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-pglite/index.d.ts +3 -3
- package/@types/persisters/persister-pglite/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-postgres/index.d.ts +3 -3
- package/@types/persisters/persister-postgres/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-powersync/index.d.ts +3 -3
- package/@types/persisters/persister-powersync/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-remote/index.d.ts +2 -2
- package/@types/persisters/persister-remote/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-sqlite-bun/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite-wasm/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite3/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-yjs/index.d.ts +4 -4
- package/@types/persisters/persister-yjs/with-schemas/index.d.ts +4 -4
- package/@types/persisters/with-schemas/index.d.ts +86 -42
- package/@types/synchronizers/index.d.ts +18 -16
- package/@types/synchronizers/synchronizer-broadcast-channel/index.d.ts +3 -3
- package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -3
- package/@types/synchronizers/synchronizer-local/index.d.ts +2 -2
- package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +2 -2
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +5 -5
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +5 -5
- package/@types/synchronizers/synchronizer-ws-server/index.d.ts +37 -37
- package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +37 -37
- package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +7 -7
- package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +7 -7
- package/@types/synchronizers/with-schemas/index.d.ts +18 -16
- package/@types/ui-react/index.d.ts +2 -2
- package/@types/ui-react/with-schemas/index.d.ts +2 -2
- package/index.js +23 -17
- package/mergeable-store/index.js +23 -17
- package/mergeable-store/with-schemas/index.js +23 -17
- 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/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-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-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/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/package.json +8 -4
- package/persisters/index.js +293 -161
- package/persisters/persister-automerge/index.js +55 -50
- package/persisters/persister-automerge/with-schemas/index.js +55 -50
- package/persisters/persister-browser/index.js +56 -55
- package/persisters/persister-browser/with-schemas/index.js +56 -55
- package/persisters/persister-cr-sqlite-wasm/index.js +181 -134
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +181 -134
- package/persisters/persister-durable-object-storage/index.js +58 -53
- package/persisters/persister-durable-object-storage/with-schemas/index.js +58 -53
- package/persisters/persister-electric-sql/index.js +181 -134
- package/persisters/persister-electric-sql/with-schemas/index.js +181 -134
- package/persisters/persister-expo-sqlite/index.js +181 -134
- package/persisters/persister-expo-sqlite/with-schemas/index.js +181 -134
- package/persisters/persister-file/index.js +55 -50
- package/persisters/persister-file/with-schemas/index.js +55 -50
- package/persisters/persister-indexed-db/index.js +82 -78
- package/persisters/persister-indexed-db/with-schemas/index.js +82 -78
- package/persisters/persister-libsql/index.js +182 -135
- package/persisters/persister-libsql/with-schemas/index.js +182 -135
- package/persisters/persister-partykit-client/index.js +56 -51
- package/persisters/persister-partykit-client/with-schemas/index.js +56 -51
- package/persisters/persister-pglite/index.js +299 -173
- package/persisters/persister-pglite/with-schemas/index.js +299 -173
- package/persisters/persister-postgres/index.js +296 -171
- package/persisters/persister-postgres/with-schemas/index.js +296 -171
- package/persisters/persister-powersync/index.js +189 -138
- package/persisters/persister-powersync/with-schemas/index.js +189 -138
- package/persisters/persister-remote/index.js +55 -50
- package/persisters/persister-remote/with-schemas/index.js +55 -50
- package/persisters/persister-sqlite-bun/index.js +182 -135
- package/persisters/persister-sqlite-bun/with-schemas/index.js +182 -135
- package/persisters/persister-sqlite-wasm/index.js +182 -135
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +182 -135
- package/persisters/persister-sqlite3/index.js +181 -134
- package/persisters/persister-sqlite3/with-schemas/index.js +181 -134
- package/persisters/persister-yjs/index.js +55 -50
- package/persisters/persister-yjs/with-schemas/index.js +55 -50
- package/persisters/with-schemas/index.js +293 -161
- package/readme.md +2 -2
- package/releases.md +29 -1
- package/store/index.js +20 -15
- package/store/with-schemas/index.js +20 -15
- package/synchronizers/index.js +68 -63
- package/synchronizers/synchronizer-broadcast-channel/index.js +68 -63
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-local/index.js +68 -63
- package/synchronizers/synchronizer-local/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-ws-client/index.js +68 -63
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-ws-server/index.js +79 -70
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +79 -70
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +69 -51
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +69 -51
- package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/synchronizers/with-schemas/index.js +68 -63
- package/ui-react-inspector/index.js +68 -60
- package/ui-react-inspector/with-schemas/index.js +68 -60
- package/with-schemas/index.js +23 -17
|
@@ -3,7 +3,10 @@ const TINYBASE = 'tinybase';
|
|
|
3
3
|
const EMPTY_STRING = '';
|
|
4
4
|
const COMMA = ',';
|
|
5
5
|
const STRING = getTypeOf(EMPTY_STRING);
|
|
6
|
+
const TRUE = 'true';
|
|
6
7
|
const UNDEFINED = '\uFFFC';
|
|
8
|
+
const strReplace = (str, searchValue, replaceValue) =>
|
|
9
|
+
str.replace(searchValue, replaceValue);
|
|
7
10
|
|
|
8
11
|
const promise = Promise;
|
|
9
12
|
const THOUSAND = 1e3;
|
|
@@ -19,11 +22,20 @@ const isArray = (thing) => Array.isArray(thing);
|
|
|
19
22
|
const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
|
|
20
23
|
const size = (arrayOrString) => arrayOrString.length;
|
|
21
24
|
const test = (regex, subject) => regex.test(subject);
|
|
25
|
+
const noop = () => {};
|
|
22
26
|
const promiseNew = (resolver) => new promise(resolver);
|
|
23
27
|
const promiseAll = async (promises) => promise.all(promises);
|
|
24
28
|
const errorNew = (message) => {
|
|
25
29
|
throw new Error(message);
|
|
26
30
|
};
|
|
31
|
+
const tryCatch = async (action, then1, then2) => {
|
|
32
|
+
try {
|
|
33
|
+
return await action();
|
|
34
|
+
} catch (error) {
|
|
35
|
+
/* istanbul ignore next */
|
|
36
|
+
then1?.(error);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
27
39
|
|
|
28
40
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
29
41
|
const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
|
|
@@ -47,14 +59,20 @@ const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
|
47
59
|
const SELECT = 'SELECT';
|
|
48
60
|
const WHERE = 'WHERE';
|
|
49
61
|
const TABLE = 'TABLE';
|
|
62
|
+
const INSERT = 'INSERT';
|
|
63
|
+
const DELETE = 'DELETE';
|
|
64
|
+
const UPDATE = 'UPDATE';
|
|
50
65
|
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
51
|
-
const
|
|
52
|
-
const
|
|
66
|
+
const FROM = 'FROM';
|
|
67
|
+
const DELETE_FROM = DELETE + ' ' + FROM;
|
|
68
|
+
const SELECT_STAR_FROM = SELECT + '*' + FROM;
|
|
53
69
|
const PRAGMA = 'pragma_';
|
|
54
70
|
const DATA_VERSION = 'data_version';
|
|
55
71
|
const SCHEMA_VERSION = 'schema_version';
|
|
56
|
-
const FROM = 'FROM ';
|
|
57
72
|
const PRAGMA_TABLE = 'pragma_table_';
|
|
73
|
+
const CREATE = 'CREATE ';
|
|
74
|
+
const CREATE_TABLE = CREATE + TABLE;
|
|
75
|
+
const TABLE_NAME_PLACEHOLDER = '$tableName';
|
|
58
76
|
const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
59
77
|
onSqlCommand
|
|
60
78
|
? async (sql, params) => {
|
|
@@ -62,7 +80,7 @@ const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
|
62
80
|
return await executeCommand(sql, params);
|
|
63
81
|
}
|
|
64
82
|
: executeCommand;
|
|
65
|
-
const escapeId = (str) => `"${str
|
|
83
|
+
const escapeId = (str) => `"${strReplace(str, /"/g, '""')}"`;
|
|
66
84
|
const escapeColumnNames = (...columnNames) =>
|
|
67
85
|
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
68
86
|
const getPlaceholders = (array, offset = [1]) =>
|
|
@@ -70,6 +88,9 @@ const getPlaceholders = (array, offset = [1]) =>
|
|
|
70
88
|
arrayMap(array, () => '$' + offset[0]++),
|
|
71
89
|
COMMA,
|
|
72
90
|
);
|
|
91
|
+
const getWhereCondition = (tableName, condition = TRUE) =>
|
|
92
|
+
WHERE +
|
|
93
|
+
`(${strReplace(condition, TABLE_NAME_PLACEHOLDER, escapeId(tableName))})`;
|
|
73
94
|
|
|
74
95
|
const object = Object;
|
|
75
96
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
@@ -104,6 +125,8 @@ const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
|
104
125
|
|
|
105
126
|
const mapNew = (entries) => new Map(entries);
|
|
106
127
|
const mapGet = (map, key) => map?.get(key);
|
|
128
|
+
const mapForEach = (map, cb) =>
|
|
129
|
+
collForEach(map, (value, key) => cb(key, value));
|
|
107
130
|
const mapMap = (coll, cb) =>
|
|
108
131
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
109
132
|
const mapSet = (map, key, value) =>
|
|
@@ -158,6 +181,7 @@ const TABLE_ID = 'tableId';
|
|
|
158
181
|
const TABLE_NAME = 'tableName';
|
|
159
182
|
const DELETE_EMPTY_COLUMNS = 'deleteEmptyColumns';
|
|
160
183
|
const DELETE_EMPTY_TABLE = 'deleteEmptyTable';
|
|
184
|
+
const CONDITION = 'condition';
|
|
161
185
|
const DEFAULT_CONFIG = {
|
|
162
186
|
mode: JSON$1,
|
|
163
187
|
[AUTO_LOAD_INTERVAL_SECONDS]: 1,
|
|
@@ -225,29 +249,42 @@ const getConfigStructures = (configOrStoreTableName) => {
|
|
|
225
249
|
const valuesTable = valuesConfig[2];
|
|
226
250
|
const managedTableNames = setNew(valuesTable);
|
|
227
251
|
const excludedTableNames = setNew(valuesTable);
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
252
|
+
const tablesLoadConfig = getDefaultedTabularConfigMap(
|
|
253
|
+
load,
|
|
254
|
+
{
|
|
255
|
+
[TABLE_ID]: null,
|
|
256
|
+
[ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME,
|
|
257
|
+
[CONDITION]: TRUE,
|
|
258
|
+
},
|
|
259
|
+
TABLE_ID,
|
|
260
|
+
(tableName) => collHas(excludedTableNames, tableName),
|
|
261
|
+
(tableName) => setAdd(managedTableNames, tableName),
|
|
262
|
+
);
|
|
263
|
+
const tablesSaveConfig = getDefaultedTabularConfigMap(
|
|
264
|
+
save,
|
|
265
|
+
{
|
|
266
|
+
[TABLE_NAME]: null,
|
|
267
|
+
[ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME,
|
|
268
|
+
[DELETE_EMPTY_COLUMNS]: 0,
|
|
269
|
+
[DELETE_EMPTY_TABLE]: 0,
|
|
270
|
+
[CONDITION]: null,
|
|
271
|
+
},
|
|
272
|
+
TABLE_NAME,
|
|
273
|
+
(_, tableName) => collHas(excludedTableNames, tableName),
|
|
274
|
+
(_, tableName) => setAdd(managedTableNames, tableName),
|
|
275
|
+
);
|
|
276
|
+
mapForEach(
|
|
277
|
+
tablesSaveConfig,
|
|
278
|
+
(_, tableSaveConfig) =>
|
|
279
|
+
(tableSaveConfig[4] ??=
|
|
280
|
+
mapGet(tablesLoadConfig, tableSaveConfig[0])?.[2] ?? TRUE),
|
|
281
|
+
);
|
|
282
|
+
return [
|
|
283
|
+
0,
|
|
284
|
+
autoLoadIntervalSeconds,
|
|
285
|
+
[tablesLoadConfig, tablesSaveConfig, valuesConfig],
|
|
286
|
+
managedTableNames,
|
|
249
287
|
];
|
|
250
|
-
return [0, autoLoadIntervalSeconds, tabularConfig, managedTableNames];
|
|
251
288
|
};
|
|
252
289
|
|
|
253
290
|
const jsonString = JSON.stringify;
|
|
@@ -413,12 +450,7 @@ const createCustomPersister = (
|
|
|
413
450
|
while (
|
|
414
451
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
415
452
|
) {
|
|
416
|
-
|
|
417
|
-
await action();
|
|
418
|
-
} catch (error) {
|
|
419
|
-
/* istanbul ignore next */
|
|
420
|
-
onIgnoredError?.(error);
|
|
421
|
-
}
|
|
453
|
+
await tryCatch(action, onIgnoredError);
|
|
422
454
|
}
|
|
423
455
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
424
456
|
}
|
|
@@ -438,21 +470,23 @@ const createCustomPersister = (
|
|
|
438
470
|
setStatus(1 /* Loading */);
|
|
439
471
|
loads++;
|
|
440
472
|
await schedule(async () => {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
473
|
+
await tryCatch(
|
|
474
|
+
async () => {
|
|
475
|
+
const content = await getPersisted();
|
|
476
|
+
if (isArray(content)) {
|
|
477
|
+
setContentOrChanges(content);
|
|
478
|
+
} else if (initialContent) {
|
|
479
|
+
setDefaultContent(initialContent);
|
|
480
|
+
} else {
|
|
481
|
+
errorNew(`Content is not an array: ${content}`);
|
|
482
|
+
}
|
|
483
|
+
},
|
|
484
|
+
() => {
|
|
485
|
+
if (initialContent) {
|
|
486
|
+
setDefaultContent(initialContent);
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
);
|
|
456
490
|
setStatus(0 /* Idle */);
|
|
457
491
|
});
|
|
458
492
|
}
|
|
@@ -461,29 +495,33 @@ const createCustomPersister = (
|
|
|
461
495
|
const startAutoLoad = async (initialContent) => {
|
|
462
496
|
stopAutoLoad();
|
|
463
497
|
await load(initialContent);
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
498
|
+
await tryCatch(
|
|
499
|
+
async () =>
|
|
500
|
+
(autoLoadHandle = await addPersisterListener(
|
|
501
|
+
async (content, changes) => {
|
|
502
|
+
if (changes || content) {
|
|
503
|
+
/* istanbul ignore else */
|
|
504
|
+
if (status != 2 /* Saving */) {
|
|
505
|
+
setStatus(1 /* Loading */);
|
|
506
|
+
loads++;
|
|
507
|
+
setContentOrChanges(changes ?? content);
|
|
508
|
+
setStatus(0 /* Idle */);
|
|
509
|
+
}
|
|
510
|
+
} else {
|
|
511
|
+
await load();
|
|
512
|
+
}
|
|
513
|
+
},
|
|
514
|
+
)),
|
|
515
|
+
onIgnoredError,
|
|
516
|
+
);
|
|
482
517
|
return persister;
|
|
483
518
|
};
|
|
484
|
-
const stopAutoLoad = () => {
|
|
519
|
+
const stopAutoLoad = async () => {
|
|
485
520
|
if (autoLoadHandle) {
|
|
486
|
-
|
|
521
|
+
await tryCatch(
|
|
522
|
+
() => delPersisterListener(autoLoadHandle),
|
|
523
|
+
onIgnoredError,
|
|
524
|
+
);
|
|
487
525
|
autoLoadHandle = void 0;
|
|
488
526
|
}
|
|
489
527
|
return persister;
|
|
@@ -495,12 +533,7 @@ const createCustomPersister = (
|
|
|
495
533
|
setStatus(2 /* Saving */);
|
|
496
534
|
saves++;
|
|
497
535
|
await schedule(async () => {
|
|
498
|
-
|
|
499
|
-
await setPersisted(getContent, changes);
|
|
500
|
-
} catch (error) {
|
|
501
|
-
/* istanbul ignore next */
|
|
502
|
-
onIgnoredError?.(error);
|
|
503
|
-
}
|
|
536
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
504
537
|
setStatus(0 /* Idle */);
|
|
505
538
|
});
|
|
506
539
|
}
|
|
@@ -517,7 +550,7 @@ const createCustomPersister = (
|
|
|
517
550
|
});
|
|
518
551
|
return persister;
|
|
519
552
|
};
|
|
520
|
-
const stopAutoSave = () => {
|
|
553
|
+
const stopAutoSave = async () => {
|
|
521
554
|
if (autoSaveListenerId) {
|
|
522
555
|
store.delListener(autoSaveListenerId);
|
|
523
556
|
autoSaveListenerId = void 0;
|
|
@@ -538,9 +571,10 @@ const createCustomPersister = (
|
|
|
538
571
|
return persister;
|
|
539
572
|
};
|
|
540
573
|
const getStore = () => store;
|
|
541
|
-
const destroy = () => {
|
|
574
|
+
const destroy = async () => {
|
|
542
575
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
543
|
-
|
|
576
|
+
await persister.stopAutoLoad();
|
|
577
|
+
return await persister.stopAutoSave();
|
|
544
578
|
};
|
|
545
579
|
const getStats = () => ({loads, saves});
|
|
546
580
|
const persister = {
|
|
@@ -584,13 +618,15 @@ const getCommandFunctions = (
|
|
|
584
618
|
({tn, cn}) => setAdd(mapEnsure(schemaMap, tn, setNew), cn),
|
|
585
619
|
);
|
|
586
620
|
};
|
|
587
|
-
const loadTable = async (tableName, rowIdColumnName) =>
|
|
621
|
+
const loadTable = async (tableName, rowIdColumnName, condition) =>
|
|
588
622
|
canSelect(tableName, rowIdColumnName)
|
|
589
623
|
? objNew(
|
|
590
624
|
arrayFilter(
|
|
591
625
|
arrayMap(
|
|
592
626
|
await databaseExecuteCommand(
|
|
593
|
-
SELECT_STAR_FROM +
|
|
627
|
+
SELECT_STAR_FROM +
|
|
628
|
+
escapeId(tableName) +
|
|
629
|
+
getWhereCondition(tableName, condition),
|
|
594
630
|
),
|
|
595
631
|
(row) => [
|
|
596
632
|
row[rowIdColumnName],
|
|
@@ -610,6 +646,7 @@ const getCommandFunctions = (
|
|
|
610
646
|
deleteEmptyColumns,
|
|
611
647
|
deleteEmptyTable,
|
|
612
648
|
partial = false,
|
|
649
|
+
condition = TRUE,
|
|
613
650
|
) => {
|
|
614
651
|
const settingColumnNameSet = setNew();
|
|
615
652
|
objMap(content ?? {}, (contentRow) =>
|
|
@@ -621,6 +658,7 @@ const getCommandFunctions = (
|
|
|
621
658
|
if (
|
|
622
659
|
!partial &&
|
|
623
660
|
deleteEmptyTable &&
|
|
661
|
+
condition == TRUE &&
|
|
624
662
|
arrayIsEmpty(settingColumnNames) &&
|
|
625
663
|
collHas(schemaMap, tableName)
|
|
626
664
|
) {
|
|
@@ -633,8 +671,7 @@ const getCommandFunctions = (
|
|
|
633
671
|
if (!arrayIsEmpty(settingColumnNames)) {
|
|
634
672
|
if (!collHas(schemaMap, tableName)) {
|
|
635
673
|
await databaseExecuteCommand(
|
|
636
|
-
|
|
637
|
-
TABLE +
|
|
674
|
+
CREATE_TABLE +
|
|
638
675
|
escapeId(tableName) +
|
|
639
676
|
`(${escapeId(rowIdColumnName)}${columnType} PRIMARY KEY${arrayJoin(
|
|
640
677
|
arrayMap(
|
|
@@ -697,7 +734,9 @@ const getCommandFunctions = (
|
|
|
697
734
|
if (partial) {
|
|
698
735
|
if (isUndefined(content)) {
|
|
699
736
|
await databaseExecuteCommand(
|
|
700
|
-
DELETE_FROM +
|
|
737
|
+
DELETE_FROM +
|
|
738
|
+
escapeId(tableName) +
|
|
739
|
+
getWhereCondition(tableName, condition),
|
|
701
740
|
);
|
|
702
741
|
} else {
|
|
703
742
|
await promiseAll(
|
|
@@ -706,9 +745,8 @@ const getCommandFunctions = (
|
|
|
706
745
|
await databaseExecuteCommand(
|
|
707
746
|
DELETE_FROM +
|
|
708
747
|
escapeId(tableName) +
|
|
709
|
-
|
|
710
|
-
escapeId(rowIdColumnName)
|
|
711
|
-
'=$1',
|
|
748
|
+
getWhereCondition(tableName, condition) +
|
|
749
|
+
`AND(${escapeId(rowIdColumnName)}=$1)`,
|
|
712
750
|
[rowId],
|
|
713
751
|
);
|
|
714
752
|
} else if (!arrayIsEmpty(settingColumnNames)) {
|
|
@@ -752,14 +790,15 @@ const getCommandFunctions = (
|
|
|
752
790
|
await databaseExecuteCommand(
|
|
753
791
|
DELETE_FROM +
|
|
754
792
|
escapeId(tableName) +
|
|
755
|
-
|
|
756
|
-
escapeId(rowIdColumnName)
|
|
757
|
-
`NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
793
|
+
getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
|
|
794
|
+
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
758
795
|
deleteRowIds,
|
|
759
796
|
);
|
|
760
797
|
} else if (collHas(schemaMap, tableName)) {
|
|
761
798
|
await databaseExecuteCommand(
|
|
762
|
-
DELETE_FROM +
|
|
799
|
+
DELETE_FROM +
|
|
800
|
+
escapeId(tableName) +
|
|
801
|
+
getWhereCondition(tableName, condition),
|
|
763
802
|
);
|
|
764
803
|
}
|
|
765
804
|
}
|
|
@@ -767,11 +806,7 @@ const getCommandFunctions = (
|
|
|
767
806
|
const transaction = async (actions) => {
|
|
768
807
|
let result;
|
|
769
808
|
await databaseExecuteCommand('BEGIN');
|
|
770
|
-
|
|
771
|
-
result = await actions();
|
|
772
|
-
} catch (error) {
|
|
773
|
-
onIgnoredError?.(error);
|
|
774
|
-
}
|
|
809
|
+
await tryCatch(async () => (result = await actions()), onIgnoredError);
|
|
775
810
|
await databaseExecuteCommand('END');
|
|
776
811
|
return result;
|
|
777
812
|
};
|
|
@@ -786,7 +821,8 @@ const defaultUpsert = async (
|
|
|
786
821
|
) => {
|
|
787
822
|
const offset = [1];
|
|
788
823
|
await executeCommand(
|
|
789
|
-
|
|
824
|
+
INSERT +
|
|
825
|
+
' INTO' +
|
|
790
826
|
escapeId(tableName) +
|
|
791
827
|
'(' +
|
|
792
828
|
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
@@ -801,7 +837,7 @@ const defaultUpsert = async (
|
|
|
801
837
|
) +
|
|
802
838
|
'ON CONFLICT(' +
|
|
803
839
|
escapeId(rowIdColumnName) +
|
|
804
|
-
|
|
840
|
+
`)DO ${UPDATE} SET` +
|
|
805
841
|
arrayJoin(
|
|
806
842
|
arrayMap(
|
|
807
843
|
changingColumnNames,
|
|
@@ -823,7 +859,7 @@ const createJsonPersister = (
|
|
|
823
859
|
addPersisterListener,
|
|
824
860
|
delPersisterListener,
|
|
825
861
|
onIgnoredError,
|
|
826
|
-
|
|
862
|
+
extraDestroy,
|
|
827
863
|
persist,
|
|
828
864
|
[storeTableName, storeIdColumnName, storeColumnName],
|
|
829
865
|
managedTableNames,
|
|
@@ -842,8 +878,8 @@ const createJsonPersister = (
|
|
|
842
878
|
columnType,
|
|
843
879
|
upsert,
|
|
844
880
|
);
|
|
845
|
-
const getPersisted =
|
|
846
|
-
|
|
881
|
+
const getPersisted = () =>
|
|
882
|
+
transaction(async () => {
|
|
847
883
|
await refreshSchema();
|
|
848
884
|
return jsonParseWithUndefined(
|
|
849
885
|
(await loadTable(storeTableName, storeIdColumnName))[SINGLE_ROW_ID]?.[
|
|
@@ -851,8 +887,8 @@ const createJsonPersister = (
|
|
|
851
887
|
] ?? 'null',
|
|
852
888
|
);
|
|
853
889
|
});
|
|
854
|
-
const setPersisted =
|
|
855
|
-
|
|
890
|
+
const setPersisted = (getContent) =>
|
|
891
|
+
transaction(async () => {
|
|
856
892
|
await refreshSchema();
|
|
857
893
|
await saveTable(
|
|
858
894
|
storeTableName,
|
|
@@ -866,9 +902,10 @@ const createJsonPersister = (
|
|
|
866
902
|
true,
|
|
867
903
|
);
|
|
868
904
|
});
|
|
869
|
-
const destroy = () => {
|
|
870
|
-
persister.stopAutoLoad()
|
|
871
|
-
|
|
905
|
+
const destroy = async () => {
|
|
906
|
+
await persister.stopAutoLoad();
|
|
907
|
+
await persister.stopAutoSave();
|
|
908
|
+
extraDestroy();
|
|
872
909
|
return persister;
|
|
873
910
|
};
|
|
874
911
|
const persister = createCustomPersister(
|
|
@@ -892,7 +929,7 @@ const createTabularPersister = (
|
|
|
892
929
|
addPersisterListener,
|
|
893
930
|
delPersisterListener,
|
|
894
931
|
onIgnoredError,
|
|
895
|
-
|
|
932
|
+
extraDestroy,
|
|
896
933
|
persist,
|
|
897
934
|
[
|
|
898
935
|
tablesLoadConfig,
|
|
@@ -919,12 +956,18 @@ const createTabularPersister = (
|
|
|
919
956
|
encode,
|
|
920
957
|
decode,
|
|
921
958
|
);
|
|
922
|
-
const saveTables =
|
|
923
|
-
|
|
959
|
+
const saveTables = (tables, partial) =>
|
|
960
|
+
promiseAll(
|
|
924
961
|
mapMap(
|
|
925
962
|
tablesSaveConfig,
|
|
926
963
|
async (
|
|
927
|
-
[
|
|
964
|
+
[
|
|
965
|
+
tableName,
|
|
966
|
+
rowIdColumnName,
|
|
967
|
+
deleteEmptyColumns,
|
|
968
|
+
deleteEmptyTable,
|
|
969
|
+
condition,
|
|
970
|
+
],
|
|
928
971
|
tableId,
|
|
929
972
|
) => {
|
|
930
973
|
if (!partial || objHas(tables, tableId)) {
|
|
@@ -935,6 +978,7 @@ const createTabularPersister = (
|
|
|
935
978
|
deleteEmptyColumns,
|
|
936
979
|
deleteEmptyTable,
|
|
937
980
|
partial,
|
|
981
|
+
condition,
|
|
938
982
|
);
|
|
939
983
|
}
|
|
940
984
|
},
|
|
@@ -957,9 +1001,9 @@ const createTabularPersister = (
|
|
|
957
1001
|
await promiseAll(
|
|
958
1002
|
mapMap(
|
|
959
1003
|
tablesLoadConfig,
|
|
960
|
-
async ([tableId, rowIdColumnName], tableName) => [
|
|
1004
|
+
async ([tableId, rowIdColumnName, condition], tableName) => [
|
|
961
1005
|
tableId,
|
|
962
|
-
await loadTable(tableName, rowIdColumnName),
|
|
1006
|
+
await loadTable(tableName, rowIdColumnName, condition),
|
|
963
1007
|
],
|
|
964
1008
|
),
|
|
965
1009
|
),
|
|
@@ -972,8 +1016,8 @@ const createTabularPersister = (
|
|
|
972
1016
|
SINGLE_ROW_ID
|
|
973
1017
|
]
|
|
974
1018
|
: {};
|
|
975
|
-
const getPersisted =
|
|
976
|
-
|
|
1019
|
+
const getPersisted = () =>
|
|
1020
|
+
transaction(async () => {
|
|
977
1021
|
await refreshSchema();
|
|
978
1022
|
const tables = await loadTables();
|
|
979
1023
|
const values = await loadValues();
|
|
@@ -981,8 +1025,8 @@ const createTabularPersister = (
|
|
|
981
1025
|
? [tables, values]
|
|
982
1026
|
: void 0;
|
|
983
1027
|
});
|
|
984
|
-
const setPersisted =
|
|
985
|
-
|
|
1028
|
+
const setPersisted = (getContent, changes) =>
|
|
1029
|
+
transaction(async () => {
|
|
986
1030
|
await refreshSchema();
|
|
987
1031
|
if (!isUndefined(changes)) {
|
|
988
1032
|
await saveTables(changes[0], true);
|
|
@@ -993,9 +1037,10 @@ const createTabularPersister = (
|
|
|
993
1037
|
await saveValues(values);
|
|
994
1038
|
}
|
|
995
1039
|
});
|
|
996
|
-
const destroy = () => {
|
|
997
|
-
persister.stopAutoLoad()
|
|
998
|
-
|
|
1040
|
+
const destroy = async () => {
|
|
1041
|
+
await persister.stopAutoLoad();
|
|
1042
|
+
await persister.stopAutoSave();
|
|
1043
|
+
extraDestroy();
|
|
999
1044
|
return persister;
|
|
1000
1045
|
};
|
|
1001
1046
|
const persister = createCustomPersister(
|
|
@@ -1040,22 +1085,24 @@ const createCustomSqlitePersister = (
|
|
|
1040
1085
|
const addPersisterListener = (listener) => {
|
|
1041
1086
|
let interval;
|
|
1042
1087
|
const startPolling = () =>
|
|
1043
|
-
(interval = startInterval(
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
if (dataVersion !=
|
|
1051
|
-
|
|
1088
|
+
(interval = startInterval(
|
|
1089
|
+
() =>
|
|
1090
|
+
tryCatch(async () => {
|
|
1091
|
+
const [{d, s, c}] = await executeCommand(
|
|
1092
|
+
SELECT + // eslint-disable-next-line max-len
|
|
1093
|
+
` ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
|
|
1094
|
+
);
|
|
1095
|
+
if (d != dataVersion || s != schemaVersion || c != totalChanges) {
|
|
1096
|
+
if (dataVersion != null) {
|
|
1097
|
+
listener();
|
|
1098
|
+
}
|
|
1099
|
+
dataVersion = d;
|
|
1100
|
+
schemaVersion = s;
|
|
1101
|
+
totalChanges = c;
|
|
1052
1102
|
}
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
}
|
|
1057
|
-
} catch {}
|
|
1058
|
-
}, autoLoadIntervalSeconds));
|
|
1103
|
+
}),
|
|
1104
|
+
autoLoadIntervalSeconds,
|
|
1105
|
+
));
|
|
1059
1106
|
const stopPolling = () => {
|
|
1060
1107
|
dataVersion = schemaVersion = totalChanges = null;
|
|
1061
1108
|
stopInterval(interval);
|
|
@@ -1087,8 +1134,8 @@ const createCustomSqlitePersister = (
|
|
|
1087
1134
|
collValues(managedTableNamesSet),
|
|
1088
1135
|
async (executeCommand2, managedTableNames) =>
|
|
1089
1136
|
await executeCommand2(
|
|
1090
|
-
// eslint-disable-next-line max-len
|
|
1091
|
-
|
|
1137
|
+
SELECT + // eslint-disable-next-line max-len
|
|
1138
|
+
` t.name tn,c.name cn FROM ${PRAGMA_TABLE}list()t,${PRAGMA_TABLE}info(t.name)c ${WHERE} t.schema='main'AND t.type IN('table','view')AND t.name IN(${getPlaceholders(managedTableNames)})ORDER BY t.name,c.name`,
|
|
1092
1139
|
managedTableNames,
|
|
1093
1140
|
),
|
|
1094
1141
|
thing,
|
|
@@ -1126,7 +1173,7 @@ const createSqlite3Persister = (
|
|
|
1126
1173
|
(observer) => db.off(CHANGE, observer),
|
|
1127
1174
|
onSqlCommand,
|
|
1128
1175
|
onIgnoredError,
|
|
1129
|
-
|
|
1176
|
+
noop,
|
|
1130
1177
|
3,
|
|
1131
1178
|
// StoreOrMergeableStore,
|
|
1132
1179
|
db,
|