@livestore/common 0.3.0-dev.9 → 0.3.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 (480) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +83 -221
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +33 -11
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +120 -64
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +39 -8
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts.map +1 -1
  11. package/dist/debug-info.d.ts +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +390 -0
  16. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
  17. package/dist/devtools/devtools-messages-client-session.js +97 -0
  18. package/dist/devtools/devtools-messages-client-session.js.map +1 -0
  19. package/dist/devtools/devtools-messages-common.d.ts +68 -0
  20. package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
  21. package/dist/devtools/devtools-messages-common.js +60 -0
  22. package/dist/devtools/devtools-messages-common.js.map +1 -0
  23. package/dist/devtools/devtools-messages-leader.d.ts +394 -0
  24. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
  25. package/dist/devtools/devtools-messages-leader.js +147 -0
  26. package/dist/devtools/devtools-messages-leader.js.map +1 -0
  27. package/dist/devtools/devtools-messages.d.ts +3 -580
  28. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  29. package/dist/devtools/devtools-messages.js +3 -174
  30. package/dist/devtools/devtools-messages.js.map +1 -1
  31. package/dist/devtools/devtools-sessioninfo.d.ts +32 -0
  32. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
  33. package/dist/devtools/devtools-sessioninfo.js +36 -0
  34. package/dist/devtools/devtools-sessioninfo.js.map +1 -0
  35. package/dist/devtools/mod.d.ts +55 -0
  36. package/dist/devtools/mod.d.ts.map +1 -0
  37. package/dist/devtools/mod.js +33 -0
  38. package/dist/devtools/mod.js.map +1 -0
  39. package/dist/index.d.ts +7 -9
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +7 -9
  42. package/dist/index.js.map +1 -1
  43. package/dist/leader-thread/LeaderSyncProcessor.d.ts +36 -11
  44. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  45. package/dist/leader-thread/LeaderSyncProcessor.js +426 -252
  46. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  47. package/dist/leader-thread/connection.d.ts +34 -6
  48. package/dist/leader-thread/connection.d.ts.map +1 -1
  49. package/dist/leader-thread/connection.js +22 -7
  50. package/dist/leader-thread/connection.js.map +1 -1
  51. package/dist/leader-thread/eventlog.d.ts +27 -0
  52. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  53. package/dist/leader-thread/eventlog.js +119 -0
  54. package/dist/leader-thread/eventlog.js.map +1 -0
  55. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  56. package/dist/leader-thread/leader-worker-devtools.js +155 -80
  57. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  58. package/dist/leader-thread/make-leader-thread-layer.d.ts +22 -9
  59. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  60. package/dist/leader-thread/make-leader-thread-layer.js +67 -45
  61. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  62. package/dist/leader-thread/materialize-event.d.ts +16 -0
  63. package/dist/leader-thread/materialize-event.d.ts.map +1 -0
  64. package/dist/leader-thread/materialize-event.js +109 -0
  65. package/dist/leader-thread/materialize-event.js.map +1 -0
  66. package/dist/leader-thread/mod.d.ts +1 -1
  67. package/dist/leader-thread/mod.d.ts.map +1 -1
  68. package/dist/leader-thread/mod.js +1 -1
  69. package/dist/leader-thread/mod.js.map +1 -1
  70. package/dist/leader-thread/recreate-db.d.ts +4 -2
  71. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  72. package/dist/leader-thread/recreate-db.js +28 -32
  73. package/dist/leader-thread/recreate-db.js.map +1 -1
  74. package/dist/leader-thread/shutdown-channel.d.ts +2 -5
  75. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  76. package/dist/leader-thread/shutdown-channel.js +2 -4
  77. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  78. package/dist/leader-thread/types.d.ts +79 -38
  79. package/dist/leader-thread/types.d.ts.map +1 -1
  80. package/dist/leader-thread/types.js +1 -3
  81. package/dist/leader-thread/types.js.map +1 -1
  82. package/dist/make-client-session.d.ts +23 -0
  83. package/dist/make-client-session.d.ts.map +1 -0
  84. package/dist/make-client-session.js +57 -0
  85. package/dist/make-client-session.js.map +1 -0
  86. package/dist/materializer-helper.d.ts +23 -0
  87. package/dist/materializer-helper.d.ts.map +1 -0
  88. package/dist/materializer-helper.js +86 -0
  89. package/dist/materializer-helper.js.map +1 -0
  90. package/dist/otel.d.ts +2 -0
  91. package/dist/otel.d.ts.map +1 -1
  92. package/dist/otel.js +5 -0
  93. package/dist/otel.js.map +1 -1
  94. package/dist/rematerialize-from-eventlog.d.ts +14 -0
  95. package/dist/rematerialize-from-eventlog.d.ts.map +1 -0
  96. package/dist/rematerialize-from-eventlog.js +64 -0
  97. package/dist/rematerialize-from-eventlog.js.map +1 -0
  98. package/dist/schema/EventDef.d.ts +146 -0
  99. package/dist/schema/EventDef.d.ts.map +1 -0
  100. package/dist/schema/EventDef.js +58 -0
  101. package/dist/schema/EventDef.js.map +1 -0
  102. package/dist/schema/EventSequenceNumber.d.ts +57 -0
  103. package/dist/schema/EventSequenceNumber.d.ts.map +1 -0
  104. package/dist/schema/EventSequenceNumber.js +82 -0
  105. package/dist/schema/EventSequenceNumber.js.map +1 -0
  106. package/dist/schema/EventSequenceNumber.test.d.ts +2 -0
  107. package/dist/schema/EventSequenceNumber.test.d.ts.map +1 -0
  108. package/dist/schema/EventSequenceNumber.test.js +11 -0
  109. package/dist/schema/EventSequenceNumber.test.js.map +1 -0
  110. package/dist/schema/LiveStoreEvent.d.ts +257 -0
  111. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  112. package/dist/schema/LiveStoreEvent.js +117 -0
  113. package/dist/schema/LiveStoreEvent.js.map +1 -0
  114. package/dist/schema/events.d.ts +2 -0
  115. package/dist/schema/events.d.ts.map +1 -0
  116. package/dist/schema/events.js +2 -0
  117. package/dist/schema/events.js.map +1 -0
  118. package/dist/schema/mod.d.ts +8 -6
  119. package/dist/schema/mod.d.ts.map +1 -1
  120. package/dist/schema/mod.js +8 -6
  121. package/dist/schema/mod.js.map +1 -1
  122. package/dist/schema/schema.d.ts +50 -32
  123. package/dist/schema/schema.d.ts.map +1 -1
  124. package/dist/schema/schema.js +36 -43
  125. package/dist/schema/schema.js.map +1 -1
  126. package/dist/schema/state/mod.d.ts +3 -0
  127. package/dist/schema/state/mod.d.ts.map +1 -0
  128. package/dist/schema/state/mod.js +3 -0
  129. package/dist/schema/state/mod.js.map +1 -0
  130. package/dist/schema/state/sqlite/client-document-def.d.ts +223 -0
  131. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -0
  132. package/dist/schema/state/sqlite/client-document-def.js +170 -0
  133. package/dist/schema/state/sqlite/client-document-def.js.map +1 -0
  134. package/dist/schema/state/sqlite/client-document-def.test.d.ts +2 -0
  135. package/dist/schema/state/sqlite/client-document-def.test.d.ts.map +1 -0
  136. package/dist/schema/state/sqlite/client-document-def.test.js +201 -0
  137. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -0
  138. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +69 -0
  139. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -0
  140. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +71 -0
  141. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -0
  142. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +3 -0
  143. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts.map +1 -0
  144. package/dist/schema/state/sqlite/db-schema/ast/validate.js +12 -0
  145. package/dist/schema/state/sqlite/db-schema/ast/validate.js.map +1 -0
  146. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +90 -0
  147. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -0
  148. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +87 -0
  149. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -0
  150. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts +2 -0
  151. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts.map +1 -0
  152. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +29 -0
  153. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -0
  154. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +90 -0
  155. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -0
  156. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +41 -0
  157. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -0
  158. package/dist/schema/state/sqlite/db-schema/hash.d.ts +2 -0
  159. package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -0
  160. package/dist/schema/state/sqlite/db-schema/hash.js +14 -0
  161. package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -0
  162. package/dist/schema/state/sqlite/db-schema/mod.d.ts +3 -0
  163. package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -0
  164. package/dist/schema/state/sqlite/db-schema/mod.js +3 -0
  165. package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -0
  166. package/dist/schema/state/sqlite/mod.d.ts +17 -0
  167. package/dist/schema/state/sqlite/mod.d.ts.map +1 -0
  168. package/dist/schema/state/sqlite/mod.js +41 -0
  169. package/dist/schema/state/sqlite/mod.js.map +1 -0
  170. package/dist/schema/state/sqlite/query-builder/api.d.ts +294 -0
  171. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -0
  172. package/dist/schema/state/sqlite/query-builder/api.js +6 -0
  173. package/dist/schema/state/sqlite/query-builder/api.js.map +1 -0
  174. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +7 -0
  175. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -0
  176. package/dist/schema/state/sqlite/query-builder/astToSql.js +190 -0
  177. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -0
  178. package/dist/schema/state/sqlite/query-builder/impl.d.ts +7 -0
  179. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -0
  180. package/dist/schema/state/sqlite/query-builder/impl.js +286 -0
  181. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -0
  182. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +87 -0
  183. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -0
  184. package/dist/schema/state/sqlite/query-builder/impl.test.js +563 -0
  185. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -0
  186. package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.d.ts +7 -0
  187. package/dist/schema/state/sqlite/query-builder/mod.d.ts.map +1 -0
  188. package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.js +7 -0
  189. package/dist/schema/state/sqlite/query-builder/mod.js.map +1 -0
  190. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -0
  191. package/dist/schema/{schema-helpers.js → state/sqlite/schema-helpers.js} +1 -1
  192. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -0
  193. package/dist/schema/state/sqlite/system-tables.d.ts +574 -0
  194. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -0
  195. package/dist/schema/state/sqlite/system-tables.js +88 -0
  196. package/dist/schema/state/sqlite/system-tables.js.map +1 -0
  197. package/dist/schema/state/sqlite/table-def.d.ts +84 -0
  198. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -0
  199. package/dist/schema/state/sqlite/table-def.js +36 -0
  200. package/dist/schema/state/sqlite/table-def.js.map +1 -0
  201. package/dist/schema-management/common.d.ts +7 -7
  202. package/dist/schema-management/common.d.ts.map +1 -1
  203. package/dist/schema-management/common.js.map +1 -1
  204. package/dist/schema-management/migrations.d.ts +6 -6
  205. package/dist/schema-management/migrations.d.ts.map +1 -1
  206. package/dist/schema-management/migrations.js +27 -18
  207. package/dist/schema-management/migrations.js.map +1 -1
  208. package/dist/schema-management/validate-schema.d.ts +8 -0
  209. package/dist/schema-management/validate-schema.d.ts.map +1 -0
  210. package/dist/schema-management/validate-schema.js +39 -0
  211. package/dist/schema-management/validate-schema.js.map +1 -0
  212. package/dist/sql-queries/misc.d.ts.map +1 -1
  213. package/dist/sql-queries/sql-queries.d.ts +1 -1
  214. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  215. package/dist/sql-queries/sql-queries.js.map +1 -1
  216. package/dist/sql-queries/sql-query-builder.d.ts +1 -1
  217. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  218. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  219. package/dist/sql-queries/types.d.ts +2 -1
  220. package/dist/sql-queries/types.d.ts.map +1 -1
  221. package/dist/sql-queries/types.js.map +1 -1
  222. package/dist/sync/ClientSessionSyncProcessor.d.ts +40 -19
  223. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  224. package/dist/sync/ClientSessionSyncProcessor.js +149 -73
  225. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  226. package/dist/sync/next/compact-events.d.ts.map +1 -1
  227. package/dist/sync/next/compact-events.js +38 -35
  228. package/dist/sync/next/compact-events.js.map +1 -1
  229. package/dist/sync/next/facts.d.ts +21 -21
  230. package/dist/sync/next/facts.d.ts.map +1 -1
  231. package/dist/sync/next/facts.js +11 -11
  232. package/dist/sync/next/facts.js.map +1 -1
  233. package/dist/sync/next/history-dag-common.d.ts +9 -7
  234. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  235. package/dist/sync/next/history-dag-common.js +10 -5
  236. package/dist/sync/next/history-dag-common.js.map +1 -1
  237. package/dist/sync/next/history-dag.d.ts +0 -2
  238. package/dist/sync/next/history-dag.d.ts.map +1 -1
  239. package/dist/sync/next/history-dag.js +16 -14
  240. package/dist/sync/next/history-dag.js.map +1 -1
  241. package/dist/sync/next/rebase-events.d.ts +10 -8
  242. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  243. package/dist/sync/next/rebase-events.js +18 -10
  244. package/dist/sync/next/rebase-events.js.map +1 -1
  245. package/dist/sync/next/test/compact-events.calculator.test.js +39 -34
  246. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  247. package/dist/sync/next/test/compact-events.test.js +77 -77
  248. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  249. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +35 -25
  250. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  251. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +81 -38
  252. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  253. package/dist/sync/next/test/mod.d.ts +1 -1
  254. package/dist/sync/next/test/mod.d.ts.map +1 -1
  255. package/dist/sync/next/test/mod.js +1 -1
  256. package/dist/sync/next/test/mod.js.map +1 -1
  257. package/dist/sync/sync.d.ts +46 -21
  258. package/dist/sync/sync.d.ts.map +1 -1
  259. package/dist/sync/sync.js +10 -6
  260. package/dist/sync/sync.js.map +1 -1
  261. package/dist/sync/syncstate.d.ts +193 -84
  262. package/dist/sync/syncstate.d.ts.map +1 -1
  263. package/dist/sync/syncstate.js +305 -151
  264. package/dist/sync/syncstate.js.map +1 -1
  265. package/dist/sync/syncstate.test.js +267 -303
  266. package/dist/sync/syncstate.test.js.map +1 -1
  267. package/dist/sync/validate-push-payload.d.ts +2 -2
  268. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  269. package/dist/sync/validate-push-payload.js +4 -4
  270. package/dist/sync/validate-push-payload.js.map +1 -1
  271. package/dist/util.d.ts +2 -2
  272. package/dist/util.d.ts.map +1 -1
  273. package/dist/version.d.ts +2 -2
  274. package/dist/version.d.ts.map +1 -1
  275. package/dist/version.js +2 -2
  276. package/dist/version.js.map +1 -1
  277. package/package.json +10 -4
  278. package/src/__tests__/fixture.ts +36 -15
  279. package/src/adapter-types.ts +107 -68
  280. package/src/debug-info.ts +1 -0
  281. package/src/devtools/devtools-messages-client-session.ts +142 -0
  282. package/src/devtools/devtools-messages-common.ts +115 -0
  283. package/src/devtools/devtools-messages-leader.ts +191 -0
  284. package/src/devtools/devtools-messages.ts +3 -246
  285. package/src/devtools/devtools-sessioninfo.ts +101 -0
  286. package/src/devtools/mod.ts +59 -0
  287. package/src/index.ts +7 -9
  288. package/src/leader-thread/LeaderSyncProcessor.ts +664 -394
  289. package/src/leader-thread/connection.ts +54 -9
  290. package/src/leader-thread/eventlog.ts +199 -0
  291. package/src/leader-thread/leader-worker-devtools.ts +227 -104
  292. package/src/leader-thread/make-leader-thread-layer.ts +121 -72
  293. package/src/leader-thread/materialize-event.ts +173 -0
  294. package/src/leader-thread/mod.ts +1 -1
  295. package/src/leader-thread/recreate-db.ts +33 -38
  296. package/src/leader-thread/shutdown-channel.ts +2 -4
  297. package/src/leader-thread/types.ts +84 -46
  298. package/src/make-client-session.ts +136 -0
  299. package/src/materializer-helper.ts +138 -0
  300. package/src/otel.ts +8 -0
  301. package/src/rematerialize-from-eventlog.ts +117 -0
  302. package/src/schema/EventDef.ts +227 -0
  303. package/src/schema/EventSequenceNumber.test.ts +12 -0
  304. package/src/schema/EventSequenceNumber.ts +121 -0
  305. package/src/schema/LiveStoreEvent.ts +240 -0
  306. package/src/schema/events.ts +1 -0
  307. package/src/schema/mod.ts +8 -6
  308. package/src/schema/schema.ts +88 -84
  309. package/src/schema/state/mod.ts +2 -0
  310. package/src/schema/state/sqlite/client-document-def.test.ts +238 -0
  311. package/src/schema/state/sqlite/client-document-def.ts +444 -0
  312. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +142 -0
  313. package/src/schema/state/sqlite/db-schema/ast/validate.ts +13 -0
  314. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
  315. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -0
  316. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +242 -0
  317. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +222 -0
  318. package/src/schema/state/sqlite/db-schema/hash.ts +14 -0
  319. package/src/schema/state/sqlite/db-schema/mod.ts +2 -0
  320. package/src/schema/state/sqlite/mod.ts +73 -0
  321. package/src/schema/state/sqlite/query-builder/api.ts +440 -0
  322. package/src/schema/state/sqlite/query-builder/astToSql.ts +232 -0
  323. package/src/schema/state/sqlite/query-builder/impl.test.ts +617 -0
  324. package/src/schema/state/sqlite/query-builder/impl.ts +351 -0
  325. package/src/{query-builder → schema/state/sqlite/query-builder}/mod.ts +7 -0
  326. package/src/schema/{schema-helpers.ts → state/sqlite/schema-helpers.ts} +1 -1
  327. package/src/schema/state/sqlite/system-tables.ts +117 -0
  328. package/src/schema/state/sqlite/table-def.ts +197 -0
  329. package/src/schema-management/common.ts +7 -7
  330. package/src/schema-management/migrations.ts +37 -31
  331. package/src/schema-management/validate-schema.ts +61 -0
  332. package/src/sql-queries/sql-queries.ts +1 -1
  333. package/src/sql-queries/sql-query-builder.ts +1 -2
  334. package/src/sql-queries/types.ts +3 -1
  335. package/src/sync/ClientSessionSyncProcessor.ts +218 -94
  336. package/src/sync/next/compact-events.ts +38 -35
  337. package/src/sync/next/facts.ts +43 -41
  338. package/src/sync/next/history-dag-common.ts +17 -10
  339. package/src/sync/next/history-dag.ts +16 -17
  340. package/src/sync/next/rebase-events.ts +29 -17
  341. package/src/sync/next/test/compact-events.calculator.test.ts +46 -46
  342. package/src/sync/next/test/compact-events.test.ts +79 -79
  343. package/src/sync/next/test/event-fixtures.ts +226 -0
  344. package/src/sync/next/test/mod.ts +1 -1
  345. package/src/sync/sync.ts +46 -21
  346. package/src/sync/syncstate.test.ts +312 -345
  347. package/src/sync/syncstate.ts +414 -224
  348. package/src/sync/validate-push-payload.ts +6 -6
  349. package/src/version.ts +2 -2
  350. package/dist/derived-mutations.d.ts +0 -109
  351. package/dist/derived-mutations.d.ts.map +0 -1
  352. package/dist/derived-mutations.js +0 -54
  353. package/dist/derived-mutations.js.map +0 -1
  354. package/dist/derived-mutations.test.d.ts +0 -2
  355. package/dist/derived-mutations.test.d.ts.map +0 -1
  356. package/dist/derived-mutations.test.js +0 -93
  357. package/dist/derived-mutations.test.js.map +0 -1
  358. package/dist/devtools/devtools-bridge.d.ts +0 -13
  359. package/dist/devtools/devtools-bridge.d.ts.map +0 -1
  360. package/dist/devtools/devtools-bridge.js +0 -2
  361. package/dist/devtools/devtools-bridge.js.map +0 -1
  362. package/dist/devtools/devtools-window-message.d.ts +0 -29
  363. package/dist/devtools/devtools-window-message.d.ts.map +0 -1
  364. package/dist/devtools/devtools-window-message.js +0 -33
  365. package/dist/devtools/devtools-window-message.js.map +0 -1
  366. package/dist/devtools/index.d.ts +0 -42
  367. package/dist/devtools/index.d.ts.map +0 -1
  368. package/dist/devtools/index.js +0 -48
  369. package/dist/devtools/index.js.map +0 -1
  370. package/dist/init-singleton-tables.d.ts +0 -4
  371. package/dist/init-singleton-tables.d.ts.map +0 -1
  372. package/dist/init-singleton-tables.js +0 -16
  373. package/dist/init-singleton-tables.js.map +0 -1
  374. package/dist/leader-thread/apply-mutation.d.ts +0 -11
  375. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  376. package/dist/leader-thread/apply-mutation.js +0 -107
  377. package/dist/leader-thread/apply-mutation.js.map +0 -1
  378. package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
  379. package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
  380. package/dist/leader-thread/leader-sync-processor.js +0 -430
  381. package/dist/leader-thread/leader-sync-processor.js.map +0 -1
  382. package/dist/leader-thread/mutationlog.d.ts +0 -10
  383. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  384. package/dist/leader-thread/mutationlog.js +0 -28
  385. package/dist/leader-thread/mutationlog.js.map +0 -1
  386. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  387. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  388. package/dist/leader-thread/pull-queue-set.js +0 -39
  389. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  390. package/dist/mutation.d.ts +0 -20
  391. package/dist/mutation.d.ts.map +0 -1
  392. package/dist/mutation.js +0 -57
  393. package/dist/mutation.js.map +0 -1
  394. package/dist/query-builder/api.d.ts +0 -190
  395. package/dist/query-builder/api.d.ts.map +0 -1
  396. package/dist/query-builder/api.js +0 -8
  397. package/dist/query-builder/api.js.map +0 -1
  398. package/dist/query-builder/impl.d.ts +0 -12
  399. package/dist/query-builder/impl.d.ts.map +0 -1
  400. package/dist/query-builder/impl.js +0 -244
  401. package/dist/query-builder/impl.js.map +0 -1
  402. package/dist/query-builder/impl.test.d.ts +0 -2
  403. package/dist/query-builder/impl.test.d.ts.map +0 -1
  404. package/dist/query-builder/impl.test.js +0 -212
  405. package/dist/query-builder/impl.test.js.map +0 -1
  406. package/dist/query-builder/mod.d.ts.map +0 -1
  407. package/dist/query-builder/mod.js.map +0 -1
  408. package/dist/query-info.d.ts +0 -38
  409. package/dist/query-info.d.ts.map +0 -1
  410. package/dist/query-info.js +0 -7
  411. package/dist/query-info.js.map +0 -1
  412. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  413. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  414. package/dist/rehydrate-from-mutationlog.js +0 -66
  415. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  416. package/dist/schema/EventId.d.ts +0 -39
  417. package/dist/schema/EventId.d.ts.map +0 -1
  418. package/dist/schema/EventId.js +0 -38
  419. package/dist/schema/EventId.js.map +0 -1
  420. package/dist/schema/EventId.test.d.ts +0 -2
  421. package/dist/schema/EventId.test.d.ts.map +0 -1
  422. package/dist/schema/EventId.test.js +0 -11
  423. package/dist/schema/EventId.test.js.map +0 -1
  424. package/dist/schema/MutationEvent.d.ts +0 -167
  425. package/dist/schema/MutationEvent.d.ts.map +0 -1
  426. package/dist/schema/MutationEvent.js +0 -72
  427. package/dist/schema/MutationEvent.js.map +0 -1
  428. package/dist/schema/MutationEvent.test.d.ts +0 -2
  429. package/dist/schema/MutationEvent.test.d.ts.map +0 -1
  430. package/dist/schema/MutationEvent.test.js +0 -2
  431. package/dist/schema/MutationEvent.test.js.map +0 -1
  432. package/dist/schema/mutations.d.ts +0 -107
  433. package/dist/schema/mutations.d.ts.map +0 -1
  434. package/dist/schema/mutations.js +0 -42
  435. package/dist/schema/mutations.js.map +0 -1
  436. package/dist/schema/schema-helpers.d.ts.map +0 -1
  437. package/dist/schema/schema-helpers.js.map +0 -1
  438. package/dist/schema/system-tables.d.ts +0 -399
  439. package/dist/schema/system-tables.d.ts.map +0 -1
  440. package/dist/schema/system-tables.js +0 -59
  441. package/dist/schema/system-tables.js.map +0 -1
  442. package/dist/schema/table-def.d.ts +0 -156
  443. package/dist/schema/table-def.d.ts.map +0 -1
  444. package/dist/schema/table-def.js +0 -79
  445. package/dist/schema/table-def.js.map +0 -1
  446. package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
  447. package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
  448. package/dist/schema-management/validate-mutation-defs.js +0 -39
  449. package/dist/schema-management/validate-mutation-defs.js.map +0 -1
  450. package/dist/sync/client-session-sync-processor.d.ts +0 -45
  451. package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
  452. package/dist/sync/client-session-sync-processor.js +0 -131
  453. package/dist/sync/client-session-sync-processor.js.map +0 -1
  454. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  455. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  456. package/src/derived-mutations.test.ts +0 -101
  457. package/src/derived-mutations.ts +0 -170
  458. package/src/devtools/devtools-bridge.ts +0 -14
  459. package/src/devtools/devtools-window-message.ts +0 -27
  460. package/src/devtools/index.ts +0 -48
  461. package/src/init-singleton-tables.ts +0 -24
  462. package/src/leader-thread/apply-mutation.ts +0 -161
  463. package/src/leader-thread/mutationlog.ts +0 -46
  464. package/src/leader-thread/pull-queue-set.ts +0 -58
  465. package/src/mutation.ts +0 -91
  466. package/src/query-builder/api.ts +0 -289
  467. package/src/query-builder/impl.test.ts +0 -239
  468. package/src/query-builder/impl.ts +0 -285
  469. package/src/query-info.ts +0 -78
  470. package/src/rehydrate-from-mutationlog.ts +0 -119
  471. package/src/schema/EventId.test.ts +0 -12
  472. package/src/schema/EventId.ts +0 -60
  473. package/src/schema/MutationEvent.ts +0 -185
  474. package/src/schema/mutations.ts +0 -192
  475. package/src/schema/system-tables.ts +0 -105
  476. package/src/schema/table-def.ts +0 -343
  477. package/src/schema-management/validate-mutation-defs.ts +0 -63
  478. package/src/sync/next/test/mutation-fixtures.ts +0 -224
  479. package/tsconfig.json +0 -11
  480. /package/dist/schema/{schema-helpers.d.ts → state/sqlite/schema-helpers.d.ts} +0 -0
@@ -1,123 +1,127 @@
1
- import type { SqliteDsl } from '@livestore/db-schema'
2
- import { SqliteAst } from '@livestore/db-schema'
3
1
  import { isReadonlyArray, shouldNeverHappen } from '@livestore/utils'
4
2
 
5
3
  import type { MigrationOptions } from '../adapter-types.js'
6
- import { makeDerivedMutationDefsForTable } from '../derived-mutations.js'
7
- import {
8
- type MutationDef,
9
- type MutationDefMap,
10
- type MutationDefRecord,
11
- type RawSqlMutation,
12
- rawSqlMutation,
13
- } from './mutations.js'
14
- import { systemTables } from './system-tables.js'
15
- import type { TableDef, TableDefBase } from './table-def.js'
16
- import { tableHasDerivedMutations } from './table-def.js'
4
+ import type { EventDef, EventDefRecord, Materializer, RawSqlEvent } from './EventDef.js'
5
+ import { rawSqlEvent } from './EventDef.js'
6
+ import { tableIsClientDocumentTable } from './state/sqlite/client-document-def.js'
7
+ import type { SqliteDsl } from './state/sqlite/db-schema/mod.js'
8
+ import { stateSystemTables } from './state/sqlite/system-tables.js'
9
+ import type { TableDef } from './state/sqlite/table-def.js'
17
10
 
18
11
  export const LiveStoreSchemaSymbol = Symbol.for('livestore.LiveStoreSchema')
19
12
  export type LiveStoreSchemaSymbol = typeof LiveStoreSchemaSymbol
20
13
 
21
- export type LiveStoreSchema<
14
+ export interface LiveStoreSchema<
22
15
  TDbSchema extends SqliteDsl.DbSchema = SqliteDsl.DbSchema,
23
- TMutationsDefRecord extends MutationDefRecord = MutationDefRecord,
24
- > = {
25
- readonly _Type: LiveStoreSchemaSymbol
16
+ TEventsDefRecord extends EventDefRecord = EventDefRecord,
17
+ > {
18
+ readonly LiveStoreSchemaSymbol: LiveStoreSchemaSymbol
26
19
  /** Only used on type-level */
27
20
  readonly _DbSchemaType: TDbSchema
28
21
  /** Only used on type-level */
29
- readonly _MutationDefMapType: TMutationsDefRecord
22
+ readonly _EventDefMapType: TEventsDefRecord
30
23
 
31
- readonly tables: Map<string, TableDef>
32
- readonly mutations: MutationDefMap
33
- /** Compound hash of all table defs etc */
34
- readonly hash: number
24
+ readonly state: InternalState
25
+ readonly eventsDefsMap: Map<string, EventDef.AnyWithoutFn>
26
+ readonly devtools: {
27
+ /** @default 'default' */
28
+ readonly alias: string
29
+ }
30
+ }
35
31
 
36
- migrationOptions: MigrationOptions
32
+ // TODO abstract this further away from sqlite/tables
33
+ export interface InternalState {
34
+ readonly sqlite: {
35
+ readonly tables: Map<string, TableDef.Any>
36
+ readonly migrations: MigrationOptions
37
+ /** Compound hash of all table defs etc */
38
+ readonly hash: number
39
+ }
40
+ readonly materializers: Map<string, Materializer>
37
41
  }
38
42
 
39
- export type InputSchema = {
40
- readonly tables: Record<string, TableDefBase> | ReadonlyArray<TableDefBase>
41
- readonly mutations?: ReadonlyArray<MutationDef.Any> | Record<string, MutationDef.Any>
42
- /**
43
- * Can be used to isolate multiple LiveStore apps running in the same origin
44
- */
45
- // TODO remove this in favour of storeId
46
- readonly key?: string
43
+ export interface InputSchema {
44
+ readonly events: ReadonlyArray<EventDef.AnyWithoutFn> | Record<string, EventDef.AnyWithoutFn>
45
+ readonly state: InternalState
46
+ readonly devtools?: {
47
+ /**
48
+ * This alias value is used to disambiguate between multiple schemas in the devtools.
49
+ * Only needed when an app uses multiple schemas.
50
+ *
51
+ * @default 'default'
52
+ */
53
+ readonly alias?: string
54
+ }
47
55
  }
48
56
 
49
57
  export const makeSchema = <TInputSchema extends InputSchema>(
50
- /** Note when using the object-notation for tables/mutations, the object keys are ignored and not used as table/mutation names */
51
- inputSchema: TInputSchema & {
52
- /** "hard-reset" is currently the default strategy */
53
- migrations?: MigrationOptions<FromInputSchema.DeriveSchema<TInputSchema>>
54
- },
58
+ /** Note when using the object-notation for tables/events, the object keys are ignored and not used as table/mutation names */
59
+ inputSchema: TInputSchema,
55
60
  ): FromInputSchema.DeriveSchema<TInputSchema> => {
56
- const inputTables: ReadonlyArray<TableDef> = Array.isArray(inputSchema.tables)
57
- ? inputSchema.tables
58
- : Object.values(inputSchema.tables)
61
+ const state = inputSchema.state
62
+ const tables = inputSchema.state.sqlite.tables
59
63
 
60
- const tables = new Map<string, TableDef>()
61
-
62
- for (const tableDef of inputTables) {
63
- // TODO validate tables (e.g. index names are unique)
64
- if (tables.has(tableDef.sqliteDef.ast.name)) {
65
- shouldNeverHappen(`Duplicate table name: ${tableDef.sqliteDef.ast.name}. Please use unique names for tables.`)
66
- }
67
- tables.set(tableDef.sqliteDef.ast.name, tableDef)
68
- }
69
-
70
- for (const tableDef of systemTables) {
71
- // @ts-expect-error TODO fix type level issue
64
+ for (const tableDef of stateSystemTables) {
72
65
  tables.set(tableDef.sqliteDef.name, tableDef)
73
66
  }
74
67
 
75
- const mutations: MutationDefMap = new Map()
68
+ const eventsDefsMap = new Map<string, EventDef.AnyWithoutFn>()
76
69
 
77
- if (isReadonlyArray(inputSchema.mutations)) {
78
- for (const mutation of inputSchema.mutations) {
79
- mutations.set(mutation.name, mutation)
70
+ if (isReadonlyArray(inputSchema.events)) {
71
+ for (const eventDef of inputSchema.events) {
72
+ eventsDefsMap.set(eventDef.name, eventDef)
80
73
  }
81
74
  } else {
82
- for (const mutation of Object.values(inputSchema.mutations ?? {})) {
83
- if (mutations.has(mutation.name)) {
84
- shouldNeverHappen(`Duplicate mutation name: ${mutation.name}. Please use unique names for mutations.`)
75
+ for (const eventDef of Object.values(inputSchema.events ?? {})) {
76
+ if (eventsDefsMap.has(eventDef.name)) {
77
+ shouldNeverHappen(`Duplicate event name: ${eventDef.name}. Please use unique names for events.`)
85
78
  }
86
- mutations.set(mutation.name, mutation)
79
+ eventsDefsMap.set(eventDef.name, eventDef)
87
80
  }
88
81
  }
89
82
 
90
- mutations.set(rawSqlMutation.name, rawSqlMutation)
83
+ eventsDefsMap.set(rawSqlEvent.name, rawSqlEvent)
91
84
 
92
85
  for (const tableDef of tables.values()) {
93
- if (tableHasDerivedMutations(tableDef)) {
94
- const derivedMutationDefs = makeDerivedMutationDefsForTable(tableDef)
95
- mutations.set(derivedMutationDefs.insert.name, derivedMutationDefs.insert)
96
- mutations.set(derivedMutationDefs.update.name, derivedMutationDefs.update)
97
- mutations.set(derivedMutationDefs.delete.name, derivedMutationDefs.delete)
86
+ if (tableIsClientDocumentTable(tableDef) && eventsDefsMap.has(tableDef.set.name) === false) {
87
+ eventsDefsMap.set(tableDef.set.name, tableDef.set)
98
88
  }
99
89
  }
100
90
 
101
- const hash = SqliteAst.hash({
102
- _tag: 'dbSchema',
103
- tables: [...tables.values()].map((_) => _.sqliteDef.ast),
104
- })
105
-
106
91
  return {
107
- _Type: LiveStoreSchemaSymbol,
92
+ LiveStoreSchemaSymbol,
108
93
  _DbSchemaType: Symbol.for('livestore.DbSchemaType') as any,
109
- _MutationDefMapType: Symbol.for('livestore.MutationDefMapType') as any,
110
- tables,
111
- mutations,
112
- migrationOptions: inputSchema.migrations ?? { strategy: 'hard-reset' },
113
- hash,
94
+ _EventDefMapType: Symbol.for('livestore.EventDefMapType') as any,
95
+ state,
96
+ eventsDefsMap,
97
+ devtools: {
98
+ alias: inputSchema.devtools?.alias ?? 'default',
99
+ },
114
100
  } satisfies LiveStoreSchema
115
101
  }
116
102
 
103
+ export const getEventDef = <TSchema extends LiveStoreSchema>(
104
+ schema: TSchema,
105
+ eventName: string,
106
+ ): {
107
+ eventDef: EventDef.AnyWithoutFn
108
+ materializer: Materializer
109
+ } => {
110
+ const eventDef = schema.eventsDefsMap.get(eventName)
111
+ if (eventDef === undefined) {
112
+ return shouldNeverHappen(`No mutation definition found for \`${eventName}\`.`)
113
+ }
114
+ const materializer = schema.state.materializers.get(eventName)
115
+ if (materializer === undefined) {
116
+ return shouldNeverHappen(`No materializer found for \`${eventName}\`.`)
117
+ }
118
+ return { eventDef, materializer }
119
+ }
120
+
117
121
  export namespace FromInputSchema {
118
122
  export type DeriveSchema<TInputSchema extends InputSchema> = LiveStoreSchema<
119
- DbSchemaFromInputSchemaTables<TInputSchema['tables']>,
120
- MutationDefRecordFromInputSchemaMutations<TInputSchema['mutations']>
123
+ DbSchemaFromInputSchemaTables<TInputSchema['state']['sqlite']['tables']>,
124
+ EventDefRecordFromInputSchemaEvents<TInputSchema['events']>
121
125
  >
122
126
 
123
127
  /**
@@ -125,17 +129,17 @@ export namespace FromInputSchema {
125
129
  * - array: we use the table name of each array item (= table definition) as the object key
126
130
  * - object: we discard the keys of the input object and use the table name of each object value (= table definition) as the new object key
127
131
  */
128
- type DbSchemaFromInputSchemaTables<TTables extends InputSchema['tables']> =
132
+ type DbSchemaFromInputSchemaTables<TTables extends InputSchema['state']['sqlite']['tables']> =
129
133
  TTables extends ReadonlyArray<TableDef>
130
134
  ? { [K in TTables[number] as K['sqliteDef']['name']]: K['sqliteDef'] }
131
135
  : TTables extends Record<string, TableDef>
132
136
  ? { [K in keyof TTables as TTables[K]['sqliteDef']['name']]: TTables[K]['sqliteDef'] }
133
137
  : never
134
138
 
135
- type MutationDefRecordFromInputSchemaMutations<TMutations extends InputSchema['mutations']> =
136
- TMutations extends ReadonlyArray<MutationDef.Any>
137
- ? { [K in TMutations[number] as K['name']]: K } & { 'livestore.RawSql': RawSqlMutation }
138
- : TMutations extends { [name: string]: MutationDef.Any }
139
- ? { [K in keyof TMutations as TMutations[K]['name']]: TMutations[K] } & { 'livestore.RawSql': RawSqlMutation }
139
+ type EventDefRecordFromInputSchemaEvents<TEvents extends InputSchema['events']> =
140
+ TEvents extends ReadonlyArray<EventDef.Any>
141
+ ? { [K in TEvents[number] as K['name']]: K } & { 'livestore.RawSql': RawSqlEvent }
142
+ : TEvents extends { [name: string]: EventDef.Any }
143
+ ? { [K in keyof TEvents as TEvents[K]['name']]: TEvents[K] } & { 'livestore.RawSql': RawSqlEvent }
140
144
  : never
141
145
  }
@@ -0,0 +1,2 @@
1
+ export * as SQLite from './sqlite/mod.js'
2
+ export { QueryBuilderAstSymbol, QueryBuilderTypeId } from './sqlite/query-builder/mod.js'
@@ -0,0 +1,238 @@
1
+ import { Schema } from '@livestore/utils/effect'
2
+ import { describe, expect, test } from 'vitest'
3
+
4
+ import { tables } from '../../../__tests__/fixture.js'
5
+ import type * as LiveStoreEvent from '../../LiveStoreEvent.js'
6
+ import { clientDocument, ClientDocumentTableDefSymbol } from './client-document-def.js'
7
+
8
+ describe('client document table', () => {
9
+ test('set event', () => {
10
+ expect(patchId(tables.UiState.set({ showSidebar: false }, 'session-1'))).toMatchInlineSnapshot(`
11
+ {
12
+ "args": {
13
+ "id": "session-1",
14
+ "value": {
15
+ "showSidebar": false,
16
+ },
17
+ },
18
+ "id": "00000000-0000-0000-0000-000000000000",
19
+ "name": "UiStateSet",
20
+ }
21
+ `)
22
+
23
+ expect(patchId(tables.appConfig.set({ fontSize: 12, theme: 'dark' }))).toMatchInlineSnapshot(`
24
+ {
25
+ "args": {
26
+ "id": "static",
27
+ "value": {
28
+ "fontSize": 12,
29
+ "theme": "dark",
30
+ },
31
+ },
32
+ "id": "00000000-0000-0000-0000-000000000000",
33
+ "name": "AppConfigSet",
34
+ }
35
+ `)
36
+ })
37
+
38
+ describe('materializer', () => {
39
+ const forSchema = <T>(schema: Schema.Schema<T, any>, value: T, id?: string, options?: { partialSet?: boolean }) => {
40
+ const Doc = clientDocument({
41
+ name: 'test',
42
+ schema,
43
+ default: { value },
44
+ ...options,
45
+ })
46
+
47
+ const materializer = Doc[ClientDocumentTableDefSymbol].derived.setMaterializer
48
+
49
+ return materializer(Doc.set(value, id as any).args, {
50
+ currentFacts: new Map(),
51
+ query: {} as any, // unused
52
+ eventDef: Doc[ClientDocumentTableDefSymbol].derived.setEventDef,
53
+ })
54
+ }
55
+
56
+ test('string value', () => {
57
+ expect(forSchema(Schema.String, 'hello', 'id1')).toMatchInlineSnapshot(`
58
+ {
59
+ "bindValues": [
60
+ "id1",
61
+ ""hello"",
62
+ ""hello"",
63
+ ],
64
+ "sql": "INSERT INTO 'test' (id, value) VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET value = ?",
65
+ "writeTables": Set {
66
+ "test",
67
+ },
68
+ }
69
+ `)
70
+ })
71
+
72
+ test('struct value (partial set=true)', () => {
73
+ expect(forSchema(Schema.Struct({ a: Schema.String }), { a: 'hello' }, 'id1', { partialSet: true }))
74
+ .toMatchInlineSnapshot(`
75
+ {
76
+ "bindValues": [
77
+ "id1",
78
+ "{"a":"hello"}",
79
+ "$.a",
80
+ ""hello"",
81
+ ],
82
+ "sql": "
83
+ INSERT INTO 'test' (id, value)
84
+ VALUES (?, ?)
85
+ ON CONFLICT (id) DO UPDATE SET value = json_set(value, ?, json(?))
86
+ ",
87
+ "writeTables": Set {
88
+ "test",
89
+ },
90
+ }
91
+ `)
92
+ })
93
+
94
+ test('struct value (partial set=false)', () => {
95
+ expect(forSchema(Schema.Struct({ a: Schema.String }), { a: 'hello' }, 'id1', { partialSet: false }))
96
+ .toMatchInlineSnapshot(`
97
+ {
98
+ "bindValues": [
99
+ "id1",
100
+ "{"a":"hello"}",
101
+ "{"a":"hello"}",
102
+ ],
103
+ "sql": "INSERT INTO 'test' (id, value) VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET value = ?",
104
+ "writeTables": Set {
105
+ "test",
106
+ },
107
+ }
108
+ `)
109
+ })
110
+
111
+ test('struct value (partial set=true) advanced', () => {
112
+ expect(
113
+ forSchema(
114
+ Schema.Struct({ a: Schema.String, b: Schema.String, c: Schema.Number }),
115
+ { a: 'hello', c: 123 } as any,
116
+ 'id1',
117
+ { partialSet: true },
118
+ ),
119
+ ).toMatchInlineSnapshot(`
120
+ {
121
+ "bindValues": [
122
+ "id1",
123
+ "{"a":"hello","c":123}",
124
+ "$.a",
125
+ ""hello"",
126
+ "$.c",
127
+ "123",
128
+ ],
129
+ "sql": "
130
+ INSERT INTO 'test' (id, value)
131
+ VALUES (?, ?)
132
+ ON CONFLICT (id) DO UPDATE SET value = json_set(json_set(value, ?, json(?)), ?, json(?))
133
+ ",
134
+ "writeTables": Set {
135
+ "test",
136
+ },
137
+ }
138
+ `)
139
+ })
140
+
141
+ test('struct value (partial set=true), explicit undefined, filter out undefined values', () => {
142
+ expect(
143
+ forSchema(
144
+ Schema.Struct({ a: Schema.String.pipe(Schema.optional), b: Schema.String }),
145
+ { a: undefined, b: 'hello' },
146
+ 'id1',
147
+ {
148
+ partialSet: true,
149
+ },
150
+ ),
151
+ ).toMatchInlineSnapshot(`
152
+ {
153
+ "bindValues": [
154
+ "id1",
155
+ "{"b":"hello"}",
156
+ "$.b",
157
+ ""hello"",
158
+ ],
159
+ "sql": "
160
+ INSERT INTO 'test' (id, value)
161
+ VALUES (?, ?)
162
+ ON CONFLICT (id) DO UPDATE SET value = json_set(value, ?, json(?))
163
+ ",
164
+ "writeTables": Set {
165
+ "test",
166
+ },
167
+ }
168
+ `)
169
+ })
170
+
171
+ test('struct value (partial set=true), explicit undefined, nothing to update', () => {
172
+ expect(
173
+ forSchema(Schema.Struct({ a: Schema.String.pipe(Schema.optional) }), { a: undefined }, 'id1', {
174
+ partialSet: true,
175
+ }),
176
+ ).toMatchInlineSnapshot(`
177
+ {
178
+ "bindValues": [
179
+ "id1",
180
+ "{}",
181
+ ],
182
+ "sql": "
183
+ INSERT INTO 'test' (id, value)
184
+ VALUES (?, ?)
185
+ ON CONFLICT (id) DO NOTHING
186
+ ",
187
+ "writeTables": Set {
188
+ "test",
189
+ },
190
+ }
191
+ `)
192
+ })
193
+
194
+ test('struct union value', () => {
195
+ expect(
196
+ forSchema(
197
+ Schema.Union(Schema.Struct({ a: Schema.String }), Schema.Struct({ b: Schema.String })),
198
+ { a: 'hello' },
199
+ 'id1',
200
+ ),
201
+ ).toMatchInlineSnapshot(`
202
+ {
203
+ "bindValues": [
204
+ "id1",
205
+ "{"a":"hello"}",
206
+ "{"a":"hello"}",
207
+ ],
208
+ "sql": "INSERT INTO 'test' (id, value) VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET value = ?",
209
+ "writeTables": Set {
210
+ "test",
211
+ },
212
+ }
213
+ `)
214
+ })
215
+
216
+ test('array value', () => {
217
+ expect(forSchema(Schema.Array(Schema.String), ['hello', 'world'], 'id1')).toMatchInlineSnapshot(`
218
+ {
219
+ "bindValues": [
220
+ "id1",
221
+ "["hello","world"]",
222
+ "["hello","world"]",
223
+ ],
224
+ "sql": "INSERT INTO 'test' (id, value) VALUES (?, ?) ON CONFLICT (id) DO UPDATE SET value = ?",
225
+ "writeTables": Set {
226
+ "test",
227
+ },
228
+ }
229
+ `)
230
+ })
231
+ })
232
+ })
233
+
234
+ const patchId = (muationEvent: LiveStoreEvent.PartialAnyDecoded) => {
235
+ // TODO use new id paradigm
236
+ const id = `00000000-0000-0000-0000-000000000000`
237
+ return { ...muationEvent, id }
238
+ }