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.
Files changed (233) hide show
  1. package/@types/persisters/index.d.ts +82 -40
  2. package/@types/persisters/persister-automerge/index.d.ts +4 -4
  3. package/@types/persisters/persister-automerge/with-schemas/index.d.ts +4 -4
  4. package/@types/persisters/persister-browser/index.d.ts +4 -4
  5. package/@types/persisters/persister-browser/with-schemas/index.d.ts +4 -4
  6. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +3 -3
  7. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +3 -3
  8. package/@types/persisters/persister-electric-sql/index.d.ts +3 -3
  9. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +3 -3
  10. package/@types/persisters/persister-expo-sqlite/index.d.ts +3 -3
  11. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +3 -3
  12. package/@types/persisters/persister-file/index.d.ts +2 -2
  13. package/@types/persisters/persister-file/with-schemas/index.d.ts +2 -2
  14. package/@types/persisters/persister-indexed-db/index.d.ts +2 -2
  15. package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +2 -2
  16. package/@types/persisters/persister-libsql/index.d.ts +3 -3
  17. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +3 -3
  18. package/@types/persisters/persister-partykit-client/index.d.ts +2 -2
  19. package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +2 -2
  20. package/@types/persisters/persister-pglite/index.d.ts +3 -3
  21. package/@types/persisters/persister-pglite/with-schemas/index.d.ts +3 -3
  22. package/@types/persisters/persister-postgres/index.d.ts +3 -3
  23. package/@types/persisters/persister-postgres/with-schemas/index.d.ts +3 -3
  24. package/@types/persisters/persister-powersync/index.d.ts +3 -3
  25. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +3 -3
  26. package/@types/persisters/persister-remote/index.d.ts +2 -2
  27. package/@types/persisters/persister-remote/with-schemas/index.d.ts +2 -2
  28. package/@types/persisters/persister-sqlite-bun/index.d.ts +3 -3
  29. package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +3 -3
  30. package/@types/persisters/persister-sqlite-wasm/index.d.ts +3 -3
  31. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +3 -3
  32. package/@types/persisters/persister-sqlite3/index.d.ts +3 -3
  33. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +3 -3
  34. package/@types/persisters/persister-yjs/index.d.ts +4 -4
  35. package/@types/persisters/persister-yjs/with-schemas/index.d.ts +4 -4
  36. package/@types/persisters/with-schemas/index.d.ts +86 -42
  37. package/@types/synchronizers/index.d.ts +18 -16
  38. package/@types/synchronizers/synchronizer-broadcast-channel/index.d.ts +3 -3
  39. package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -3
  40. package/@types/synchronizers/synchronizer-local/index.d.ts +2 -2
  41. package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +2 -2
  42. package/@types/synchronizers/synchronizer-ws-client/index.d.ts +5 -5
  43. package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +5 -5
  44. package/@types/synchronizers/synchronizer-ws-server/index.d.ts +37 -37
  45. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +37 -37
  46. package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +7 -7
  47. package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +7 -7
  48. package/@types/synchronizers/with-schemas/index.d.ts +18 -16
  49. package/@types/ui-react/index.d.ts +2 -2
  50. package/@types/ui-react/with-schemas/index.d.ts +2 -2
  51. package/index.js +23 -17
  52. package/mergeable-store/index.js +23 -17
  53. package/mergeable-store/with-schemas/index.js +23 -17
  54. package/min/index.js +1 -1
  55. package/min/index.js.gz +0 -0
  56. package/min/mergeable-store/index.js +1 -1
  57. package/min/mergeable-store/index.js.gz +0 -0
  58. package/min/mergeable-store/with-schemas/index.js +1 -1
  59. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  60. package/min/persisters/index.js +1 -1
  61. package/min/persisters/index.js.gz +0 -0
  62. package/min/persisters/persister-automerge/index.js +1 -1
  63. package/min/persisters/persister-automerge/index.js.gz +0 -0
  64. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  65. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  66. package/min/persisters/persister-browser/index.js +1 -1
  67. package/min/persisters/persister-browser/index.js.gz +0 -0
  68. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  69. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  70. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  71. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  72. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  73. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  74. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  75. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  76. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  77. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  78. package/min/persisters/persister-electric-sql/index.js +1 -1
  79. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  80. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  81. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  82. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  83. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  84. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  85. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  86. package/min/persisters/persister-file/index.js +1 -1
  87. package/min/persisters/persister-file/index.js.gz +0 -0
  88. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  89. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  90. package/min/persisters/persister-indexed-db/index.js +1 -1
  91. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  92. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  93. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  94. package/min/persisters/persister-libsql/index.js +1 -1
  95. package/min/persisters/persister-libsql/index.js.gz +0 -0
  96. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  97. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  98. package/min/persisters/persister-partykit-client/index.js +1 -1
  99. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  100. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  101. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  102. package/min/persisters/persister-pglite/index.js +1 -1
  103. package/min/persisters/persister-pglite/index.js.gz +0 -0
  104. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  105. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  106. package/min/persisters/persister-postgres/index.js +1 -1
  107. package/min/persisters/persister-postgres/index.js.gz +0 -0
  108. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  109. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  110. package/min/persisters/persister-powersync/index.js +1 -1
  111. package/min/persisters/persister-powersync/index.js.gz +0 -0
  112. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  113. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  114. package/min/persisters/persister-remote/index.js +1 -1
  115. package/min/persisters/persister-remote/index.js.gz +0 -0
  116. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  117. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  118. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  119. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  120. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  121. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  122. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  123. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  124. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  125. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  126. package/min/persisters/persister-sqlite3/index.js +1 -1
  127. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  128. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  129. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  130. package/min/persisters/persister-yjs/index.js +1 -1
  131. package/min/persisters/persister-yjs/index.js.gz +0 -0
  132. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  133. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  134. package/min/persisters/with-schemas/index.js +1 -1
  135. package/min/persisters/with-schemas/index.js.gz +0 -0
  136. package/min/store/index.js +1 -1
  137. package/min/store/index.js.gz +0 -0
  138. package/min/store/with-schemas/index.js +1 -1
  139. package/min/store/with-schemas/index.js.gz +0 -0
  140. package/min/synchronizers/index.js +1 -1
  141. package/min/synchronizers/index.js.gz +0 -0
  142. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  143. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  144. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  145. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  146. package/min/synchronizers/synchronizer-local/index.js +1 -1
  147. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  148. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  149. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  150. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  151. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  152. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  153. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  154. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  155. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  156. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  157. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  158. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  159. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  160. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  161. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  162. package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  163. package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
  164. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  165. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
  166. package/min/synchronizers/with-schemas/index.js +1 -1
  167. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  168. package/min/ui-react-inspector/index.js +1 -1
  169. package/min/ui-react-inspector/index.js.gz +0 -0
  170. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  171. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  172. package/min/with-schemas/index.js +1 -1
  173. package/min/with-schemas/index.js.gz +0 -0
  174. package/package.json +8 -4
  175. package/persisters/index.js +293 -161
  176. package/persisters/persister-automerge/index.js +55 -50
  177. package/persisters/persister-automerge/with-schemas/index.js +55 -50
  178. package/persisters/persister-browser/index.js +56 -55
  179. package/persisters/persister-browser/with-schemas/index.js +56 -55
  180. package/persisters/persister-cr-sqlite-wasm/index.js +181 -134
  181. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +181 -134
  182. package/persisters/persister-durable-object-storage/index.js +58 -53
  183. package/persisters/persister-durable-object-storage/with-schemas/index.js +58 -53
  184. package/persisters/persister-electric-sql/index.js +181 -134
  185. package/persisters/persister-electric-sql/with-schemas/index.js +181 -134
  186. package/persisters/persister-expo-sqlite/index.js +181 -134
  187. package/persisters/persister-expo-sqlite/with-schemas/index.js +181 -134
  188. package/persisters/persister-file/index.js +55 -50
  189. package/persisters/persister-file/with-schemas/index.js +55 -50
  190. package/persisters/persister-indexed-db/index.js +82 -78
  191. package/persisters/persister-indexed-db/with-schemas/index.js +82 -78
  192. package/persisters/persister-libsql/index.js +182 -135
  193. package/persisters/persister-libsql/with-schemas/index.js +182 -135
  194. package/persisters/persister-partykit-client/index.js +56 -51
  195. package/persisters/persister-partykit-client/with-schemas/index.js +56 -51
  196. package/persisters/persister-pglite/index.js +299 -173
  197. package/persisters/persister-pglite/with-schemas/index.js +299 -173
  198. package/persisters/persister-postgres/index.js +296 -171
  199. package/persisters/persister-postgres/with-schemas/index.js +296 -171
  200. package/persisters/persister-powersync/index.js +189 -138
  201. package/persisters/persister-powersync/with-schemas/index.js +189 -138
  202. package/persisters/persister-remote/index.js +55 -50
  203. package/persisters/persister-remote/with-schemas/index.js +55 -50
  204. package/persisters/persister-sqlite-bun/index.js +182 -135
  205. package/persisters/persister-sqlite-bun/with-schemas/index.js +182 -135
  206. package/persisters/persister-sqlite-wasm/index.js +182 -135
  207. package/persisters/persister-sqlite-wasm/with-schemas/index.js +182 -135
  208. package/persisters/persister-sqlite3/index.js +181 -134
  209. package/persisters/persister-sqlite3/with-schemas/index.js +181 -134
  210. package/persisters/persister-yjs/index.js +55 -50
  211. package/persisters/persister-yjs/with-schemas/index.js +55 -50
  212. package/persisters/with-schemas/index.js +293 -161
  213. package/readme.md +2 -2
  214. package/releases.md +29 -1
  215. package/store/index.js +20 -15
  216. package/store/with-schemas/index.js +20 -15
  217. package/synchronizers/index.js +68 -63
  218. package/synchronizers/synchronizer-broadcast-channel/index.js +68 -63
  219. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +68 -63
  220. package/synchronizers/synchronizer-local/index.js +68 -63
  221. package/synchronizers/synchronizer-local/with-schemas/index.js +68 -63
  222. package/synchronizers/synchronizer-ws-client/index.js +68 -63
  223. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +68 -63
  224. package/synchronizers/synchronizer-ws-server/index.js +79 -70
  225. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +79 -70
  226. package/synchronizers/synchronizer-ws-server-durable-object/index.js +69 -51
  227. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +69 -51
  228. package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  229. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  230. package/synchronizers/with-schemas/index.js +68 -63
  231. package/ui-react-inspector/index.js +68 -60
  232. package/ui-react-inspector/with-schemas/index.js +68 -60
  233. 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 DELETE_FROM = 'DELETE FROM';
53
- const SELECT_STAR_FROM = SELECT + '*FROM';
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.replace(/"/g, '""')}"`;
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 tabularConfig = [
230
- getDefaultedTabularConfigMap(
231
- load,
232
- {[TABLE_ID]: null, [ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME},
233
- TABLE_ID,
234
- (tableName) => collHas(excludedTableNames, tableName),
235
- (tableName) => setAdd(managedTableNames, tableName),
236
- ),
237
- getDefaultedTabularConfigMap(
238
- save,
239
- {
240
- [TABLE_NAME]: null,
241
- [ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME,
242
- [DELETE_EMPTY_COLUMNS]: 0,
243
- [DELETE_EMPTY_TABLE]: 0,
244
- },
245
- TABLE_NAME,
246
- (_, tableName) => collHas(excludedTableNames, tableName),
247
- (_, tableName) => setAdd(managedTableNames, tableName),
248
- ),
249
- valuesConfig,
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
- try {
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
- try {
443
- const content = await getPersisted();
444
- if (isArray(content)) {
445
- setContentOrChanges(content);
446
- } else if (initialContent) {
447
- setDefaultContent(initialContent);
448
- } else {
449
- errorNew(`Content is not an array: ${content}`);
450
- }
451
- } catch (error) {
452
- onIgnoredError?.(error);
453
- if (initialContent) {
454
- setDefaultContent(initialContent);
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
- try {
466
- autoLoadHandle = await addPersisterListener(async (content, changes) => {
467
- if (changes || content) {
468
- /* istanbul ignore else */
469
- if (status != 2 /* Saving */) {
470
- setStatus(1 /* Loading */);
471
- loads++;
472
- setContentOrChanges(changes ?? content);
473
- setStatus(0 /* Idle */);
474
- }
475
- } else {
476
- await load();
477
- }
478
- });
479
- } catch (error) {
480
- /* istanbul ignore next */
481
- onIgnoredError?.(error);
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
- delPersisterListener(autoLoadHandle);
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
- try {
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
- return stopAutoLoad().stopAutoSave();
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 + escapeId(tableName),
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
- 'CREATE ' +
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 + escapeId(tableName) + WHERE + ' true',
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
- WHERE +
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
- WHERE +
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 + escapeId(tableName) + WHERE + ' true',
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
- try {
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
- 'INSERT INTO' +
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
- ')DO UPDATE SET' +
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
- destroyImpl,
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 = async () =>
847
- await transaction(async () => {
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 = async (getContent) =>
856
- await transaction(async () => {
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().stopAutoSave();
872
- destroyImpl();
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
- destroyImpl,
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 = async (tables, partial) =>
924
- await promiseAll(
960
+ const saveTables = (tables, partial) =>
961
+ promiseAll(
925
962
  mapMap(
926
963
  tablesSaveConfig,
927
964
  async (
928
- [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
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 = async () =>
977
- await transaction(async () => {
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 = async (getContent, changes) =>
986
- await transaction(async () => {
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().stopAutoSave();
999
- destroyImpl();
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(async () => {
1045
- try {
1046
- const [{d, s, c}] = await executeCommand(
1047
- // eslint-disable-next-line max-len
1048
- `${SELECT} ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
1049
- );
1050
- if (d != dataVersion || s != schemaVersion || c != totalChanges) {
1051
- if (dataVersion != null) {
1052
- listener();
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
- dataVersion = d;
1055
- schemaVersion = s;
1056
- totalChanges = c;
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
- `${SELECT} 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`,
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
- () => 0,
1168
+ noop,
1122
1169
  3,
1123
1170
  // StoreOrMergeableStore,
1124
1171
  db,