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