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