@livestore/common 0.3.0-dev.9 → 0.3.1-dev.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 (479) hide show
  1. package/LICENSE +201 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/fixture.d.ts +83 -221
  4. package/dist/__tests__/fixture.d.ts.map +1 -1
  5. package/dist/__tests__/fixture.js +33 -11
  6. package/dist/__tests__/fixture.js.map +1 -1
  7. package/dist/adapter-types.d.ts +120 -64
  8. package/dist/adapter-types.d.ts.map +1 -1
  9. package/dist/adapter-types.js +39 -8
  10. package/dist/adapter-types.js.map +1 -1
  11. package/dist/bounded-collections.d.ts.map +1 -1
  12. package/dist/debug-info.d.ts +1 -1
  13. package/dist/debug-info.d.ts.map +1 -1
  14. package/dist/debug-info.js +1 -0
  15. package/dist/debug-info.js.map +1 -1
  16. package/dist/devtools/devtools-messages-client-session.d.ts +390 -0
  17. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
  18. package/dist/devtools/devtools-messages-client-session.js +97 -0
  19. package/dist/devtools/devtools-messages-client-session.js.map +1 -0
  20. package/dist/devtools/devtools-messages-common.d.ts +68 -0
  21. package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
  22. package/dist/devtools/devtools-messages-common.js +60 -0
  23. package/dist/devtools/devtools-messages-common.js.map +1 -0
  24. package/dist/devtools/devtools-messages-leader.d.ts +394 -0
  25. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
  26. package/dist/devtools/devtools-messages-leader.js +147 -0
  27. package/dist/devtools/devtools-messages-leader.js.map +1 -0
  28. package/dist/devtools/devtools-messages.d.ts +3 -580
  29. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  30. package/dist/devtools/devtools-messages.js +3 -174
  31. package/dist/devtools/devtools-messages.js.map +1 -1
  32. package/dist/devtools/devtools-sessioninfo.d.ts +32 -0
  33. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
  34. package/dist/devtools/devtools-sessioninfo.js +36 -0
  35. package/dist/devtools/devtools-sessioninfo.js.map +1 -0
  36. package/dist/devtools/mod.d.ts +55 -0
  37. package/dist/devtools/mod.d.ts.map +1 -0
  38. package/dist/devtools/mod.js +33 -0
  39. package/dist/devtools/mod.js.map +1 -0
  40. package/dist/index.d.ts +7 -9
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +7 -9
  43. package/dist/index.js.map +1 -1
  44. package/dist/leader-thread/LeaderSyncProcessor.d.ts +36 -11
  45. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  46. package/dist/leader-thread/LeaderSyncProcessor.js +426 -252
  47. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  48. package/dist/leader-thread/connection.d.ts +34 -6
  49. package/dist/leader-thread/connection.d.ts.map +1 -1
  50. package/dist/leader-thread/connection.js +22 -7
  51. package/dist/leader-thread/connection.js.map +1 -1
  52. package/dist/leader-thread/eventlog.d.ts +27 -0
  53. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  54. package/dist/leader-thread/eventlog.js +119 -0
  55. package/dist/leader-thread/eventlog.js.map +1 -0
  56. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  57. package/dist/leader-thread/leader-worker-devtools.js +155 -80
  58. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  59. package/dist/leader-thread/make-leader-thread-layer.d.ts +22 -9
  60. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  61. package/dist/leader-thread/make-leader-thread-layer.js +67 -45
  62. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  63. package/dist/leader-thread/materialize-event.d.ts +16 -0
  64. package/dist/leader-thread/materialize-event.d.ts.map +1 -0
  65. package/dist/leader-thread/materialize-event.js +109 -0
  66. package/dist/leader-thread/materialize-event.js.map +1 -0
  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 +28 -32
  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 +79 -38
  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/make-client-session.d.ts +23 -0
  84. package/dist/make-client-session.d.ts.map +1 -0
  85. package/dist/make-client-session.js +57 -0
  86. package/dist/make-client-session.js.map +1 -0
  87. package/dist/materializer-helper.d.ts +23 -0
  88. package/dist/materializer-helper.d.ts.map +1 -0
  89. package/dist/materializer-helper.js +86 -0
  90. package/dist/materializer-helper.js.map +1 -0
  91. package/dist/otel.d.ts +2 -0
  92. package/dist/otel.d.ts.map +1 -1
  93. package/dist/otel.js +5 -0
  94. package/dist/otel.js.map +1 -1
  95. package/dist/rematerialize-from-eventlog.d.ts +14 -0
  96. package/dist/rematerialize-from-eventlog.d.ts.map +1 -0
  97. package/dist/rematerialize-from-eventlog.js +64 -0
  98. package/dist/rematerialize-from-eventlog.js.map +1 -0
  99. package/dist/schema/EventDef.d.ts +146 -0
  100. package/dist/schema/EventDef.d.ts.map +1 -0
  101. package/dist/schema/EventDef.js +58 -0
  102. package/dist/schema/EventDef.js.map +1 -0
  103. package/dist/schema/EventSequenceNumber.d.ts +57 -0
  104. package/dist/schema/EventSequenceNumber.d.ts.map +1 -0
  105. package/dist/schema/EventSequenceNumber.js +82 -0
  106. package/dist/schema/EventSequenceNumber.js.map +1 -0
  107. package/dist/schema/EventSequenceNumber.test.d.ts +2 -0
  108. package/dist/schema/EventSequenceNumber.test.d.ts.map +1 -0
  109. package/dist/schema/EventSequenceNumber.test.js +11 -0
  110. package/dist/schema/EventSequenceNumber.test.js.map +1 -0
  111. package/dist/schema/LiveStoreEvent.d.ts +257 -0
  112. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  113. package/dist/schema/LiveStoreEvent.js +117 -0
  114. package/dist/schema/LiveStoreEvent.js.map +1 -0
  115. package/dist/schema/events.d.ts +2 -0
  116. package/dist/schema/events.d.ts.map +1 -0
  117. package/dist/schema/events.js +2 -0
  118. package/dist/schema/events.js.map +1 -0
  119. package/dist/schema/mod.d.ts +8 -6
  120. package/dist/schema/mod.d.ts.map +1 -1
  121. package/dist/schema/mod.js +8 -6
  122. package/dist/schema/mod.js.map +1 -1
  123. package/dist/schema/schema.d.ts +50 -32
  124. package/dist/schema/schema.d.ts.map +1 -1
  125. package/dist/schema/schema.js +36 -43
  126. package/dist/schema/schema.js.map +1 -1
  127. package/dist/schema/state/mod.d.ts +3 -0
  128. package/dist/schema/state/mod.d.ts.map +1 -0
  129. package/dist/schema/state/mod.js +3 -0
  130. package/dist/schema/state/mod.js.map +1 -0
  131. package/dist/schema/state/sqlite/client-document-def.d.ts +223 -0
  132. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -0
  133. package/dist/schema/state/sqlite/client-document-def.js +170 -0
  134. package/dist/schema/state/sqlite/client-document-def.js.map +1 -0
  135. package/dist/schema/state/sqlite/client-document-def.test.d.ts +2 -0
  136. package/dist/schema/state/sqlite/client-document-def.test.d.ts.map +1 -0
  137. package/dist/schema/state/sqlite/client-document-def.test.js +201 -0
  138. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -0
  139. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +69 -0
  140. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -0
  141. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +71 -0
  142. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -0
  143. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +3 -0
  144. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts.map +1 -0
  145. package/dist/schema/state/sqlite/db-schema/ast/validate.js +12 -0
  146. package/dist/schema/state/sqlite/db-schema/ast/validate.js.map +1 -0
  147. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +90 -0
  148. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -0
  149. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +87 -0
  150. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -0
  151. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts +2 -0
  152. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts.map +1 -0
  153. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +29 -0
  154. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -0
  155. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +90 -0
  156. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -0
  157. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +41 -0
  158. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -0
  159. package/dist/schema/state/sqlite/db-schema/hash.d.ts +2 -0
  160. package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -0
  161. package/dist/schema/state/sqlite/db-schema/hash.js +14 -0
  162. package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -0
  163. package/dist/schema/state/sqlite/db-schema/mod.d.ts +3 -0
  164. package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -0
  165. package/dist/schema/state/sqlite/db-schema/mod.js +3 -0
  166. package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -0
  167. package/dist/schema/state/sqlite/mod.d.ts +17 -0
  168. package/dist/schema/state/sqlite/mod.d.ts.map +1 -0
  169. package/dist/schema/state/sqlite/mod.js +41 -0
  170. package/dist/schema/state/sqlite/mod.js.map +1 -0
  171. package/dist/schema/state/sqlite/query-builder/api.d.ts +294 -0
  172. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -0
  173. package/dist/schema/state/sqlite/query-builder/api.js +6 -0
  174. package/dist/schema/state/sqlite/query-builder/api.js.map +1 -0
  175. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +7 -0
  176. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -0
  177. package/dist/schema/state/sqlite/query-builder/astToSql.js +190 -0
  178. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -0
  179. package/dist/schema/state/sqlite/query-builder/impl.d.ts +7 -0
  180. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -0
  181. package/dist/schema/state/sqlite/query-builder/impl.js +286 -0
  182. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -0
  183. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +87 -0
  184. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -0
  185. package/dist/schema/state/sqlite/query-builder/impl.test.js +563 -0
  186. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -0
  187. package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.d.ts +7 -0
  188. package/dist/schema/state/sqlite/query-builder/mod.d.ts.map +1 -0
  189. package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.js +7 -0
  190. package/dist/schema/state/sqlite/query-builder/mod.js.map +1 -0
  191. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -0
  192. package/dist/schema/{schema-helpers.js → state/sqlite/schema-helpers.js} +1 -1
  193. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -0
  194. package/dist/schema/state/sqlite/system-tables.d.ts +574 -0
  195. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -0
  196. package/dist/schema/state/sqlite/system-tables.js +88 -0
  197. package/dist/schema/state/sqlite/system-tables.js.map +1 -0
  198. package/dist/schema/state/sqlite/table-def.d.ts +84 -0
  199. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -0
  200. package/dist/schema/state/sqlite/table-def.js +36 -0
  201. package/dist/schema/state/sqlite/table-def.js.map +1 -0
  202. package/dist/schema-management/common.d.ts +7 -7
  203. package/dist/schema-management/common.d.ts.map +1 -1
  204. package/dist/schema-management/common.js.map +1 -1
  205. package/dist/schema-management/migrations.d.ts +6 -6
  206. package/dist/schema-management/migrations.d.ts.map +1 -1
  207. package/dist/schema-management/migrations.js +27 -18
  208. package/dist/schema-management/migrations.js.map +1 -1
  209. package/dist/schema-management/validate-schema.d.ts +8 -0
  210. package/dist/schema-management/validate-schema.d.ts.map +1 -0
  211. package/dist/schema-management/validate-schema.js +39 -0
  212. package/dist/schema-management/validate-schema.js.map +1 -0
  213. package/dist/sql-queries/misc.d.ts.map +1 -1
  214. package/dist/sql-queries/sql-queries.d.ts +1 -1
  215. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  216. package/dist/sql-queries/sql-queries.js.map +1 -1
  217. package/dist/sql-queries/sql-query-builder.d.ts +1 -1
  218. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  219. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  220. package/dist/sql-queries/types.d.ts +2 -1
  221. package/dist/sql-queries/types.d.ts.map +1 -1
  222. package/dist/sql-queries/types.js.map +1 -1
  223. package/dist/sync/ClientSessionSyncProcessor.d.ts +40 -19
  224. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  225. package/dist/sync/ClientSessionSyncProcessor.js +149 -73
  226. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  227. package/dist/sync/next/compact-events.d.ts.map +1 -1
  228. package/dist/sync/next/compact-events.js +38 -35
  229. package/dist/sync/next/compact-events.js.map +1 -1
  230. package/dist/sync/next/facts.d.ts +21 -21
  231. package/dist/sync/next/facts.d.ts.map +1 -1
  232. package/dist/sync/next/facts.js +11 -11
  233. package/dist/sync/next/facts.js.map +1 -1
  234. package/dist/sync/next/history-dag-common.d.ts +9 -7
  235. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  236. package/dist/sync/next/history-dag-common.js +10 -5
  237. package/dist/sync/next/history-dag-common.js.map +1 -1
  238. package/dist/sync/next/history-dag.d.ts +0 -2
  239. package/dist/sync/next/history-dag.d.ts.map +1 -1
  240. package/dist/sync/next/history-dag.js +16 -14
  241. package/dist/sync/next/history-dag.js.map +1 -1
  242. package/dist/sync/next/rebase-events.d.ts +10 -8
  243. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  244. package/dist/sync/next/rebase-events.js +18 -10
  245. package/dist/sync/next/rebase-events.js.map +1 -1
  246. package/dist/sync/next/test/compact-events.calculator.test.js +39 -34
  247. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  248. package/dist/sync/next/test/compact-events.test.js +77 -77
  249. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  250. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +35 -25
  251. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  252. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +83 -38
  253. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  254. package/dist/sync/next/test/mod.d.ts +1 -1
  255. package/dist/sync/next/test/mod.d.ts.map +1 -1
  256. package/dist/sync/next/test/mod.js +1 -1
  257. package/dist/sync/next/test/mod.js.map +1 -1
  258. package/dist/sync/sync.d.ts +46 -21
  259. package/dist/sync/sync.d.ts.map +1 -1
  260. package/dist/sync/sync.js +10 -6
  261. package/dist/sync/sync.js.map +1 -1
  262. package/dist/sync/syncstate.d.ts +193 -84
  263. package/dist/sync/syncstate.d.ts.map +1 -1
  264. package/dist/sync/syncstate.js +305 -151
  265. package/dist/sync/syncstate.js.map +1 -1
  266. package/dist/sync/syncstate.test.js +267 -303
  267. package/dist/sync/syncstate.test.js.map +1 -1
  268. package/dist/sync/validate-push-payload.d.ts +2 -2
  269. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  270. package/dist/sync/validate-push-payload.js +4 -4
  271. package/dist/sync/validate-push-payload.js.map +1 -1
  272. package/dist/util.d.ts +2 -2
  273. package/dist/util.d.ts.map +1 -1
  274. package/dist/version.d.ts +3 -3
  275. package/dist/version.js +3 -3
  276. package/package.json +11 -4
  277. package/src/__tests__/fixture.ts +36 -15
  278. package/src/adapter-types.ts +107 -68
  279. package/src/debug-info.ts +1 -0
  280. package/src/devtools/devtools-messages-client-session.ts +142 -0
  281. package/src/devtools/devtools-messages-common.ts +115 -0
  282. package/src/devtools/devtools-messages-leader.ts +191 -0
  283. package/src/devtools/devtools-messages.ts +3 -246
  284. package/src/devtools/devtools-sessioninfo.ts +101 -0
  285. package/src/devtools/mod.ts +59 -0
  286. package/src/index.ts +7 -9
  287. package/src/leader-thread/LeaderSyncProcessor.ts +664 -394
  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 +227 -104
  291. package/src/leader-thread/make-leader-thread-layer.ts +121 -72
  292. package/src/leader-thread/materialize-event.ts +173 -0
  293. package/src/leader-thread/mod.ts +1 -1
  294. package/src/leader-thread/recreate-db.ts +33 -38
  295. package/src/leader-thread/shutdown-channel.ts +2 -4
  296. package/src/leader-thread/types.ts +84 -46
  297. package/src/make-client-session.ts +136 -0
  298. package/src/materializer-helper.ts +138 -0
  299. package/src/otel.ts +8 -0
  300. package/src/rematerialize-from-eventlog.ts +117 -0
  301. package/src/schema/EventDef.ts +227 -0
  302. package/src/schema/EventSequenceNumber.test.ts +12 -0
  303. package/src/schema/EventSequenceNumber.ts +121 -0
  304. package/src/schema/LiveStoreEvent.ts +240 -0
  305. package/src/schema/events.ts +1 -0
  306. package/src/schema/mod.ts +8 -6
  307. package/src/schema/schema.ts +88 -84
  308. package/src/schema/state/mod.ts +2 -0
  309. package/src/schema/state/sqlite/client-document-def.test.ts +238 -0
  310. package/src/schema/state/sqlite/client-document-def.ts +444 -0
  311. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +142 -0
  312. package/src/schema/state/sqlite/db-schema/ast/validate.ts +13 -0
  313. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
  314. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -0
  315. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +242 -0
  316. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +222 -0
  317. package/src/schema/state/sqlite/db-schema/hash.ts +14 -0
  318. package/src/schema/state/sqlite/db-schema/mod.ts +2 -0
  319. package/src/schema/state/sqlite/mod.ts +73 -0
  320. package/src/schema/state/sqlite/query-builder/api.ts +440 -0
  321. package/src/schema/state/sqlite/query-builder/astToSql.ts +232 -0
  322. package/src/schema/state/sqlite/query-builder/impl.test.ts +617 -0
  323. package/src/schema/state/sqlite/query-builder/impl.ts +351 -0
  324. package/src/{query-builder → schema/state/sqlite/query-builder}/mod.ts +7 -0
  325. package/src/schema/{schema-helpers.ts → state/sqlite/schema-helpers.ts} +1 -1
  326. package/src/schema/state/sqlite/system-tables.ts +117 -0
  327. package/src/schema/state/sqlite/table-def.ts +197 -0
  328. package/src/schema-management/common.ts +7 -7
  329. package/src/schema-management/migrations.ts +37 -31
  330. package/src/schema-management/validate-schema.ts +61 -0
  331. package/src/sql-queries/sql-queries.ts +1 -1
  332. package/src/sql-queries/sql-query-builder.ts +1 -2
  333. package/src/sql-queries/types.ts +3 -1
  334. package/src/sync/ClientSessionSyncProcessor.ts +218 -94
  335. package/src/sync/next/compact-events.ts +38 -35
  336. package/src/sync/next/facts.ts +43 -41
  337. package/src/sync/next/history-dag-common.ts +17 -10
  338. package/src/sync/next/history-dag.ts +16 -17
  339. package/src/sync/next/rebase-events.ts +29 -17
  340. package/src/sync/next/test/compact-events.calculator.test.ts +46 -46
  341. package/src/sync/next/test/compact-events.test.ts +79 -79
  342. package/src/sync/next/test/event-fixtures.ts +228 -0
  343. package/src/sync/next/test/mod.ts +1 -1
  344. package/src/sync/sync.ts +46 -21
  345. package/src/sync/syncstate.test.ts +312 -345
  346. package/src/sync/syncstate.ts +414 -224
  347. package/src/sync/validate-push-payload.ts +6 -6
  348. package/src/version.ts +3 -3
  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 -13
  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/devtools-window-message.d.ts +0 -29
  362. package/dist/devtools/devtools-window-message.d.ts.map +0 -1
  363. package/dist/devtools/devtools-window-message.js +0 -33
  364. package/dist/devtools/devtools-window-message.js.map +0 -1
  365. package/dist/devtools/index.d.ts +0 -42
  366. package/dist/devtools/index.d.ts.map +0 -1
  367. package/dist/devtools/index.js +0 -48
  368. package/dist/devtools/index.js.map +0 -1
  369. package/dist/init-singleton-tables.d.ts +0 -4
  370. package/dist/init-singleton-tables.d.ts.map +0 -1
  371. package/dist/init-singleton-tables.js +0 -16
  372. package/dist/init-singleton-tables.js.map +0 -1
  373. package/dist/leader-thread/apply-mutation.d.ts +0 -11
  374. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  375. package/dist/leader-thread/apply-mutation.js +0 -107
  376. package/dist/leader-thread/apply-mutation.js.map +0 -1
  377. package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
  378. package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
  379. package/dist/leader-thread/leader-sync-processor.js +0 -430
  380. package/dist/leader-thread/leader-sync-processor.js.map +0 -1
  381. package/dist/leader-thread/mutationlog.d.ts +0 -10
  382. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  383. package/dist/leader-thread/mutationlog.js +0 -28
  384. package/dist/leader-thread/mutationlog.js.map +0 -1
  385. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  386. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  387. package/dist/leader-thread/pull-queue-set.js +0 -39
  388. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  389. package/dist/mutation.d.ts +0 -20
  390. package/dist/mutation.d.ts.map +0 -1
  391. package/dist/mutation.js +0 -57
  392. package/dist/mutation.js.map +0 -1
  393. package/dist/query-builder/api.d.ts +0 -190
  394. package/dist/query-builder/api.d.ts.map +0 -1
  395. package/dist/query-builder/api.js +0 -8
  396. package/dist/query-builder/api.js.map +0 -1
  397. package/dist/query-builder/impl.d.ts +0 -12
  398. package/dist/query-builder/impl.d.ts.map +0 -1
  399. package/dist/query-builder/impl.js +0 -244
  400. package/dist/query-builder/impl.js.map +0 -1
  401. package/dist/query-builder/impl.test.d.ts +0 -2
  402. package/dist/query-builder/impl.test.d.ts.map +0 -1
  403. package/dist/query-builder/impl.test.js +0 -212
  404. package/dist/query-builder/impl.test.js.map +0 -1
  405. package/dist/query-builder/mod.d.ts.map +0 -1
  406. package/dist/query-builder/mod.js.map +0 -1
  407. package/dist/query-info.d.ts +0 -38
  408. package/dist/query-info.d.ts.map +0 -1
  409. package/dist/query-info.js +0 -7
  410. package/dist/query-info.js.map +0 -1
  411. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  412. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  413. package/dist/rehydrate-from-mutationlog.js +0 -66
  414. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  415. package/dist/schema/EventId.d.ts +0 -39
  416. package/dist/schema/EventId.d.ts.map +0 -1
  417. package/dist/schema/EventId.js +0 -38
  418. package/dist/schema/EventId.js.map +0 -1
  419. package/dist/schema/EventId.test.d.ts +0 -2
  420. package/dist/schema/EventId.test.d.ts.map +0 -1
  421. package/dist/schema/EventId.test.js +0 -11
  422. package/dist/schema/EventId.test.js.map +0 -1
  423. package/dist/schema/MutationEvent.d.ts +0 -167
  424. package/dist/schema/MutationEvent.d.ts.map +0 -1
  425. package/dist/schema/MutationEvent.js +0 -72
  426. package/dist/schema/MutationEvent.js.map +0 -1
  427. package/dist/schema/MutationEvent.test.d.ts +0 -2
  428. package/dist/schema/MutationEvent.test.d.ts.map +0 -1
  429. package/dist/schema/MutationEvent.test.js +0 -2
  430. package/dist/schema/MutationEvent.test.js.map +0 -1
  431. package/dist/schema/mutations.d.ts +0 -107
  432. package/dist/schema/mutations.d.ts.map +0 -1
  433. package/dist/schema/mutations.js +0 -42
  434. package/dist/schema/mutations.js.map +0 -1
  435. package/dist/schema/schema-helpers.d.ts.map +0 -1
  436. package/dist/schema/schema-helpers.js.map +0 -1
  437. package/dist/schema/system-tables.d.ts +0 -399
  438. package/dist/schema/system-tables.d.ts.map +0 -1
  439. package/dist/schema/system-tables.js +0 -59
  440. package/dist/schema/system-tables.js.map +0 -1
  441. package/dist/schema/table-def.d.ts +0 -156
  442. package/dist/schema/table-def.d.ts.map +0 -1
  443. package/dist/schema/table-def.js +0 -79
  444. package/dist/schema/table-def.js.map +0 -1
  445. package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
  446. package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
  447. package/dist/schema-management/validate-mutation-defs.js +0 -39
  448. package/dist/schema-management/validate-mutation-defs.js.map +0 -1
  449. package/dist/sync/client-session-sync-processor.d.ts +0 -45
  450. package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
  451. package/dist/sync/client-session-sync-processor.js +0 -131
  452. package/dist/sync/client-session-sync-processor.js.map +0 -1
  453. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  454. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  455. package/src/derived-mutations.test.ts +0 -101
  456. package/src/derived-mutations.ts +0 -170
  457. package/src/devtools/devtools-bridge.ts +0 -14
  458. package/src/devtools/devtools-window-message.ts +0 -27
  459. package/src/devtools/index.ts +0 -48
  460. package/src/init-singleton-tables.ts +0 -24
  461. package/src/leader-thread/apply-mutation.ts +0 -161
  462. package/src/leader-thread/mutationlog.ts +0 -46
  463. package/src/leader-thread/pull-queue-set.ts +0 -58
  464. package/src/mutation.ts +0 -91
  465. package/src/query-builder/api.ts +0 -289
  466. package/src/query-builder/impl.test.ts +0 -239
  467. package/src/query-builder/impl.ts +0 -285
  468. package/src/query-info.ts +0 -78
  469. package/src/rehydrate-from-mutationlog.ts +0 -119
  470. package/src/schema/EventId.test.ts +0 -12
  471. package/src/schema/EventId.ts +0 -60
  472. package/src/schema/MutationEvent.ts +0 -185
  473. package/src/schema/mutations.ts +0 -192
  474. package/src/schema/system-tables.ts +0 -105
  475. package/src/schema/table-def.ts +0 -343
  476. package/src/schema-management/validate-mutation-defs.ts +0 -63
  477. package/src/sync/next/test/mutation-fixtures.ts +0 -224
  478. package/tsconfig.json +0 -11
  479. /package/dist/schema/{schema-helpers.d.ts → state/sqlite/schema-helpers.d.ts} +0 -0
@@ -1,107 +0,0 @@
1
- import { memoizeByRef, shouldNeverHappen } from '@livestore/utils';
2
- import { Effect, Option, Schema } from '@livestore/utils/effect';
3
- import { getExecArgsFromMutation } from '../mutation.js';
4
- import { MUTATION_LOG_META_TABLE, mutationLogMetaTable, SESSION_CHANGESET_META_TABLE, sessionChangesetMetaTable, } from '../schema/mod.js';
5
- import { insertRow } from '../sql-queries/index.js';
6
- import { execSql, execSqlPrepared } from './connection.js';
7
- import { LeaderThreadCtx } from './types.js';
8
- export const makeApplyMutation = Effect.gen(function* () {
9
- const leaderThreadCtx = yield* LeaderThreadCtx;
10
- const shouldExcludeMutationFromLog = makeShouldExcludeMutationFromLog(leaderThreadCtx.schema);
11
- const mutationDefSchemaHashMap = new Map(
12
- // TODO Running `Schema.hash` can be a bottleneck for larger schemas. There is an opportunity to run this
13
- // at build time and lookup the pre-computed hash at runtime.
14
- // Also see https://github.com/Effect-TS/effect/issues/2719
15
- [...leaderThreadCtx.schema.mutations.entries()].map(([k, v]) => [k, Schema.hash(v.schema)]));
16
- return (mutationEventEncoded, options) => Effect.gen(function* () {
17
- const { schema, db, dbLog } = leaderThreadCtx;
18
- const skipMutationLog = options?.skipMutationLog ?? false;
19
- const mutationName = mutationEventEncoded.mutation;
20
- const mutationDef = schema.mutations.get(mutationName) ?? shouldNeverHappen(`Unknown mutation: ${mutationName}`);
21
- const execArgsArr = getExecArgsFromMutation({
22
- mutationDef,
23
- mutationEvent: { decoded: undefined, encoded: mutationEventEncoded },
24
- });
25
- // NOTE we might want to bring this back if we want to debug no-op mutations
26
- // const makeExecuteOptions = (statementSql: string, bindValues: any) => ({
27
- // onRowsChanged: (rowsChanged: number) => {
28
- // if (rowsChanged === 0) {
29
- // console.warn(`Mutation "${mutationDef.name}" did not affect any rows:`, statementSql, bindValues)
30
- // }
31
- // },
32
- // })
33
- // console.group('[@livestore/common:leader-thread:applyMutation]', { mutationName })
34
- const session = db.session();
35
- for (const { statementSql, bindValues } of execArgsArr) {
36
- // console.debug(mutationName, statementSql, bindValues)
37
- // TODO use cached prepared statements instead of exec
38
- yield* execSqlPrepared(db, statementSql, bindValues);
39
- }
40
- const changeset = session.changeset();
41
- session.finish();
42
- // TODO use prepared statements
43
- yield* execSql(db, ...insertRow({
44
- tableName: SESSION_CHANGESET_META_TABLE,
45
- columns: sessionChangesetMetaTable.sqliteDef.columns,
46
- values: {
47
- idGlobal: mutationEventEncoded.id.global,
48
- idLocal: mutationEventEncoded.id.local,
49
- // NOTE the changeset will be empty (i.e. null) for no-op mutations
50
- changeset: changeset ?? null,
51
- debug: execArgsArr,
52
- },
53
- }));
54
- // console.groupEnd()
55
- // write to mutation_log
56
- const excludeFromMutationLog = shouldExcludeMutationFromLog(mutationName, mutationEventEncoded);
57
- if (skipMutationLog === false && excludeFromMutationLog === false) {
58
- yield* insertIntoMutationLog(mutationEventEncoded, dbLog, mutationDefSchemaHashMap);
59
- }
60
- else {
61
- // console.debug('[@livestore/common:leader-thread] skipping mutation log write', mutation, statementSql, bindValues)
62
- }
63
- }).pipe(Effect.withSpan(`@livestore/common:leader-thread:applyMutation`, {
64
- attributes: {
65
- mutationName: mutationEventEncoded.mutation,
66
- mutationId: mutationEventEncoded.id,
67
- 'span.label': `(${mutationEventEncoded.id.global},${mutationEventEncoded.id.local}) ${mutationEventEncoded.mutation}`,
68
- },
69
- }));
70
- });
71
- const insertIntoMutationLog = (mutationEventEncoded, dbLog, mutationDefSchemaHashMap) => Effect.gen(function* () {
72
- const mutationName = mutationEventEncoded.mutation;
73
- const mutationDefSchemaHash = mutationDefSchemaHashMap.get(mutationName) ?? shouldNeverHappen(`Unknown mutation: ${mutationName}`);
74
- // TODO use prepared statements
75
- yield* execSql(dbLog, ...insertRow({
76
- tableName: MUTATION_LOG_META_TABLE,
77
- columns: mutationLogMetaTable.sqliteDef.columns,
78
- values: {
79
- idGlobal: mutationEventEncoded.id.global,
80
- idLocal: mutationEventEncoded.id.local,
81
- parentIdGlobal: mutationEventEncoded.parentId.global,
82
- parentIdLocal: mutationEventEncoded.parentId.local,
83
- mutation: mutationEventEncoded.mutation,
84
- argsJson: mutationEventEncoded.args ?? {},
85
- schemaHash: mutationDefSchemaHash,
86
- syncMetadataJson: Option.none(),
87
- },
88
- }));
89
- });
90
- // TODO let's consider removing this "should exclude" mechanism in favour of log compaction etc
91
- const makeShouldExcludeMutationFromLog = memoizeByRef((schema) => {
92
- const migrationOptions = schema.migrationOptions;
93
- const mutationLogExclude = migrationOptions.strategy === 'from-mutation-log'
94
- ? (migrationOptions.excludeMutations ?? new Set(['livestore.RawSql']))
95
- : new Set(['livestore.RawSql']);
96
- return (mutationName, mutationEventEncoded) => {
97
- if (mutationLogExclude.has(mutationName))
98
- return true;
99
- const mutationDef = schema.mutations.get(mutationName) ?? shouldNeverHappen(`Unknown mutation: ${mutationName}`);
100
- const execArgsArr = getExecArgsFromMutation({
101
- mutationDef,
102
- mutationEvent: { decoded: undefined, encoded: mutationEventEncoded },
103
- });
104
- return execArgsArr.some((_) => _.statementSql.includes('__livestore'));
105
- };
106
- });
107
- //# sourceMappingURL=apply-mutation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apply-mutation.js","sourceRoot":"","sources":["../../src/leader-thread/apply-mutation.ts"],"names":[],"mappings":"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"}
@@ -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, LeaderSyncProcessor } 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<LeaderSyncProcessor, 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,EAWP,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,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAuBlG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,mBAAmB,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAuO/D,CAAA"}
@@ -1,430 +0,0 @@
1
- import { shouldNeverHappen, TRACE_VERBOSE } from '@livestore/utils';
2
- import { BucketQueue, Deferred, Effect, Exit, Fiber, FiberHandle, Option, OtelTracer, ReadonlyArray, 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({
165
- global: initialBackendHead,
166
- local: EventId.localDefault,
167
- }).pipe(Effect.map(ReadonlyArray.map((_) => new MutationEvent.EncodedWithMeta(_))));
168
- const initialSyncState = {
169
- pending: pendingMutationEvents,
170
- // On the leader we don't need a rollback tail beyond `pending` items
171
- rollbackTail: [],
172
- upstreamHead: { global: initialBackendHead, local: EventId.localDefault },
173
- localHead: initialLocalHead,
174
- };
175
- /** State transitions need to happen atomically, so we use a Ref to track the state */
176
- yield* Ref.set(stateRef, { _tag: 'in-sync', syncState: initialSyncState });
177
- applyMutationItemsRef.current = yield* makeApplyMutationItems({ stateRef, semaphore });
178
- // Rehydrate sync queue
179
- if (pendingMutationEvents.length > 0) {
180
- const filteredBatch = pendingMutationEvents
181
- // Don't sync localOnly mutations
182
- .filter((mutationEventEncoded) => {
183
- const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
184
- return mutationDef.options.localOnly === false;
185
- });
186
- yield* BucketQueue.offerAll(syncBackendQueue, filteredBatch);
187
- }
188
- const backendPushingFiberHandle = yield* FiberHandle.make();
189
- yield* FiberHandle.run(backendPushingFiberHandle, backgroundBackendPushing({ dbReady, syncBackendQueue, span }).pipe(Effect.tapCauseLogPretty));
190
- yield* backgroundBackendPulling({
191
- dbReady,
192
- initialBackendHead,
193
- isLocalEvent,
194
- restartBackendPushing: (filteredRebasedPending) => Effect.gen(function* () {
195
- // Stop current pushing fiber
196
- yield* FiberHandle.clear(backendPushingFiberHandle);
197
- // Reset the sync queue
198
- yield* BucketQueue.clear(syncBackendQueue);
199
- yield* BucketQueue.offerAll(syncBackendQueue, filteredRebasedPending);
200
- // Restart pushing fiber
201
- yield* FiberHandle.run(backendPushingFiberHandle, backgroundBackendPushing({ dbReady, syncBackendQueue, span }).pipe(Effect.tapCauseLogPretty));
202
- }),
203
- applyMutationItemsRef,
204
- stateRef,
205
- semaphore,
206
- span,
207
- initialBlockingSyncContext,
208
- }).pipe(Effect.tapCauseLogPretty, Effect.forkScoped);
209
- }).pipe(Effect.withSpanScoped('@livestore/common:leader-thread:syncing'));
210
- return {
211
- push,
212
- pushPartial,
213
- boot,
214
- syncState: Effect.gen(function* () {
215
- const state = yield* Ref.get(stateRef);
216
- if (state._tag === 'init')
217
- return shouldNeverHappen('Not initialized');
218
- return state.syncState;
219
- }),
220
- };
221
- });
222
- // TODO how to handle errors gracefully
223
- const makeApplyMutationItems = ({ stateRef, semaphore, }) => Effect.gen(function* () {
224
- const leaderThreadCtx = yield* LeaderThreadCtx;
225
- const { db, dbLog } = leaderThreadCtx;
226
- const applyMutation = yield* makeApplyMutation;
227
- return ({ batchItems }) => Effect.gen(function* () {
228
- const state = yield* Ref.get(stateRef);
229
- if (state._tag !== 'applying-syncstate-advance') {
230
- // console.log('applyMutationItems: counter', counter)
231
- return shouldNeverHappen(`Expected to be applying-syncstate-advance but got ${state._tag}`);
232
- }
233
- db.execute('BEGIN TRANSACTION', undefined); // Start the transaction
234
- dbLog.execute('BEGIN TRANSACTION', undefined); // Start the transaction
235
- yield* Effect.addFinalizer((exit) => Effect.gen(function* () {
236
- if (Exit.isSuccess(exit))
237
- return;
238
- // Rollback in case of an error
239
- db.execute('ROLLBACK', undefined);
240
- dbLog.execute('ROLLBACK', undefined);
241
- }));
242
- for (let i = 0; i < batchItems.length; i++) {
243
- const { meta, ...mutationEventEncoded } = batchItems[i];
244
- yield* applyMutation(mutationEventEncoded);
245
- if (meta?.deferred) {
246
- yield* Deferred.succeed(meta.deferred, void 0);
247
- }
248
- // TODO re-introduce this
249
- // if (i < batchItems.length - 1) {
250
- // yield* Ref.set(stateRef, { ...state, proccesHead: batchItems[i + 1]!.id })
251
- // }
252
- }
253
- db.execute('COMMIT', undefined); // Commit the transaction
254
- dbLog.execute('COMMIT', undefined); // Commit the transaction
255
- yield* Ref.set(stateRef, { _tag: 'in-sync', syncState: state.syncState });
256
- // console.log('setRef:sync after applyMutationItems', counter)
257
- yield* semaphore.release(1);
258
- }).pipe(Effect.scoped, Effect.withSpan('@livestore/common:leader-thread:syncing:applyMutationItems'), Effect.tapCauseLogPretty, UnexpectedError.mapToUnexpectedError);
259
- });
260
- const backgroundBackendPulling = ({ dbReady, initialBackendHead, isLocalEvent, restartBackendPushing, span, stateRef, applyMutationItemsRef, semaphore, initialBlockingSyncContext, }) => Effect.gen(function* () {
261
- const { syncBackend, db, dbLog, connectedClientSessionPullQueues, schema } = yield* LeaderThreadCtx;
262
- if (syncBackend === undefined)
263
- return;
264
- const cursorInfo = yield* getCursorInfo(initialBackendHead);
265
- const onNewPullChunk = (newEvents, remaining) => Effect.gen(function* () {
266
- if (newEvents.length === 0)
267
- return;
268
- const state = yield* Ref.get(stateRef);
269
- if (state._tag === 'init')
270
- return shouldNeverHappen('Not initialized');
271
- // const counter = state.counter + 1
272
- if (state._tag === 'applying-syncstate-advance') {
273
- if (state.origin === 'push') {
274
- yield* Fiber.interrupt(state.fiber);
275
- // In theory we should force-take the semaphore here, but as it's still taken,
276
- // it's already in the right state we want it to be in
277
- }
278
- else {
279
- // Wait for previous advance to finish
280
- yield* semaphore.take(1);
281
- }
282
- }
283
- const trimRollbackUntil = newEvents.at(-1).id;
284
- const updateResult = SyncState.updateSyncState({
285
- syncState: state.syncState,
286
- payload: { _tag: 'upstream-advance', newEvents, trimRollbackUntil },
287
- isLocalEvent,
288
- isEqualEvent: MutationEvent.isEqualEncoded,
289
- ignoreLocalEvents: true,
290
- });
291
- if (updateResult._tag === 'reject') {
292
- return shouldNeverHappen('The leader thread should never reject upstream advances');
293
- }
294
- const newBackendHead = newEvents.at(-1).id;
295
- updateBackendHead(dbLog, newBackendHead);
296
- if (updateResult._tag === 'rebase') {
297
- span?.addEvent('backend-pull:rebase', {
298
- newEventsCount: newEvents.length,
299
- newEvents: TRACE_VERBOSE ? JSON.stringify(newEvents) : undefined,
300
- rollbackCount: updateResult.eventsToRollback.length,
301
- updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
302
- });
303
- const filteredRebasedPending = updateResult.newSyncState.pending.filter((mutationEvent) => {
304
- const mutationDef = schema.mutations.get(mutationEvent.mutation);
305
- return mutationDef.options.localOnly === false;
306
- });
307
- yield* restartBackendPushing(filteredRebasedPending);
308
- if (updateResult.eventsToRollback.length > 0) {
309
- yield* rollback({ db, dbLog, eventIdsToRollback: updateResult.eventsToRollback.map((_) => _.id) });
310
- }
311
- yield* connectedClientSessionPullQueues.offer({
312
- payload: {
313
- _tag: 'upstream-rebase',
314
- newEvents: updateResult.newEvents,
315
- rollbackUntil: updateResult.eventsToRollback.at(0).id,
316
- trimRollbackUntil,
317
- },
318
- remaining,
319
- });
320
- }
321
- else {
322
- span?.addEvent('backend-pull:advance', {
323
- newEventsCount: newEvents.length,
324
- updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
325
- });
326
- yield* connectedClientSessionPullQueues.offer({
327
- payload: { _tag: 'upstream-advance', newEvents: updateResult.newEvents, trimRollbackUntil },
328
- remaining,
329
- });
330
- }
331
- trimChangesetRows(db, newBackendHead);
332
- const fiber = yield* applyMutationItemsRef.current({ batchItems: updateResult.newEvents }).pipe(Effect.fork);
333
- yield* Ref.set(stateRef, {
334
- _tag: 'applying-syncstate-advance',
335
- origin: 'pull',
336
- syncState: updateResult.newSyncState,
337
- fiber,
338
- });
339
- });
340
- yield* syncBackend.pull(cursorInfo).pipe(
341
- // TODO only take from queue while connected
342
- Stream.tap(({ batch, remaining }) => Effect.gen(function* () {
343
- // yield* Effect.spanEvent('batch', {
344
- // attributes: {
345
- // batchSize: batch.length,
346
- // batch: TRACE_VERBOSE ? batch : undefined,
347
- // },
348
- // })
349
- // Wait for the db to be initially created
350
- yield* dbReady;
351
- // NOTE we only want to take process mutations when the sync backend is connected
352
- // (e.g. needed for simulating being offline)
353
- // TODO remove when there's a better way to handle this in stream above
354
- yield* SubscriptionRef.waitUntil(syncBackend.isConnected, (isConnected) => isConnected === true);
355
- yield* onNewPullChunk(batch.map((_) => MutationEvent.EncodedWithMeta.fromGlobal(_.mutationEventEncoded)), remaining);
356
- yield* initialBlockingSyncContext.update({ processed: batch.length, remaining });
357
- })), Stream.runDrain, Effect.interruptible);
358
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:backend-pulling'));
359
- const rollback = ({ db, dbLog, eventIdsToRollback, }) => Effect.gen(function* () {
360
- const rollbackEvents = db
361
- .select(sql `SELECT * FROM ${SESSION_CHANGESET_META_TABLE} WHERE (idGlobal, idLocal) IN (${eventIdsToRollback.map((id) => `(${id.global}, ${id.local})`).join(', ')})`)
362
- .map((_) => ({ id: { global: _.idGlobal, local: _.idLocal }, changeset: _.changeset, debug: _.debug }))
363
- .toSorted((a, b) => EventId.compare(a.id, b.id));
364
- // Apply changesets in reverse order
365
- for (let i = rollbackEvents.length - 1; i >= 0; i--) {
366
- const { changeset } = rollbackEvents[i];
367
- if (changeset !== null) {
368
- db.makeChangeset(changeset).invert().apply();
369
- }
370
- }
371
- // Delete the changeset rows
372
- db.execute(sql `DELETE FROM ${SESSION_CHANGESET_META_TABLE} WHERE (idGlobal, idLocal) IN (${eventIdsToRollback.map((id) => `(${id.global}, ${id.local})`).join(', ')})`);
373
- // Delete the mutation log rows
374
- dbLog.execute(sql `DELETE FROM ${MUTATION_LOG_META_TABLE} WHERE (idGlobal, idLocal) IN (${eventIdsToRollback.map((id) => `(${id.global}, ${id.local})`).join(', ')})`);
375
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:rollback', {
376
- attributes: { count: eventIdsToRollback.length },
377
- }));
378
- const getCursorInfo = (remoteHead) => Effect.gen(function* () {
379
- const { dbLog } = yield* LeaderThreadCtx;
380
- if (remoteHead === EventId.ROOT.global)
381
- return Option.none();
382
- const MutationlogQuerySchema = Schema.Struct({
383
- syncMetadataJson: Schema.parseJson(Schema.Option(Schema.JsonValue)),
384
- }).pipe(Schema.pluck('syncMetadataJson'), Schema.Array, Schema.head);
385
- 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);
386
- return Option.some({
387
- cursor: { global: remoteHead, local: EventId.localDefault },
388
- metadata: syncMetadataOption,
389
- });
390
- }).pipe(Effect.withSpan('@livestore/common:leader-thread:syncing:getCursorInfo', { attributes: { remoteHead } }));
391
- const backgroundBackendPushing = ({ dbReady, syncBackendQueue, span, }) => Effect.gen(function* () {
392
- const { syncBackend, dbLog } = yield* LeaderThreadCtx;
393
- if (syncBackend === undefined)
394
- return;
395
- yield* dbReady;
396
- while (true) {
397
- yield* SubscriptionRef.waitUntil(syncBackend.isConnected, (isConnected) => isConnected === true);
398
- // TODO make batch size configurable
399
- const queueItems = yield* BucketQueue.takeBetween(syncBackendQueue, 1, 50);
400
- yield* SubscriptionRef.waitUntil(syncBackend.isConnected, (isConnected) => isConnected === true);
401
- span?.addEvent('backend-push', {
402
- batchSize: queueItems.length,
403
- batch: TRACE_VERBOSE ? JSON.stringify(queueItems) : undefined,
404
- });
405
- // TODO handle push errors (should only happen during concurrent pull+push)
406
- const pushResult = yield* syncBackend.push(queueItems.map((_) => _.toGlobal())).pipe(Effect.either);
407
- if (pushResult._tag === 'Left') {
408
- span?.addEvent('backend-push-error', { error: pushResult.left.toString() });
409
- // wait for interrupt and restarting of pushing
410
- return yield* Effect.never;
411
- }
412
- const { metadata } = pushResult.right;
413
- // TODO try to do this in a single query
414
- for (let i = 0; i < queueItems.length; i++) {
415
- const mutationEventEncoded = queueItems[i];
416
- yield* execSql(dbLog, ...updateRows({
417
- tableName: MUTATION_LOG_META_TABLE,
418
- columns: mutationLogMetaTable.sqliteDef.columns,
419
- where: { idGlobal: mutationEventEncoded.id.global, idLocal: mutationEventEncoded.id.local },
420
- updateValues: { syncMetadataJson: metadata[i] },
421
- }));
422
- }
423
- }
424
- }).pipe(Effect.interruptible, Effect.withSpan('@livestore/common:leader-thread:syncing:backend-pushing'));
425
- const trimChangesetRows = (db, newHead) => {
426
- // Since we're using the session changeset rows to query for the current head,
427
- // we're keeping at least one row for the current head, and thus are using `<` instead of `<=`
428
- db.execute(sql `DELETE FROM ${SESSION_CHANGESET_META_TABLE} WHERE idGlobal < ${newHead.global}`);
429
- };
430
- //# 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,10 +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 type * as MutationEvent from '../schema/MutationEvent.js';
5
- import { LeaderThreadCtx } from './types.js';
6
- export declare const getMutationEventsSince: (since: EventId.EventId) => Effect.Effect<ReadonlyArray<MutationEvent.AnyEncoded>, never, LeaderThreadCtx>;
7
- export declare const getLocalHeadFromDb: (dbLog: SynchronousDatabase) => EventId.EventId;
8
- export declare const getBackendHeadFromDb: (dbLog: SynchronousDatabase) => EventId.GlobalEventId;
9
- export declare const updateBackendHead: (dbLog: SynchronousDatabase, head: EventId.EventId) => void;
10
- //# sourceMappingURL=mutationlog.d.ts.map