tinybase 5.0.0-beta.22 → 5.0.0-beta.23

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 (271) hide show
  1. package/@types/mergeable-store/index.d.cts +77 -11
  2. package/@types/mergeable-store/index.d.ts +77 -11
  3. package/@types/mergeable-store/with-schemas/index.d.cts +96 -11
  4. package/@types/mergeable-store/with-schemas/index.d.ts +96 -11
  5. package/@types/persisters/index.d.cts +0 -1
  6. package/@types/persisters/index.d.ts +0 -1
  7. package/@types/persisters/persister-expo-sqlite/index.d.cts +36 -40
  8. package/@types/persisters/persister-expo-sqlite/index.d.ts +36 -40
  9. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.cts +36 -40
  10. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +36 -40
  11. package/@types/persisters/with-schemas/index.d.cts +0 -1
  12. package/@types/persisters/with-schemas/index.d.ts +0 -1
  13. package/cjs/es6/index.cjs +3 -3
  14. package/cjs/es6/mergeable-store/index.cjs +2 -2
  15. package/cjs/es6/mergeable-store/with-schemas/index.cjs +2 -2
  16. package/cjs/es6/min/index.cjs +1 -1
  17. package/cjs/es6/min/index.cjs.gz +0 -0
  18. package/cjs/es6/min/mergeable-store/index.cjs +1 -1
  19. package/cjs/es6/min/mergeable-store/index.cjs.gz +0 -0
  20. package/cjs/es6/min/mergeable-store/with-schemas/index.cjs +1 -1
  21. package/cjs/es6/min/mergeable-store/with-schemas/index.cjs.gz +0 -0
  22. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  23. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  24. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  25. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  26. package/cjs/es6/min/synchronizers/index.cjs +1 -1
  27. package/cjs/es6/min/synchronizers/index.cjs.gz +0 -0
  28. package/cjs/es6/min/synchronizers/synchronizer-local/index.cjs +1 -1
  29. package/cjs/es6/min/synchronizers/synchronizer-local/index.cjs.gz +0 -0
  30. package/cjs/es6/min/synchronizers/synchronizer-local/with-schemas/index.cjs +1 -1
  31. package/cjs/es6/min/synchronizers/synchronizer-local/with-schemas/index.cjs.gz +0 -0
  32. package/cjs/es6/min/synchronizers/synchronizer-ws-client/index.cjs +1 -1
  33. package/cjs/es6/min/synchronizers/synchronizer-ws-client/index.cjs.gz +0 -0
  34. package/cjs/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -1
  35. package/cjs/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs.gz +0 -0
  36. package/cjs/es6/min/synchronizers/with-schemas/index.cjs +1 -1
  37. package/cjs/es6/min/synchronizers/with-schemas/index.cjs.gz +0 -0
  38. package/cjs/es6/min/with-schemas/index.cjs +1 -1
  39. package/cjs/es6/min/with-schemas/index.cjs.gz +0 -0
  40. package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +7 -2
  41. package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +7 -2
  42. package/cjs/es6/synchronizers/index.cjs +1 -1
  43. package/cjs/es6/synchronizers/synchronizer-local/index.cjs +1 -1
  44. package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +1 -1
  45. package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +1 -1
  46. package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -1
  47. package/cjs/es6/synchronizers/with-schemas/index.cjs +1 -1
  48. package/cjs/es6/with-schemas/index.cjs +3 -3
  49. package/cjs/index.cjs +3 -3
  50. package/cjs/mergeable-store/index.cjs +2 -2
  51. package/cjs/mergeable-store/with-schemas/index.cjs +2 -2
  52. package/cjs/min/index.cjs +1 -1
  53. package/cjs/min/index.cjs.gz +0 -0
  54. package/cjs/min/mergeable-store/index.cjs +1 -1
  55. package/cjs/min/mergeable-store/index.cjs.gz +0 -0
  56. package/cjs/min/mergeable-store/with-schemas/index.cjs +1 -1
  57. package/cjs/min/mergeable-store/with-schemas/index.cjs.gz +0 -0
  58. package/cjs/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  59. package/cjs/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  60. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  61. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  62. package/cjs/min/synchronizers/index.cjs +1 -1
  63. package/cjs/min/synchronizers/index.cjs.gz +0 -0
  64. package/cjs/min/synchronizers/synchronizer-local/index.cjs +1 -1
  65. package/cjs/min/synchronizers/synchronizer-local/index.cjs.gz +0 -0
  66. package/cjs/min/synchronizers/synchronizer-local/with-schemas/index.cjs +1 -1
  67. package/cjs/min/synchronizers/synchronizer-local/with-schemas/index.cjs.gz +0 -0
  68. package/cjs/min/synchronizers/synchronizer-ws-client/index.cjs +1 -1
  69. package/cjs/min/synchronizers/synchronizer-ws-client/index.cjs.gz +0 -0
  70. package/cjs/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -1
  71. package/cjs/min/synchronizers/synchronizer-ws-client/with-schemas/index.cjs.gz +0 -0
  72. package/cjs/min/synchronizers/with-schemas/index.cjs +1 -1
  73. package/cjs/min/synchronizers/with-schemas/index.cjs.gz +0 -0
  74. package/cjs/min/with-schemas/index.cjs +1 -1
  75. package/cjs/min/with-schemas/index.cjs.gz +0 -0
  76. package/cjs/persisters/persister-expo-sqlite/index.cjs +7 -3
  77. package/cjs/persisters/persister-expo-sqlite/with-schemas/index.cjs +7 -3
  78. package/cjs/synchronizers/index.cjs +1 -1
  79. package/cjs/synchronizers/synchronizer-local/index.cjs +1 -1
  80. package/cjs/synchronizers/synchronizer-local/with-schemas/index.cjs +1 -1
  81. package/cjs/synchronizers/synchronizer-ws-client/index.cjs +1 -1
  82. package/cjs/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -1
  83. package/cjs/synchronizers/with-schemas/index.cjs +1 -1
  84. package/cjs/with-schemas/index.cjs +3 -3
  85. package/es6/index.js +3 -3
  86. package/es6/mergeable-store/index.js +2 -2
  87. package/es6/mergeable-store/with-schemas/index.js +2 -2
  88. package/es6/min/index.js +1 -1
  89. package/es6/min/index.js.gz +0 -0
  90. package/es6/min/mergeable-store/index.js +1 -1
  91. package/es6/min/mergeable-store/index.js.gz +0 -0
  92. package/es6/min/mergeable-store/with-schemas/index.js +1 -1
  93. package/es6/min/mergeable-store/with-schemas/index.js.gz +0 -0
  94. package/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  95. package/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  96. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  97. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  98. package/es6/min/synchronizers/index.js +1 -1
  99. package/es6/min/synchronizers/index.js.gz +0 -0
  100. package/es6/min/synchronizers/synchronizer-local/index.js +1 -1
  101. package/es6/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  102. package/es6/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  103. package/es6/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  104. package/es6/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  105. package/es6/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  106. package/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  107. package/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  108. package/es6/min/synchronizers/with-schemas/index.js +1 -1
  109. package/es6/min/synchronizers/with-schemas/index.js.gz +0 -0
  110. package/es6/min/with-schemas/index.js +1 -1
  111. package/es6/min/with-schemas/index.js.gz +0 -0
  112. package/es6/persisters/persister-expo-sqlite/index.js +5 -2
  113. package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +5 -2
  114. package/es6/synchronizers/index.js +1 -1
  115. package/es6/synchronizers/synchronizer-local/index.js +1 -1
  116. package/es6/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  117. package/es6/synchronizers/synchronizer-ws-client/index.js +1 -1
  118. package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  119. package/es6/synchronizers/with-schemas/index.js +1 -1
  120. package/es6/with-schemas/index.js +3 -3
  121. package/index.js +3 -3
  122. package/mergeable-store/index.js +2 -2
  123. package/mergeable-store/with-schemas/index.js +2 -2
  124. package/min/index.js +1 -1
  125. package/min/index.js.gz +0 -0
  126. package/min/mergeable-store/index.js +1 -1
  127. package/min/mergeable-store/index.js.gz +0 -0
  128. package/min/mergeable-store/with-schemas/index.js +1 -1
  129. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  130. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  131. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  132. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  133. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  134. package/min/synchronizers/index.js +1 -1
  135. package/min/synchronizers/index.js.gz +0 -0
  136. package/min/synchronizers/synchronizer-local/index.js +1 -1
  137. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  138. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  139. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  140. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  141. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  142. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  143. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  144. package/min/synchronizers/with-schemas/index.js +1 -1
  145. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  146. package/min/with-schemas/index.js +1 -1
  147. package/min/with-schemas/index.js.gz +0 -0
  148. package/package.json +3 -107
  149. package/persisters/persister-expo-sqlite/index.js +5 -3
  150. package/persisters/persister-expo-sqlite/with-schemas/index.js +5 -3
  151. package/readme.md +2 -2
  152. package/releases.md +1 -1
  153. package/synchronizers/index.js +1 -1
  154. package/synchronizers/synchronizer-local/index.js +1 -1
  155. package/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  156. package/synchronizers/synchronizer-ws-client/index.js +1 -1
  157. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  158. package/synchronizers/with-schemas/index.js +1 -1
  159. package/umd/es6/index.js +3 -3
  160. package/umd/es6/mergeable-store/index.js +2 -2
  161. package/umd/es6/mergeable-store/with-schemas/index.js +2 -2
  162. package/umd/es6/min/index.js +1 -1
  163. package/umd/es6/min/index.js.gz +0 -0
  164. package/umd/es6/min/mergeable-store/index.js +1 -1
  165. package/umd/es6/min/mergeable-store/index.js.gz +0 -0
  166. package/umd/es6/min/mergeable-store/with-schemas/index.js +1 -1
  167. package/umd/es6/min/mergeable-store/with-schemas/index.js.gz +0 -0
  168. package/umd/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  169. package/umd/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  170. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  171. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  172. package/umd/es6/min/synchronizers/index.js +1 -1
  173. package/umd/es6/min/synchronizers/index.js.gz +0 -0
  174. package/umd/es6/min/synchronizers/synchronizer-local/index.js +1 -1
  175. package/umd/es6/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  176. package/umd/es6/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  177. package/umd/es6/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  178. package/umd/es6/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  179. package/umd/es6/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  180. package/umd/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  181. package/umd/es6/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  182. package/umd/es6/min/synchronizers/with-schemas/index.js +1 -1
  183. package/umd/es6/min/synchronizers/with-schemas/index.js.gz +0 -0
  184. package/umd/es6/min/with-schemas/index.js +1 -1
  185. package/umd/es6/min/with-schemas/index.js.gz +0 -0
  186. package/umd/es6/persisters/persister-expo-sqlite/index.js +9 -6
  187. package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +9 -6
  188. package/umd/es6/synchronizers/index.js +1 -1
  189. package/umd/es6/synchronizers/synchronizer-local/index.js +1 -1
  190. package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  191. package/umd/es6/synchronizers/synchronizer-ws-client/index.js +1 -1
  192. package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  193. package/umd/es6/synchronizers/with-schemas/index.js +1 -1
  194. package/umd/es6/with-schemas/index.js +3 -3
  195. package/umd/index.js +3 -3
  196. package/umd/mergeable-store/index.js +2 -2
  197. package/umd/mergeable-store/with-schemas/index.js +2 -2
  198. package/umd/min/index.js +1 -1
  199. package/umd/min/index.js.gz +0 -0
  200. package/umd/min/mergeable-store/index.js +1 -1
  201. package/umd/min/mergeable-store/index.js.gz +0 -0
  202. package/umd/min/mergeable-store/with-schemas/index.js +1 -1
  203. package/umd/min/mergeable-store/with-schemas/index.js.gz +0 -0
  204. package/umd/min/persisters/persister-expo-sqlite/index.js +1 -1
  205. package/umd/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  206. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  207. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  208. package/umd/min/synchronizers/index.js +1 -1
  209. package/umd/min/synchronizers/index.js.gz +0 -0
  210. package/umd/min/synchronizers/synchronizer-local/index.js +1 -1
  211. package/umd/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  212. package/umd/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  213. package/umd/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  214. package/umd/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  215. package/umd/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  216. package/umd/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  217. package/umd/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  218. package/umd/min/synchronizers/with-schemas/index.js +1 -1
  219. package/umd/min/synchronizers/with-schemas/index.js.gz +0 -0
  220. package/umd/min/with-schemas/index.js +1 -1
  221. package/umd/min/with-schemas/index.js.gz +0 -0
  222. package/umd/persisters/persister-expo-sqlite/index.js +9 -7
  223. package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +9 -7
  224. package/umd/synchronizers/index.js +1 -1
  225. package/umd/synchronizers/synchronizer-local/index.js +1 -1
  226. package/umd/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  227. package/umd/synchronizers/synchronizer-ws-client/index.js +1 -1
  228. package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  229. package/umd/synchronizers/with-schemas/index.js +1 -1
  230. package/umd/with-schemas/index.js +3 -3
  231. package/with-schemas/index.js +3 -3
  232. package/@types/persisters/persister-expo-sqlite-next/index.d.cts +0 -187
  233. package/@types/persisters/persister-expo-sqlite-next/index.d.ts +0 -187
  234. package/@types/persisters/persister-expo-sqlite-next/with-schemas/index.d.cts +0 -206
  235. package/@types/persisters/persister-expo-sqlite-next/with-schemas/index.d.ts +0 -206
  236. package/cjs/es6/min/persisters/persister-expo-sqlite-next/index.cjs +0 -1
  237. package/cjs/es6/min/persisters/persister-expo-sqlite-next/index.cjs.gz +0 -0
  238. package/cjs/es6/min/persisters/persister-expo-sqlite-next/with-schemas/index.cjs +0 -1
  239. package/cjs/es6/min/persisters/persister-expo-sqlite-next/with-schemas/index.cjs.gz +0 -0
  240. package/cjs/es6/persisters/persister-expo-sqlite-next/index.cjs +0 -1253
  241. package/cjs/es6/persisters/persister-expo-sqlite-next/with-schemas/index.cjs +0 -1253
  242. package/cjs/min/persisters/persister-expo-sqlite-next/index.cjs +0 -1
  243. package/cjs/min/persisters/persister-expo-sqlite-next/index.cjs.gz +0 -0
  244. package/cjs/min/persisters/persister-expo-sqlite-next/with-schemas/index.cjs +0 -1
  245. package/cjs/min/persisters/persister-expo-sqlite-next/with-schemas/index.cjs.gz +0 -0
  246. package/cjs/persisters/persister-expo-sqlite-next/index.cjs +0 -926
  247. package/cjs/persisters/persister-expo-sqlite-next/with-schemas/index.cjs +0 -926
  248. package/es6/min/persisters/persister-expo-sqlite-next/index.js +0 -1
  249. package/es6/min/persisters/persister-expo-sqlite-next/index.js.gz +0 -0
  250. package/es6/min/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -1
  251. package/es6/min/persisters/persister-expo-sqlite-next/with-schemas/index.js.gz +0 -0
  252. package/es6/persisters/persister-expo-sqlite-next/index.js +0 -1251
  253. package/es6/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -1251
  254. package/min/persisters/persister-expo-sqlite-next/index.js +0 -1
  255. package/min/persisters/persister-expo-sqlite-next/index.js.gz +0 -0
  256. package/min/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -1
  257. package/min/persisters/persister-expo-sqlite-next/with-schemas/index.js.gz +0 -0
  258. package/persisters/persister-expo-sqlite-next/index.js +0 -924
  259. package/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -924
  260. package/umd/es6/min/persisters/persister-expo-sqlite-next/index.js +0 -1
  261. package/umd/es6/min/persisters/persister-expo-sqlite-next/index.js.gz +0 -0
  262. package/umd/es6/min/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -1
  263. package/umd/es6/min/persisters/persister-expo-sqlite-next/with-schemas/index.js.gz +0 -0
  264. package/umd/es6/persisters/persister-expo-sqlite-next/index.js +0 -1293
  265. package/umd/es6/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -1293
  266. package/umd/min/persisters/persister-expo-sqlite-next/index.js +0 -1
  267. package/umd/min/persisters/persister-expo-sqlite-next/index.js.gz +0 -0
  268. package/umd/min/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -1
  269. package/umd/min/persisters/persister-expo-sqlite-next/with-schemas/index.js.gz +0 -0
  270. package/umd/persisters/persister-expo-sqlite-next/index.js +0 -957
  271. package/umd/persisters/persister-expo-sqlite-next/with-schemas/index.js +0 -957
@@ -1,926 +0,0 @@
1
- 'use strict';
2
-
3
- var next_js = require('expo-sqlite/next.js');
4
-
5
- const getTypeOf = (thing) => typeof thing;
6
- const TINYBASE = 'tinybase';
7
- const EMPTY_STRING = '';
8
- const COMMA = ',';
9
- const STRING = getTypeOf(EMPTY_STRING);
10
- const UNDEFINED = '\uFFFC';
11
- const strRepeat = (str, count) => str.repeat(count);
12
-
13
- const promise = Promise;
14
- const startInterval = (callback, sec, immediate) => {
15
- callback();
16
- return setInterval(callback, sec * 1e3);
17
- };
18
- const stopInterval = clearInterval;
19
- const isUndefined = (thing) => thing == void 0;
20
- const ifNotUndefined = (value, then, otherwise) =>
21
- isUndefined(value) ? otherwise?.() : then(value);
22
- const isString = (thing) => getTypeOf(thing) == STRING;
23
- const isArray = (thing) => Array.isArray(thing);
24
- const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
25
- const size = (arrayOrString) => arrayOrString.length;
26
- const promiseAll = async (promises) => promise.all(promises);
27
- const errorNew = (message) => {
28
- throw new Error(message);
29
- };
30
-
31
- const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
32
- const arrayMap = (array, cb) => array.map(cb);
33
- const arrayIsEmpty = (array) => size(array) == 0;
34
- const arrayFilter = (array, cb) => array.filter(cb);
35
- const arrayPush = (array, ...values) => array.push(...values);
36
- const arrayShift = (array) => array.shift();
37
-
38
- const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
39
- const collValues = (coll) => [...(coll?.values() ?? [])];
40
- const collForEach = (coll, cb) => coll?.forEach(cb);
41
- const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
42
-
43
- const object = Object;
44
- const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
45
- const objEntries = object.entries;
46
- const isObject = (obj) =>
47
- !isUndefined(obj) &&
48
- ifNotUndefined(
49
- getPrototypeOf(obj),
50
- (objPrototype) =>
51
- objPrototype == object.prototype ||
52
- isUndefined(getPrototypeOf(objPrototype)),
53
-
54
- /* istanbul ignore next */
55
- () => true,
56
- );
57
- const objIds = object.keys;
58
- const objFreeze = object.freeze;
59
- const objNew = (entries = []) => object.fromEntries(entries);
60
- const objMerge = (...objs) => object.assign({}, ...objs);
61
- const objHas = (obj, id) => id in obj;
62
- const objDel = (obj, id) => {
63
- delete obj[id];
64
- return obj;
65
- };
66
- const objToArray = (obj, cb) =>
67
- arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
68
- const objValues = (obj) => object.values(obj);
69
- const objSize = (obj) => size(objIds(obj));
70
- const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
71
-
72
- const mapNew = (entries) => new Map(entries);
73
- const mapKeys = (map) => [...(map?.keys() ?? [])];
74
- const mapGet = (map, key) => map?.get(key);
75
- const mapForEach = (map, cb) =>
76
- collForEach(map, (value, key) => cb(key, value));
77
- const mapMap = (coll, cb) =>
78
- arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
79
- const mapSet = (map, key, value) =>
80
- isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
81
- const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
82
- if (!collHas(map, key)) {
83
- mapSet(map, key, getDefaultValue());
84
- }
85
- return mapGet(map, key);
86
- };
87
- const mapMatch = (map, obj, set, del = mapSet) => {
88
- objToArray(obj, (value, id) => set(map, id, value));
89
- mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
90
- return map;
91
- };
92
-
93
- const SINGLE_ROW_ID = '_';
94
- const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
95
- const escapeId = (str) => `"${str.replace(/"/g, '""')}"`;
96
- const SELECT = 'SELECT';
97
-
98
- const setNew = (entryOrEntries) =>
99
- new Set(
100
- isArray(entryOrEntries) || isUndefined(entryOrEntries)
101
- ? entryOrEntries
102
- : [entryOrEntries],
103
- );
104
- const setAdd = (set, value) => set?.add(value);
105
-
106
- const TABLE = 'TABLE';
107
- const ALTER_TABLE = 'ALTER ' + TABLE;
108
- const DELETE_FROM = 'DELETE FROM';
109
- const SELECT_STAR_FROM = SELECT + '*FROM';
110
- const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
111
- const WHERE = 'WHERE';
112
- const getCommandFunctions = (
113
- cmd,
114
- managedTableNames,
115
- onIgnoredError,
116
- useOnConflict,
117
- ) => {
118
- const schemaMap = mapNew();
119
- const canSelect = (tableName, rowIdColumnName) =>
120
- !isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
121
- const refreshSchema = async () =>
122
- mapMatch(
123
- schemaMap,
124
- objNew(
125
- await promiseAll(
126
- arrayMap(
127
- await cmd(
128
- 'SELECT name ' +
129
- FROM_PRAGMA_TABLE +
130
- `list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
131
- getPlaceholders(managedTableNames) +
132
- `)ORDER BY name`,
133
- managedTableNames,
134
- ),
135
- async ({name: tableName}) => [
136
- tableName,
137
- objNew(
138
- arrayMap(
139
- await cmd(
140
- SELECT + ' name,type ' + FROM_PRAGMA_TABLE + 'info(?)',
141
- [tableName],
142
- ),
143
- ({name: columnName, type}) => [columnName, type],
144
- ),
145
- ),
146
- ],
147
- ),
148
- ),
149
- ),
150
- (_, tableName, tableSchema) =>
151
- mapSet(
152
- schemaMap,
153
- tableName,
154
- mapMatch(
155
- mapEnsure(schemaMap, tableName, mapNew),
156
- tableSchema,
157
- (tableSchemaMap, columnName, value) => {
158
- if (value != mapGet(tableSchemaMap, columnName)) {
159
- mapSet(tableSchemaMap, columnName, value);
160
- }
161
- },
162
- (tableSchema2, columnName) => mapSet(tableSchema2, columnName),
163
- ),
164
- ),
165
- (_, name) => mapSet(schemaMap, name),
166
- );
167
- const loadTable = async (tableName, rowIdColumnName) =>
168
- canSelect(tableName, rowIdColumnName)
169
- ? objNew(
170
- arrayFilter(
171
- arrayMap(
172
- await cmd(SELECT_STAR_FROM + escapeId(tableName)),
173
- (row) => [
174
- row[rowIdColumnName],
175
- objDel({...row}, rowIdColumnName),
176
- ],
177
- ),
178
- ([rowId, row]) => !isUndefined(rowId) && !objIsEmpty(row),
179
- ),
180
- )
181
- : {};
182
- const saveTable = async (
183
- tableName,
184
- rowIdColumnName,
185
- content,
186
- deleteEmptyColumns,
187
- deleteEmptyTable,
188
- partial = false,
189
- ) => {
190
- const tableCellOrValueIds = setNew();
191
- objToArray(content ?? {}, (contentRow) =>
192
- arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
193
- setAdd(tableCellOrValueIds, cellOrValueId),
194
- ),
195
- );
196
- const tableColumnNames = collValues(tableCellOrValueIds);
197
- if (
198
- !partial &&
199
- deleteEmptyTable &&
200
- arrayIsEmpty(tableColumnNames) &&
201
- collHas(schemaMap, tableName)
202
- ) {
203
- await cmd('DROP ' + TABLE + escapeId(tableName));
204
- mapSet(schemaMap, tableName);
205
- return;
206
- }
207
- if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
208
- await cmd(
209
- `CREATE ` +
210
- TABLE +
211
- escapeId(tableName) +
212
- '(' +
213
- escapeId(rowIdColumnName) +
214
- ` PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
215
- arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
216
- )});`,
217
- );
218
- mapSet(
219
- schemaMap,
220
- tableName,
221
- mapNew([
222
- [rowIdColumnName, EMPTY_STRING],
223
- ...arrayMap(tableColumnNames, (columnName) => [
224
- columnName,
225
- EMPTY_STRING,
226
- ]),
227
- ]),
228
- );
229
- } else {
230
- const tableSchemaMap = mapGet(schemaMap, tableName);
231
- const columnNamesAccountedFor = setNew(mapKeys(tableSchemaMap));
232
- await promiseAll([
233
- ...arrayMap(tableColumnNames, async (columnName) => {
234
- if (!collDel(columnNamesAccountedFor, columnName)) {
235
- await cmd(
236
- ALTER_TABLE + escapeId(tableName) + 'ADD' + escapeId(columnName),
237
- );
238
- mapSet(tableSchemaMap, columnName, EMPTY_STRING);
239
- }
240
- }),
241
- ...(!partial && deleteEmptyColumns
242
- ? arrayMap(
243
- collValues(columnNamesAccountedFor),
244
- async (columnName) => {
245
- if (columnName != rowIdColumnName) {
246
- await cmd(
247
- ALTER_TABLE +
248
- escapeId(tableName) +
249
- 'DROP' +
250
- escapeId(columnName),
251
- );
252
- mapSet(tableSchemaMap, columnName);
253
- }
254
- },
255
- )
256
- : []),
257
- ]);
258
- }
259
- if (partial) {
260
- if (isUndefined(content)) {
261
- await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
262
- } else {
263
- await promiseAll(
264
- objToArray(content, async (row, rowId) => {
265
- if (isUndefined(row)) {
266
- await cmd(
267
- DELETE_FROM +
268
- escapeId(tableName) +
269
- WHERE +
270
- escapeId(rowIdColumnName) +
271
- '=?',
272
- [rowId],
273
- );
274
- } else if (!arrayIsEmpty(tableColumnNames)) {
275
- await upsert(
276
- cmd,
277
- tableName,
278
- rowIdColumnName,
279
- objIds(row),
280
- [rowId, ...objValues(row)],
281
- useOnConflict,
282
- );
283
- }
284
- }),
285
- );
286
- }
287
- } else {
288
- if (!arrayIsEmpty(tableColumnNames)) {
289
- const changingColumnNames = arrayFilter(
290
- mapKeys(mapGet(schemaMap, tableName)),
291
- (columnName) => columnName != rowIdColumnName,
292
- );
293
- const args = [];
294
- const deleteRowIds = [];
295
- objToArray(content ?? {}, (row, rowId) => {
296
- arrayPush(
297
- args,
298
- rowId,
299
- ...arrayMap(changingColumnNames, (cellId) => row?.[cellId]),
300
- );
301
- arrayPush(deleteRowIds, rowId);
302
- });
303
- await upsert(
304
- cmd,
305
- tableName,
306
- rowIdColumnName,
307
- changingColumnNames,
308
- args,
309
- useOnConflict,
310
- );
311
- await cmd(
312
- DELETE_FROM +
313
- escapeId(tableName) +
314
- WHERE +
315
- escapeId(rowIdColumnName) +
316
- 'NOT IN(' +
317
- getPlaceholders(deleteRowIds) +
318
- ')',
319
- deleteRowIds,
320
- );
321
- } else if (collHas(schemaMap, tableName)) {
322
- await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
323
- }
324
- }
325
- };
326
- const transaction = async (actions) => {
327
- let result;
328
- await cmd('BEGIN');
329
- try {
330
- result = await actions();
331
- } catch (error) {
332
- onIgnoredError?.(error);
333
- }
334
- await cmd('END');
335
- return result;
336
- };
337
- return [refreshSchema, loadTable, saveTable, transaction];
338
- };
339
- const upsert = async (
340
- cmd,
341
- tableName,
342
- rowIdColumnName,
343
- changingColumnNames,
344
- args,
345
- useOnConflict = true,
346
- ) =>
347
- await cmd(
348
- 'INSERT ' +
349
- (useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
350
- 'INTO' +
351
- escapeId(tableName) +
352
- '(' +
353
- escapeId(rowIdColumnName) +
354
- arrayJoin(
355
- arrayMap(
356
- changingColumnNames,
357
- (columnName) => COMMA + escapeId(columnName),
358
- ),
359
- ) +
360
- ')VALUES' +
361
- slice(
362
- strRepeat(
363
- `,(?${strRepeat(',?', size(changingColumnNames))})`,
364
- size(args) / (size(changingColumnNames) + 1),
365
- ),
366
- 1,
367
- ) +
368
- (useOnConflict
369
- ? 'ON CONFLICT(' +
370
- escapeId(rowIdColumnName) +
371
- ')DO UPDATE SET' +
372
- arrayJoin(
373
- arrayMap(
374
- changingColumnNames,
375
- (columnName) =>
376
- escapeId(columnName) + '=excluded.' + escapeId(columnName),
377
- ),
378
- COMMA,
379
- )
380
- : EMPTY_STRING),
381
- arrayMap(args, (arg) => arg ?? null),
382
- );
383
- const getPlaceholders = (array) =>
384
- arrayJoin(
385
- arrayMap(array, () => '?'),
386
- COMMA,
387
- );
388
-
389
- const jsonStringWithUndefined = (obj) =>
390
- JSON.stringify(obj, (_key, value) => (value === void 0 ? UNDEFINED : value));
391
- const jsonParseWithUndefined = (str) =>
392
- JSON.parse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
393
-
394
- const scheduleRunning = mapNew();
395
- const scheduleActions = mapNew();
396
- const getStoreFunctions = (supportedStoreType = 1, store) =>
397
- supportedStoreType > 1 && store.isMergeable()
398
- ? [
399
- 1,
400
- store.getMergeableContent,
401
- store.getTransactionMergeableChanges,
402
- ([[changedTables], [changedValues]]) =>
403
- !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
404
- store.setDefaultContent,
405
- ]
406
- : supportedStoreType != 2
407
- ? [
408
- 0,
409
- store.getContent,
410
- store.getTransactionChanges,
411
- ([changedTables, changedValues]) =>
412
- !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
413
- store.setContent,
414
- ]
415
- : errorNew('Store type not supported by this Persister');
416
- const createCustomPersister = (
417
- store,
418
- getPersisted,
419
- setPersisted,
420
- addPersisterListener,
421
- delPersisterListener,
422
- onIgnoredError,
423
- supportedStoreType,
424
- extra = {},
425
- scheduleId = [],
426
- ) => {
427
- let loadSave = 0;
428
- let loads = 0;
429
- let saves = 0;
430
- let action;
431
- let autoLoadHandle;
432
- let autoSaveListenerId;
433
- mapEnsure(scheduleRunning, scheduleId, () => 0);
434
- mapEnsure(scheduleActions, scheduleId, () => []);
435
- const [
436
- isMergeableStore,
437
- getContent,
438
- getChanges,
439
- hasChanges,
440
- setDefaultContent,
441
- ] = getStoreFunctions(supportedStoreType, store);
442
- const run = async () => {
443
- /* istanbul ignore else */
444
- if (!mapGet(scheduleRunning, scheduleId)) {
445
- mapSet(scheduleRunning, scheduleId, 1);
446
- while (
447
- !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
448
- ) {
449
- try {
450
- await action();
451
- } catch (error) {
452
- /* istanbul ignore next */
453
- onIgnoredError?.(error);
454
- }
455
- }
456
- mapSet(scheduleRunning, scheduleId, 0);
457
- }
458
- };
459
- const setContentOrChanges = (contentOrChanges) => {
460
- (isMergeableStore && isArray(contentOrChanges?.[0])
461
- ? contentOrChanges?.[2] === 1
462
- ? store.applyMergeableChanges
463
- : store.setMergeableContent
464
- : contentOrChanges?.[2] === 1
465
- ? store.applyChanges
466
- : store.setContent)(contentOrChanges);
467
- };
468
- const load = async (initialContent) => {
469
- /* istanbul ignore else */
470
- if (loadSave != 2) {
471
- loadSave = 1;
472
- loads++;
473
- await schedule(async () => {
474
- try {
475
- setContentOrChanges(await getPersisted());
476
- } catch (error) {
477
- onIgnoredError?.(error);
478
- if (initialContent) {
479
- setDefaultContent(initialContent);
480
- }
481
- }
482
- loadSave = 0;
483
- });
484
- }
485
- return persister;
486
- };
487
- const startAutoLoad = async (initialContent) => {
488
- await stopAutoLoad().load(initialContent);
489
- autoLoadHandle = addPersisterListener(async (content, changes) => {
490
- if (changes || content) {
491
- /* istanbul ignore else */
492
- if (loadSave != 2) {
493
- loadSave = 1;
494
- loads++;
495
- setContentOrChanges(changes ?? content);
496
- loadSave = 0;
497
- }
498
- } else {
499
- await load();
500
- }
501
- });
502
- return persister;
503
- };
504
- const stopAutoLoad = () => {
505
- if (autoLoadHandle) {
506
- delPersisterListener(autoLoadHandle);
507
- autoLoadHandle = void 0;
508
- }
509
- return persister;
510
- };
511
- const isAutoLoading = () => !isUndefined(autoLoadHandle);
512
- const save = async (changes) => {
513
- /* istanbul ignore else */
514
- if (loadSave != 1) {
515
- loadSave = 2;
516
- saves++;
517
- await schedule(async () => {
518
- try {
519
- await setPersisted(getContent, changes);
520
- } catch (error) {
521
- /* istanbul ignore next */
522
- onIgnoredError?.(error);
523
- }
524
- loadSave = 0;
525
- });
526
- }
527
- return persister;
528
- };
529
- const startAutoSave = async () => {
530
- await stopAutoSave().save();
531
- autoSaveListenerId = store.addDidFinishTransactionListener(() => {
532
- const changes = getChanges();
533
- if (hasChanges(changes)) {
534
- save(changes);
535
- }
536
- });
537
- return persister;
538
- };
539
- const stopAutoSave = () => {
540
- ifNotUndefined(autoSaveListenerId, store.delListener);
541
- autoSaveListenerId = void 0;
542
- return persister;
543
- };
544
- const isAutoSaving = () => !isUndefined(autoSaveListenerId);
545
- const schedule = async (...actions) => {
546
- arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
547
- await run();
548
- return persister;
549
- };
550
- const getStore = () => store;
551
- const destroy = () => stopAutoLoad().stopAutoSave();
552
- const getStats = () => ({loads, saves});
553
- const persister = {
554
- load,
555
- startAutoLoad,
556
- stopAutoLoad,
557
- isAutoLoading,
558
- save,
559
- startAutoSave,
560
- stopAutoSave,
561
- isAutoSaving,
562
- schedule,
563
- getStore,
564
- destroy,
565
- getStats,
566
- ...extra,
567
- };
568
- return objFreeze(persister);
569
- };
570
-
571
- const createJsonSqlitePersister = (
572
- store,
573
- cmd,
574
- addPersisterListener,
575
- delPersisterListener,
576
- onIgnoredError,
577
- supportedStoreType,
578
- [storeTableName, storeIdColumnName, storeColumnName],
579
- managedTableNames,
580
- db,
581
- getThing,
582
- useOnConflict,
583
- ) => {
584
- const [refreshSchema, loadTable, saveTable, transaction] =
585
- getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
586
- const getPersisted = async () =>
587
- await transaction(async () => {
588
- await refreshSchema();
589
- return jsonParseWithUndefined(
590
- (await loadTable(storeTableName, storeIdColumnName))[SINGLE_ROW_ID]?.[
591
- storeColumnName
592
- ] ?? 'null',
593
- );
594
- });
595
- const setPersisted = async (getContent) =>
596
- await transaction(async () => {
597
- await refreshSchema();
598
- await saveTable(
599
- storeTableName,
600
- storeIdColumnName,
601
- {
602
- [SINGLE_ROW_ID]: {
603
- [storeColumnName]: jsonStringWithUndefined(getContent() ?? null),
604
- },
605
- },
606
- true,
607
- true,
608
- );
609
- });
610
- const persister = createCustomPersister(
611
- store,
612
- getPersisted,
613
- setPersisted,
614
- addPersisterListener,
615
- delPersisterListener,
616
- onIgnoredError,
617
- supportedStoreType,
618
- {[getThing]: () => db},
619
- db,
620
- );
621
- return persister;
622
- };
623
-
624
- const createTabularSqlitePersister = (
625
- store,
626
- cmd,
627
- addPersisterListener,
628
- delPersisterListener,
629
- onIgnoredError,
630
- supportedStoreType,
631
- [
632
- tablesLoadConfig,
633
- tablesSaveConfig,
634
- [valuesLoad, valuesSave, valuesTableName],
635
- ],
636
- managedTableNames,
637
- db,
638
- getThing,
639
- useOnConflict,
640
- ) => {
641
- const [refreshSchema, loadTable, saveTable, transaction] =
642
- getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
643
- const saveTables = async (tables, partial) =>
644
- await promiseAll(
645
- mapMap(
646
- tablesSaveConfig,
647
- async (
648
- [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
649
- tableId,
650
- ) => {
651
- if (!partial || objHas(tables, tableId)) {
652
- await saveTable(
653
- tableName,
654
- rowIdColumnName,
655
- tables[tableId],
656
- deleteEmptyColumns,
657
- deleteEmptyTable,
658
- partial,
659
- );
660
- }
661
- },
662
- ),
663
- );
664
- const saveValues = async (values, partial) =>
665
- valuesSave
666
- ? await saveTable(
667
- valuesTableName,
668
- DEFAULT_ROW_ID_COLUMN_NAME,
669
- {[SINGLE_ROW_ID]: values},
670
- true,
671
- true,
672
- partial,
673
- )
674
- : null;
675
- const loadTables = async () =>
676
- objNew(
677
- arrayFilter(
678
- await promiseAll(
679
- mapMap(
680
- tablesLoadConfig,
681
- async ([tableId, rowIdColumnName], tableName) => [
682
- tableId,
683
- await loadTable(tableName, rowIdColumnName),
684
- ],
685
- ),
686
- ),
687
- (pair) => !objIsEmpty(pair[1]),
688
- ),
689
- );
690
- const loadValues = async () =>
691
- valuesLoad
692
- ? (await loadTable(valuesTableName, DEFAULT_ROW_ID_COLUMN_NAME))[
693
- SINGLE_ROW_ID
694
- ]
695
- : {};
696
- const getPersisted = async () =>
697
- await transaction(async () => {
698
- await refreshSchema();
699
- const tables = await loadTables();
700
- const values = await loadValues();
701
- return !objIsEmpty(tables) || !isUndefined(values)
702
- ? [tables, values]
703
- : void 0;
704
- });
705
- const setPersisted = async (getContent, changes) =>
706
- await transaction(async () => {
707
- await refreshSchema();
708
- if (!isUndefined(changes)) {
709
- await saveTables(changes[0], true);
710
- await saveValues(changes[1], true);
711
- } else {
712
- const [tables, values] = getContent();
713
- await saveTables(tables);
714
- await saveValues(values);
715
- }
716
- });
717
- const persister = createCustomPersister(
718
- store,
719
- getPersisted,
720
- setPersisted,
721
- addPersisterListener,
722
- delPersisterListener,
723
- onIgnoredError,
724
- supportedStoreType,
725
- {[getThing]: () => db},
726
- db,
727
- );
728
- return persister;
729
- };
730
-
731
- const COLUMN_NAME = 'ColumnName';
732
- const STORE = 'store';
733
- const JSON$1 = 'json';
734
- const STORE_TABLE_NAME = STORE + 'TableName';
735
- const STORE_ID_COLUMN_NAME = STORE + 'Id' + COLUMN_NAME;
736
- const STORE_COLUMN_NAME = STORE + COLUMN_NAME;
737
- const AUTO_LOAD_INTERVAL_SECONDS = 'autoLoadIntervalSeconds';
738
- const ROW_ID_COLUMN_NAME = 'rowId' + COLUMN_NAME;
739
- const TABLE_ID = 'tableId';
740
- const TABLE_NAME = 'tableName';
741
- const DELETE_EMPTY_COLUMNS = 'deleteEmptyColumns';
742
- const DELETE_EMPTY_TABLE = 'deleteEmptyTable';
743
- const DEFAULT_CONFIG = {
744
- mode: JSON$1,
745
- [AUTO_LOAD_INTERVAL_SECONDS]: 1,
746
- };
747
- const DEFAULT_TABULAR_VALUES_CONFIG = {
748
- load: 0,
749
- save: 0,
750
- [TABLE_NAME]: TINYBASE + '_values',
751
- };
752
- const getDefaultedConfig = (configOrStoreTableName) =>
753
- objMerge(
754
- DEFAULT_CONFIG,
755
- isString(configOrStoreTableName)
756
- ? {[STORE_TABLE_NAME]: configOrStoreTableName}
757
- : configOrStoreTableName ?? {},
758
- );
759
- const getDefaultedTabularConfigMap = (
760
- configsObj,
761
- defaultObj,
762
- tableField,
763
- exclude,
764
- then,
765
- ) => {
766
- const configMap = mapNew();
767
- objToArray(configsObj, (configObj, id) => {
768
- const defaultedConfig = slice(
769
- objValues(
770
- objMerge(
771
- defaultObj,
772
- isString(configObj) ? {[tableField]: configObj} : configObj,
773
- ),
774
- ),
775
- 0,
776
- objSize(defaultObj),
777
- );
778
- if (!isUndefined(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
779
- then(id, defaultedConfig[0]);
780
- mapSet(configMap, id, defaultedConfig);
781
- }
782
- });
783
- return configMap;
784
- };
785
- const getConfigStructures = (configOrStoreTableName) => {
786
- const config = getDefaultedConfig(configOrStoreTableName);
787
- const autoLoadIntervalSeconds = config[AUTO_LOAD_INTERVAL_SECONDS];
788
- if (config.mode == JSON$1) {
789
- const storeTableName = config[STORE_TABLE_NAME] ?? TINYBASE;
790
- return [
791
- 1,
792
- autoLoadIntervalSeconds,
793
- [
794
- storeTableName,
795
- config[STORE_ID_COLUMN_NAME] ?? DEFAULT_ROW_ID_COLUMN_NAME,
796
- config[STORE_COLUMN_NAME] ?? STORE,
797
- ],
798
- setNew(storeTableName),
799
- ];
800
- }
801
- const {tables: {load = {}, save = {}} = {}, values = {}} = config;
802
- const valuesConfig = slice(
803
- objValues(objMerge(DEFAULT_TABULAR_VALUES_CONFIG, values)),
804
- 0,
805
- objSize(DEFAULT_TABULAR_VALUES_CONFIG),
806
- );
807
- const valuesTable = valuesConfig[2];
808
- const managedTableNames = setNew(valuesTable);
809
- const excludedTableNames = setNew(valuesTable);
810
- const tabularConfig = [
811
- getDefaultedTabularConfigMap(
812
- load,
813
- {[TABLE_ID]: null, [ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME},
814
- TABLE_ID,
815
- (tableName) => collHas(excludedTableNames, tableName),
816
- (tableName) => setAdd(managedTableNames, tableName),
817
- ),
818
- getDefaultedTabularConfigMap(
819
- save,
820
- {
821
- [TABLE_NAME]: null,
822
- [ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME,
823
- [DELETE_EMPTY_COLUMNS]: 0,
824
- [DELETE_EMPTY_TABLE]: 0,
825
- },
826
- TABLE_NAME,
827
- (_, tableName) => collHas(excludedTableNames, tableName),
828
- (_, tableName) => setAdd(managedTableNames, tableName),
829
- ),
830
- valuesConfig,
831
- ];
832
- return [0, autoLoadIntervalSeconds, tabularConfig, managedTableNames];
833
- };
834
-
835
- const PRAGMA = 'pragma_';
836
- const DATA_VERSION = 'data_version';
837
- const SCHEMA_VERSION = 'schema_version';
838
- const createSqlitePersister = (
839
- store,
840
- configOrStoreTableName,
841
- cmd,
842
- addUpdateListener,
843
- delUpdateListener,
844
- onSqlCommand,
845
- onIgnoredError,
846
- supportedStoreType,
847
- db,
848
- getThing = 'getDb',
849
- useOnConflict,
850
- ) => {
851
- let dataVersion;
852
- let schemaVersion;
853
- let totalChanges;
854
- const [
855
- isJson,
856
- autoLoadIntervalSeconds,
857
- defaultedConfig,
858
- managedTableNamesSet,
859
- ] = getConfigStructures(configOrStoreTableName);
860
- const addPersisterListener = (listener) => [
861
- startInterval(async () => {
862
- try {
863
- const [{d, s, c}] = await cmd(
864
- `SELECT ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
865
- );
866
- if (
867
- d != (dataVersion ??= d) ||
868
- s != (schemaVersion ??= s) ||
869
- c != (totalChanges ??= c)
870
- ) {
871
- listener();
872
- dataVersion = d;
873
- schemaVersion = s;
874
- }
875
- } catch {}
876
- }, autoLoadIntervalSeconds),
877
- addUpdateListener((tableName) =>
878
- managedTableNamesSet.has(tableName) ? listener() : 0,
879
- ),
880
- ];
881
- const delPersisterListener = ([interval, listeningHandle]) => {
882
- stopInterval(interval);
883
- dataVersion = schemaVersion = totalChanges = null;
884
- delUpdateListener(listeningHandle);
885
- };
886
- return (isJson ? createJsonSqlitePersister : createTabularSqlitePersister)(
887
- store,
888
- onSqlCommand
889
- ? async (sql, args) => {
890
- onSqlCommand(sql, args);
891
- return await cmd(sql, args);
892
- }
893
- : cmd,
894
- addPersisterListener,
895
- delPersisterListener,
896
- onIgnoredError,
897
- supportedStoreType,
898
- defaultedConfig,
899
- collValues(managedTableNamesSet),
900
- db,
901
- getThing,
902
- useOnConflict,
903
- );
904
- };
905
-
906
- const createExpoSqliteNextPersister = (
907
- store,
908
- db,
909
- configOrStoreTableName,
910
- onSqlCommand,
911
- onIgnoredError,
912
- ) =>
913
- createSqlitePersister(
914
- store,
915
- configOrStoreTableName,
916
- async (sql, args = []) => await db.getAllAsync(sql, args),
917
- (listener) =>
918
- next_js.addDatabaseChangeListener(({tableName}) => listener(tableName)),
919
- (subscription) => subscription.remove(),
920
- onSqlCommand,
921
- onIgnoredError,
922
- 3,
923
- db,
924
- );
925
-
926
- exports.createExpoSqliteNextPersister = createExpoSqliteNextPersister;