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