@livestore/common 0.3.0-dev.4 → 0.3.0-dev.40

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 (470) 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 +132 -75
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +36 -7
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts.map +1 -1
  11. package/dist/debug-info.d.ts +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +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 -592
  28. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  29. package/dist/devtools/devtools-messages.js +3 -171
  30. package/dist/devtools/devtools-messages.js.map +1 -1
  31. package/dist/devtools/devtools-sessioninfo.d.ts +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 -13
  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 +62 -0
  44. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
  45. package/dist/leader-thread/LeaderSyncProcessor.js +593 -0
  46. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
  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 +1 -1
  56. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  57. package/dist/leader-thread/leader-worker-devtools.js +165 -134
  58. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  59. package/dist/leader-thread/make-leader-thread-layer.d.ts +26 -12
  60. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  61. package/dist/leader-thread/make-leader-thread-layer.js +76 -48
  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 +105 -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 +33 -31
  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 +89 -40
  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 +21 -0
  84. package/dist/make-client-session.d.ts.map +1 -0
  85. package/dist/make-client-session.js +51 -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 +84 -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/EventId.d.ts +35 -15
  104. package/dist/schema/EventId.d.ts.map +1 -1
  105. package/dist/schema/EventId.js +57 -11
  106. package/dist/schema/EventId.js.map +1 -1
  107. package/dist/schema/EventId.test.d.ts +2 -0
  108. package/dist/schema/EventId.test.d.ts.map +1 -0
  109. package/dist/schema/EventId.test.js +11 -0
  110. package/dist/schema/EventId.test.js.map +1 -0
  111. package/dist/schema/LiveStoreEvent.d.ts +255 -0
  112. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  113. package/dist/schema/LiveStoreEvent.js +118 -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 +7 -5
  120. package/dist/schema/mod.d.ts.map +1 -1
  121. package/dist/schema/mod.js +7 -5
  122. package/dist/schema/mod.js.map +1 -1
  123. package/dist/schema/schema.d.ts +48 -30
  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 +554 -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 +87 -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 +33 -24
  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 +66 -0
  224. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
  225. package/dist/sync/ClientSessionSyncProcessor.js +209 -0
  226. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -0
  227. package/dist/sync/index.d.ts +1 -1
  228. package/dist/sync/index.d.ts.map +1 -1
  229. package/dist/sync/index.js +1 -1
  230. package/dist/sync/index.js.map +1 -1
  231. package/dist/sync/next/compact-events.d.ts.map +1 -1
  232. package/dist/sync/next/facts.d.ts +19 -19
  233. package/dist/sync/next/facts.d.ts.map +1 -1
  234. package/dist/sync/next/facts.js +3 -3
  235. package/dist/sync/next/facts.js.map +1 -1
  236. package/dist/sync/next/history-dag-common.d.ts +6 -7
  237. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  238. package/dist/sync/next/history-dag-common.js +4 -2
  239. package/dist/sync/next/history-dag-common.js.map +1 -1
  240. package/dist/sync/next/history-dag.d.ts.map +1 -1
  241. package/dist/sync/next/history-dag.js +2 -2
  242. package/dist/sync/next/history-dag.js.map +1 -1
  243. package/dist/sync/next/rebase-events.d.ts +10 -8
  244. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  245. package/dist/sync/next/rebase-events.js +11 -8
  246. package/dist/sync/next/rebase-events.js.map +1 -1
  247. package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
  248. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  249. package/dist/sync/next/test/compact-events.test.js +76 -76
  250. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  251. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +25 -25
  252. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  253. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +67 -36
  254. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  255. package/dist/sync/next/test/mod.d.ts +1 -1
  256. package/dist/sync/next/test/mod.d.ts.map +1 -1
  257. package/dist/sync/next/test/mod.js +1 -1
  258. package/dist/sync/next/test/mod.js.map +1 -1
  259. package/dist/sync/sync.d.ts +55 -20
  260. package/dist/sync/sync.d.ts.map +1 -1
  261. package/dist/sync/sync.js +7 -3
  262. package/dist/sync/sync.js.map +1 -1
  263. package/dist/sync/syncstate.d.ts +213 -82
  264. package/dist/sync/syncstate.d.ts.map +1 -1
  265. package/dist/sync/syncstate.js +319 -120
  266. package/dist/sync/syncstate.js.map +1 -1
  267. package/dist/sync/syncstate.test.js +295 -275
  268. package/dist/sync/syncstate.test.js.map +1 -1
  269. package/dist/sync/validate-push-payload.d.ts +2 -2
  270. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  271. package/dist/sync/validate-push-payload.js +2 -2
  272. package/dist/sync/validate-push-payload.js.map +1 -1
  273. package/dist/util.d.ts +2 -2
  274. package/dist/util.d.ts.map +1 -1
  275. package/dist/version.d.ts +1 -1
  276. package/dist/version.d.ts.map +1 -1
  277. package/dist/version.js +1 -1
  278. package/dist/version.js.map +1 -1
  279. package/package.json +13 -6
  280. package/src/__tests__/fixture.ts +36 -15
  281. package/src/adapter-types.ts +116 -83
  282. package/src/debug-info.ts +1 -0
  283. package/src/devtools/devtools-messages-client-session.ts +142 -0
  284. package/src/devtools/devtools-messages-common.ts +115 -0
  285. package/src/devtools/devtools-messages-leader.ts +191 -0
  286. package/src/devtools/devtools-messages.ts +3 -243
  287. package/src/devtools/devtools-sessioninfo.ts +101 -0
  288. package/src/devtools/mod.ts +59 -0
  289. package/src/index.ts +7 -15
  290. package/src/leader-thread/LeaderSyncProcessor.ts +933 -0
  291. package/src/leader-thread/connection.ts +54 -9
  292. package/src/leader-thread/eventlog.ts +194 -0
  293. package/src/leader-thread/leader-worker-devtools.ts +235 -191
  294. package/src/leader-thread/make-leader-thread-layer.ts +138 -78
  295. package/src/leader-thread/materialize-event.ts +169 -0
  296. package/src/leader-thread/mod.ts +1 -1
  297. package/src/leader-thread/recreate-db.ts +38 -39
  298. package/src/leader-thread/shutdown-channel.ts +2 -4
  299. package/src/leader-thread/types.ts +98 -53
  300. package/src/make-client-session.ts +119 -0
  301. package/src/materializer-helper.ts +135 -0
  302. package/src/otel.ts +8 -0
  303. package/src/rematerialize-from-eventlog.ts +117 -0
  304. package/src/schema/EventDef.ts +227 -0
  305. package/src/schema/EventId.test.ts +12 -0
  306. package/src/schema/EventId.ts +75 -15
  307. package/src/schema/LiveStoreEvent.ts +239 -0
  308. package/src/schema/events.ts +1 -0
  309. package/src/schema/mod.ts +7 -5
  310. package/src/schema/schema.ts +85 -81
  311. package/src/schema/state/mod.ts +2 -0
  312. package/src/schema/state/sqlite/client-document-def.test.ts +238 -0
  313. package/src/schema/state/sqlite/client-document-def.ts +444 -0
  314. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +142 -0
  315. package/src/schema/state/sqlite/db-schema/ast/validate.ts +13 -0
  316. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
  317. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -0
  318. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +242 -0
  319. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +222 -0
  320. package/src/schema/state/sqlite/db-schema/hash.ts +14 -0
  321. package/src/schema/state/sqlite/db-schema/mod.ts +2 -0
  322. package/src/schema/state/sqlite/mod.ts +73 -0
  323. package/src/schema/state/sqlite/query-builder/api.ts +440 -0
  324. package/src/schema/state/sqlite/query-builder/astToSql.ts +232 -0
  325. package/src/schema/state/sqlite/query-builder/impl.test.ts +608 -0
  326. package/src/schema/state/sqlite/query-builder/impl.ts +350 -0
  327. package/src/{query-builder → schema/state/sqlite/query-builder}/mod.ts +7 -0
  328. package/src/schema/{schema-helpers.ts → state/sqlite/schema-helpers.ts} +1 -1
  329. package/src/schema/state/sqlite/system-tables.ts +116 -0
  330. package/src/schema/state/sqlite/table-def.ts +197 -0
  331. package/src/schema-management/common.ts +7 -7
  332. package/src/schema-management/migrations.ts +43 -37
  333. package/src/schema-management/validate-schema.ts +61 -0
  334. package/src/sql-queries/sql-queries.ts +1 -1
  335. package/src/sql-queries/sql-query-builder.ts +1 -2
  336. package/src/sql-queries/types.ts +3 -1
  337. package/src/sync/ClientSessionSyncProcessor.ts +332 -0
  338. package/src/sync/index.ts +1 -1
  339. package/src/sync/next/facts.ts +32 -33
  340. package/src/sync/next/history-dag-common.ts +9 -5
  341. package/src/sync/next/history-dag.ts +2 -2
  342. package/src/sync/next/rebase-events.ts +22 -16
  343. package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
  344. package/src/sync/next/test/compact-events.test.ts +78 -78
  345. package/src/sync/next/test/event-fixtures.ts +219 -0
  346. package/src/sync/next/test/mod.ts +1 -1
  347. package/src/sync/sync.ts +51 -19
  348. package/src/sync/syncstate.test.ts +335 -308
  349. package/src/sync/syncstate.ts +394 -212
  350. package/src/sync/validate-push-payload.ts +7 -4
  351. package/src/version.ts +1 -1
  352. package/dist/derived-mutations.d.ts +0 -109
  353. package/dist/derived-mutations.d.ts.map +0 -1
  354. package/dist/derived-mutations.js +0 -54
  355. package/dist/derived-mutations.js.map +0 -1
  356. package/dist/derived-mutations.test.d.ts +0 -2
  357. package/dist/derived-mutations.test.d.ts.map +0 -1
  358. package/dist/derived-mutations.test.js +0 -93
  359. package/dist/derived-mutations.test.js.map +0 -1
  360. package/dist/devtools/devtools-bridge.d.ts +0 -12
  361. package/dist/devtools/devtools-bridge.d.ts.map +0 -1
  362. package/dist/devtools/devtools-bridge.js +0 -2
  363. package/dist/devtools/devtools-bridge.js.map +0 -1
  364. package/dist/devtools/devtools-window-message.d.ts +0 -29
  365. package/dist/devtools/devtools-window-message.d.ts.map +0 -1
  366. package/dist/devtools/devtools-window-message.js +0 -33
  367. package/dist/devtools/devtools-window-message.js.map +0 -1
  368. package/dist/devtools/index.d.ts +0 -42
  369. package/dist/devtools/index.d.ts.map +0 -1
  370. package/dist/devtools/index.js +0 -48
  371. package/dist/devtools/index.js.map +0 -1
  372. package/dist/init-singleton-tables.d.ts +0 -4
  373. package/dist/init-singleton-tables.d.ts.map +0 -1
  374. package/dist/init-singleton-tables.js +0 -16
  375. package/dist/init-singleton-tables.js.map +0 -1
  376. package/dist/leader-thread/apply-mutation.d.ts +0 -8
  377. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  378. package/dist/leader-thread/apply-mutation.js +0 -95
  379. package/dist/leader-thread/apply-mutation.js.map +0 -1
  380. package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
  381. package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
  382. package/dist/leader-thread/leader-sync-processor.js +0 -422
  383. package/dist/leader-thread/leader-sync-processor.js.map +0 -1
  384. package/dist/leader-thread/mutationlog.d.ts +0 -23
  385. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  386. package/dist/leader-thread/mutationlog.js +0 -27
  387. package/dist/leader-thread/mutationlog.js.map +0 -1
  388. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  389. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  390. package/dist/leader-thread/pull-queue-set.js +0 -39
  391. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  392. package/dist/mutation.d.ts +0 -13
  393. package/dist/mutation.d.ts.map +0 -1
  394. package/dist/mutation.js +0 -57
  395. package/dist/mutation.js.map +0 -1
  396. package/dist/query-builder/api.d.ts +0 -190
  397. package/dist/query-builder/api.d.ts.map +0 -1
  398. package/dist/query-builder/api.js +0 -8
  399. package/dist/query-builder/api.js.map +0 -1
  400. package/dist/query-builder/impl.d.ts +0 -12
  401. package/dist/query-builder/impl.d.ts.map +0 -1
  402. package/dist/query-builder/impl.js +0 -244
  403. package/dist/query-builder/impl.js.map +0 -1
  404. package/dist/query-builder/impl.test.d.ts +0 -2
  405. package/dist/query-builder/impl.test.d.ts.map +0 -1
  406. package/dist/query-builder/impl.test.js +0 -212
  407. package/dist/query-builder/impl.test.js.map +0 -1
  408. package/dist/query-builder/mod.d.ts.map +0 -1
  409. package/dist/query-builder/mod.js.map +0 -1
  410. package/dist/query-info.d.ts +0 -38
  411. package/dist/query-info.d.ts.map +0 -1
  412. package/dist/query-info.js +0 -7
  413. package/dist/query-info.js.map +0 -1
  414. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  415. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  416. package/dist/rehydrate-from-mutationlog.js +0 -72
  417. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  418. package/dist/schema/MutationEvent.d.ts +0 -191
  419. package/dist/schema/MutationEvent.d.ts.map +0 -1
  420. package/dist/schema/MutationEvent.js +0 -56
  421. package/dist/schema/MutationEvent.js.map +0 -1
  422. package/dist/schema/mutations.d.ts +0 -107
  423. package/dist/schema/mutations.d.ts.map +0 -1
  424. package/dist/schema/mutations.js +0 -42
  425. package/dist/schema/mutations.js.map +0 -1
  426. package/dist/schema/schema-helpers.d.ts.map +0 -1
  427. package/dist/schema/schema-helpers.js.map +0 -1
  428. package/dist/schema/system-tables.d.ts +0 -399
  429. package/dist/schema/system-tables.d.ts.map +0 -1
  430. package/dist/schema/system-tables.js +0 -51
  431. package/dist/schema/system-tables.js.map +0 -1
  432. package/dist/schema/table-def.d.ts +0 -156
  433. package/dist/schema/table-def.d.ts.map +0 -1
  434. package/dist/schema/table-def.js +0 -79
  435. package/dist/schema/table-def.js.map +0 -1
  436. package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
  437. package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
  438. package/dist/schema-management/validate-mutation-defs.js +0 -39
  439. package/dist/schema-management/validate-mutation-defs.js.map +0 -1
  440. package/dist/sync/client-session-sync-processor.d.ts +0 -45
  441. package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
  442. package/dist/sync/client-session-sync-processor.js +0 -131
  443. package/dist/sync/client-session-sync-processor.js.map +0 -1
  444. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  445. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  446. package/src/derived-mutations.test.ts +0 -101
  447. package/src/derived-mutations.ts +0 -166
  448. package/src/devtools/devtools-bridge.ts +0 -13
  449. package/src/devtools/devtools-window-message.ts +0 -27
  450. package/src/devtools/index.ts +0 -48
  451. package/src/init-singleton-tables.ts +0 -24
  452. package/src/leader-thread/apply-mutation.ts +0 -143
  453. package/src/leader-thread/leader-sync-processor.ts +0 -666
  454. package/src/leader-thread/mutationlog.ts +0 -42
  455. package/src/leader-thread/pull-queue-set.ts +0 -58
  456. package/src/mutation.ts +0 -81
  457. package/src/query-builder/api.ts +0 -289
  458. package/src/query-builder/impl.test.ts +0 -239
  459. package/src/query-builder/impl.ts +0 -285
  460. package/src/query-info.ts +0 -78
  461. package/src/rehydrate-from-mutationlog.ts +0 -127
  462. package/src/schema/MutationEvent.ts +0 -161
  463. package/src/schema/mutations.ts +0 -192
  464. package/src/schema/system-tables.ts +0 -97
  465. package/src/schema/table-def.ts +0 -343
  466. package/src/schema-management/validate-mutation-defs.ts +0 -63
  467. package/src/sync/client-session-sync-processor.ts +0 -207
  468. package/src/sync/next/test/mutation-fixtures.ts +0 -231
  469. package/tsconfig.json +0 -11
  470. /package/dist/schema/{schema-helpers.d.ts → state/sqlite/schema-helpers.d.ts} +0 -0
@@ -1,42 +0,0 @@
1
- import { Effect, Schema } from '@livestore/utils/effect'
2
-
3
- import type { SynchronousDatabase } from '../adapter-types.js'
4
- import * as EventId from '../schema/EventId.js'
5
- import { MUTATION_LOG_META_TABLE, mutationLogMetaTable, SYNC_STATUS_TABLE } from '../schema/system-tables.js'
6
- import { prepareBindValues, sql } from '../util.js'
7
- import { LeaderThreadCtx } from './types.js'
8
-
9
- export const getMutationEventsSince = (since: EventId.EventId) =>
10
- Effect.gen(function* () {
11
- const { dbLog } = yield* LeaderThreadCtx
12
-
13
- const query = mutationLogMetaTable.query.where('idGlobal', '>=', since.global).asSql()
14
- const pendingMutationEventsRaw = dbLog.select(query.query, prepareBindValues(query.bindValues, query.query))
15
- const pendingMutationEvents = Schema.decodeUnknownSync(mutationLogMetaTable.schema.pipe(Schema.Array))(
16
- pendingMutationEventsRaw,
17
- )
18
-
19
- return pendingMutationEvents
20
- .map((_) => ({
21
- mutation: _.mutation,
22
- args: _.argsJson,
23
- id: { global: _.idGlobal, local: _.idLocal },
24
- parentId: { global: _.parentIdGlobal, local: _.parentIdLocal },
25
- }))
26
- .filter((_) => EventId.compare(_.id, since) > 0)
27
- })
28
-
29
- export const getLocalHeadFromDb = (dbLog: SynchronousDatabase) => {
30
- const res = dbLog.select<{ idGlobal: number; idLocal: number }>(
31
- sql`select idGlobal, idLocal from ${MUTATION_LOG_META_TABLE} order by idGlobal DESC, idLocal DESC limit 1`,
32
- )[0]
33
-
34
- return res ? { global: res.idGlobal, local: res.idLocal } : EventId.ROOT
35
- }
36
-
37
- export const getBackendHeadFromDb = (dbLog: SynchronousDatabase) =>
38
- dbLog.select<{ head: number }>(sql`select head from ${SYNC_STATUS_TABLE}`)[0]?.head ?? EventId.ROOT.global
39
-
40
- // TODO use prepared statements
41
- export const updateBackendHead = (dbLog: SynchronousDatabase, head: EventId.EventId) =>
42
- dbLog.execute(sql`UPDATE ${SYNC_STATUS_TABLE} SET head = ${head.global}`)
@@ -1,58 +0,0 @@
1
- import { Effect, Queue } from '@livestore/utils/effect'
2
-
3
- import * as MutationEvent from '../schema/MutationEvent.js'
4
- import { getMutationEventsSince } from './mutationlog.js'
5
- import { type PullQueueItem, type PullQueueSet } from './types.js'
6
-
7
- export const makePullQueueSet = Effect.gen(function* () {
8
- const set = new Set<Queue.Queue<PullQueueItem>>()
9
-
10
- yield* Effect.addFinalizer(() =>
11
- Effect.gen(function* () {
12
- for (const queue of set) {
13
- yield* Queue.shutdown(queue)
14
- }
15
-
16
- set.clear()
17
- }),
18
- )
19
-
20
- const makeQueue: PullQueueSet['makeQueue'] = (since) =>
21
- Effect.gen(function* () {
22
- const queue = yield* Queue.unbounded<PullQueueItem>().pipe(Effect.acquireRelease(Queue.shutdown))
23
-
24
- yield* Effect.addFinalizer(() => Effect.sync(() => set.delete(queue)))
25
-
26
- const mutationEvents = yield* getMutationEventsSince(since)
27
-
28
- if (mutationEvents.length > 0) {
29
- const newEvents = mutationEvents.map((mutationEvent) => new MutationEvent.EncodedWithMeta(mutationEvent))
30
- yield* queue.offer({ payload: { _tag: 'upstream-advance', newEvents }, remaining: 0 })
31
- }
32
-
33
- set.add(queue)
34
-
35
- return queue
36
- })
37
-
38
- const offer: PullQueueSet['offer'] = (item) =>
39
- Effect.gen(function* () {
40
- // Short-circuit if the payload is an empty upstream advance
41
- if (
42
- item.payload._tag === 'upstream-advance' &&
43
- item.payload.newEvents.length === 0 &&
44
- item.payload.trimRollbackUntil === undefined
45
- ) {
46
- return
47
- }
48
-
49
- for (const queue of set) {
50
- yield* Queue.offer(queue, item)
51
- }
52
- })
53
-
54
- return {
55
- makeQueue,
56
- offer,
57
- }
58
- })
package/src/mutation.ts DELETED
@@ -1,81 +0,0 @@
1
- import { Schema } from '@livestore/utils/effect'
2
-
3
- import { SessionIdSymbol } from './adapter-types.js'
4
- import type * as MutationEvent from './schema/MutationEvent.js'
5
- import type { MutationDef } from './schema/mutations.js'
6
- import type { PreparedBindValues } from './util.js'
7
- import { prepareBindValues } from './util.js'
8
-
9
- export const getExecArgsFromMutation = ({
10
- mutationDef,
11
- mutationEventDecoded,
12
- }: {
13
- mutationDef: MutationDef.Any
14
- mutationEventDecoded: MutationEvent.Any | MutationEvent.PartialAny
15
- }): ReadonlyArray<{
16
- statementSql: string
17
- bindValues: PreparedBindValues
18
- writeTables: ReadonlySet<string> | undefined
19
- }> => {
20
- let statementRes: ReadonlyArray<
21
- string | { sql: string; bindValues: Record<string, unknown>; writeTables?: ReadonlySet<string> }
22
- >
23
-
24
- switch (typeof mutationDef.sql) {
25
- case 'function': {
26
- const res = mutationDef.sql(mutationEventDecoded.args)
27
- statementRes = Array.isArray(res) ? res : [res]
28
- break
29
- }
30
- case 'string': {
31
- statementRes = [mutationDef.sql]
32
- break
33
- }
34
- default: {
35
- statementRes = mutationDef.sql
36
- break
37
- }
38
- }
39
-
40
- return statementRes.map((statementRes) => {
41
- const statementSql = typeof statementRes === 'string' ? statementRes : statementRes.sql
42
-
43
- const bindValues =
44
- typeof statementRes === 'string'
45
- ? Schema.encodeUnknownSync(mutationDef.schema)(mutationEventDecoded.args)
46
- : statementRes.bindValues
47
-
48
- const writeTables = typeof statementRes === 'string' ? undefined : statementRes.writeTables
49
-
50
- return { statementSql, bindValues: prepareBindValues(bindValues ?? {}, statementSql), writeTables }
51
- })
52
- }
53
-
54
- // NOTE we should explore whether there is a more elegant solution
55
- // e.g. by leveraging the schema to replace the sessionIdSymbol
56
- export const replaceSessionIdSymbol = (
57
- bindValues: Record<string, unknown> | ReadonlyArray<unknown>,
58
- sessionId: string,
59
- ) => {
60
- deepReplaceValue(bindValues, SessionIdSymbol, sessionId)
61
- }
62
-
63
- const deepReplaceValue = <S, R>(input: any, searchValue: S, replaceValue: R): void => {
64
- if (Array.isArray(input)) {
65
- for (const i in input) {
66
- if (input[i] === searchValue) {
67
- input[i] = replaceValue
68
- } else {
69
- deepReplaceValue(input[i], searchValue, replaceValue)
70
- }
71
- }
72
- } else if (typeof input === 'object' && input !== null) {
73
- for (const key in input) {
74
- if (input[key] === searchValue) {
75
- input[key] = replaceValue
76
- } else {
77
- deepReplaceValue(input[key], searchValue, replaceValue)
78
- }
79
- }
80
- }
81
- }
@@ -1,289 +0,0 @@
1
- import type { GetValForKey } from '@livestore/utils'
2
- import { type Option, Predicate, type Schema } from '@livestore/utils/effect'
3
-
4
- import type { SessionIdSymbol } from '../adapter-types.js'
5
- import type { QueryInfo } from '../query-info.js'
6
- import type { DbSchema } from '../schema/mod.js'
7
- import type { SqliteDsl } from '../schema/table-def.js'
8
- import type { SqlValue } from '../util.js'
9
-
10
- export type QueryBuilderAst = QueryBuilderAst.SelectQuery | QueryBuilderAst.CountQuery | QueryBuilderAst.RowQuery
11
-
12
- export namespace QueryBuilderAst {
13
- export type SelectQuery = {
14
- readonly _tag: 'SelectQuery'
15
- readonly columns: string[]
16
- readonly pickFirst: false | { fallback: () => any }
17
- readonly select: {
18
- columns: ReadonlyArray<string>
19
- }
20
- readonly orderBy: ReadonlyArray<OrderBy>
21
- readonly offset: Option.Option<number>
22
- readonly limit: Option.Option<number>
23
- readonly tableDef: DbSchema.TableDefBase
24
- readonly where: ReadonlyArray<QueryBuilderAst.Where>
25
- readonly resultSchemaSingle: Schema.Schema<any>
26
- }
27
-
28
- export type CountQuery = {
29
- readonly _tag: 'CountQuery'
30
- readonly tableDef: DbSchema.TableDefBase
31
- readonly where: ReadonlyArray<QueryBuilderAst.Where>
32
- readonly resultSchema: Schema.Schema<number, ReadonlyArray<{ count: number }>>
33
- }
34
-
35
- export type RowQuery = {
36
- readonly _tag: 'RowQuery'
37
- readonly tableDef: DbSchema.TableDefBase
38
- readonly id: string | SessionIdSymbol
39
- readonly insertValues: Record<string, unknown>
40
- }
41
-
42
- export type Where = {
43
- readonly col: string
44
- readonly op: QueryBuilder.WhereOps
45
- readonly value: unknown
46
- }
47
-
48
- export type OrderBy = {
49
- readonly col: string
50
- readonly direction: 'asc' | 'desc'
51
- }
52
- }
53
-
54
- export const QueryBuilderAstSymbol = Symbol.for('QueryBuilderAst')
55
- export type QueryBuilderAstSymbol = typeof QueryBuilderAstSymbol
56
- export const TypeId = Symbol.for('QueryBuilder')
57
- export type TypeId = typeof TypeId
58
-
59
- export const isQueryBuilder = (value: unknown): value is QueryBuilder<any, any, any> =>
60
- Predicate.hasProperty(value, TypeId)
61
-
62
- export type QueryBuilder<
63
- TResult,
64
- TTableDef extends DbSchema.TableDefBase,
65
- /** Used to gradually remove features from the API based on the query context */
66
- TWithout extends QueryBuilder.ApiFeature = never,
67
- TQueryInfo extends QueryInfo = QueryInfo.None,
68
- > = {
69
- readonly [TypeId]: TypeId
70
- readonly [QueryBuilderAstSymbol]: QueryBuilderAst
71
- readonly asSql: () => { query: string; bindValues: SqlValue[] }
72
- readonly toString: () => string
73
- } & Omit<QueryBuilder.ApiFull<TResult, TTableDef, TWithout, TQueryInfo>, TWithout>
74
-
75
- export namespace QueryBuilder {
76
- export type Any = QueryBuilder<any, any, any, any>
77
- export type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In
78
-
79
- export namespace WhereOps {
80
- export type Equality = '=' | '!='
81
- export type Order = '<' | '>' | '<=' | '>='
82
- export type Like = 'LIKE' | 'NOT LIKE' | 'ILIKE' | 'NOT ILIKE'
83
- export type In = 'IN' | 'NOT IN'
84
-
85
- export type SingleValue = Equality | Order | Like
86
- export type MultiValue = In
87
- }
88
-
89
- export type ApiFeature = 'select' | 'where' | 'count' | 'orderBy' | 'offset' | 'limit' | 'first' | 'row'
90
-
91
- export type WhereParams<TTableDef extends DbSchema.TableDefBase> = Partial<{
92
- [K in keyof TTableDef['sqliteDef']['columns']]:
93
- | TTableDef['sqliteDef']['columns'][K]['schema']['Type']
94
- | { op: QueryBuilder.WhereOps.SingleValue; value: TTableDef['sqliteDef']['columns'][K]['schema']['Type'] }
95
- | {
96
- op: QueryBuilder.WhereOps.MultiValue
97
- value: ReadonlyArray<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>
98
- }
99
- | undefined
100
- }>
101
-
102
- export type OrderByParams<TTableDef extends DbSchema.TableDefBase> = ReadonlyArray<{
103
- col: keyof TTableDef['sqliteDef']['columns'] & string
104
- direction: 'asc' | 'desc'
105
- }>
106
-
107
- export type ApiFull<
108
- TResult,
109
- TTableDef extends DbSchema.TableDefBase,
110
- TWithout extends ApiFeature,
111
- TQueryInfo extends QueryInfo,
112
- > = {
113
- /**
114
- * `SELECT *` is the default
115
- *
116
- * Example:
117
- * ```ts
118
- * db.todos.select('id', 'text', 'completed')
119
- * db.todos.select('id', { pluck: true })
120
- * ```
121
- */
122
- readonly select: {
123
- <TColumn extends keyof TTableDef['sqliteDef']['columns'] & string, TPluck extends boolean = false>(
124
- column: TColumn,
125
- options?: { pluck: TPluck },
126
- ): QueryBuilder<
127
- TPluck extends true
128
- ? ReadonlyArray<TTableDef['sqliteDef']['columns'][TColumn]['schema']['Type']>
129
- : ReadonlyArray<{
130
- readonly [K in TColumn]: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
131
- }>,
132
- TTableDef,
133
- TWithout | 'row' | 'select',
134
- TQueryInfo
135
- >
136
- <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(
137
- ...columns: TColumns[]
138
- // TODO also support arbitrary SQL selects
139
- // params: QueryBuilderSelectParams,
140
- ): QueryBuilder<
141
- ReadonlyArray<{
142
- readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
143
- }>,
144
- TTableDef,
145
- TWithout | 'row' | 'select' | 'count',
146
- TQueryInfo
147
- >
148
- }
149
-
150
- /**
151
- * Notes:
152
- * - All where clauses are `AND`ed together by default.
153
- * - `null` values only support `=` and `!=` which is translated to `IS NULL` and `IS NOT NULL`.
154
- *
155
- * Example:
156
- * ```ts
157
- * db.todos.where('completed', true)
158
- * db.todos.where('completed', '!=', true)
159
- * db.todos.where({ completed: true })
160
- * db.todos.where({ completed: { op: '!=', value: true } })
161
- * ```
162
- *
163
- * TODO: Also support `OR`
164
- */
165
- readonly where: {
166
- <TParams extends QueryBuilder.WhereParams<TTableDef>>(
167
- params: TParams,
168
- ): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select', TQueryInfo>
169
- <TColName extends keyof TTableDef['sqliteDef']['columns']>(
170
- col: TColName,
171
- value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type'],
172
- ): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select', TQueryInfo>
173
- <TColName extends keyof TTableDef['sqliteDef']['columns']>(
174
- col: TColName,
175
- op: QueryBuilder.WhereOps,
176
- value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type'],
177
- ): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select', TQueryInfo>
178
- }
179
-
180
- /**
181
- * Example:
182
- * ```ts
183
- * db.todos.count()
184
- * db.todos.count().where('completed', true)
185
- * ```
186
- */
187
- readonly count: () => QueryBuilder<
188
- number,
189
- TTableDef,
190
- TWithout | 'row' | 'count' | 'select' | 'orderBy' | 'first' | 'offset' | 'limit',
191
- TQueryInfo
192
- >
193
-
194
- /**
195
- * Example:
196
- * ```ts
197
- * db.todos.orderBy('createdAt', 'desc')
198
- * ```
199
- */
200
- readonly orderBy: {
201
- <TColName extends keyof TTableDef['sqliteDef']['columns'] & string>(
202
- col: TColName,
203
- direction: 'asc' | 'desc',
204
- ): QueryBuilder<TResult, TTableDef, TWithout, TQueryInfo>
205
- <TParams extends QueryBuilder.OrderByParams<TTableDef>>(
206
- params: TParams,
207
- ): QueryBuilder<TResult, TTableDef, TWithout, TQueryInfo>
208
- }
209
-
210
- /**
211
- * Example:
212
- * ```ts
213
- * db.todos.offset(10)
214
- * ```
215
- */
216
- readonly offset: (
217
- offset: number,
218
- ) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'offset' | 'orderBy', TQueryInfo>
219
-
220
- /**
221
- * Example:
222
- * ```ts
223
- * db.todos.limit(10)
224
- * ```
225
- */
226
- readonly limit: (
227
- limit: number,
228
- ) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'limit' | 'offset' | 'first' | 'orderBy', TQueryInfo>
229
-
230
- /**
231
- * Example:
232
- * ```ts
233
- * db.todos.first()
234
- * ```
235
- */
236
- readonly first: <TFallback extends GetSingle<TResult> = never>(options?: {
237
- fallback?: () => TFallback
238
- }) => QueryBuilder<
239
- TFallback | GetSingle<TResult>,
240
- TTableDef,
241
- TWithout | 'row' | 'first' | 'orderBy' | 'select' | 'limit' | 'offset' | 'where',
242
- TQueryInfo
243
- >
244
-
245
- /**
246
- * Gets a single row from the table and will create it if it doesn't exist yet.
247
- */
248
- // TODO maybe call `getsert`?
249
- readonly row: TTableDef['options']['isSingleton'] extends true
250
- ? () => QueryBuilder<RowQuery.Result<TTableDef>, TTableDef, QueryBuilder.ApiFeature, QueryInfo.Row>
251
- : TTableDef['options']['deriveMutations']['enabled'] extends false
252
- ? (_: 'Error: Need to enable deriveMutations to use row()') => any
253
- : TTableDef['options']['requiredInsertColumnNames'] extends never
254
- ? (
255
- id: string | SessionIdSymbol,
256
- ) => QueryBuilder<RowQuery.Result<TTableDef>, TTableDef, QueryBuilder.ApiFeature, QueryInfo.Row>
257
- : <TOptions extends RowQuery.RequiredColumnsOptions<TTableDef>>(
258
- id: string | SessionIdSymbol,
259
- opts: TOptions,
260
- ) => QueryBuilder<RowQuery.Result<TTableDef>, TTableDef, QueryBuilder.ApiFeature, QueryInfo.Row>
261
- }
262
- }
263
-
264
- export namespace RowQuery {
265
- export type RequiredColumnsOptions<TTableDef extends DbSchema.TableDefBase> = {
266
- /**
267
- * Values to be inserted into the row if it doesn't exist yet
268
- */
269
- insertValues: Pick<
270
- SqliteDsl.FromColumns.RowDecodedAll<TTableDef['sqliteDef']['columns']>,
271
- SqliteDsl.FromColumns.RequiredInsertColumnNames<Omit<TTableDef['sqliteDef']['columns'], 'id'>>
272
- >
273
- }
274
-
275
- export type Result<TTableDef extends DbSchema.TableDefBase> = TTableDef['options']['isSingleColumn'] extends true
276
- ? GetValForKey<SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>, 'value'>
277
- : SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>
278
-
279
- export type ResultEncoded<TTableDef extends DbSchema.TableDefBase> =
280
- TTableDef['options']['isSingleColumn'] extends true
281
- ? GetValForKey<SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>, 'value'>
282
- : SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>
283
- }
284
-
285
- type GetSingle<T> = T extends ReadonlyArray<infer U> ? U : never
286
-
287
- // export type QueryBuilderParamRef = { _tag: 'QueryBuilderParamRef' }
288
- // export type QueryBuilderSelectParams = { [key: string]: QueryBuilderSelectParam }
289
- // export type QueryBuilderSelectParam = boolean | ((ref: QueryBuilderParamRef) => QueryBuilder<any, any>)