@livestore/common 0.3.0-dev.3 → 0.3.0-dev.30

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 (426) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +83 -221
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +33 -11
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +128 -68
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +36 -7
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts.map +1 -1
  11. package/dist/debug-info.d.ts +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +389 -0
  16. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
  17. package/dist/devtools/devtools-messages-client-session.js +96 -0
  18. package/dist/devtools/devtools-messages-client-session.js.map +1 -0
  19. package/dist/devtools/devtools-messages-common.d.ts +68 -0
  20. package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
  21. package/dist/devtools/devtools-messages-common.js +60 -0
  22. package/dist/devtools/devtools-messages-common.js.map +1 -0
  23. package/dist/devtools/devtools-messages-leader.d.ts +394 -0
  24. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
  25. package/dist/devtools/devtools-messages-leader.js +147 -0
  26. package/dist/devtools/devtools-messages-leader.js.map +1 -0
  27. package/dist/devtools/devtools-messages.d.ts +3 -592
  28. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  29. package/dist/devtools/devtools-messages.js +3 -171
  30. package/dist/devtools/devtools-messages.js.map +1 -1
  31. package/dist/devtools/devtools-sessioninfo.d.ts +28 -0
  32. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
  33. package/dist/devtools/devtools-sessioninfo.js +34 -0
  34. package/dist/devtools/devtools-sessioninfo.js.map +1 -0
  35. package/dist/devtools/mod.d.ts +39 -0
  36. package/dist/devtools/mod.d.ts.map +1 -0
  37. package/dist/devtools/mod.js +27 -0
  38. package/dist/devtools/mod.js.map +1 -0
  39. package/dist/index.d.ts +4 -11
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +4 -7
  42. package/dist/index.js.map +1 -1
  43. package/dist/leader-thread/LeaderSyncProcessor.d.ts +62 -0
  44. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
  45. package/dist/leader-thread/LeaderSyncProcessor.js +589 -0
  46. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
  47. package/dist/leader-thread/apply-event.d.ts +16 -0
  48. package/dist/leader-thread/apply-event.d.ts.map +1 -0
  49. package/dist/leader-thread/apply-event.js +103 -0
  50. package/dist/leader-thread/apply-event.js.map +1 -0
  51. package/dist/leader-thread/connection.d.ts +34 -6
  52. package/dist/leader-thread/connection.d.ts.map +1 -1
  53. package/dist/leader-thread/connection.js +22 -7
  54. package/dist/leader-thread/connection.js.map +1 -1
  55. package/dist/leader-thread/eventlog.d.ts +27 -0
  56. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  57. package/dist/leader-thread/eventlog.js +123 -0
  58. package/dist/leader-thread/eventlog.js.map +1 -0
  59. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
  60. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  61. package/dist/leader-thread/leader-worker-devtools.js +154 -132
  62. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  63. package/dist/leader-thread/make-leader-thread-layer.d.ts +26 -12
  64. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  65. package/dist/leader-thread/make-leader-thread-layer.js +82 -47
  66. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  67. package/dist/leader-thread/mod.d.ts +1 -1
  68. package/dist/leader-thread/mod.d.ts.map +1 -1
  69. package/dist/leader-thread/mod.js +1 -1
  70. package/dist/leader-thread/mod.js.map +1 -1
  71. package/dist/leader-thread/recreate-db.d.ts +4 -2
  72. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  73. package/dist/leader-thread/recreate-db.js +35 -25
  74. package/dist/leader-thread/recreate-db.js.map +1 -1
  75. package/dist/leader-thread/shutdown-channel.d.ts +2 -5
  76. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  77. package/dist/leader-thread/shutdown-channel.js +2 -4
  78. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  79. package/dist/leader-thread/types.d.ts +86 -39
  80. package/dist/leader-thread/types.d.ts.map +1 -1
  81. package/dist/leader-thread/types.js +1 -3
  82. package/dist/leader-thread/types.js.map +1 -1
  83. package/dist/materializer-helper.d.ts +23 -0
  84. package/dist/materializer-helper.d.ts.map +1 -0
  85. package/dist/materializer-helper.js +70 -0
  86. package/dist/materializer-helper.js.map +1 -0
  87. package/dist/otel.d.ts +2 -0
  88. package/dist/otel.d.ts.map +1 -1
  89. package/dist/otel.js +5 -0
  90. package/dist/otel.js.map +1 -1
  91. package/dist/query-builder/api.d.ts +158 -55
  92. package/dist/query-builder/api.d.ts.map +1 -1
  93. package/dist/query-builder/api.js +3 -5
  94. package/dist/query-builder/api.js.map +1 -1
  95. package/dist/query-builder/astToSql.d.ts +7 -0
  96. package/dist/query-builder/astToSql.d.ts.map +1 -0
  97. package/dist/query-builder/astToSql.js +190 -0
  98. package/dist/query-builder/astToSql.js.map +1 -0
  99. package/dist/query-builder/impl.d.ts +3 -8
  100. package/dist/query-builder/impl.d.ts.map +1 -1
  101. package/dist/query-builder/impl.js +166 -124
  102. package/dist/query-builder/impl.js.map +1 -1
  103. package/dist/query-builder/impl.test.d.ts +86 -1
  104. package/dist/query-builder/impl.test.d.ts.map +1 -1
  105. package/dist/query-builder/impl.test.js +411 -69
  106. package/dist/query-builder/impl.test.js.map +1 -1
  107. package/dist/query-builder/mod.d.ts +7 -0
  108. package/dist/query-builder/mod.d.ts.map +1 -1
  109. package/dist/query-builder/mod.js +7 -0
  110. package/dist/query-builder/mod.js.map +1 -1
  111. package/dist/rehydrate-from-eventlog.d.ts +14 -0
  112. package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
  113. package/dist/rehydrate-from-eventlog.js +65 -0
  114. package/dist/rehydrate-from-eventlog.js.map +1 -0
  115. package/dist/schema/EventDef.d.ts +136 -0
  116. package/dist/schema/EventDef.d.ts.map +1 -0
  117. package/dist/schema/EventDef.js +58 -0
  118. package/dist/schema/EventDef.js.map +1 -0
  119. package/dist/schema/EventId.d.ts +35 -15
  120. package/dist/schema/EventId.d.ts.map +1 -1
  121. package/dist/schema/EventId.js +57 -11
  122. package/dist/schema/EventId.js.map +1 -1
  123. package/dist/schema/EventId.test.d.ts +2 -0
  124. package/dist/schema/EventId.test.d.ts.map +1 -0
  125. package/dist/schema/EventId.test.js +11 -0
  126. package/dist/schema/EventId.test.js.map +1 -0
  127. package/dist/schema/LiveStoreEvent.d.ts +255 -0
  128. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  129. package/dist/schema/LiveStoreEvent.js +118 -0
  130. package/dist/schema/LiveStoreEvent.js.map +1 -0
  131. package/dist/schema/client-document-def.d.ts +223 -0
  132. package/dist/schema/client-document-def.d.ts.map +1 -0
  133. package/dist/schema/client-document-def.js +170 -0
  134. package/dist/schema/client-document-def.js.map +1 -0
  135. package/dist/schema/client-document-def.test.d.ts +2 -0
  136. package/dist/schema/client-document-def.test.d.ts.map +1 -0
  137. package/dist/schema/client-document-def.test.js +201 -0
  138. package/dist/schema/client-document-def.test.js.map +1 -0
  139. package/dist/schema/db-schema/ast/sqlite.d.ts +69 -0
  140. package/dist/schema/db-schema/ast/sqlite.d.ts.map +1 -0
  141. package/dist/schema/db-schema/ast/sqlite.js +71 -0
  142. package/dist/schema/db-schema/ast/sqlite.js.map +1 -0
  143. package/dist/schema/db-schema/ast/validate.d.ts +3 -0
  144. package/dist/schema/db-schema/ast/validate.d.ts.map +1 -0
  145. package/dist/schema/db-schema/ast/validate.js +12 -0
  146. package/dist/schema/db-schema/ast/validate.js.map +1 -0
  147. package/dist/schema/db-schema/dsl/field-defs.d.ts +90 -0
  148. package/dist/schema/db-schema/dsl/field-defs.d.ts.map +1 -0
  149. package/dist/schema/db-schema/dsl/field-defs.js +87 -0
  150. package/dist/schema/db-schema/dsl/field-defs.js.map +1 -0
  151. package/dist/schema/db-schema/dsl/field-defs.test.d.ts +2 -0
  152. package/dist/schema/db-schema/dsl/field-defs.test.d.ts.map +1 -0
  153. package/dist/schema/db-schema/dsl/field-defs.test.js +29 -0
  154. package/dist/schema/db-schema/dsl/field-defs.test.js.map +1 -0
  155. package/dist/schema/db-schema/dsl/mod.d.ts +90 -0
  156. package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -0
  157. package/dist/schema/db-schema/dsl/mod.js +41 -0
  158. package/dist/schema/db-schema/dsl/mod.js.map +1 -0
  159. package/dist/schema/db-schema/hash.d.ts +2 -0
  160. package/dist/schema/db-schema/hash.d.ts.map +1 -0
  161. package/dist/schema/db-schema/hash.js +14 -0
  162. package/dist/schema/db-schema/hash.js.map +1 -0
  163. package/dist/schema/db-schema/mod.d.ts +3 -0
  164. package/dist/schema/db-schema/mod.d.ts.map +1 -0
  165. package/dist/schema/db-schema/mod.js +3 -0
  166. package/dist/schema/db-schema/mod.js.map +1 -0
  167. package/dist/schema/events.d.ts +2 -0
  168. package/dist/schema/events.d.ts.map +1 -0
  169. package/dist/schema/events.js +2 -0
  170. package/dist/schema/events.js.map +1 -0
  171. package/dist/schema/mod.d.ts +5 -3
  172. package/dist/schema/mod.d.ts.map +1 -1
  173. package/dist/schema/mod.js +5 -3
  174. package/dist/schema/mod.js.map +1 -1
  175. package/dist/schema/schema-helpers.d.ts.map +1 -1
  176. package/dist/schema/schema-helpers.js +1 -1
  177. package/dist/schema/schema-helpers.js.map +1 -1
  178. package/dist/schema/schema.d.ts +30 -23
  179. package/dist/schema/schema.d.ts.map +1 -1
  180. package/dist/schema/schema.js +48 -35
  181. package/dist/schema/schema.js.map +1 -1
  182. package/dist/schema/sqlite-state.d.ts +12 -0
  183. package/dist/schema/sqlite-state.d.ts.map +1 -0
  184. package/dist/schema/sqlite-state.js +36 -0
  185. package/dist/schema/sqlite-state.js.map +1 -0
  186. package/dist/schema/system-tables.d.ts +179 -125
  187. package/dist/schema/system-tables.d.ts.map +1 -1
  188. package/dist/schema/system-tables.js +76 -41
  189. package/dist/schema/system-tables.js.map +1 -1
  190. package/dist/schema/table-def.d.ts +37 -109
  191. package/dist/schema/table-def.d.ts.map +1 -1
  192. package/dist/schema/table-def.js +23 -66
  193. package/dist/schema/table-def.js.map +1 -1
  194. package/dist/schema/view.d.ts +3 -0
  195. package/dist/schema/view.d.ts.map +1 -0
  196. package/dist/schema/view.js +3 -0
  197. package/dist/schema/view.js.map +1 -0
  198. package/dist/schema-management/common.d.ts +7 -7
  199. package/dist/schema-management/common.d.ts.map +1 -1
  200. package/dist/schema-management/common.js.map +1 -1
  201. package/dist/schema-management/migrations.d.ts +6 -6
  202. package/dist/schema-management/migrations.d.ts.map +1 -1
  203. package/dist/schema-management/migrations.js +19 -14
  204. package/dist/schema-management/migrations.js.map +1 -1
  205. package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
  206. package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
  207. package/dist/schema-management/validate-mutation-defs.js +17 -17
  208. package/dist/schema-management/validate-mutation-defs.js.map +1 -1
  209. package/dist/sql-queries/misc.d.ts.map +1 -1
  210. package/dist/sql-queries/sql-queries.d.ts +1 -1
  211. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  212. package/dist/sql-queries/sql-queries.js.map +1 -1
  213. package/dist/sql-queries/sql-query-builder.d.ts +1 -1
  214. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  215. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  216. package/dist/sql-queries/types.d.ts +2 -1
  217. package/dist/sql-queries/types.d.ts.map +1 -1
  218. package/dist/sql-queries/types.js.map +1 -1
  219. package/dist/sync/ClientSessionSyncProcessor.d.ts +66 -0
  220. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
  221. package/dist/sync/ClientSessionSyncProcessor.js +209 -0
  222. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -0
  223. package/dist/sync/index.d.ts +1 -1
  224. package/dist/sync/index.d.ts.map +1 -1
  225. package/dist/sync/index.js +1 -1
  226. package/dist/sync/index.js.map +1 -1
  227. package/dist/sync/next/compact-events.d.ts.map +1 -1
  228. package/dist/sync/next/facts.d.ts +19 -19
  229. package/dist/sync/next/facts.d.ts.map +1 -1
  230. package/dist/sync/next/facts.js +3 -3
  231. package/dist/sync/next/facts.js.map +1 -1
  232. package/dist/sync/next/history-dag-common.d.ts +6 -7
  233. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  234. package/dist/sync/next/history-dag-common.js +4 -2
  235. package/dist/sync/next/history-dag-common.js.map +1 -1
  236. package/dist/sync/next/history-dag.d.ts.map +1 -1
  237. package/dist/sync/next/history-dag.js +2 -2
  238. package/dist/sync/next/history-dag.js.map +1 -1
  239. package/dist/sync/next/rebase-events.d.ts +10 -8
  240. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  241. package/dist/sync/next/rebase-events.js +11 -8
  242. package/dist/sync/next/rebase-events.js.map +1 -1
  243. package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
  244. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  245. package/dist/sync/next/test/compact-events.test.js +76 -76
  246. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  247. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +29 -29
  248. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  249. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +67 -36
  250. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  251. package/dist/sync/next/test/mod.d.ts +1 -1
  252. package/dist/sync/next/test/mod.d.ts.map +1 -1
  253. package/dist/sync/next/test/mod.js +1 -1
  254. package/dist/sync/next/test/mod.js.map +1 -1
  255. package/dist/sync/sync.d.ts +55 -20
  256. package/dist/sync/sync.d.ts.map +1 -1
  257. package/dist/sync/sync.js +7 -3
  258. package/dist/sync/sync.js.map +1 -1
  259. package/dist/sync/syncstate.d.ts +213 -82
  260. package/dist/sync/syncstate.d.ts.map +1 -1
  261. package/dist/sync/syncstate.js +319 -120
  262. package/dist/sync/syncstate.js.map +1 -1
  263. package/dist/sync/syncstate.test.js +295 -275
  264. package/dist/sync/syncstate.test.js.map +1 -1
  265. package/dist/sync/validate-push-payload.d.ts +2 -2
  266. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  267. package/dist/sync/validate-push-payload.js +2 -2
  268. package/dist/sync/validate-push-payload.js.map +1 -1
  269. package/dist/util.d.ts +2 -2
  270. package/dist/util.d.ts.map +1 -1
  271. package/dist/version.d.ts +1 -1
  272. package/dist/version.d.ts.map +1 -1
  273. package/dist/version.js +1 -1
  274. package/dist/version.js.map +1 -1
  275. package/package.json +6 -6
  276. package/src/__tests__/fixture.ts +36 -15
  277. package/src/adapter-types.ts +111 -74
  278. package/src/debug-info.ts +1 -0
  279. package/src/devtools/devtools-messages-client-session.ts +141 -0
  280. package/src/devtools/devtools-messages-common.ts +115 -0
  281. package/src/devtools/devtools-messages-leader.ts +191 -0
  282. package/src/devtools/devtools-messages.ts +3 -243
  283. package/src/devtools/devtools-sessioninfo.ts +99 -0
  284. package/src/devtools/mod.ts +36 -0
  285. package/src/index.ts +4 -13
  286. package/src/leader-thread/LeaderSyncProcessor.ts +935 -0
  287. package/src/leader-thread/apply-event.ts +173 -0
  288. package/src/leader-thread/connection.ts +54 -9
  289. package/src/leader-thread/eventlog.ts +199 -0
  290. package/src/leader-thread/leader-worker-devtools.ts +212 -189
  291. package/src/leader-thread/make-leader-thread-layer.ts +143 -77
  292. package/src/leader-thread/mod.ts +1 -1
  293. package/src/leader-thread/recreate-db.ts +41 -30
  294. package/src/leader-thread/shutdown-channel.ts +2 -4
  295. package/src/leader-thread/types.ts +95 -51
  296. package/src/materializer-helper.ts +110 -0
  297. package/src/otel.ts +8 -0
  298. package/src/query-builder/api.ts +236 -85
  299. package/src/query-builder/astToSql.ts +232 -0
  300. package/src/query-builder/impl.test.ts +447 -78
  301. package/src/query-builder/impl.ts +209 -144
  302. package/src/query-builder/mod.ts +7 -0
  303. package/src/rehydrate-from-eventlog.ts +114 -0
  304. package/src/schema/EventDef.ts +216 -0
  305. package/src/schema/EventId.test.ts +12 -0
  306. package/src/schema/EventId.ts +75 -15
  307. package/src/schema/LiveStoreEvent.ts +239 -0
  308. package/src/schema/client-document-def.test.ts +239 -0
  309. package/src/schema/client-document-def.ts +444 -0
  310. package/src/schema/db-schema/ast/sqlite.ts +142 -0
  311. package/src/schema/db-schema/ast/validate.ts +13 -0
  312. package/src/schema/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
  313. package/src/schema/db-schema/dsl/field-defs.test.ts +35 -0
  314. package/src/schema/db-schema/dsl/field-defs.ts +242 -0
  315. package/src/schema/db-schema/dsl/mod.ts +222 -0
  316. package/src/schema/db-schema/hash.ts +14 -0
  317. package/src/schema/db-schema/mod.ts +2 -0
  318. package/src/schema/events.ts +1 -0
  319. package/src/schema/mod.ts +5 -3
  320. package/src/schema/schema-helpers.ts +1 -1
  321. package/src/schema/schema.ts +84 -62
  322. package/src/schema/sqlite-state.ts +62 -0
  323. package/src/schema/system-tables.ts +68 -50
  324. package/src/schema/table-def.ts +68 -214
  325. package/src/schema/view.ts +2 -0
  326. package/src/schema-management/common.ts +7 -7
  327. package/src/schema-management/migrations.ts +27 -24
  328. package/src/schema-management/validate-mutation-defs.ts +22 -24
  329. package/src/sql-queries/sql-queries.ts +1 -1
  330. package/src/sql-queries/sql-query-builder.ts +1 -2
  331. package/src/sql-queries/types.ts +3 -1
  332. package/src/sync/ClientSessionSyncProcessor.ts +332 -0
  333. package/src/sync/index.ts +1 -1
  334. package/src/sync/next/facts.ts +32 -33
  335. package/src/sync/next/history-dag-common.ts +9 -5
  336. package/src/sync/next/history-dag.ts +2 -2
  337. package/src/sync/next/rebase-events.ts +22 -16
  338. package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
  339. package/src/sync/next/test/compact-events.test.ts +78 -78
  340. package/src/sync/next/test/event-fixtures.ts +219 -0
  341. package/src/sync/next/test/mod.ts +1 -1
  342. package/src/sync/sync.ts +51 -19
  343. package/src/sync/syncstate.test.ts +335 -308
  344. package/src/sync/syncstate.ts +394 -212
  345. package/src/sync/validate-push-payload.ts +7 -4
  346. package/src/version.ts +1 -1
  347. package/tmp/pack.tgz +0 -0
  348. package/tsconfig.json +2 -1
  349. package/dist/derived-mutations.d.ts +0 -109
  350. package/dist/derived-mutations.d.ts.map +0 -1
  351. package/dist/derived-mutations.js +0 -54
  352. package/dist/derived-mutations.js.map +0 -1
  353. package/dist/derived-mutations.test.d.ts +0 -2
  354. package/dist/derived-mutations.test.d.ts.map +0 -1
  355. package/dist/derived-mutations.test.js +0 -93
  356. package/dist/derived-mutations.test.js.map +0 -1
  357. package/dist/devtools/devtools-bridge.d.ts +0 -12
  358. package/dist/devtools/devtools-bridge.d.ts.map +0 -1
  359. package/dist/devtools/devtools-bridge.js +0 -2
  360. package/dist/devtools/devtools-bridge.js.map +0 -1
  361. package/dist/devtools/index.d.ts +0 -42
  362. package/dist/devtools/index.d.ts.map +0 -1
  363. package/dist/devtools/index.js +0 -48
  364. package/dist/devtools/index.js.map +0 -1
  365. package/dist/init-singleton-tables.d.ts +0 -4
  366. package/dist/init-singleton-tables.d.ts.map +0 -1
  367. package/dist/init-singleton-tables.js +0 -16
  368. package/dist/init-singleton-tables.js.map +0 -1
  369. package/dist/leader-thread/apply-mutation.d.ts +0 -8
  370. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  371. package/dist/leader-thread/apply-mutation.js +0 -95
  372. package/dist/leader-thread/apply-mutation.js.map +0 -1
  373. package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
  374. package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
  375. package/dist/leader-thread/leader-sync-processor.js +0 -422
  376. package/dist/leader-thread/leader-sync-processor.js.map +0 -1
  377. package/dist/leader-thread/mutationlog.d.ts +0 -23
  378. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  379. package/dist/leader-thread/mutationlog.js +0 -27
  380. package/dist/leader-thread/mutationlog.js.map +0 -1
  381. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  382. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  383. package/dist/leader-thread/pull-queue-set.js +0 -39
  384. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  385. package/dist/mutation.d.ts +0 -13
  386. package/dist/mutation.d.ts.map +0 -1
  387. package/dist/mutation.js +0 -57
  388. package/dist/mutation.js.map +0 -1
  389. package/dist/query-info.d.ts +0 -38
  390. package/dist/query-info.d.ts.map +0 -1
  391. package/dist/query-info.js +0 -7
  392. package/dist/query-info.js.map +0 -1
  393. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  394. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  395. package/dist/rehydrate-from-mutationlog.js +0 -72
  396. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  397. package/dist/schema/MutationEvent.d.ts +0 -191
  398. package/dist/schema/MutationEvent.d.ts.map +0 -1
  399. package/dist/schema/MutationEvent.js +0 -56
  400. package/dist/schema/MutationEvent.js.map +0 -1
  401. package/dist/schema/mutations.d.ts +0 -107
  402. package/dist/schema/mutations.d.ts.map +0 -1
  403. package/dist/schema/mutations.js +0 -42
  404. package/dist/schema/mutations.js.map +0 -1
  405. package/dist/sync/client-session-sync-processor.d.ts +0 -45
  406. package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
  407. package/dist/sync/client-session-sync-processor.js +0 -131
  408. package/dist/sync/client-session-sync-processor.js.map +0 -1
  409. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  410. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  411. package/src/derived-mutations.test.ts +0 -101
  412. package/src/derived-mutations.ts +0 -166
  413. package/src/devtools/devtools-bridge.ts +0 -13
  414. package/src/devtools/index.ts +0 -48
  415. package/src/init-singleton-tables.ts +0 -24
  416. package/src/leader-thread/apply-mutation.ts +0 -143
  417. package/src/leader-thread/leader-sync-processor.ts +0 -666
  418. package/src/leader-thread/mutationlog.ts +0 -42
  419. package/src/leader-thread/pull-queue-set.ts +0 -58
  420. package/src/mutation.ts +0 -81
  421. package/src/query-info.ts +0 -78
  422. package/src/rehydrate-from-mutationlog.ts +0 -127
  423. package/src/schema/MutationEvent.ts +0 -161
  424. package/src/schema/mutations.ts +0 -192
  425. package/src/sync/client-session-sync-processor.ts +0 -207
  426. package/src/sync/next/test/mutation-fixtures.ts +0 -231
@@ -1,47 +0,0 @@
1
- import type { Scope } from '@livestore/utils/effect';
2
- import { Effect } from '@livestore/utils/effect';
3
- import type { SynchronousDatabase } from '../adapter-types.js';
4
- import { UnexpectedError } from '../adapter-types.js';
5
- import type { LiveStoreSchema } from '../schema/mod.js';
6
- import type { InitialBlockingSyncContext, SyncProcessor } from './types.js';
7
- /**
8
- * The general idea of the sync processor is to "follow the sync state"
9
- * and apply/rollback mutations as needed to the read model and mutation log.
10
- * The leader sync processor is also responsible for
11
- * - broadcasting mutations to client sessions via the pull queues.
12
- * - pushing mutations to the sync backend
13
- *
14
- * In the leader sync processor, pulling always has precedence over pushing.
15
- *
16
- * External events:
17
- * - Mutation pushed from client session
18
- * - Mutation pushed from devtools (via pushPartial)
19
- * - Mutation pulled from sync backend
20
- *
21
- * The machine can be in the following states:
22
- * - in-sync: fully synced with remote, now idling
23
- * - applying-syncstate-advance (with pointer to current progress in case of rebase interrupt)
24
- *
25
- * Transitions:
26
- * - in-sync -> applying-syncstate-advance
27
- * - applying-syncstate-advance -> in-sync
28
- * - applying-syncstate-advance -> applying-syncstate-advance (need to interrupt previous operation)
29
- *
30
- * Queuing vs interrupting behaviour:
31
- * - Operations caused by pull can never be interrupted
32
- * - Incoming pull can interrupt current push
33
- * - Incoming pull needs to wait to previous pull to finish
34
- * - Incoming push needs to wait to previous push to finish
35
- *
36
- * Backend pushing:
37
- * - continously push to backend
38
- * - only interrupted and restarted on rebase
39
- */
40
- export declare const makeLeaderSyncProcessor: ({ schema, dbMissing, dbLog, initialBlockingSyncContext, }: {
41
- schema: LiveStoreSchema;
42
- /** Only used to know whether we can safely query dbLog during setup execution */
43
- dbMissing: boolean;
44
- dbLog: SynchronousDatabase;
45
- initialBlockingSyncContext: InitialBlockingSyncContext;
46
- }) => Effect.Effect<SyncProcessor, UnexpectedError, Scope.Scope>;
47
- //# sourceMappingURL=leader-sync-processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"leader-sync-processor.d.ts","sourceRoot":"","sources":["../../src/leader-thread/leader-sync-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAGL,MAAM,EAUP,MAAM,yBAAyB,CAAA;AAGhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAA2B,MAAM,kBAAkB,CAAA;AAehF,OAAO,KAAK,EAAE,0BAA0B,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAA;AAuB5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,uBAAuB,8DAKjC;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,iFAAiF;IACjF,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,mBAAmB,CAAA;IAC1B,0BAA0B,EAAE,0BAA0B,CAAA;CACvD,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAoOzD,CAAA"}
@@ -1,422 +0,0 @@
1
- import { shouldNeverHappen, TRACE_VERBOSE } from '@livestore/utils';
2
- import { BucketQueue, Deferred, Effect, Exit, Fiber, FiberHandle, Option, OtelTracer, Ref, Schema, Stream, SubscriptionRef, } from '@livestore/utils/effect';
3
- import { UnexpectedError } from '../adapter-types.js';
4
- import { EventId, MUTATION_LOG_META_TABLE, MutationEvent, mutationLogMetaTable, SESSION_CHANGESET_META_TABLE, } from '../schema/mod.js';
5
- import { updateRows } from '../sql-queries/index.js';
6
- import { InvalidPushError } from '../sync/sync.js';
7
- import * as SyncState from '../sync/syncstate.js';
8
- import { sql } from '../util.js';
9
- import { makeApplyMutation } from './apply-mutation.js';
10
- import { execSql } from './connection.js';
11
- import { getBackendHeadFromDb, getLocalHeadFromDb, getMutationEventsSince, updateBackendHead } from './mutationlog.js';
12
- import { LeaderThreadCtx } from './types.js';
13
- /**
14
- * The general idea of the sync processor is to "follow the sync state"
15
- * and apply/rollback mutations as needed to the read model and mutation log.
16
- * The leader sync processor is also responsible for
17
- * - broadcasting mutations to client sessions via the pull queues.
18
- * - pushing mutations to the sync backend
19
- *
20
- * In the leader sync processor, pulling always has precedence over pushing.
21
- *
22
- * External events:
23
- * - Mutation pushed from client session
24
- * - Mutation pushed from devtools (via pushPartial)
25
- * - Mutation pulled from sync backend
26
- *
27
- * The machine can be in the following states:
28
- * - in-sync: fully synced with remote, now idling
29
- * - applying-syncstate-advance (with pointer to current progress in case of rebase interrupt)
30
- *
31
- * Transitions:
32
- * - in-sync -> applying-syncstate-advance
33
- * - applying-syncstate-advance -> in-sync
34
- * - applying-syncstate-advance -> applying-syncstate-advance (need to interrupt previous operation)
35
- *
36
- * Queuing vs interrupting behaviour:
37
- * - Operations caused by pull can never be interrupted
38
- * - Incoming pull can interrupt current push
39
- * - Incoming pull needs to wait to previous pull to finish
40
- * - Incoming push needs to wait to previous push to finish
41
- *
42
- * Backend pushing:
43
- * - continously push to backend
44
- * - only interrupted and restarted on rebase
45
- */
46
- export const makeLeaderSyncProcessor = ({ schema, dbMissing, dbLog, initialBlockingSyncContext, }) => Effect.gen(function* () {
47
- const syncBackendQueue = yield* BucketQueue.make();
48
- const stateRef = yield* Ref.make({ _tag: 'init' });
49
- const semaphore = yield* Effect.makeSemaphore(1);
50
- const isLocalEvent = (mutationEventEncoded) => {
51
- const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
52
- return mutationDef.options.localOnly;
53
- };
54
- const spanRef = { current: undefined };
55
- const applyMutationItemsRef = { current: undefined };
56
- // TODO get rid of counters once Effect semaphore ordering is fixed
57
- let counterRef = 0;
58
- let expectedCounter = 0;
59
- /*
60
- TODO: refactor
61
- - Pushes go directly into a Mailbox
62
- - Have a worker fiber that takes from the mailbox (wouldn't need a semaphore)
63
- */
64
- const waitForSyncState = (counter) => Effect.gen(function* () {
65
- // console.log('waitForSyncState: waiting for semaphore', counter)
66
- yield* semaphore.take(1);
67
- // NOTE this is a workaround to ensure the semaphore take-order is respected
68
- // TODO this needs to be fixed upstream in Effect
69
- if (counter !== expectedCounter) {
70
- console.log(`waitForSyncState: counter mismatch (expected: ${expectedCounter}, got: ${counter}), releasing semaphore`);
71
- yield* semaphore.release(1);
72
- yield* Effect.yieldNow();
73
- // Retrying...
74
- return yield* waitForSyncState(counter);
75
- }
76
- // console.log('waitForSyncState: took semaphore', counter)
77
- const state = yield* Ref.get(stateRef);
78
- if (state._tag !== 'in-sync') {
79
- return shouldNeverHappen('Expected to be in-sync but got ' + state._tag);
80
- }
81
- expectedCounter = counter + 1;
82
- return state;
83
- }).pipe(Effect.withSpan(`@livestore/common:leader-thread:syncing:waitForSyncState(${counter})`));
84
- const push = (newEvents) => Effect.gen(function* () {
85
- const counter = counterRef;
86
- counterRef++;
87
- // TODO validate batch
88
- if (newEvents.length === 0)
89
- return;
90
- const { connectedClientSessionPullQueues } = yield* LeaderThreadCtx;
91
- // TODO if there are multiple pending pushes, we should batch them together
92
- const state = yield* waitForSyncState(counter);
93
- const updateResult = SyncState.updateSyncState({
94
- syncState: state.syncState,
95
- payload: { _tag: 'local-push', newEvents },
96
- isLocalEvent,
97
- isEqualEvent: MutationEvent.isEqualEncoded,
98
- });
99
- if (updateResult._tag === 'rebase') {
100
- return shouldNeverHappen('The leader thread should never have to rebase due to a local push');
101
- }
102
- else if (updateResult._tag === 'reject') {
103
- return yield* Effect.fail(InvalidPushError.make({
104
- reason: {
105
- _tag: 'LeaderAhead',
106
- minimumExpectedId: updateResult.expectedMinimumId,
107
- providedId: newEvents.at(0).id,
108
- },
109
- }));
110
- }
111
- const fiber = yield* applyMutationItemsRef.current({ batchItems: updateResult.newEvents }).pipe(Effect.fork);
112
- yield* Ref.set(stateRef, {
113
- _tag: 'applying-syncstate-advance',
114
- origin: 'push',
115
- syncState: updateResult.newSyncState,
116
- fiber,
117
- });
118
- // console.log('setRef:applying-syncstate-advance after push', counter)
119
- yield* connectedClientSessionPullQueues.offer({
120
- payload: { _tag: 'upstream-advance', newEvents: updateResult.newEvents },
121
- remaining: 0,
122
- });
123
- spanRef.current?.addEvent('local-push', {
124
- batchSize: newEvents.length,
125
- updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
126
- });
127
- // Don't sync localOnly mutations
128
- const filteredBatch = updateResult.newEvents.filter((mutationEventEncoded) => {
129
- const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
130
- return mutationDef.options.localOnly === false;
131
- });
132
- yield* BucketQueue.offerAll(syncBackendQueue, filteredBatch);
133
- yield* fiber; // Waiting for the mutation to be applied
134
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:local-push', {
135
- attributes: {
136
- batchSize: newEvents.length,
137
- batch: TRACE_VERBOSE ? newEvents : undefined,
138
- },
139
- links: spanRef.current
140
- ? [{ _tag: 'SpanLink', span: OtelTracer.makeExternalSpan(spanRef.current.spanContext()), attributes: {} }]
141
- : undefined,
142
- }));
143
- const pushPartial = (mutationEventEncoded_) => Effect.gen(function* () {
144
- const state = yield* Ref.get(stateRef);
145
- if (state._tag === 'init')
146
- return shouldNeverHappen('Not initialized');
147
- const mutationDef = schema.mutations.get(mutationEventEncoded_.mutation) ??
148
- shouldNeverHappen(`Unknown mutation: ${mutationEventEncoded_.mutation}`);
149
- const mutationEventEncoded = new MutationEvent.EncodedWithMeta({
150
- ...mutationEventEncoded_,
151
- ...EventId.nextPair(state.syncState.localHead, mutationDef.options.localOnly),
152
- });
153
- yield* push([mutationEventEncoded]);
154
- }).pipe(Effect.catchTag('InvalidPushError', Effect.orDie));
155
- // Starts various background loops
156
- const boot = ({ dbReady }) => Effect.gen(function* () {
157
- const span = yield* OtelTracer.currentOtelSpan.pipe(Effect.catchAll(() => Effect.succeed(undefined)));
158
- spanRef.current = span;
159
- const initialBackendHead = dbMissing ? EventId.ROOT.global : getBackendHeadFromDb(dbLog);
160
- const initialLocalHead = dbMissing ? EventId.ROOT : getLocalHeadFromDb(dbLog);
161
- if (initialBackendHead > initialLocalHead.global) {
162
- return shouldNeverHappen(`During boot the backend head (${initialBackendHead}) should never be greater than the local head (${initialLocalHead.global})`);
163
- }
164
- const pendingMutationEvents = yield* getMutationEventsSince({ global: initialBackendHead, local: 0 });
165
- const initialSyncState = {
166
- pending: pendingMutationEvents.map((_) => new MutationEvent.EncodedWithMeta(_)),
167
- // On the leader we don't need a rollback tail beyond `pending` items
168
- rollbackTail: [],
169
- upstreamHead: { global: initialBackendHead, local: 0 },
170
- localHead: initialLocalHead,
171
- };
172
- /** State transitions need to happen atomically, so we use a Ref to track the state */
173
- yield* Ref.set(stateRef, { _tag: 'in-sync', syncState: initialSyncState });
174
- applyMutationItemsRef.current = yield* makeApplyMutationItems({ stateRef, semaphore });
175
- // Rehydrate sync queue
176
- if (pendingMutationEvents.length > 0) {
177
- const filteredBatch = pendingMutationEvents
178
- // Don't sync localOnly mutations
179
- .filter((mutationEventEncoded) => {
180
- const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
181
- return mutationDef.options.localOnly === false;
182
- });
183
- yield* BucketQueue.offerAll(syncBackendQueue, filteredBatch);
184
- }
185
- const backendPushingFiberHandle = yield* FiberHandle.make();
186
- yield* FiberHandle.run(backendPushingFiberHandle, backgroundBackendPushing({ dbReady, syncBackendQueue, span }).pipe(Effect.tapCauseLogPretty));
187
- yield* backgroundBackendPulling({
188
- dbReady,
189
- initialBackendHead,
190
- isLocalEvent,
191
- restartBackendPushing: (filteredRebasedPending) => Effect.gen(function* () {
192
- // Stop current pushing fiber
193
- yield* FiberHandle.clear(backendPushingFiberHandle);
194
- // Reset the sync queue
195
- yield* BucketQueue.clear(syncBackendQueue);
196
- yield* BucketQueue.offerAll(syncBackendQueue, filteredRebasedPending);
197
- // Restart pushing fiber
198
- yield* FiberHandle.run(backendPushingFiberHandle, backgroundBackendPushing({ dbReady, syncBackendQueue, span }).pipe(Effect.tapCauseLogPretty));
199
- }),
200
- applyMutationItemsRef,
201
- stateRef,
202
- semaphore,
203
- span,
204
- initialBlockingSyncContext,
205
- }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped);
206
- }).pipe(Effect.withSpanScoped('@livestore/common:leader-thread:syncing'));
207
- return {
208
- push,
209
- pushPartial,
210
- boot,
211
- syncState: Effect.gen(function* () {
212
- const state = yield* Ref.get(stateRef);
213
- if (state._tag === 'init')
214
- return shouldNeverHappen('Not initialized');
215
- return state.syncState;
216
- }),
217
- };
218
- });
219
- // TODO how to handle errors gracefully
220
- const makeApplyMutationItems = ({ stateRef, semaphore, }) => Effect.gen(function* () {
221
- const leaderThreadCtx = yield* LeaderThreadCtx;
222
- const { db, dbLog } = leaderThreadCtx;
223
- const applyMutation = yield* makeApplyMutation;
224
- return ({ batchItems }) => Effect.gen(function* () {
225
- const state = yield* Ref.get(stateRef);
226
- if (state._tag !== 'applying-syncstate-advance') {
227
- // console.log('applyMutationItems: counter', counter)
228
- return shouldNeverHappen(`Expected to be applying-syncstate-advance but got ${state._tag}`);
229
- }
230
- db.execute('BEGIN TRANSACTION', undefined); // Start the transaction
231
- dbLog.execute('BEGIN TRANSACTION', undefined); // Start the transaction
232
- yield* Effect.addFinalizer((exit) => Effect.gen(function* () {
233
- if (Exit.isSuccess(exit))
234
- return;
235
- // Rollback in case of an error
236
- db.execute('ROLLBACK', undefined);
237
- dbLog.execute('ROLLBACK', undefined);
238
- }));
239
- for (let i = 0; i < batchItems.length; i++) {
240
- const { meta, ...mutationEventEncoded } = batchItems[i];
241
- yield* applyMutation(mutationEventEncoded);
242
- if (meta?.deferred) {
243
- yield* Deferred.succeed(meta.deferred, void 0);
244
- }
245
- // TODO re-introduce this
246
- // if (i < batchItems.length - 1) {
247
- // yield* Ref.set(stateRef, { ...state, proccesHead: batchItems[i + 1]!.id })
248
- // }
249
- }
250
- db.execute('COMMIT', undefined); // Commit the transaction
251
- dbLog.execute('COMMIT', undefined); // Commit the transaction
252
- yield* Ref.set(stateRef, { _tag: 'in-sync', syncState: state.syncState });
253
- // console.log('setRef:sync after applyMutationItems', counter)
254
- yield* semaphore.release(1);
255
- }).pipe(Effect.scoped, Effect.withSpan('@livestore/common:leader-thread:syncing:applyMutationItems'), Effect.tapCauseLogPretty, UnexpectedError.mapToUnexpectedError);
256
- });
257
- const backgroundBackendPulling = ({ dbReady, initialBackendHead, isLocalEvent, restartBackendPushing, span, stateRef, applyMutationItemsRef, semaphore, initialBlockingSyncContext, }) => Effect.gen(function* () {
258
- const { syncBackend, db, dbLog, connectedClientSessionPullQueues, schema } = yield* LeaderThreadCtx;
259
- if (syncBackend === undefined)
260
- return;
261
- const cursorInfo = yield* getCursorInfo(initialBackendHead);
262
- const onNewPullChunk = (newEvents, remaining) => Effect.gen(function* () {
263
- if (newEvents.length === 0)
264
- return;
265
- const state = yield* Ref.get(stateRef);
266
- if (state._tag === 'init')
267
- return shouldNeverHappen('Not initialized');
268
- // const counter = state.counter + 1
269
- if (state._tag === 'applying-syncstate-advance') {
270
- if (state.origin === 'push') {
271
- yield* Fiber.interrupt(state.fiber);
272
- // In theory we should force-take the semaphore here, but as it's still taken,
273
- // it's already in the right state we want it to be in
274
- }
275
- else {
276
- // Wait for previous advance to finish
277
- yield* semaphore.take(1);
278
- }
279
- }
280
- const trimRollbackUntil = newEvents.at(-1).id;
281
- const updateResult = SyncState.updateSyncState({
282
- syncState: state.syncState,
283
- payload: { _tag: 'upstream-advance', newEvents, trimRollbackUntil },
284
- isLocalEvent,
285
- isEqualEvent: MutationEvent.isEqualEncoded,
286
- ignoreLocalEvents: true,
287
- });
288
- if (updateResult._tag === 'reject') {
289
- return shouldNeverHappen('The leader thread should never reject upstream advances');
290
- }
291
- const newBackendHead = newEvents.at(-1).id;
292
- updateBackendHead(dbLog, newBackendHead);
293
- if (updateResult._tag === 'rebase') {
294
- span?.addEvent('backend-pull:rebase', {
295
- newEventsCount: newEvents.length,
296
- newEvents: TRACE_VERBOSE ? JSON.stringify(newEvents) : undefined,
297
- rollbackCount: updateResult.eventsToRollback.length,
298
- updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
299
- });
300
- const filteredRebasedPending = updateResult.newSyncState.pending.filter((mutationEvent) => {
301
- const mutationDef = schema.mutations.get(mutationEvent.mutation);
302
- return mutationDef.options.localOnly === false;
303
- });
304
- yield* restartBackendPushing(filteredRebasedPending);
305
- if (updateResult.eventsToRollback.length > 0) {
306
- yield* rollback({ db, dbLog, eventIdsToRollback: updateResult.eventsToRollback.map((_) => _.id) });
307
- }
308
- yield* connectedClientSessionPullQueues.offer({
309
- payload: {
310
- _tag: 'upstream-rebase',
311
- newEvents: updateResult.newEvents,
312
- rollbackUntil: updateResult.eventsToRollback.at(0).id,
313
- trimRollbackUntil,
314
- },
315
- remaining,
316
- });
317
- }
318
- else {
319
- span?.addEvent('backend-pull:advance', {
320
- newEventsCount: newEvents.length,
321
- updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
322
- });
323
- yield* connectedClientSessionPullQueues.offer({
324
- payload: { _tag: 'upstream-advance', newEvents: updateResult.newEvents, trimRollbackUntil },
325
- remaining,
326
- });
327
- }
328
- const fiber = yield* applyMutationItemsRef.current({
329
- batchItems: updateResult.newEvents,
330
- }).pipe(Effect.fork);
331
- yield* Ref.set(stateRef, {
332
- _tag: 'applying-syncstate-advance',
333
- origin: 'pull',
334
- syncState: updateResult.newSyncState,
335
- fiber,
336
- });
337
- // console.log('setRef:applying-syncstate-advance after backgroundBackendPulling', -1)
338
- });
339
- yield* syncBackend.pull(cursorInfo).pipe(
340
- // TODO only take from queue while connected
341
- Stream.tap(({ batch, remaining }) => Effect.gen(function* () {
342
- // yield* Effect.spanEvent('batch', {
343
- // attributes: {
344
- // batchSize: batch.length,
345
- // batch: TRACE_VERBOSE ? batch : undefined,
346
- // },
347
- // })
348
- // Wait for the db to be initially created
349
- yield* dbReady;
350
- // NOTE we only want to take process mutations when the sync backend is connected
351
- // (e.g. needed for simulating being offline)
352
- // TODO remove when there's a better way to handle this in stream above
353
- yield* SubscriptionRef.waitUntil(syncBackend.isConnected, (isConnected) => isConnected === true);
354
- yield* onNewPullChunk(batch.map((_) => new MutationEvent.EncodedWithMeta(_.mutationEventEncoded)), remaining);
355
- yield* initialBlockingSyncContext.update({ processed: batch.length, remaining });
356
- })), Stream.runDrain, Effect.interruptible);
357
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:backend-pulling'));
358
- const rollback = ({ db, dbLog, eventIdsToRollback, }) => Effect.gen(function* () {
359
- const rollbackEvents = db
360
- .select(sql `SELECT * FROM ${SESSION_CHANGESET_META_TABLE} WHERE (idGlobal, idLocal) IN (${eventIdsToRollback.map((id) => `(${id.global}, ${id.local})`).join(', ')})`)
361
- .map((_) => ({ id: { global: _.idGlobal, local: _.idLocal }, changeset: _.changeset, debug: _.debug }))
362
- .toSorted((a, b) => EventId.compare(a.id, b.id));
363
- // Apply changesets in reverse order
364
- for (let i = rollbackEvents.length - 1; i >= 0; i--) {
365
- const { changeset } = rollbackEvents[i];
366
- db.makeChangeset(changeset).invert().apply();
367
- }
368
- // Delete the changeset rows
369
- db.execute(sql `DELETE FROM ${SESSION_CHANGESET_META_TABLE} WHERE (idGlobal, idLocal) IN (${eventIdsToRollback.map((id) => `(${id.global}, ${id.local})`).join(', ')})`);
370
- // Delete the mutation log rows
371
- dbLog.execute(sql `DELETE FROM ${MUTATION_LOG_META_TABLE} WHERE (idGlobal, idLocal) IN (${eventIdsToRollback.map((id) => `(${id.global}, ${id.local})`).join(', ')})`);
372
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:rollback', {
373
- attributes: { count: eventIdsToRollback.length },
374
- }));
375
- const getCursorInfo = (remoteHead) => Effect.gen(function* () {
376
- const { dbLog } = yield* LeaderThreadCtx;
377
- if (remoteHead === EventId.ROOT.global)
378
- return Option.none();
379
- const MutationlogQuerySchema = Schema.Struct({
380
- syncMetadataJson: Schema.parseJson(Schema.Option(Schema.JsonValue)),
381
- }).pipe(Schema.pluck('syncMetadataJson'), Schema.Array, Schema.head);
382
- const syncMetadataOption = yield* Effect.sync(() => dbLog.select(sql `SELECT syncMetadataJson FROM ${MUTATION_LOG_META_TABLE} WHERE idGlobal = ${remoteHead} ORDER BY idLocal ASC LIMIT 1`)).pipe(Effect.andThen(Schema.decode(MutationlogQuerySchema)), Effect.map(Option.flatten), Effect.orDie);
383
- return Option.some({
384
- cursor: { global: remoteHead, local: 0 },
385
- metadata: syncMetadataOption,
386
- });
387
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:getCursorInfo', { attributes: { remoteHead } }));
388
- const backgroundBackendPushing = ({ dbReady, syncBackendQueue, span, }) => Effect.gen(function* () {
389
- const { syncBackend, dbLog } = yield* LeaderThreadCtx;
390
- if (syncBackend === undefined)
391
- return;
392
- yield* dbReady;
393
- while (true) {
394
- yield* SubscriptionRef.waitUntil(syncBackend.isConnected, (isConnected) => isConnected === true);
395
- // TODO make batch size configurable
396
- const queueItems = yield* BucketQueue.takeBetween(syncBackendQueue, 1, 50);
397
- yield* SubscriptionRef.waitUntil(syncBackend.isConnected, (isConnected) => isConnected === true);
398
- span?.addEvent('backend-push', {
399
- batchSize: queueItems.length,
400
- batch: TRACE_VERBOSE ? JSON.stringify(queueItems) : undefined,
401
- });
402
- // TODO handle push errors (should only happen during concurrent pull+push)
403
- const pushResult = yield* syncBackend.push(queueItems).pipe(Effect.either);
404
- if (pushResult._tag === 'Left') {
405
- span?.addEvent('backend-push-error', { error: pushResult.left.toString() });
406
- // wait for interrupt and restarting of pushing
407
- return yield* Effect.never;
408
- }
409
- const { metadata } = pushResult.right;
410
- // TODO try to do this in a single query
411
- for (let i = 0; i < queueItems.length; i++) {
412
- const mutationEventEncoded = queueItems[i];
413
- yield* execSql(dbLog, ...updateRows({
414
- tableName: MUTATION_LOG_META_TABLE,
415
- columns: mutationLogMetaTable.sqliteDef.columns,
416
- where: { idGlobal: mutationEventEncoded.id.global, idLocal: mutationEventEncoded.id.local },
417
- updateValues: { syncMetadataJson: metadata[i] },
418
- }));
419
- }
420
- }
421
- }).pipe(Effect.interruptible, Effect.withSpan('@livestore/common:leader-thread:syncing:backend-pushing'));
422
- //# sourceMappingURL=leader-sync-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"leader-sync-processor.js","sourceRoot":"","sources":["../../src/leader-thread/leader-sync-processor.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { Effect } from '@livestore/utils/effect';
2
- import type { SynchronousDatabase } from '../adapter-types.js';
3
- import * as EventId from '../schema/EventId.js';
4
- import { LeaderThreadCtx } from './types.js';
5
- export declare const getMutationEventsSince: (since: EventId.EventId) => Effect.Effect<{
6
- mutation: string;
7
- args: any;
8
- id: {
9
- global: number;
10
- local: number;
11
- };
12
- parentId: {
13
- global: number;
14
- local: number;
15
- };
16
- }[], never, LeaderThreadCtx>;
17
- export declare const getLocalHeadFromDb: (dbLog: SynchronousDatabase) => {
18
- global: number;
19
- local: number;
20
- };
21
- export declare const getBackendHeadFromDb: (dbLog: SynchronousDatabase) => number;
22
- export declare const updateBackendHead: (dbLog: SynchronousDatabase, head: EventId.EventId) => void;
23
- //# sourceMappingURL=mutationlog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutationlog.d.ts","sourceRoot":"","sources":["../../src/leader-thread/mutationlog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,yBAAyB,CAAA;AAExD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAG/C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,eAAO,MAAM,sBAAsB,UAAW,OAAO,CAAC,OAAO;;;;;;;;;;;4BAkBzD,CAAA;AAEJ,eAAO,MAAM,kBAAkB,UAAW,mBAAmB;;;CAM5D,CAAA;AAED,eAAO,MAAM,oBAAoB,UAAW,mBAAmB,WAC6C,CAAA;AAG5G,eAAO,MAAM,iBAAiB,UAAW,mBAAmB,QAAQ,OAAO,CAAC,OAAO,SACR,CAAA"}
@@ -1,27 +0,0 @@
1
- import { Effect, Schema } from '@livestore/utils/effect';
2
- import * as EventId from '../schema/EventId.js';
3
- import { MUTATION_LOG_META_TABLE, mutationLogMetaTable, SYNC_STATUS_TABLE } from '../schema/system-tables.js';
4
- import { prepareBindValues, sql } from '../util.js';
5
- import { LeaderThreadCtx } from './types.js';
6
- export const getMutationEventsSince = (since) => Effect.gen(function* () {
7
- const { dbLog } = yield* LeaderThreadCtx;
8
- const query = mutationLogMetaTable.query.where('idGlobal', '>=', since.global).asSql();
9
- const pendingMutationEventsRaw = dbLog.select(query.query, prepareBindValues(query.bindValues, query.query));
10
- const pendingMutationEvents = Schema.decodeUnknownSync(mutationLogMetaTable.schema.pipe(Schema.Array))(pendingMutationEventsRaw);
11
- return pendingMutationEvents
12
- .map((_) => ({
13
- mutation: _.mutation,
14
- args: _.argsJson,
15
- id: { global: _.idGlobal, local: _.idLocal },
16
- parentId: { global: _.parentIdGlobal, local: _.parentIdLocal },
17
- }))
18
- .filter((_) => EventId.compare(_.id, since) > 0);
19
- });
20
- export const getLocalHeadFromDb = (dbLog) => {
21
- const res = dbLog.select(sql `select idGlobal, idLocal from ${MUTATION_LOG_META_TABLE} order by idGlobal DESC, idLocal DESC limit 1`)[0];
22
- return res ? { global: res.idGlobal, local: res.idLocal } : EventId.ROOT;
23
- };
24
- export const getBackendHeadFromDb = (dbLog) => dbLog.select(sql `select head from ${SYNC_STATUS_TABLE}`)[0]?.head ?? EventId.ROOT.global;
25
- // TODO use prepared statements
26
- export const updateBackendHead = (dbLog, head) => dbLog.execute(sql `UPDATE ${SYNC_STATUS_TABLE} SET head = ${head.global}`);
27
- //# sourceMappingURL=mutationlog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutationlog.js","sourceRoot":"","sources":["../../src/leader-thread/mutationlog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGxD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC7G,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAsB,EAAE,EAAE,CAC/D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IAExC,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAA;IACtF,MAAM,wBAAwB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IAC5G,MAAM,qBAAqB,GAAG,MAAM,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACpG,wBAAwB,CACzB,CAAA;IAED,OAAO,qBAAqB;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,CAAC,CAAC,QAAQ;QAChB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;QAC5C,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE;KAC/D,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAA0B,EAAE,EAAE;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CACtB,GAAG,CAAA,iCAAiC,uBAAuB,+CAA+C,CAC3G,CAAC,CAAC,CAAC,CAAA;IAEJ,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;AAC1E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAA0B,EAAE,EAAE,CACjE,KAAK,CAAC,MAAM,CAAmB,GAAG,CAAA,oBAAoB,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAA;AAE5G,+BAA+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAA0B,EAAE,IAAqB,EAAE,EAAE,CACrF,KAAK,CAAC,OAAO,CAAC,GAAG,CAAA,UAAU,iBAAiB,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA"}
@@ -1,7 +0,0 @@
1
- import { Effect, Queue } from '@livestore/utils/effect';
2
- import { type PullQueueItem } from './types.js';
3
- export declare const makePullQueueSet: Effect.Effect<{
4
- makeQueue: (since: import("../schema/EventId.js").EventId) => Effect.Effect<Queue.Queue<PullQueueItem>, import("../adapter-types.js").UnexpectedError, import("effect/Scope").Scope | import("./types.js").LeaderThreadCtx>;
5
- offer: (item: PullQueueItem) => Effect.Effect<void, import("../adapter-types.js").UnexpectedError, import("./types.js").LeaderThreadCtx>;
6
- }, never, import("effect/Scope").Scope>;
7
- //# sourceMappingURL=pull-queue-set.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pull-queue-set.d.ts","sourceRoot":"","sources":["../../src/leader-thread/pull-queue-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAIvD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gBAAgB;kEAoDizE,OAAQ,MAAM,CAAC,MAAM,KAAK;oCAAkG,OAAQ,MAAM;uCADt9E,CAAA"}
@@ -1,39 +0,0 @@
1
- import { Effect, Queue } from '@livestore/utils/effect';
2
- import * as MutationEvent from '../schema/MutationEvent.js';
3
- import { getMutationEventsSince } from './mutationlog.js';
4
- export const makePullQueueSet = Effect.gen(function* () {
5
- const set = new Set();
6
- yield* Effect.addFinalizer(() => Effect.gen(function* () {
7
- for (const queue of set) {
8
- yield* Queue.shutdown(queue);
9
- }
10
- set.clear();
11
- }));
12
- const makeQueue = (since) => Effect.gen(function* () {
13
- const queue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
14
- yield* Effect.addFinalizer(() => Effect.sync(() => set.delete(queue)));
15
- const mutationEvents = yield* getMutationEventsSince(since);
16
- if (mutationEvents.length > 0) {
17
- const newEvents = mutationEvents.map((mutationEvent) => new MutationEvent.EncodedWithMeta(mutationEvent));
18
- yield* queue.offer({ payload: { _tag: 'upstream-advance', newEvents }, remaining: 0 });
19
- }
20
- set.add(queue);
21
- return queue;
22
- });
23
- const offer = (item) => Effect.gen(function* () {
24
- // Short-circuit if the payload is an empty upstream advance
25
- if (item.payload._tag === 'upstream-advance' &&
26
- item.payload.newEvents.length === 0 &&
27
- item.payload.trimRollbackUntil === undefined) {
28
- return;
29
- }
30
- for (const queue of set) {
31
- yield* Queue.offer(queue, item);
32
- }
33
- });
34
- return {
35
- makeQueue,
36
- offer,
37
- };
38
- });
39
- //# sourceMappingURL=pull-queue-set.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pull-queue-set.js","sourceRoot":"","sources":["../../src/leader-thread/pull-queue-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAEvD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAGzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA8B,CAAA;IAEjD,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;QAED,GAAG,CAAC,KAAK,EAAE,CAAA;IACb,CAAC,CAAC,CACH,CAAA;IAED,MAAM,SAAS,GAA8B,CAAC,KAAK,EAAE,EAAE,CACrD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;QAEjG,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAEtE,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAE3D,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAA;YACzG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;QACxF,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAEd,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;IAEJ,MAAM,KAAK,GAA0B,CAAC,IAAI,EAAE,EAAE,CAC5C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,4DAA4D;QAC5D,IACE,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAkB;YACxC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAC5C,CAAC;YACD,OAAM;QACR,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CAAC,CAAA;IAEJ,OAAO;QACL,SAAS;QACT,KAAK;KACN,CAAA;AACH,CAAC,CAAC,CAAA"}