@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,185 +0,0 @@
1
- import { memoizeByRef } from '@livestore/utils'
2
- import type { Deferred } from '@livestore/utils/effect'
3
- import { Schema } from '@livestore/utils/effect'
4
-
5
- import type { InvalidPushError } from '../sync/sync.js'
6
- import * as EventId from './EventId.js'
7
- import type { MutationDef, MutationDefRecord } from './mutations.js'
8
- import type { LiveStoreSchema } from './schema.js'
9
-
10
- export type MutationEventPartial<TMutationsDef extends MutationDef.Any> = {
11
- mutation: TMutationsDef['name']
12
- args: Schema.Schema.Type<TMutationsDef['schema']>
13
- }
14
-
15
- export type MutationEventPartialEncoded<TMutationsDef extends MutationDef.Any> = {
16
- mutation: TMutationsDef['name']
17
- args: Schema.Schema.Encoded<TMutationsDef['schema']>
18
- }
19
-
20
- export type MutationEvent<TMutationsDef extends MutationDef.Any> = {
21
- mutation: TMutationsDef['name']
22
- args: Schema.Schema.Type<TMutationsDef['schema']>
23
- id: EventId.EventId
24
- parentId: EventId.EventId
25
- }
26
-
27
- export type MutationEventEncoded<TMutationsDef extends MutationDef.Any> = {
28
- mutation: TMutationsDef['name']
29
- args: Schema.Schema.Encoded<TMutationsDef['schema']>
30
- id: EventId.EventId
31
- parentId: EventId.EventId
32
- }
33
-
34
- export type AnyDecoded = MutationEvent<MutationDef.Any>
35
- export const AnyDecoded = Schema.Struct({
36
- mutation: Schema.String,
37
- args: Schema.Any,
38
- id: EventId.EventId,
39
- parentId: EventId.EventId,
40
- }).annotations({ title: 'MutationEvent.AnyDecoded' })
41
-
42
- export type AnyEncoded = MutationEventEncoded<MutationDef.Any>
43
- export const AnyEncoded = Schema.Struct({
44
- mutation: Schema.String,
45
- args: Schema.Any,
46
- id: EventId.EventId,
47
- parentId: EventId.EventId,
48
- }).annotations({ title: 'MutationEvent.AnyEncoded' })
49
-
50
- export const AnyEncodedGlobal = Schema.Struct({
51
- mutation: Schema.String,
52
- args: Schema.Any,
53
- id: EventId.GlobalEventId,
54
- parentId: EventId.GlobalEventId,
55
- }).annotations({ title: 'MutationEvent.AnyEncodedGlobal' })
56
- export type AnyEncodedGlobal = typeof AnyEncodedGlobal.Type
57
-
58
- export type PartialAnyDecoded = MutationEventPartial<MutationDef.Any>
59
- export type PartialAnyEncoded = MutationEventPartialEncoded<MutationDef.Any>
60
-
61
- export type PartialForSchema<TSchema extends LiveStoreSchema> = {
62
- [K in keyof TSchema['_MutationDefMapType']]: MutationEventPartial<TSchema['_MutationDefMapType'][K]>
63
- }[keyof TSchema['_MutationDefMapType']]
64
-
65
- export type ForSchema<TSchema extends LiveStoreSchema> = {
66
- [K in keyof TSchema['_MutationDefMapType']]: MutationEvent<TSchema['_MutationDefMapType'][K]>
67
- }[keyof TSchema['_MutationDefMapType']]
68
-
69
- export const isPartialMutationEvent = (
70
- mutationEvent: AnyDecoded | PartialAnyDecoded,
71
- ): mutationEvent is PartialAnyDecoded => 'id' in mutationEvent === false && 'parentId' in mutationEvent === false
72
-
73
- export type ForMutationDefRecord<TMutationsDefRecord extends MutationDefRecord> = Schema.Schema<
74
- {
75
- [K in keyof TMutationsDefRecord]: {
76
- mutation: K
77
- args: Schema.Schema.Type<TMutationsDefRecord[K]['schema']>
78
- id: EventId.EventId
79
- parentId: EventId.EventId
80
- }
81
- }[keyof TMutationsDefRecord],
82
- {
83
- [K in keyof TMutationsDefRecord]: {
84
- mutation: K
85
- args: Schema.Schema.Encoded<TMutationsDefRecord[K]['schema']>
86
- id: EventId.EventId
87
- parentId: EventId.EventId
88
- }
89
- }[keyof TMutationsDefRecord]
90
- >
91
-
92
- export type MutationEventPartialSchema<TMutationsDefRecord extends MutationDefRecord> = Schema.Schema<
93
- {
94
- [K in keyof TMutationsDefRecord]: {
95
- mutation: K
96
- args: Schema.Schema.Type<TMutationsDefRecord[K]['schema']>
97
- }
98
- }[keyof TMutationsDefRecord],
99
- {
100
- [K in keyof TMutationsDefRecord]: {
101
- mutation: K
102
- args: Schema.Schema.Encoded<TMutationsDefRecord[K]['schema']>
103
- }
104
- }[keyof TMutationsDefRecord]
105
- >
106
-
107
- export const makeMutationEventSchema = <TSchema extends LiveStoreSchema>(
108
- schema: TSchema,
109
- ): ForMutationDefRecord<TSchema['_MutationDefMapType']> =>
110
- Schema.Union(
111
- ...[...schema.mutations.values()].map((def) =>
112
- Schema.Struct({
113
- mutation: Schema.Literal(def.name),
114
- args: def.schema,
115
- id: EventId.EventId,
116
- parentId: EventId.EventId,
117
- }),
118
- ),
119
- ).annotations({ title: 'MutationEvent' }) as any
120
-
121
- export const makeMutationEventPartialSchema = <TSchema extends LiveStoreSchema>(
122
- schema: TSchema,
123
- ): MutationEventPartialSchema<TSchema['_MutationDefMapType']> =>
124
- Schema.Union(
125
- ...[...schema.mutations.values()].map((def) =>
126
- Schema.Struct({
127
- mutation: Schema.Literal(def.name),
128
- args: def.schema,
129
- }),
130
- ),
131
- ).annotations({ title: 'MutationEventPartial' }) as any
132
-
133
- export const makeMutationEventSchemaMemo = memoizeByRef(makeMutationEventSchema)
134
-
135
- /** Equivalent to AnyEncoded but with a meta field and some convenience methods */
136
- export class EncodedWithMeta extends Schema.Class<EncodedWithMeta>('MutationEvent.EncodedWithMeta')({
137
- mutation: Schema.String,
138
- args: Schema.Any,
139
- id: EventId.EventId,
140
- parentId: EventId.EventId,
141
- meta: Schema.optionalWith(
142
- Schema.Any as Schema.Schema<{
143
- deferred?: Deferred.Deferred<void, InvalidPushError>
144
- sessionChangeset?: Uint8Array
145
- }>,
146
- { default: () => ({}) },
147
- ),
148
- }) {
149
- toJSON = (): any => {
150
- // Only used for logging/debugging
151
- // - More readable way to print the id + parentId
152
- // - not including `meta`
153
- return {
154
- id: `(${this.id.global},${this.id.local}) → (${this.parentId.global},${this.parentId.local})`,
155
- mutation: this.mutation,
156
- args: this.args,
157
- }
158
- }
159
-
160
- rebase = (parentId: EventId.EventId, isLocal: boolean) =>
161
- new EncodedWithMeta({
162
- ...this,
163
- ...EventId.nextPair(parentId, isLocal),
164
- })
165
-
166
- static fromGlobal = (mutationEvent: AnyEncodedGlobal) =>
167
- new EncodedWithMeta({
168
- ...mutationEvent,
169
- id: { global: mutationEvent.id, local: EventId.localDefault },
170
- parentId: { global: mutationEvent.parentId, local: EventId.localDefault },
171
- })
172
-
173
- toGlobal = (): AnyEncodedGlobal => ({
174
- ...this,
175
- id: this.id.global,
176
- parentId: this.parentId.global,
177
- })
178
- }
179
-
180
- export const isEqualEncoded = (a: AnyEncoded, b: AnyEncoded) =>
181
- a.id.global === b.id.global &&
182
- a.id.local === b.id.local &&
183
- a.mutation === b.mutation &&
184
- // TODO use schema equality here
185
- JSON.stringify(a.args) === JSON.stringify(b.args)
@@ -1,192 +0,0 @@
1
- import { Schema } from '@livestore/utils/effect'
2
-
3
- import type { BindValues } from '../sql-queries/sql-queries.js'
4
- import type * as EventId from './EventId.js'
5
-
6
- export type MutationDefMap = Map<string | 'livestore.RawSql', MutationDef.Any>
7
- export type MutationDefRecord = {
8
- 'livestore.RawSql': RawSqlMutation
9
- [name: string]: MutationDef.Any
10
- }
11
-
12
- export type InternalMutationSchema<TRecord extends MutationDefRecord = MutationDefRecord> = {
13
- _DefRecord: TRecord
14
-
15
- map: Map<keyof TRecord, TRecord[keyof TRecord]>
16
- schemaHashMap: Map<keyof TRecord, number>
17
- }
18
-
19
- export type MutationDefSqlResult<TTo> =
20
- | SingleOrReadonlyArray<string>
21
- | ((args: TTo) => SingleOrReadonlyArray<
22
- | string
23
- | {
24
- sql: string
25
- /** Note args need to be manually encoded to `BindValues` when returning this argument */
26
- bindValues: BindValues
27
- writeTables?: ReadonlySet<string>
28
- }
29
- >)
30
-
31
- export type SingleOrReadonlyArray<T> = T | ReadonlyArray<T>
32
-
33
- export type MutationDef<TName extends string, TFrom, TTo> = {
34
- name: TName
35
- schema: Schema.Schema<TTo, TFrom>
36
- sql: MutationDefSqlResult<NoInfer<TTo>>
37
- options: {
38
- /** Warning: This feature is not fully implemented yet */
39
- historyId: string
40
- /**
41
- * When set to true, the mutation won't be synced over the network
42
- */
43
- localOnly: boolean
44
- /** Warning: This feature is not fully implemented yet */
45
- facts: FactsCallback<TTo> | undefined
46
- }
47
-
48
- /** Helper function to construct a partial mutation event */
49
- (
50
- args: TTo,
51
- options?: {
52
- id?: number
53
- },
54
- ): {
55
- mutation: TName
56
- args: TTo
57
- // TODO remove/clean up after sync-next is fully implemented
58
- id?: EventId.EventId
59
- }
60
- }
61
-
62
- export type FactsCallback<TTo> = (
63
- args: TTo,
64
- currentFacts: MutationEventFacts,
65
- ) => {
66
- modify: {
67
- set: Iterable<MutationEventFactInput>
68
- unset: Iterable<MutationEventFactInput>
69
- }
70
- require: Iterable<MutationEventFactInput>
71
- }
72
-
73
- export namespace MutationDef {
74
- export type Any = MutationDef<string, any, any>
75
- }
76
-
77
- export type MutationEventKey = string
78
- export type MutationEventFact = string
79
- export type MutationEventFacts = ReadonlyMap<string, any>
80
-
81
- export type MutationEventFactsGroup = {
82
- modifySet: MutationEventFacts
83
- modifyUnset: MutationEventFacts
84
-
85
- /**
86
- * Events on independent "dependency" branches are commutative which can facilitate more prioritized syncing
87
- */
88
- depRequire: MutationEventFacts
89
- depRead: MutationEventFacts
90
- }
91
-
92
- export type MutationEventFactsSnapshot = Map<string, any>
93
-
94
- export type MutationEventFactInput = string | readonly [string, any]
95
-
96
- export const defineFacts = <
97
- TRecord extends Record<string, MutationEventFactInput | ((...args: any[]) => MutationEventFactInput)>,
98
- >(
99
- record: TRecord,
100
- ): TRecord => record
101
-
102
- export type DefineMutationOptions<TTo> = {
103
- // TODO actually implement this
104
- onError?: (error: any) => void
105
- historyId?: string
106
- /** Warning: This feature is not fully implemented yet */
107
- facts?: (
108
- args: TTo,
109
- currentFacts: MutationEventFacts,
110
- ) => {
111
- modify?: {
112
- set?: Iterable<MutationEventFactInput>
113
- unset?: Iterable<MutationEventFactInput>
114
- }
115
- /**
116
- * Two purposes: constrain history and constrain compaction
117
- */
118
- require?: Iterable<MutationEventFactInput>
119
- }
120
- /**
121
- * When set to true, the mutation won't be synced over the network
122
- */
123
- localOnly?: boolean
124
- }
125
-
126
- // TODO possibly also allow for mutation event subsumption behaviour
127
- export const defineMutation = <TName extends string, TFrom, TTo>(
128
- name: TName,
129
- schema: Schema.Schema<TTo, TFrom>,
130
- sql: MutationDefSqlResult<NoInfer<TTo>>,
131
- options?: DefineMutationOptions<TTo>,
132
- ): MutationDef<TName, TFrom, TTo> => {
133
- const makePartialEvent = (
134
- args: TTo,
135
- options?: {
136
- id?: EventId.EventId
137
- },
138
- ) => ({ mutation: name, args, ...options })
139
-
140
- Object.defineProperty(makePartialEvent, 'name', { value: name })
141
- Object.defineProperty(makePartialEvent, 'schema', { value: schema })
142
- Object.defineProperty(makePartialEvent, 'sql', { value: sql })
143
- Object.defineProperty(makePartialEvent, 'options', {
144
- value: {
145
- historyId: options?.historyId ?? 'main',
146
- localOnly: options?.localOnly ?? false,
147
- facts: options?.facts
148
- ? (args, currentFacts) => {
149
- const res = options.facts!(args, currentFacts)
150
- return {
151
- modify: {
152
- set: res.modify?.set ? new Set(res.modify.set) : new Set(),
153
- unset: res.modify?.unset ? new Set(res.modify.unset) : new Set(),
154
- },
155
- require: res.require ? new Set(res.require) : new Set(),
156
- }
157
- }
158
- : undefined,
159
- } satisfies MutationDef.Any['options'],
160
- })
161
-
162
- return makePartialEvent as MutationDef<TName, TFrom, TTo>
163
- }
164
-
165
- export const makeMutationDefRecord = <TInputRecord extends Record<string, MutationDef.Any>>(
166
- inputRecord: TInputRecord,
167
- ): {
168
- [K in TInputRecord[keyof TInputRecord]['name']]: Extract<TInputRecord[keyof TInputRecord], { name: K }>
169
- } => {
170
- const result: any = {}
171
-
172
- for (const [name, def] of Object.entries(inputRecord)) {
173
- result[name] = def
174
- }
175
-
176
- result['livestore.RawSql'] = rawSqlMutation
177
-
178
- return result
179
- }
180
-
181
- export const rawSqlMutation = defineMutation(
182
- 'livestore.RawSql',
183
- Schema.Struct({
184
- sql: Schema.String,
185
- bindValues: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),
186
- writeTables: Schema.optional(Schema.ReadonlySet(Schema.String)),
187
- }),
188
- ({ sql, bindValues, writeTables }) => ({ sql, bindValues: bindValues ?? {}, writeTables }),
189
- )
190
-
191
- export type RawSqlMutation = typeof rawSqlMutation
192
- export type RawSqlMutationEvent = ReturnType<typeof rawSqlMutation>
@@ -1,105 +0,0 @@
1
- import { type SqliteAst as __SqliteAst, SqliteDsl } from '@livestore/db-schema'
2
- import { Schema } from '@livestore/utils/effect'
3
-
4
- import * as EventId from './EventId.js'
5
- import type { FromTable } from './table-def.js'
6
- import { table } from './table-def.js'
7
-
8
- /// App DB
9
-
10
- export const SCHEMA_META_TABLE = '__livestore_schema'
11
-
12
- export const schemaMetaTable = table(
13
- SCHEMA_META_TABLE,
14
- {
15
- tableName: SqliteDsl.text({ primaryKey: true }),
16
- schemaHash: SqliteDsl.integer({ nullable: false }),
17
- /** ISO date format */
18
- updatedAt: SqliteDsl.text({ nullable: false }),
19
- },
20
- { disableAutomaticIdColumn: true },
21
- )
22
-
23
- export type SchemaMetaRow = FromTable.RowDecoded<typeof schemaMetaTable>
24
-
25
- export const SCHEMA_MUTATIONS_META_TABLE = '__livestore_schema_mutations'
26
-
27
- export const schemaMutationsMetaTable = table(
28
- SCHEMA_MUTATIONS_META_TABLE,
29
- {
30
- mutationName: SqliteDsl.text({ primaryKey: true }),
31
- schemaHash: SqliteDsl.integer({ nullable: false }),
32
- /** ISO date format */
33
- updatedAt: SqliteDsl.text({ nullable: false }),
34
- },
35
- { disableAutomaticIdColumn: true },
36
- )
37
-
38
- export type SchemaMutationsMetaRow = FromTable.RowDecoded<typeof schemaMutationsMetaTable>
39
-
40
- /**
41
- * Table which stores SQLite changeset blobs which is used for rolling back
42
- * read-model state during rebasing.
43
- */
44
- export const SESSION_CHANGESET_META_TABLE = '__livestore_session_changeset'
45
-
46
- export const sessionChangesetMetaTable = table(
47
- SESSION_CHANGESET_META_TABLE,
48
- {
49
- // TODO bring back primary key
50
- idGlobal: SqliteDsl.integer({ schema: EventId.GlobalEventId }),
51
- idLocal: SqliteDsl.integer({ schema: EventId.LocalEventId }),
52
- changeset: SqliteDsl.blob({ nullable: true }),
53
- debug: SqliteDsl.json({ nullable: true }),
54
- },
55
- {
56
- disableAutomaticIdColumn: true,
57
- indexes: [{ columns: ['idGlobal', 'idLocal'], name: 'idx_session_changeset_id' }],
58
- },
59
- )
60
-
61
- export type SessionChangesetMetaRow = FromTable.RowDecoded<typeof sessionChangesetMetaTable>
62
-
63
- export const systemTables = [schemaMetaTable, schemaMutationsMetaTable, sessionChangesetMetaTable]
64
-
65
- /// Mutation log DB
66
-
67
- export const SyncStatus = Schema.Literal('synced', 'pending', 'error', 'localOnly')
68
- export type SyncStatus = typeof SyncStatus.Type
69
-
70
- export const MUTATION_LOG_META_TABLE = 'mutation_log'
71
-
72
- export const mutationLogMetaTable = table(
73
- MUTATION_LOG_META_TABLE,
74
- {
75
- idGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventId.GlobalEventId }),
76
- idLocal: SqliteDsl.integer({ primaryKey: true, schema: EventId.LocalEventId }),
77
- parentIdGlobal: SqliteDsl.integer({ schema: EventId.GlobalEventId }),
78
- parentIdLocal: SqliteDsl.integer({ schema: EventId.LocalEventId }),
79
- mutation: SqliteDsl.text({}),
80
- argsJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Any) }),
81
- schemaHash: SqliteDsl.integer({}),
82
- syncMetadataJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Option(Schema.JsonValue)) }),
83
- },
84
- {
85
- disableAutomaticIdColumn: true,
86
- indexes: [
87
- { columns: ['idGlobal'], name: 'idx_idGlobal' },
88
- { columns: ['idGlobal', 'idLocal'], name: 'idx_mutationlog_id' },
89
- ],
90
- },
91
- )
92
-
93
- export type MutationLogMetaRow = FromTable.RowDecoded<typeof mutationLogMetaTable>
94
-
95
- export const SYNC_STATUS_TABLE = '__livestore_sync_status'
96
-
97
- export const syncStatusTable = table(
98
- SYNC_STATUS_TABLE,
99
- {
100
- head: SqliteDsl.integer({ primaryKey: true }),
101
- },
102
- { disableAutomaticIdColumn: true },
103
- )
104
-
105
- export type SyncStatusRow = FromTable.RowDecoded<typeof syncStatusTable>