tinybase 5.2.0-beta.4 → 5.2.0

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 (511) hide show
  1. package/@types/mergeable-store/index.d.cts +114 -11
  2. package/@types/mergeable-store/index.d.ts +114 -11
  3. package/@types/mergeable-store/with-schemas/index.d.cts +192 -11
  4. package/@types/mergeable-store/with-schemas/index.d.ts +192 -11
  5. package/@types/persisters/index.d.cts +177 -16
  6. package/@types/persisters/index.d.ts +177 -16
  7. package/@types/persisters/persister-cr-sqlite-wasm/index.d.cts +1 -1
  8. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +1 -1
  9. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.cts +2 -2
  10. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +2 -2
  11. package/@types/persisters/persister-electric-sql/index.d.cts +1 -1
  12. package/@types/persisters/persister-electric-sql/index.d.ts +1 -1
  13. package/@types/persisters/persister-electric-sql/with-schemas/index.d.cts +2 -2
  14. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +2 -2
  15. package/@types/persisters/persister-expo-sqlite/index.d.cts +1 -1
  16. package/@types/persisters/persister-expo-sqlite/index.d.ts +1 -1
  17. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.cts +2 -2
  18. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +2 -2
  19. package/@types/persisters/persister-libsql/index.d.cts +1 -1
  20. package/@types/persisters/persister-libsql/index.d.ts +1 -1
  21. package/@types/persisters/persister-libsql/with-schemas/index.d.cts +2 -2
  22. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +2 -2
  23. package/@types/persisters/persister-pglite/index.d.cts +1 -1
  24. package/@types/persisters/persister-pglite/index.d.ts +1 -1
  25. package/@types/persisters/persister-pglite/with-schemas/index.d.cts +2 -2
  26. package/@types/persisters/persister-pglite/with-schemas/index.d.ts +2 -2
  27. package/@types/persisters/persister-postgres/index.d.cts +1 -1
  28. package/@types/persisters/persister-postgres/index.d.ts +1 -1
  29. package/@types/persisters/persister-postgres/with-schemas/index.d.cts +2 -2
  30. package/@types/persisters/persister-postgres/with-schemas/index.d.ts +2 -2
  31. package/@types/persisters/persister-powersync/index.d.cts +1 -1
  32. package/@types/persisters/persister-powersync/index.d.ts +1 -1
  33. package/@types/persisters/persister-powersync/with-schemas/index.d.cts +2 -2
  34. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +2 -2
  35. package/@types/persisters/persister-sqlite-wasm/index.d.cts +1 -1
  36. package/@types/persisters/persister-sqlite-wasm/index.d.ts +1 -1
  37. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.cts +2 -2
  38. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +2 -2
  39. package/@types/persisters/persister-sqlite3/index.d.cts +1 -1
  40. package/@types/persisters/persister-sqlite3/index.d.ts +1 -1
  41. package/@types/persisters/persister-sqlite3/with-schemas/index.d.cts +2 -2
  42. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +2 -2
  43. package/@types/persisters/with-schemas/index.d.cts +227 -19
  44. package/@types/persisters/with-schemas/index.d.ts +227 -19
  45. package/@types/synchronizers/index.d.cts +2 -5
  46. package/@types/synchronizers/index.d.ts +2 -5
  47. package/@types/synchronizers/synchronizer-ws-server/index.d.cts +7 -7
  48. package/@types/synchronizers/synchronizer-ws-server/index.d.ts +7 -7
  49. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.cts +7 -7
  50. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +7 -7
  51. package/@types/synchronizers/with-schemas/index.d.cts +2 -5
  52. package/@types/synchronizers/with-schemas/index.d.ts +2 -5
  53. package/cjs/es6/index.cjs +54 -566
  54. package/cjs/es6/mergeable-store/index.cjs +9 -6
  55. package/cjs/es6/mergeable-store/with-schemas/index.cjs +9 -6
  56. package/cjs/es6/min/index.cjs +1 -1
  57. package/cjs/es6/min/index.cjs.gz +0 -0
  58. package/cjs/es6/min/persisters/index.cjs +1 -1
  59. package/cjs/es6/min/persisters/index.cjs.gz +0 -0
  60. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  61. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  62. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  63. package/cjs/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  64. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs +1 -1
  65. package/cjs/es6/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  66. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  67. package/cjs/es6/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  68. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  69. package/cjs/es6/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  70. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  71. package/cjs/es6/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  72. package/cjs/es6/min/persisters/persister-libsql/index.cjs +1 -1
  73. package/cjs/es6/min/persisters/persister-libsql/index.cjs.gz +0 -0
  74. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  75. package/cjs/es6/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  76. package/cjs/es6/min/persisters/persister-powersync/index.cjs +1 -1
  77. package/cjs/es6/min/persisters/persister-powersync/index.cjs.gz +0 -0
  78. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  79. package/cjs/es6/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  80. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  81. package/cjs/es6/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  82. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  83. package/cjs/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  84. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs +1 -1
  85. package/cjs/es6/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  86. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  87. package/cjs/es6/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  88. package/cjs/es6/min/persisters/with-schemas/index.cjs +1 -1
  89. package/cjs/es6/min/persisters/with-schemas/index.cjs.gz +0 -0
  90. package/cjs/es6/min/synchronizers/synchronizer-ws-server/index.cjs +1 -1
  91. package/cjs/es6/min/synchronizers/synchronizer-ws-server/index.cjs.gz +0 -0
  92. package/cjs/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +1 -1
  93. package/cjs/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs.gz +0 -0
  94. package/cjs/es6/min/with-schemas/index.cjs +1 -1
  95. package/cjs/es6/min/with-schemas/index.cjs.gz +0 -0
  96. package/cjs/es6/persisters/index.cjs +1095 -10
  97. package/cjs/es6/persisters/persister-cr-sqlite-wasm/index.cjs +58 -49
  98. package/cjs/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +58 -49
  99. package/cjs/es6/persisters/persister-electric-sql/index.cjs +56 -47
  100. package/cjs/es6/persisters/persister-electric-sql/with-schemas/index.cjs +56 -47
  101. package/cjs/es6/persisters/persister-expo-sqlite/index.cjs +58 -49
  102. package/cjs/es6/persisters/persister-expo-sqlite/with-schemas/index.cjs +58 -49
  103. package/cjs/es6/persisters/persister-indexed-db/index.cjs +2 -2
  104. package/cjs/es6/persisters/persister-indexed-db/with-schemas/index.cjs +2 -2
  105. package/cjs/es6/persisters/persister-libsql/index.cjs +56 -47
  106. package/cjs/es6/persisters/persister-libsql/with-schemas/index.cjs +56 -47
  107. package/cjs/es6/persisters/persister-pglite/index.cjs +61 -54
  108. package/cjs/es6/persisters/persister-pglite/with-schemas/index.cjs +61 -54
  109. package/cjs/es6/persisters/persister-postgres/index.cjs +63 -56
  110. package/cjs/es6/persisters/persister-postgres/with-schemas/index.cjs +63 -56
  111. package/cjs/es6/persisters/persister-powersync/index.cjs +58 -49
  112. package/cjs/es6/persisters/persister-powersync/with-schemas/index.cjs +58 -49
  113. package/cjs/es6/persisters/persister-sqlite-wasm/index.cjs +62 -49
  114. package/cjs/es6/persisters/persister-sqlite-wasm/with-schemas/index.cjs +62 -49
  115. package/cjs/es6/persisters/persister-sqlite3/index.cjs +58 -49
  116. package/cjs/es6/persisters/persister-sqlite3/with-schemas/index.cjs +58 -49
  117. package/cjs/es6/persisters/with-schemas/index.cjs +1095 -10
  118. package/cjs/es6/synchronizers/index.cjs +9 -6
  119. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/index.cjs +9 -6
  120. package/cjs/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +9 -6
  121. package/cjs/es6/synchronizers/synchronizer-local/index.cjs +9 -6
  122. package/cjs/es6/synchronizers/synchronizer-local/with-schemas/index.cjs +9 -6
  123. package/cjs/es6/synchronizers/synchronizer-ws-client/index.cjs +9 -6
  124. package/cjs/es6/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +9 -6
  125. package/cjs/es6/synchronizers/synchronizer-ws-server/index.cjs +17 -14
  126. package/cjs/es6/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +17 -14
  127. package/cjs/es6/synchronizers/with-schemas/index.cjs +9 -6
  128. package/cjs/es6/with-schemas/index.cjs +54 -566
  129. package/cjs/index.cjs +45 -447
  130. package/cjs/mergeable-store/index.cjs +1 -0
  131. package/cjs/mergeable-store/with-schemas/index.cjs +1 -0
  132. package/cjs/min/index.cjs +1 -1
  133. package/cjs/min/index.cjs.gz +0 -0
  134. package/cjs/min/persisters/index.cjs +1 -1
  135. package/cjs/min/persisters/index.cjs.gz +0 -0
  136. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs +1 -1
  137. package/cjs/min/persisters/persister-cr-sqlite-wasm/index.cjs.gz +0 -0
  138. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +1 -1
  139. package/cjs/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  140. package/cjs/min/persisters/persister-electric-sql/index.cjs +1 -1
  141. package/cjs/min/persisters/persister-electric-sql/index.cjs.gz +0 -0
  142. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs +1 -1
  143. package/cjs/min/persisters/persister-electric-sql/with-schemas/index.cjs.gz +0 -0
  144. package/cjs/min/persisters/persister-expo-sqlite/index.cjs +1 -1
  145. package/cjs/min/persisters/persister-expo-sqlite/index.cjs.gz +0 -0
  146. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs +1 -1
  147. package/cjs/min/persisters/persister-expo-sqlite/with-schemas/index.cjs.gz +0 -0
  148. package/cjs/min/persisters/persister-libsql/index.cjs +1 -1
  149. package/cjs/min/persisters/persister-libsql/index.cjs.gz +0 -0
  150. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs +1 -1
  151. package/cjs/min/persisters/persister-libsql/with-schemas/index.cjs.gz +0 -0
  152. package/cjs/min/persisters/persister-powersync/index.cjs +1 -1
  153. package/cjs/min/persisters/persister-powersync/index.cjs.gz +0 -0
  154. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs +1 -1
  155. package/cjs/min/persisters/persister-powersync/with-schemas/index.cjs.gz +0 -0
  156. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs +1 -1
  157. package/cjs/min/persisters/persister-sqlite-wasm/index.cjs.gz +0 -0
  158. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs +1 -1
  159. package/cjs/min/persisters/persister-sqlite-wasm/with-schemas/index.cjs.gz +0 -0
  160. package/cjs/min/persisters/persister-sqlite3/index.cjs +1 -1
  161. package/cjs/min/persisters/persister-sqlite3/index.cjs.gz +0 -0
  162. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs +1 -1
  163. package/cjs/min/persisters/persister-sqlite3/with-schemas/index.cjs.gz +0 -0
  164. package/cjs/min/persisters/with-schemas/index.cjs +1 -1
  165. package/cjs/min/persisters/with-schemas/index.cjs.gz +0 -0
  166. package/cjs/min/synchronizers/synchronizer-ws-server/index.cjs +1 -1
  167. package/cjs/min/synchronizers/synchronizer-ws-server/index.cjs.gz +0 -0
  168. package/cjs/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +1 -1
  169. package/cjs/min/synchronizers/synchronizer-ws-server/with-schemas/index.cjs.gz +0 -0
  170. package/cjs/min/with-schemas/index.cjs +1 -1
  171. package/cjs/min/with-schemas/index.cjs.gz +0 -0
  172. package/cjs/persisters/index.cjs +833 -0
  173. package/cjs/persisters/persister-cr-sqlite-wasm/index.cjs +57 -48
  174. package/cjs/persisters/persister-cr-sqlite-wasm/with-schemas/index.cjs +57 -48
  175. package/cjs/persisters/persister-electric-sql/index.cjs +56 -47
  176. package/cjs/persisters/persister-electric-sql/with-schemas/index.cjs +56 -47
  177. package/cjs/persisters/persister-expo-sqlite/index.cjs +57 -48
  178. package/cjs/persisters/persister-expo-sqlite/with-schemas/index.cjs +57 -48
  179. package/cjs/persisters/persister-indexed-db/index.cjs +2 -2
  180. package/cjs/persisters/persister-indexed-db/with-schemas/index.cjs +2 -2
  181. package/cjs/persisters/persister-libsql/index.cjs +56 -47
  182. package/cjs/persisters/persister-libsql/with-schemas/index.cjs +56 -47
  183. package/cjs/persisters/persister-pglite/index.cjs +59 -52
  184. package/cjs/persisters/persister-pglite/with-schemas/index.cjs +59 -52
  185. package/cjs/persisters/persister-postgres/index.cjs +61 -54
  186. package/cjs/persisters/persister-postgres/with-schemas/index.cjs +61 -54
  187. package/cjs/persisters/persister-powersync/index.cjs +60 -49
  188. package/cjs/persisters/persister-powersync/with-schemas/index.cjs +60 -49
  189. package/cjs/persisters/persister-sqlite-wasm/index.cjs +58 -49
  190. package/cjs/persisters/persister-sqlite-wasm/with-schemas/index.cjs +58 -49
  191. package/cjs/persisters/persister-sqlite3/index.cjs +58 -49
  192. package/cjs/persisters/persister-sqlite3/with-schemas/index.cjs +58 -49
  193. package/cjs/persisters/with-schemas/index.cjs +833 -0
  194. package/cjs/synchronizers/index.cjs +1 -0
  195. package/cjs/synchronizers/synchronizer-broadcast-channel/index.cjs +1 -0
  196. package/cjs/synchronizers/synchronizer-broadcast-channel/with-schemas/index.cjs +1 -0
  197. package/cjs/synchronizers/synchronizer-local/index.cjs +1 -0
  198. package/cjs/synchronizers/synchronizer-local/with-schemas/index.cjs +1 -0
  199. package/cjs/synchronizers/synchronizer-ws-client/index.cjs +1 -0
  200. package/cjs/synchronizers/synchronizer-ws-client/with-schemas/index.cjs +1 -0
  201. package/cjs/synchronizers/synchronizer-ws-server/index.cjs +9 -8
  202. package/cjs/synchronizers/synchronizer-ws-server/with-schemas/index.cjs +9 -8
  203. package/cjs/synchronizers/with-schemas/index.cjs +1 -0
  204. package/cjs/with-schemas/index.cjs +45 -447
  205. package/es6/index.js +54 -566
  206. package/es6/mergeable-store/index.js +9 -6
  207. package/es6/mergeable-store/with-schemas/index.js +9 -6
  208. package/es6/min/index.js +1 -1
  209. package/es6/min/index.js.gz +0 -0
  210. package/es6/min/persisters/index.js +1 -1
  211. package/es6/min/persisters/index.js.gz +0 -0
  212. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  213. package/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  214. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  215. package/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  216. package/es6/min/persisters/persister-electric-sql/index.js +1 -1
  217. package/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  218. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  219. package/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  220. package/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  221. package/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  222. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  223. package/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  224. package/es6/min/persisters/persister-libsql/index.js +1 -1
  225. package/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  226. package/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  227. package/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  228. package/es6/min/persisters/persister-powersync/index.js +1 -1
  229. package/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  230. package/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  231. package/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  232. package/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  233. package/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  234. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  235. package/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  236. package/es6/min/persisters/persister-sqlite3/index.js +1 -1
  237. package/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  238. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  239. package/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  240. package/es6/min/persisters/with-schemas/index.js +1 -1
  241. package/es6/min/persisters/with-schemas/index.js.gz +0 -0
  242. package/es6/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  243. package/es6/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  244. package/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  245. package/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  246. package/es6/min/with-schemas/index.js +1 -1
  247. package/es6/min/with-schemas/index.js.gz +0 -0
  248. package/es6/persisters/index.js +1099 -11
  249. package/es6/persisters/persister-cr-sqlite-wasm/index.js +58 -49
  250. package/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +58 -49
  251. package/es6/persisters/persister-electric-sql/index.js +56 -47
  252. package/es6/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  253. package/es6/persisters/persister-expo-sqlite/index.js +58 -49
  254. package/es6/persisters/persister-expo-sqlite/with-schemas/index.js +58 -49
  255. package/es6/persisters/persister-indexed-db/index.js +2 -2
  256. package/es6/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  257. package/es6/persisters/persister-libsql/index.js +56 -47
  258. package/es6/persisters/persister-libsql/with-schemas/index.js +56 -47
  259. package/es6/persisters/persister-pglite/index.js +61 -54
  260. package/es6/persisters/persister-pglite/with-schemas/index.js +61 -54
  261. package/es6/persisters/persister-postgres/index.js +63 -56
  262. package/es6/persisters/persister-postgres/with-schemas/index.js +63 -56
  263. package/es6/persisters/persister-powersync/index.js +58 -49
  264. package/es6/persisters/persister-powersync/with-schemas/index.js +58 -49
  265. package/es6/persisters/persister-sqlite-wasm/index.js +62 -49
  266. package/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +62 -49
  267. package/es6/persisters/persister-sqlite3/index.js +58 -49
  268. package/es6/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  269. package/es6/persisters/with-schemas/index.js +1099 -11
  270. package/es6/synchronizers/index.js +9 -6
  271. package/es6/synchronizers/synchronizer-broadcast-channel/index.js +9 -6
  272. package/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +9 -6
  273. package/es6/synchronizers/synchronizer-local/index.js +9 -6
  274. package/es6/synchronizers/synchronizer-local/with-schemas/index.js +9 -6
  275. package/es6/synchronizers/synchronizer-ws-client/index.js +9 -6
  276. package/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +9 -6
  277. package/es6/synchronizers/synchronizer-ws-server/index.js +17 -14
  278. package/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +17 -14
  279. package/es6/synchronizers/with-schemas/index.js +9 -6
  280. package/es6/with-schemas/index.js +54 -566
  281. package/index.js +45 -447
  282. package/mergeable-store/index.js +1 -0
  283. package/mergeable-store/with-schemas/index.js +1 -0
  284. package/min/index.js +1 -1
  285. package/min/index.js.gz +0 -0
  286. package/min/persisters/index.js +1 -1
  287. package/min/persisters/index.js.gz +0 -0
  288. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  289. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  290. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  291. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  292. package/min/persisters/persister-electric-sql/index.js +1 -1
  293. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  294. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  295. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  296. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  297. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  298. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  299. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  300. package/min/persisters/persister-libsql/index.js +1 -1
  301. package/min/persisters/persister-libsql/index.js.gz +0 -0
  302. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  303. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  304. package/min/persisters/persister-powersync/index.js +1 -1
  305. package/min/persisters/persister-powersync/index.js.gz +0 -0
  306. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  307. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  308. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  309. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  310. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  311. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  312. package/min/persisters/persister-sqlite3/index.js +1 -1
  313. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  314. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  315. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  316. package/min/persisters/with-schemas/index.js +1 -1
  317. package/min/persisters/with-schemas/index.js.gz +0 -0
  318. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  319. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  320. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  321. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  322. package/min/with-schemas/index.js +1 -1
  323. package/min/with-schemas/index.js.gz +0 -0
  324. package/package.json +212 -212
  325. package/persisters/index.js +837 -1
  326. package/persisters/persister-cr-sqlite-wasm/index.js +57 -48
  327. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +57 -48
  328. package/persisters/persister-electric-sql/index.js +56 -47
  329. package/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  330. package/persisters/persister-expo-sqlite/index.js +57 -48
  331. package/persisters/persister-expo-sqlite/with-schemas/index.js +57 -48
  332. package/persisters/persister-indexed-db/index.js +2 -2
  333. package/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  334. package/persisters/persister-libsql/index.js +56 -47
  335. package/persisters/persister-libsql/with-schemas/index.js +56 -47
  336. package/persisters/persister-pglite/index.js +59 -52
  337. package/persisters/persister-pglite/with-schemas/index.js +59 -52
  338. package/persisters/persister-postgres/index.js +61 -54
  339. package/persisters/persister-postgres/with-schemas/index.js +61 -54
  340. package/persisters/persister-powersync/index.js +60 -49
  341. package/persisters/persister-powersync/with-schemas/index.js +60 -49
  342. package/persisters/persister-sqlite-wasm/index.js +58 -49
  343. package/persisters/persister-sqlite-wasm/with-schemas/index.js +58 -49
  344. package/persisters/persister-sqlite3/index.js +58 -49
  345. package/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  346. package/persisters/with-schemas/index.js +837 -1
  347. package/readme.md +14 -14
  348. package/releases.md +27 -23
  349. package/synchronizers/index.js +1 -0
  350. package/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  351. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  352. package/synchronizers/synchronizer-local/index.js +1 -0
  353. package/synchronizers/synchronizer-local/with-schemas/index.js +1 -0
  354. package/synchronizers/synchronizer-ws-client/index.js +1 -0
  355. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -0
  356. package/synchronizers/synchronizer-ws-server/index.js +9 -8
  357. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +9 -8
  358. package/synchronizers/with-schemas/index.js +1 -0
  359. package/umd/es6/index.js +54 -577
  360. package/umd/es6/mergeable-store/index.js +9 -6
  361. package/umd/es6/mergeable-store/with-schemas/index.js +9 -6
  362. package/umd/es6/min/index.js +1 -1
  363. package/umd/es6/min/index.js.gz +0 -0
  364. package/umd/es6/min/persisters/index.js +1 -1
  365. package/umd/es6/min/persisters/index.js.gz +0 -0
  366. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  367. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  368. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  369. package/umd/es6/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  370. package/umd/es6/min/persisters/persister-electric-sql/index.js +1 -1
  371. package/umd/es6/min/persisters/persister-electric-sql/index.js.gz +0 -0
  372. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  373. package/umd/es6/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  374. package/umd/es6/min/persisters/persister-expo-sqlite/index.js +1 -1
  375. package/umd/es6/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  376. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  377. package/umd/es6/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  378. package/umd/es6/min/persisters/persister-libsql/index.js +1 -1
  379. package/umd/es6/min/persisters/persister-libsql/index.js.gz +0 -0
  380. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  381. package/umd/es6/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  382. package/umd/es6/min/persisters/persister-powersync/index.js +1 -1
  383. package/umd/es6/min/persisters/persister-powersync/index.js.gz +0 -0
  384. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  385. package/umd/es6/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  386. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js +1 -1
  387. package/umd/es6/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  388. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  389. package/umd/es6/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  390. package/umd/es6/min/persisters/persister-sqlite3/index.js +1 -1
  391. package/umd/es6/min/persisters/persister-sqlite3/index.js.gz +0 -0
  392. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  393. package/umd/es6/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  394. package/umd/es6/min/persisters/with-schemas/index.js +1 -1
  395. package/umd/es6/min/persisters/with-schemas/index.js.gz +0 -0
  396. package/umd/es6/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  397. package/umd/es6/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  398. package/umd/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  399. package/umd/es6/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  400. package/umd/es6/min/with-schemas/index.js +1 -1
  401. package/umd/es6/min/with-schemas/index.js.gz +0 -0
  402. package/umd/es6/persisters/index.js +1106 -10
  403. package/umd/es6/persisters/persister-cr-sqlite-wasm/index.js +58 -49
  404. package/umd/es6/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +58 -49
  405. package/umd/es6/persisters/persister-electric-sql/index.js +56 -47
  406. package/umd/es6/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  407. package/umd/es6/persisters/persister-expo-sqlite/index.js +58 -49
  408. package/umd/es6/persisters/persister-expo-sqlite/with-schemas/index.js +58 -49
  409. package/umd/es6/persisters/persister-indexed-db/index.js +2 -2
  410. package/umd/es6/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  411. package/umd/es6/persisters/persister-libsql/index.js +56 -47
  412. package/umd/es6/persisters/persister-libsql/with-schemas/index.js +56 -47
  413. package/umd/es6/persisters/persister-pglite/index.js +61 -54
  414. package/umd/es6/persisters/persister-pglite/with-schemas/index.js +61 -54
  415. package/umd/es6/persisters/persister-postgres/index.js +66 -56
  416. package/umd/es6/persisters/persister-postgres/with-schemas/index.js +66 -56
  417. package/umd/es6/persisters/persister-powersync/index.js +58 -49
  418. package/umd/es6/persisters/persister-powersync/with-schemas/index.js +58 -49
  419. package/umd/es6/persisters/persister-sqlite-wasm/index.js +58 -49
  420. package/umd/es6/persisters/persister-sqlite-wasm/with-schemas/index.js +58 -49
  421. package/umd/es6/persisters/persister-sqlite3/index.js +58 -49
  422. package/umd/es6/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  423. package/umd/es6/persisters/with-schemas/index.js +1106 -10
  424. package/umd/es6/synchronizers/index.js +9 -6
  425. package/umd/es6/synchronizers/synchronizer-broadcast-channel/index.js +9 -6
  426. package/umd/es6/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +9 -6
  427. package/umd/es6/synchronizers/synchronizer-local/index.js +9 -6
  428. package/umd/es6/synchronizers/synchronizer-local/with-schemas/index.js +9 -6
  429. package/umd/es6/synchronizers/synchronizer-ws-client/index.js +9 -6
  430. package/umd/es6/synchronizers/synchronizer-ws-client/with-schemas/index.js +9 -6
  431. package/umd/es6/synchronizers/synchronizer-ws-server/index.js +17 -14
  432. package/umd/es6/synchronizers/synchronizer-ws-server/with-schemas/index.js +17 -14
  433. package/umd/es6/synchronizers/with-schemas/index.js +9 -6
  434. package/umd/es6/with-schemas/index.js +54 -577
  435. package/umd/index.js +45 -454
  436. package/umd/mergeable-store/index.js +1 -0
  437. package/umd/mergeable-store/with-schemas/index.js +1 -0
  438. package/umd/min/index.js +1 -1
  439. package/umd/min/index.js.gz +0 -0
  440. package/umd/min/persisters/index.js +1 -1
  441. package/umd/min/persisters/index.js.gz +0 -0
  442. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  443. package/umd/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  444. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  445. package/umd/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  446. package/umd/min/persisters/persister-electric-sql/index.js +1 -1
  447. package/umd/min/persisters/persister-electric-sql/index.js.gz +0 -0
  448. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  449. package/umd/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  450. package/umd/min/persisters/persister-expo-sqlite/index.js +1 -1
  451. package/umd/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  452. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  453. package/umd/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  454. package/umd/min/persisters/persister-libsql/index.js +1 -1
  455. package/umd/min/persisters/persister-libsql/index.js.gz +0 -0
  456. package/umd/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  457. package/umd/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  458. package/umd/min/persisters/persister-powersync/index.js +1 -1
  459. package/umd/min/persisters/persister-powersync/index.js.gz +0 -0
  460. package/umd/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  461. package/umd/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  462. package/umd/min/persisters/persister-sqlite-wasm/index.js +1 -1
  463. package/umd/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  464. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  465. package/umd/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  466. package/umd/min/persisters/persister-sqlite3/index.js +1 -1
  467. package/umd/min/persisters/persister-sqlite3/index.js.gz +0 -0
  468. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  469. package/umd/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  470. package/umd/min/persisters/with-schemas/index.js +1 -1
  471. package/umd/min/persisters/with-schemas/index.js.gz +0 -0
  472. package/umd/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  473. package/umd/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  474. package/umd/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  475. package/umd/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  476. package/umd/min/with-schemas/index.js +1 -1
  477. package/umd/min/with-schemas/index.js.gz +0 -0
  478. package/umd/persisters/index.js +835 -0
  479. package/umd/persisters/persister-cr-sqlite-wasm/index.js +57 -48
  480. package/umd/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +57 -48
  481. package/umd/persisters/persister-electric-sql/index.js +56 -47
  482. package/umd/persisters/persister-electric-sql/with-schemas/index.js +56 -47
  483. package/umd/persisters/persister-expo-sqlite/index.js +57 -48
  484. package/umd/persisters/persister-expo-sqlite/with-schemas/index.js +57 -48
  485. package/umd/persisters/persister-indexed-db/index.js +2 -2
  486. package/umd/persisters/persister-indexed-db/with-schemas/index.js +2 -2
  487. package/umd/persisters/persister-libsql/index.js +56 -47
  488. package/umd/persisters/persister-libsql/with-schemas/index.js +56 -47
  489. package/umd/persisters/persister-pglite/index.js +59 -52
  490. package/umd/persisters/persister-pglite/with-schemas/index.js +59 -52
  491. package/umd/persisters/persister-postgres/index.js +61 -54
  492. package/umd/persisters/persister-postgres/with-schemas/index.js +61 -54
  493. package/umd/persisters/persister-powersync/index.js +58 -49
  494. package/umd/persisters/persister-powersync/with-schemas/index.js +58 -49
  495. package/umd/persisters/persister-sqlite-wasm/index.js +62 -49
  496. package/umd/persisters/persister-sqlite-wasm/with-schemas/index.js +62 -49
  497. package/umd/persisters/persister-sqlite3/index.js +58 -49
  498. package/umd/persisters/persister-sqlite3/with-schemas/index.js +58 -49
  499. package/umd/persisters/with-schemas/index.js +835 -0
  500. package/umd/synchronizers/index.js +1 -0
  501. package/umd/synchronizers/synchronizer-broadcast-channel/index.js +1 -0
  502. package/umd/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -0
  503. package/umd/synchronizers/synchronizer-local/index.js +1 -0
  504. package/umd/synchronizers/synchronizer-local/with-schemas/index.js +1 -0
  505. package/umd/synchronizers/synchronizer-ws-client/index.js +1 -0
  506. package/umd/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -0
  507. package/umd/synchronizers/synchronizer-ws-server/index.js +9 -8
  508. package/umd/synchronizers/synchronizer-ws-server/with-schemas/index.js +9 -8
  509. package/umd/synchronizers/with-schemas/index.js +1 -0
  510. package/umd/with-schemas/index.js +45 -454
  511. package/with-schemas/index.js +45 -447
@@ -1,18 +1,41 @@
1
+ const getTypeOf = (thing) => typeof thing;
2
+ const TINYBASE = 'tinybase';
3
+ const EMPTY_STRING = '';
4
+ const COMMA = ',';
5
+ const STRING = getTypeOf(EMPTY_STRING);
6
+ const UNDEFINED = '\uFFFC';
7
+ const strMatch = (str, regex) => str?.match(regex);
8
+
9
+ const promise = Promise;
10
+ const startInterval = (callback, sec, immediate) => {
11
+ return setInterval(callback, sec * 1e3);
12
+ };
13
+ const stopInterval = clearInterval;
1
14
  const isUndefined = (thing) => thing == void 0;
2
15
  const ifNotUndefined = (value, then, otherwise) =>
3
16
  isUndefined(value) ? otherwise?.() : then(value);
17
+ const isString = (thing) => getTypeOf(thing) == STRING;
4
18
  const isArray = (thing) => Array.isArray(thing);
19
+ const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
5
20
  const size = (arrayOrString) => arrayOrString.length;
21
+ const promiseAll = async (promises) => promise.all(promises);
6
22
  const errorNew = (message) => {
7
23
  throw new Error(message);
8
24
  };
9
25
 
26
+ const arrayNew = (size2, cb) =>
27
+ arrayMap(new Array(size2).fill(0), (_, index) => cb(index));
28
+ const arrayJoin = (array, sep = EMPTY_STRING) => array.join(sep);
29
+ const arrayMap = (array, cb) => array.map(cb);
30
+ const arrayIsEmpty = (array) => size(array) == 0;
31
+ const arrayFilter = (array, cb) => array.filter(cb);
10
32
  const arrayClear = (array, to) => array.splice(0, to);
11
33
  const arrayPush = (array, ...values) => array.push(...values);
12
34
  const arrayShift = (array) => array.shift();
13
35
 
14
36
  const object = Object;
15
37
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
38
+ const objEntries = object.entries;
16
39
  const isObject = (obj) =>
17
40
  !isUndefined(obj) &&
18
41
  ifNotUndefined(
@@ -26,14 +49,30 @@ const isObject = (obj) =>
26
49
  );
27
50
  const objIds = object.keys;
28
51
  const objFreeze = object.freeze;
52
+ const objNew = (entries = []) => object.fromEntries(entries);
53
+ const objMerge = (...objs) => object.assign({}, ...objs);
54
+ const objHas = (obj, id) => id in obj;
55
+ const objDel = (obj, id) => {
56
+ delete obj[id];
57
+ return obj;
58
+ };
59
+ const objToArray = (obj, cb) =>
60
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
61
+ const objMap = (obj, cb) =>
62
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
63
+ const objValues = (obj) => object.values(obj);
29
64
  const objSize = (obj) => size(objIds(obj));
30
65
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
31
66
 
32
67
  const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
68
+ const collValues = (coll) => [...(coll?.values() ?? [])];
69
+ const collClear = (coll) => coll.clear();
33
70
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
34
71
 
35
72
  const mapNew = (entries) => new Map(entries);
36
73
  const mapGet = (map, key) => map?.get(key);
74
+ const mapMap = (coll, cb) =>
75
+ arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
37
76
  const mapSet = (map, key, value) =>
38
77
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
39
78
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
@@ -238,4 +277,801 @@ const createCustomPersister = (
238
277
  return objFreeze(persister);
239
278
  };
240
279
 
241
- export {Persists, createCustomPersister};
280
+ const SINGLE_ROW_ID = '_';
281
+ const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
282
+ const SELECT = 'SELECT';
283
+ const WHERE = 'WHERE';
284
+ const TABLE = 'TABLE';
285
+ const ALTER_TABLE = 'ALTER ' + TABLE;
286
+ const DELETE_FROM = 'DELETE FROM';
287
+ const SELECT_STAR_FROM = SELECT + '*FROM';
288
+ const PRAGMA = 'pragma_';
289
+ const DATA_VERSION = 'data_version';
290
+ const SCHEMA_VERSION = 'schema_version';
291
+ const FROM = 'FROM ';
292
+ const PRAGMA_TABLE = 'pragma_table_';
293
+ const getWrappedCommand = (executeCommand, onSqlCommand) =>
294
+ onSqlCommand
295
+ ? async (sql, params) => {
296
+ onSqlCommand(sql, params);
297
+ return await executeCommand(sql, params);
298
+ }
299
+ : executeCommand;
300
+ const escapeId = (str) => `"${str.replace(/"/g, '""')}"`;
301
+ const getPlaceholders = (array) =>
302
+ arrayJoin(
303
+ arrayMap(array, (_, index) => '$' + (index + 1)),
304
+ COMMA,
305
+ );
306
+
307
+ const jsonString = JSON.stringify;
308
+ const jsonParse = JSON.parse;
309
+ const jsonStringWithUndefined = (obj) =>
310
+ jsonString(obj, (_key, value) => (value === void 0 ? UNDEFINED : value));
311
+ const jsonParseWithUndefined = (str) =>
312
+ jsonParse(str, (_key, value) => (value === UNDEFINED ? void 0 : value));
313
+
314
+ const setNew = (entryOrEntries) =>
315
+ new Set(
316
+ isArray(entryOrEntries) || isUndefined(entryOrEntries)
317
+ ? entryOrEntries
318
+ : [entryOrEntries],
319
+ );
320
+ const setAdd = (set, value) => set?.add(value);
321
+
322
+ const getCommandFunctions = (
323
+ databaseExecuteCommand,
324
+ managedTableNames,
325
+ querySchema,
326
+ onIgnoredError,
327
+ columnType,
328
+ orReplace,
329
+ encode,
330
+ decode,
331
+ ) => {
332
+ const schemaMap = mapNew();
333
+ const canSelect = (tableName, rowIdColumnName) =>
334
+ collHas(mapGet(schemaMap, tableName), rowIdColumnName);
335
+ const refreshSchema = async () => {
336
+ collClear(schemaMap);
337
+ arrayMap(
338
+ await querySchema(databaseExecuteCommand, managedTableNames),
339
+ ({tn, cn}) => setAdd(mapEnsure(schemaMap, tn, setNew), cn),
340
+ );
341
+ };
342
+ const loadTable = async (tableName, rowIdColumnName) =>
343
+ canSelect(tableName, rowIdColumnName)
344
+ ? objNew(
345
+ arrayFilter(
346
+ arrayMap(
347
+ await databaseExecuteCommand(
348
+ SELECT_STAR_FROM + escapeId(tableName),
349
+ ),
350
+ (row) => [
351
+ row[rowIdColumnName],
352
+ decode
353
+ ? objMap(objDel(row, rowIdColumnName), decode)
354
+ : objDel(row, rowIdColumnName),
355
+ ],
356
+ ),
357
+ ([rowId, row]) => !isUndefined(rowId) && !objIsEmpty(row),
358
+ ),
359
+ )
360
+ : {};
361
+ const saveTable = async (
362
+ tableName,
363
+ rowIdColumnName,
364
+ content,
365
+ deleteEmptyColumns,
366
+ deleteEmptyTable,
367
+ partial = false,
368
+ ) => {
369
+ const tableCellOrValueIds = setNew();
370
+ objToArray(content ?? {}, (contentRow) =>
371
+ arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
372
+ setAdd(tableCellOrValueIds, cellOrValueId),
373
+ ),
374
+ );
375
+ const tableColumnNames = collValues(tableCellOrValueIds);
376
+ if (
377
+ !partial &&
378
+ deleteEmptyTable &&
379
+ arrayIsEmpty(tableColumnNames) &&
380
+ collHas(schemaMap, tableName)
381
+ ) {
382
+ await databaseExecuteCommand('DROP ' + TABLE + escapeId(tableName));
383
+ mapSet(schemaMap, tableName);
384
+ return;
385
+ }
386
+ const tableSchemaColumns = mapGet(schemaMap, tableName);
387
+ const currentColumnNames = setNew(collValues(tableSchemaColumns));
388
+ if (!arrayIsEmpty(tableColumnNames)) {
389
+ if (!collHas(schemaMap, tableName)) {
390
+ await databaseExecuteCommand(
391
+ 'CREATE ' +
392
+ TABLE +
393
+ escapeId(tableName) +
394
+ `(${escapeId(rowIdColumnName)}${columnType} PRIMARY KEY${arrayJoin(
395
+ arrayMap(
396
+ tableColumnNames,
397
+ (columnName) => COMMA + escapeId(columnName) + columnType,
398
+ ),
399
+ )});`,
400
+ );
401
+ mapSet(
402
+ schemaMap,
403
+ tableName,
404
+ setNew([rowIdColumnName, ...tableColumnNames]),
405
+ );
406
+ } else {
407
+ await promiseAll(
408
+ arrayMap(
409
+ [rowIdColumnName, ...tableColumnNames],
410
+ async (columnName, index) => {
411
+ if (!collDel(currentColumnNames, columnName)) {
412
+ await databaseExecuteCommand(
413
+ ALTER_TABLE +
414
+ escapeId(tableName) +
415
+ 'ADD' +
416
+ escapeId(columnName) +
417
+ columnType,
418
+ );
419
+ if (index == 0) {
420
+ await databaseExecuteCommand(
421
+ 'CREATE UNIQUE INDEX pk ON ' +
422
+ escapeId(tableName) +
423
+ `(${escapeId(rowIdColumnName)})`,
424
+ );
425
+ }
426
+ setAdd(tableSchemaColumns, columnName);
427
+ }
428
+ },
429
+ ),
430
+ );
431
+ }
432
+ }
433
+ await promiseAll([
434
+ ...(!partial && deleteEmptyColumns
435
+ ? arrayMap(collValues(currentColumnNames), async (columnName) => {
436
+ if (columnName != rowIdColumnName) {
437
+ await databaseExecuteCommand(
438
+ ALTER_TABLE +
439
+ escapeId(tableName) +
440
+ 'DROP' +
441
+ escapeId(columnName),
442
+ );
443
+ collDel(tableSchemaColumns, columnName);
444
+ }
445
+ })
446
+ : []),
447
+ ]);
448
+ if (partial) {
449
+ if (isUndefined(content)) {
450
+ await databaseExecuteCommand(
451
+ DELETE_FROM + escapeId(tableName) + WHERE + ' true',
452
+ );
453
+ } else {
454
+ await promiseAll(
455
+ objToArray(content, async (row, rowId) => {
456
+ if (isUndefined(row)) {
457
+ await databaseExecuteCommand(
458
+ DELETE_FROM +
459
+ escapeId(tableName) +
460
+ WHERE +
461
+ escapeId(rowIdColumnName) +
462
+ '=$1',
463
+ [rowId],
464
+ );
465
+ } else if (!arrayIsEmpty(tableColumnNames)) {
466
+ await upsert(
467
+ databaseExecuteCommand,
468
+ tableName,
469
+ rowIdColumnName,
470
+ objIds(row),
471
+ [
472
+ rowId,
473
+ ...(encode
474
+ ? arrayMap(objValues(row), encode)
475
+ : objValues(row)),
476
+ ],
477
+ orReplace,
478
+ );
479
+ }
480
+ }),
481
+ );
482
+ }
483
+ } else {
484
+ if (!arrayIsEmpty(tableColumnNames)) {
485
+ const changingColumnNames = arrayFilter(
486
+ collValues(mapGet(schemaMap, tableName)),
487
+ (columnName) => columnName != rowIdColumnName,
488
+ );
489
+ const params = [];
490
+ const deleteRowIds = [];
491
+ objToArray(content ?? {}, (row, rowId) => {
492
+ arrayPush(
493
+ params,
494
+ rowId,
495
+ ...arrayMap(changingColumnNames, (cellId) =>
496
+ encode ? encode(row?.[cellId]) : row?.[cellId],
497
+ ),
498
+ );
499
+ arrayPush(deleteRowIds, rowId);
500
+ });
501
+ await upsert(
502
+ databaseExecuteCommand,
503
+ tableName,
504
+ rowIdColumnName,
505
+ changingColumnNames,
506
+ params,
507
+ orReplace,
508
+ );
509
+ await databaseExecuteCommand(
510
+ DELETE_FROM +
511
+ escapeId(tableName) +
512
+ WHERE +
513
+ escapeId(rowIdColumnName) +
514
+ `NOT IN(${getPlaceholders(deleteRowIds)})`,
515
+ deleteRowIds,
516
+ );
517
+ } else if (collHas(schemaMap, tableName)) {
518
+ await databaseExecuteCommand(
519
+ DELETE_FROM + escapeId(tableName) + WHERE + ' true',
520
+ );
521
+ }
522
+ }
523
+ };
524
+ const transaction = async (actions) => {
525
+ let result;
526
+ await databaseExecuteCommand('BEGIN');
527
+ try {
528
+ result = await actions();
529
+ } catch (error) {
530
+ onIgnoredError?.(error);
531
+ }
532
+ await databaseExecuteCommand('END');
533
+ return result;
534
+ };
535
+ return [refreshSchema, loadTable, saveTable, transaction];
536
+ };
537
+ const upsert = async (
538
+ executeCommand,
539
+ tableName,
540
+ rowIdColumnName,
541
+ changingColumnNames,
542
+ params,
543
+ orReplace = 0,
544
+ ) =>
545
+ await executeCommand(
546
+ 'INSERT ' +
547
+ (orReplace ? 'OR REPLACE ' : EMPTY_STRING) +
548
+ 'INTO' +
549
+ escapeId(tableName) +
550
+ '(' +
551
+ escapeId(rowIdColumnName) +
552
+ arrayJoin(
553
+ arrayMap(
554
+ changingColumnNames,
555
+ (columnName) => COMMA + escapeId(columnName),
556
+ ),
557
+ ) +
558
+ ')VALUES' +
559
+ getUpsertPlaceholders(params, size(changingColumnNames) + 1) +
560
+ (orReplace
561
+ ? EMPTY_STRING
562
+ : 'ON CONFLICT(' +
563
+ escapeId(rowIdColumnName) +
564
+ ')DO UPDATE SET' +
565
+ arrayJoin(
566
+ arrayMap(
567
+ changingColumnNames,
568
+ (columnName) =>
569
+ escapeId(columnName) + '=excluded.' + escapeId(columnName),
570
+ ),
571
+ COMMA,
572
+ )),
573
+ arrayMap(params, (param) => param ?? null),
574
+ );
575
+ const getUpsertPlaceholders = (array, columnCount) =>
576
+ arrayJoin(
577
+ arrayNew(
578
+ size(array) / columnCount,
579
+ (row) =>
580
+ '(' +
581
+ arrayJoin(
582
+ arrayNew(
583
+ columnCount,
584
+ (column) => '$' + (row * columnCount + column + 1),
585
+ ),
586
+ COMMA,
587
+ ) +
588
+ ')',
589
+ ),
590
+ COMMA,
591
+ );
592
+
593
+ const createJsonPersister = (
594
+ store,
595
+ executeCommand,
596
+ addPersisterListener,
597
+ delPersisterListener,
598
+ onIgnoredError,
599
+ destroyImpl,
600
+ persist,
601
+ [storeTableName, storeIdColumnName, storeColumnName],
602
+ managedTableNames,
603
+ querySchema,
604
+ thing,
605
+ getThing,
606
+ columnType,
607
+ orReplace,
608
+ ) => {
609
+ const [refreshSchema, loadTable, saveTable, transaction] =
610
+ getCommandFunctions(
611
+ executeCommand,
612
+ managedTableNames,
613
+ querySchema,
614
+ onIgnoredError,
615
+ columnType,
616
+ orReplace,
617
+ );
618
+ const getPersisted = async () =>
619
+ await transaction(async () => {
620
+ await refreshSchema();
621
+ return jsonParseWithUndefined(
622
+ (await loadTable(storeTableName, storeIdColumnName))[SINGLE_ROW_ID]?.[
623
+ storeColumnName
624
+ ] ?? 'null',
625
+ );
626
+ });
627
+ const setPersisted = async (getContent) =>
628
+ await transaction(async () => {
629
+ await refreshSchema();
630
+ await saveTable(
631
+ storeTableName,
632
+ storeIdColumnName,
633
+ {
634
+ [SINGLE_ROW_ID]: {
635
+ [storeColumnName]: jsonStringWithUndefined(getContent() ?? null),
636
+ },
637
+ },
638
+ true,
639
+ true,
640
+ );
641
+ });
642
+ const destroy = () => {
643
+ persister.stopAutoLoad().stopAutoSave();
644
+ destroyImpl();
645
+ return persister;
646
+ };
647
+ const persister = createCustomPersister(
648
+ store,
649
+ getPersisted,
650
+ setPersisted,
651
+ addPersisterListener,
652
+ delPersisterListener,
653
+ onIgnoredError,
654
+ persist,
655
+ {[getThing]: () => thing, destroy},
656
+ thing,
657
+ );
658
+ return persister;
659
+ };
660
+
661
+ const createTabularPersister = (
662
+ store,
663
+ executeCommand,
664
+ addPersisterListener,
665
+ delPersisterListener,
666
+ onIgnoredError,
667
+ destroyImpl,
668
+ persist,
669
+ [
670
+ tablesLoadConfig,
671
+ tablesSaveConfig,
672
+ [valuesLoad, valuesSave, valuesTableName],
673
+ ],
674
+ managedTableNames,
675
+ querySchema,
676
+ thing,
677
+ getThing,
678
+ columnType,
679
+ orReplace,
680
+ encode,
681
+ decode,
682
+ ) => {
683
+ const [refreshSchema, loadTable, saveTable, transaction] =
684
+ getCommandFunctions(
685
+ executeCommand,
686
+ managedTableNames,
687
+ querySchema,
688
+ onIgnoredError,
689
+ columnType,
690
+ orReplace,
691
+ encode,
692
+ decode,
693
+ );
694
+ const saveTables = async (tables, partial) =>
695
+ await promiseAll(
696
+ mapMap(
697
+ tablesSaveConfig,
698
+ async (
699
+ [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
700
+ tableId,
701
+ ) => {
702
+ if (!partial || objHas(tables, tableId)) {
703
+ await saveTable(
704
+ tableName,
705
+ rowIdColumnName,
706
+ tables[tableId],
707
+ deleteEmptyColumns,
708
+ deleteEmptyTable,
709
+ partial,
710
+ );
711
+ }
712
+ },
713
+ ),
714
+ );
715
+ const saveValues = async (values, partial) =>
716
+ valuesSave
717
+ ? await saveTable(
718
+ valuesTableName,
719
+ DEFAULT_ROW_ID_COLUMN_NAME,
720
+ {[SINGLE_ROW_ID]: values},
721
+ true,
722
+ true,
723
+ partial,
724
+ )
725
+ : null;
726
+ const loadTables = async () =>
727
+ objNew(
728
+ arrayFilter(
729
+ await promiseAll(
730
+ mapMap(
731
+ tablesLoadConfig,
732
+ async ([tableId, rowIdColumnName], tableName) => [
733
+ tableId,
734
+ await loadTable(tableName, rowIdColumnName),
735
+ ],
736
+ ),
737
+ ),
738
+ (pair) => !objIsEmpty(pair[1]),
739
+ ),
740
+ );
741
+ const loadValues = async () =>
742
+ valuesLoad
743
+ ? (await loadTable(valuesTableName, DEFAULT_ROW_ID_COLUMN_NAME))[
744
+ SINGLE_ROW_ID
745
+ ]
746
+ : {};
747
+ const getPersisted = async () =>
748
+ await transaction(async () => {
749
+ await refreshSchema();
750
+ const tables = await loadTables();
751
+ const values = await loadValues();
752
+ return !objIsEmpty(tables) || !isUndefined(values)
753
+ ? [tables, values]
754
+ : void 0;
755
+ });
756
+ const setPersisted = async (getContent, changes) =>
757
+ await transaction(async () => {
758
+ await refreshSchema();
759
+ if (!isUndefined(changes)) {
760
+ await saveTables(changes[0], true);
761
+ await saveValues(changes[1], true);
762
+ } else {
763
+ const [tables, values] = getContent();
764
+ await saveTables(tables);
765
+ await saveValues(values);
766
+ }
767
+ });
768
+ const destroy = () => {
769
+ persister.stopAutoLoad().stopAutoSave();
770
+ destroyImpl();
771
+ return persister;
772
+ };
773
+ const persister = createCustomPersister(
774
+ store,
775
+ getPersisted,
776
+ setPersisted,
777
+ addPersisterListener,
778
+ delPersisterListener,
779
+ onIgnoredError,
780
+ persist,
781
+ {[getThing]: () => thing, destroy},
782
+ thing,
783
+ );
784
+ return persister;
785
+ };
786
+
787
+ const COLUMN_NAME = 'ColumnName';
788
+ const STORE = 'store';
789
+ const JSON$1 = 'json';
790
+ const STORE_TABLE_NAME = STORE + 'TableName';
791
+ const STORE_ID_COLUMN_NAME = STORE + 'Id' + COLUMN_NAME;
792
+ const STORE_COLUMN_NAME = STORE + COLUMN_NAME;
793
+ const AUTO_LOAD_INTERVAL_SECONDS = 'autoLoadIntervalSeconds';
794
+ const ROW_ID_COLUMN_NAME = 'rowId' + COLUMN_NAME;
795
+ const TABLE_ID = 'tableId';
796
+ const TABLE_NAME = 'tableName';
797
+ const DELETE_EMPTY_COLUMNS = 'deleteEmptyColumns';
798
+ const DELETE_EMPTY_TABLE = 'deleteEmptyTable';
799
+ const DEFAULT_CONFIG = {
800
+ mode: JSON$1,
801
+ [AUTO_LOAD_INTERVAL_SECONDS]: 1,
802
+ };
803
+ const DEFAULT_TABULAR_VALUES_CONFIG = {
804
+ load: 0,
805
+ save: 0,
806
+ [TABLE_NAME]: TINYBASE + '_values',
807
+ };
808
+ const getDefaultedConfig = (configOrStoreTableName) =>
809
+ objMerge(
810
+ DEFAULT_CONFIG,
811
+ isString(configOrStoreTableName)
812
+ ? {[STORE_TABLE_NAME]: configOrStoreTableName}
813
+ : (configOrStoreTableName ?? {}),
814
+ );
815
+ const getDefaultedTabularConfigMap = (
816
+ configsObj,
817
+ defaultObj,
818
+ tableField,
819
+ exclude,
820
+ then,
821
+ ) => {
822
+ const configMap = mapNew();
823
+ objToArray(configsObj, (configObj, id) => {
824
+ const defaultedConfig = slice(
825
+ objValues(
826
+ objMerge(
827
+ defaultObj,
828
+ isString(configObj) ? {[tableField]: configObj} : configObj,
829
+ ),
830
+ ),
831
+ 0,
832
+ objSize(defaultObj),
833
+ );
834
+ if (!isUndefined(defaultedConfig[0]) && !exclude(id, defaultedConfig[0])) {
835
+ then(id, defaultedConfig[0]);
836
+ mapSet(configMap, id, defaultedConfig);
837
+ }
838
+ });
839
+ return configMap;
840
+ };
841
+ const getConfigStructures = (configOrStoreTableName) => {
842
+ const config = getDefaultedConfig(configOrStoreTableName);
843
+ const autoLoadIntervalSeconds = config[AUTO_LOAD_INTERVAL_SECONDS];
844
+ if (config.mode == JSON$1) {
845
+ const storeTableName = config[STORE_TABLE_NAME] ?? TINYBASE;
846
+ return [
847
+ 1,
848
+ autoLoadIntervalSeconds,
849
+ [
850
+ storeTableName,
851
+ config[STORE_ID_COLUMN_NAME] ?? DEFAULT_ROW_ID_COLUMN_NAME,
852
+ config[STORE_COLUMN_NAME] ?? STORE,
853
+ ],
854
+ setNew(storeTableName),
855
+ ];
856
+ }
857
+ const {tables: {load = {}, save = {}} = {}, values = {}} = config;
858
+ const valuesConfig = slice(
859
+ objValues(objMerge(DEFAULT_TABULAR_VALUES_CONFIG, values)),
860
+ 0,
861
+ objSize(DEFAULT_TABULAR_VALUES_CONFIG),
862
+ );
863
+ const valuesTable = valuesConfig[2];
864
+ const managedTableNames = setNew(valuesTable);
865
+ const excludedTableNames = setNew(valuesTable);
866
+ const tabularConfig = [
867
+ getDefaultedTabularConfigMap(
868
+ load,
869
+ {[TABLE_ID]: null, [ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME},
870
+ TABLE_ID,
871
+ (tableName) => collHas(excludedTableNames, tableName),
872
+ (tableName) => setAdd(managedTableNames, tableName),
873
+ ),
874
+ getDefaultedTabularConfigMap(
875
+ save,
876
+ {
877
+ [TABLE_NAME]: null,
878
+ [ROW_ID_COLUMN_NAME]: DEFAULT_ROW_ID_COLUMN_NAME,
879
+ [DELETE_EMPTY_COLUMNS]: 0,
880
+ [DELETE_EMPTY_TABLE]: 0,
881
+ },
882
+ TABLE_NAME,
883
+ (_, tableName) => collHas(excludedTableNames, tableName),
884
+ (_, tableName) => setAdd(managedTableNames, tableName),
885
+ ),
886
+ valuesConfig,
887
+ ];
888
+ return [0, autoLoadIntervalSeconds, tabularConfig, managedTableNames];
889
+ };
890
+
891
+ const createCustomSqlitePersister = (
892
+ store,
893
+ configOrStoreTableName,
894
+ rawExecuteCommand,
895
+ addChangeListener,
896
+ delChangeListener,
897
+ onSqlCommand,
898
+ onIgnoredError,
899
+ destroy,
900
+ persist,
901
+ thing,
902
+ getThing = 'getDb',
903
+ orReplace,
904
+ ) => {
905
+ let dataVersion;
906
+ let schemaVersion;
907
+ let totalChanges;
908
+ const executeCommand = getWrappedCommand(rawExecuteCommand, onSqlCommand);
909
+ const [
910
+ isJson,
911
+ autoLoadIntervalSeconds,
912
+ defaultedConfig,
913
+ managedTableNamesSet,
914
+ ] = getConfigStructures(configOrStoreTableName);
915
+ const addPersisterListener = (listener) => {
916
+ let interval;
917
+ const startPolling = () =>
918
+ (interval = startInterval(async () => {
919
+ try {
920
+ const [{d, s, c}] = await executeCommand(
921
+ // eslint-disable-next-line max-len
922
+ `${SELECT} ${DATA_VERSION} d,${SCHEMA_VERSION} s,TOTAL_CHANGES() c FROM ${PRAGMA}${DATA_VERSION} JOIN ${PRAGMA}${SCHEMA_VERSION}`,
923
+ );
924
+ if (d != dataVersion || s != schemaVersion || c != totalChanges) {
925
+ if (dataVersion != null) {
926
+ listener();
927
+ }
928
+ dataVersion = d;
929
+ schemaVersion = s;
930
+ totalChanges = c;
931
+ }
932
+ } catch {}
933
+ }, autoLoadIntervalSeconds));
934
+ const stopPolling = () => {
935
+ dataVersion = schemaVersion = totalChanges = null;
936
+ stopInterval(interval);
937
+ };
938
+ const listeningHandle = addChangeListener((tableName) => {
939
+ if (managedTableNamesSet.has(tableName)) {
940
+ stopPolling();
941
+ listener();
942
+ startPolling();
943
+ }
944
+ });
945
+ startPolling();
946
+ return () => {
947
+ stopPolling();
948
+ delChangeListener(listeningHandle);
949
+ };
950
+ };
951
+ const delPersisterListener = (stopPollingAndDelUpdateListener) =>
952
+ stopPollingAndDelUpdateListener();
953
+ return (isJson ? createJsonPersister : createTabularPersister)(
954
+ store,
955
+ executeCommand,
956
+ addPersisterListener,
957
+ delPersisterListener,
958
+ onIgnoredError,
959
+ destroy,
960
+ persist,
961
+ defaultedConfig,
962
+ collValues(managedTableNamesSet),
963
+ async (executeCommand2, managedTableNames) =>
964
+ await executeCommand2(
965
+ // eslint-disable-next-line max-len
966
+ `${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`,
967
+ managedTableNames,
968
+ ),
969
+ thing,
970
+ getThing,
971
+ EMPTY_STRING,
972
+ orReplace,
973
+ (cellOrValue) =>
974
+ cellOrValue === true ? 1 : cellOrValue === false ? 0 : cellOrValue,
975
+ void 0,
976
+ );
977
+ };
978
+
979
+ const EVENT_CHANNEL = TINYBASE;
980
+ const EVENT_REGEX = /^([cd]:)(.+)/;
981
+ const CHANGE_DATA_TRIGGER = TINYBASE + '_data';
982
+ const CREATE_TABLE_TRIGGER = TINYBASE + '_table';
983
+ const createCustomPostgreSqlPersister = (
984
+ store,
985
+ configOrStoreTableName,
986
+ rawExecuteCommand,
987
+ addChangeListener,
988
+ delChangeListener,
989
+ onSqlCommand,
990
+ onIgnoredError,
991
+ destroy,
992
+ persist,
993
+ thing,
994
+ getThing = 'getDb',
995
+ ) => {
996
+ const executeCommand = getWrappedCommand(rawExecuteCommand, onSqlCommand);
997
+ const [isJson, , defaultedConfig, managedTableNamesSet] = getConfigStructures(
998
+ configOrStoreTableName,
999
+ );
1000
+ const addDataTrigger = async (tableName) => {
1001
+ await executeCommand(
1002
+ // eslint-disable-next-line max-len
1003
+ `CREATE OR REPLACE TRIGGER ${escapeId(CHANGE_DATA_TRIGGER + '_' + tableName)} AFTER INSERT OR UPDATE OR DELETE ON ${escapeId(tableName)} EXECUTE FUNCTION ${CHANGE_DATA_TRIGGER}()`,
1004
+ );
1005
+ };
1006
+ const addPersisterListener = async (listener) => {
1007
+ await executeCommand(
1008
+ // eslint-disable-next-line max-len
1009
+ `CREATE OR REPLACE FUNCTION ${CREATE_TABLE_TRIGGER}()RETURNS event_trigger AS $t2$ DECLARE row record; BEGIN FOR row IN SELECT object_identity FROM pg_event_trigger_ddl_commands()WHERE command_tag='CREATE TABLE' LOOP PERFORM pg_notify('${EVENT_CHANNEL}','c:'||SPLIT_PART(row.object_identity,'.',2));END LOOP;END;$t2$ LANGUAGE plpgsql;`,
1010
+ );
1011
+ try {
1012
+ await executeCommand(
1013
+ // eslint-disable-next-line max-len
1014
+ `CREATE EVENT TRIGGER ${CREATE_TABLE_TRIGGER} ON ddl_command_end WHEN TAG IN('CREATE TABLE')EXECUTE FUNCTION ${CREATE_TABLE_TRIGGER}();`,
1015
+ );
1016
+ } catch {}
1017
+ await executeCommand(
1018
+ // eslint-disable-next-line max-len
1019
+ `CREATE OR REPLACE FUNCTION ${CHANGE_DATA_TRIGGER}()RETURNS trigger AS $t1$ BEGIN PERFORM pg_notify('${EVENT_CHANNEL}','d:'||TG_TABLE_NAME);RETURN NULL;END;$t1$ LANGUAGE plpgsql;`,
1020
+ );
1021
+ await promiseAll(
1022
+ arrayMap(collValues(managedTableNamesSet), async (tableName) => {
1023
+ await executeCommand(
1024
+ // eslint-disable-next-line max-len
1025
+ `CREATE TABLE IF NOT EXISTS ${escapeId(tableName)}("_id"text PRIMARY KEY)`,
1026
+ );
1027
+ await addDataTrigger(tableName);
1028
+ }),
1029
+ );
1030
+ return await addChangeListener(
1031
+ EVENT_CHANNEL,
1032
+ async (prefixAndTableName) =>
1033
+ await ifNotUndefined(
1034
+ strMatch(prefixAndTableName, EVENT_REGEX),
1035
+ async ([, eventType, tableName]) => {
1036
+ if (collHas(managedTableNamesSet, tableName)) {
1037
+ if (eventType == 'c:') {
1038
+ await addDataTrigger(tableName);
1039
+ }
1040
+ listener();
1041
+ }
1042
+ },
1043
+ ),
1044
+ );
1045
+ };
1046
+ const delPersisterListener = delChangeListener;
1047
+ return (isJson ? createJsonPersister : createTabularPersister)(
1048
+ store,
1049
+ executeCommand,
1050
+ addPersisterListener,
1051
+ delPersisterListener,
1052
+ onIgnoredError,
1053
+ destroy,
1054
+ persist,
1055
+ defaultedConfig,
1056
+ collValues(managedTableNamesSet),
1057
+ async (executeCommand2, managedTableNames) =>
1058
+ await executeCommand2(
1059
+ // eslint-disable-next-line max-len
1060
+ `${SELECT} table_name tn,column_name cn FROM information_schema.columns ${WHERE} table_schema='public'AND table_name IN(${getPlaceholders(managedTableNames)})`,
1061
+ managedTableNames,
1062
+ ),
1063
+ thing,
1064
+ getThing,
1065
+ 'text',
1066
+ 0,
1067
+ (cellOrValue) => jsonString(cellOrValue),
1068
+ (field) => jsonParse(field),
1069
+ );
1070
+ };
1071
+
1072
+ export {
1073
+ Persists,
1074
+ createCustomPersister,
1075
+ createCustomPostgreSqlPersister,
1076
+ createCustomSqlitePersister,
1077
+ };