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

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
@@ -0,0 +1,90 @@
1
+ import type { Nullable } from '@livestore/utils';
2
+ import type { Option, Types } from '@livestore/utils/effect';
3
+ import { Schema } from '@livestore/utils/effect';
4
+ import type * as SqliteAst from '../ast/sqlite.js';
5
+ import type { ColumnDefinition } from './field-defs.js';
6
+ export * from './field-defs.js';
7
+ export type DbSchema = {
8
+ [key: string]: TableDefinition<string, Columns>;
9
+ };
10
+ /** Note when using the object-notation, the object keys are ignored and not used as table names */
11
+ export type DbSchemaInput = Record<string, TableDefinition<any, any>> | ReadonlyArray<TableDefinition<any, any>>;
12
+ /**
13
+ * In case of ...
14
+ * - array: we use the table name of each array item (= table definition) as the object key
15
+ * - 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
16
+ */
17
+ export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> = TSchemaInput extends ReadonlyArray<TableDefinition<any, any>> ? {
18
+ [K in TSchemaInput[number] as K['name']]: K;
19
+ } : TSchemaInput extends Record<string, TableDefinition<any, any>> ? {
20
+ [K in keyof TSchemaInput as TSchemaInput[K]['name']]: TSchemaInput[K];
21
+ } : never;
22
+ export declare const makeDbSchema: <TDbSchemaInput extends DbSchemaInput>(schema: TDbSchemaInput) => DbSchemaFromInputSchema<TDbSchemaInput>;
23
+ export declare const table: <TTableName extends string, TColumns extends Columns, TIndexes extends Index[]>(name: TTableName, columns: TColumns, indexes?: TIndexes) => TableDefinition<TTableName, TColumns>;
24
+ export type AnyIfConstained<In, Out> = '__constrained' extends keyof In ? any : Out;
25
+ export type EmptyObjIfConstained<In> = '__constrained' extends keyof In ? {} : In;
26
+ export type StructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<AnyIfConstained<TCols, FromColumns.RowDecoded<TCols>>, AnyIfConstained<TCols, FromColumns.RowEncoded<TCols>>>;
27
+ export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<AnyIfConstained<TCols, FromColumns.InsertRowDecoded<TCols>>, AnyIfConstained<TCols, FromColumns.InsertRowEncoded<TCols>>>;
28
+ export declare const structSchemaForTable: <TTableDefinition extends TableDefinition<any, any>>(tableDef: TTableDefinition) => StructSchemaForColumns<TTableDefinition["columns"]>;
29
+ export declare const insertStructSchemaForTable: <TTableDefinition extends TableDefinition<any, any>>(tableDef: TTableDefinition) => InsertStructSchemaForColumns<TTableDefinition["columns"]>;
30
+ export type TableDefinition<TName extends string, TColumns extends Columns> = {
31
+ name: TName;
32
+ columns: TColumns;
33
+ indexes?: ReadonlyArray<Index>;
34
+ ast: SqliteAst.Table;
35
+ };
36
+ export type Columns = Record<string, ColumnDefinition<any, any>>;
37
+ export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> = TColumns extends ColumnDefinition<any, any> ? true : false;
38
+ /**
39
+ * NOTE this is only needed to avoid a TS limitation where `StructSchemaForColumns` in the default case
40
+ * results in `Record<string, any>` instead of `any`. (Thanks to Andarist for the workaround)
41
+ *
42
+ * Hopefully this can be removed in the future
43
+ */
44
+ export type ConstraintColumns = Record<string, ColumnDefinition<any, any>> & {
45
+ __constrained?: never;
46
+ };
47
+ export type Index = {
48
+ name: string;
49
+ columns: ReadonlyArray<string>;
50
+ /** @default false */
51
+ isUnique?: boolean;
52
+ };
53
+ export declare namespace FromTable {
54
+ type RowDecoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<Nullable<Pick<RowDecodedAll<TTableDefinition>, NullableColumnNames<TTableDefinition>>> & Omit<RowDecodedAll<TTableDefinition>, NullableColumnNames<TTableDefinition>>>;
55
+ type NullableColumnNames<TTableDefinition extends TableDefinition<any, any>> = FromColumns.NullableColumnNames<TTableDefinition['columns']>;
56
+ type Columns<TTableDefinition extends TableDefinition<any, any>> = {
57
+ [K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['columnType'];
58
+ };
59
+ type RowEncodeNonNullable<TTableDefinition extends TableDefinition<any, any>> = {
60
+ [K in keyof TTableDefinition['columns']]: Schema.Schema.Encoded<TTableDefinition['columns'][K]['schema']>;
61
+ };
62
+ type RowEncoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<Nullable<Pick<RowEncodeNonNullable<TTableDefinition>, NullableColumnNames<TTableDefinition>>> & Omit<RowEncodeNonNullable<TTableDefinition>, NullableColumnNames<TTableDefinition>>>;
63
+ type RowDecodedAll<TTableDefinition extends TableDefinition<any, any>> = {
64
+ [K in keyof TTableDefinition['columns']]: Schema.Schema.Type<TTableDefinition['columns'][K]['schema']>;
65
+ };
66
+ }
67
+ export declare namespace FromColumns {
68
+ type RowDecoded<TColumns extends Columns> = Types.Simplify<Nullable<Pick<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>> & Omit<RowDecodedAll<TColumns>, NullableColumnNames<TColumns>>>;
69
+ type RowDecodedAll<TColumns extends Columns> = {
70
+ readonly [K in keyof TColumns]: Schema.Schema.Type<TColumns[K]['schema']>;
71
+ };
72
+ type RowEncodedAll<TColumns extends Columns> = {
73
+ readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>;
74
+ };
75
+ type RowEncoded<TColumns extends Columns> = Types.Simplify<Nullable<Pick<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>> & Omit<RowEncodeNonNullable<TColumns>, NullableColumnNames<TColumns>>>;
76
+ type RowEncodeNonNullable<TColumns extends Columns> = {
77
+ readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>;
78
+ };
79
+ type NullableColumnNames<TColumns extends Columns> = keyof {
80
+ [K in keyof TColumns as TColumns[K] extends ColumnDefinition<any, true> ? K : never]: {};
81
+ };
82
+ type RequiredInsertColumns<TColumns extends Columns> = {
83
+ [K in keyof TColumns as TColumns[K]['nullable'] extends true ? never : TColumns[K]['default'] extends Option.Some<any> ? never : K]: {};
84
+ };
85
+ type RequiredInsertColumnNames<TColumns extends Columns> = keyof RequiredInsertColumns<TColumns>;
86
+ type RequiresInsertValues<TColumns extends Columns> = RequiredInsertColumnNames<TColumns> extends never ? false : true;
87
+ type InsertRowDecoded<TColumns extends Columns> = Types.Simplify<Pick<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> & Partial<Omit<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>>>>;
88
+ type InsertRowEncoded<TColumns extends Columns> = Types.Simplify<Pick<RowEncodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> & Partial<Omit<RowEncodedAll<TColumns>, RequiredInsertColumnNames<TColumns>>>>;
89
+ }
90
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/mod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Schema } from '@livestore/utils/effect';
2
+ export * from './field-defs.js';
3
+ // TODO ensure via runtime check (possibly even via type-level check) that all index names are unique
4
+ export const makeDbSchema = (schema) => {
5
+ return Array.isArray(schema) ? Object.fromEntries(schema.map((_) => [_.name, _])) : schema;
6
+ };
7
+ export const table = (name, columns, indexes) => {
8
+ const ast = {
9
+ _tag: 'table',
10
+ name,
11
+ columns: columsToAst(columns),
12
+ indexes: indexesToAst(indexes ?? []),
13
+ };
14
+ return { name, columns, indexes, ast };
15
+ };
16
+ export const structSchemaForTable = (tableDef) => Schema.Struct(Object.fromEntries(tableDef.ast.columns.map((column) => [column.name, column.schema]))).annotations({
17
+ title: tableDef.name,
18
+ });
19
+ export const insertStructSchemaForTable = (tableDef) => Schema.Struct(Object.fromEntries(tableDef.ast.columns.map((column) => [
20
+ column.name,
21
+ column.nullable === true || column.default._tag === 'Some' ? Schema.optional(column.schema) : column.schema,
22
+ ]))).annotations({
23
+ title: tableDef.name,
24
+ });
25
+ const columsToAst = (columns) => {
26
+ return Object.entries(columns).map(([name, column]) => {
27
+ return {
28
+ _tag: 'column',
29
+ name,
30
+ schema: column.schema,
31
+ default: column.default,
32
+ nullable: column.nullable ?? false,
33
+ primaryKey: column.primaryKey ?? false,
34
+ type: { _tag: column.columnType },
35
+ };
36
+ });
37
+ };
38
+ const indexesToAst = (indexes) => {
39
+ return indexes.map((_) => ({ _tag: 'index', columns: _.columns, name: _.name, unique: _.isUnique ?? false }));
40
+ };
41
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../../../src/schema/state/sqlite/db-schema/dsl/mod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const hashCode: (str: string) => number;
2
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/hash.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,WAYnC,CAAA"}
@@ -0,0 +1,14 @@
1
+ // Based on https://stackoverflow.com/a/7616484
2
+ export const hashCode = (str) => {
3
+ let hash = 0, i, chr;
4
+ if (str.length === 0)
5
+ return hash;
6
+ for (i = 0; i < str.length; i++) {
7
+ // eslint-disable-next-line unicorn/prefer-code-point
8
+ chr = str.charCodeAt(i);
9
+ hash = (hash << 5) - hash + chr;
10
+ hash = Math.trunc(hash); // Convert to 32bit integer
11
+ }
12
+ return hash;
13
+ };
14
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/hash.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;IACtC,IAAI,IAAI,GAAG,CAAC,EACV,CAAC,EACD,GAAG,CAAA;IACL,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACjC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,qDAAqD;QACrD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAA;QAC/B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAC,2BAA2B;IACrD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * as SqliteDsl from './dsl/mod.js';
2
+ export * as SqliteAst from './ast/sqlite.js';
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * as SqliteDsl from './dsl/mod.js';
2
+ export * as SqliteAst from './ast/sqlite.js';
3
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/db-schema/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { MigrationOptions } from '../../../adapter-types.js';
2
+ import { type Materializer } from '../../EventDef.js';
3
+ import type { State } from '../../schema.js';
4
+ import { type TableDefBase } from './table-def.js';
5
+ export * from './table-def.js';
6
+ export { ClientDocumentTableDefSymbol, tableIsClientDocumentTable, clientDocument, type ClientDocumentTableDef, type ClientDocumentTableOptions, } from './client-document-def.js';
7
+ export * from '../../EventDef.js';
8
+ export declare const makeState: <TStateInput extends InputState>(inputSchema: TStateInput) => State;
9
+ export type InputState = {
10
+ readonly tables: Record<string, TableDefBase> | ReadonlyArray<TableDefBase>;
11
+ readonly materializers: Record<string, Materializer<any>>;
12
+ /**
13
+ * @default { strategy: 'auto' }
14
+ */
15
+ readonly migrations?: MigrationOptions;
16
+ };
17
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/mod.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,KAAK,YAAY,EAAmC,MAAM,mBAAmB,CAAA;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAEjE,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,cAAc,EACd,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,MAAM,0BAA0B,CAAA;AACjC,cAAc,mBAAmB,CAAA;AAEjC,eAAO,MAAM,SAAS,GAAI,WAAW,SAAS,UAAU,EAAE,aAAa,WAAW,KAAG,KA2CpF,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;IAC3E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAA;CACvC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { shouldNeverHappen } from '@livestore/utils';
2
+ import { rawSqlEvent, rawSqlMaterializer } from '../../EventDef.js';
3
+ import { ClientDocumentTableDefSymbol, tableIsClientDocumentTable } from './client-document-def.js';
4
+ import { SqliteAst } from './db-schema/mod.js';
5
+ import { stateSystemTables } from './system-tables.js';
6
+ export * from './table-def.js';
7
+ export { ClientDocumentTableDefSymbol, tableIsClientDocumentTable, clientDocument, } from './client-document-def.js';
8
+ export * from '../../EventDef.js';
9
+ export const makeState = (inputSchema) => {
10
+ const inputTables = Array.isArray(inputSchema.tables)
11
+ ? inputSchema.tables
12
+ : Object.values(inputSchema.tables);
13
+ const tables = new Map();
14
+ for (const tableDef of inputTables) {
15
+ const sqliteDef = tableDef.sqliteDef;
16
+ // TODO validate tables (e.g. index names are unique)
17
+ if (tables.has(sqliteDef.ast.name)) {
18
+ shouldNeverHappen(`Duplicate table name: ${sqliteDef.ast.name}. Please use unique names for tables.`);
19
+ }
20
+ tables.set(sqliteDef.ast.name, tableDef);
21
+ }
22
+ for (const tableDef of stateSystemTables) {
23
+ tables.set(tableDef.sqliteDef.name, tableDef);
24
+ }
25
+ const materializers = new Map();
26
+ for (const [name, materializer] of Object.entries(inputSchema.materializers)) {
27
+ materializers.set(name, materializer);
28
+ }
29
+ materializers.set(rawSqlEvent.name, rawSqlMaterializer);
30
+ for (const tableDef of inputTables) {
31
+ if (tableIsClientDocumentTable(tableDef)) {
32
+ materializers.set(tableDef[ClientDocumentTableDefSymbol].derived.setEventDef.name, tableDef[ClientDocumentTableDefSymbol].derived.setMaterializer);
33
+ }
34
+ }
35
+ const hash = SqliteAst.hash({
36
+ _tag: 'dbSchema',
37
+ tables: [...tables.values()].map((_) => _.sqliteDef.ast),
38
+ });
39
+ return { sqlite: { tables, migrations: inputSchema.migrations ?? { strategy: 'auto' }, hash }, materializers };
40
+ };
41
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,EAAqB,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtF,OAAO,EAAE,4BAA4B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGtD,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,cAAc,GAGf,MAAM,0BAA0B,CAAA;AACjC,cAAc,mBAAmB,CAAA;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAiC,WAAwB,EAAS,EAAE;IAC3F,MAAM,WAAW,GAA4B,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;QAC5E,CAAC,CAAC,WAAW,CAAC,MAAM;QACpB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAErC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;IAE9C,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAA;QACpC,qDAAqD;QACrD,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,iBAAiB,CAAC,yBAAyB,SAAS,CAAC,GAAG,CAAC,IAAI,uCAAuC,CAAC,CAAA;QACvG,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAA;IAE1D,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7E,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACvC,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAEvD,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,aAAa,CAAC,GAAG,CACf,QAAQ,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAC/D,QAAQ,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,eAAe,CAC/D,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC1B,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;KACzD,CAAC,CAAA;IAEF,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,CAAA;AAChH,CAAC,CAAA"}
@@ -0,0 +1,294 @@
1
+ import type { GetValForKey, SingleOrReadonlyArray } from '@livestore/utils';
2
+ import { type Option, type Schema } from '@livestore/utils/effect';
3
+ import type { SessionIdSymbol } from '../../../../adapter-types.js';
4
+ import type { SqlValue } from '../../../../util.js';
5
+ import type { ClientDocumentTableDef } from '../client-document-def.js';
6
+ import type { SqliteDsl } from '../db-schema/mod.js';
7
+ import type { TableDefBase } from '../table-def.js';
8
+ export type QueryBuilderAst = QueryBuilderAst.SelectQuery | QueryBuilderAst.CountQuery | QueryBuilderAst.RowQuery | QueryBuilderAst.InsertQuery | QueryBuilderAst.UpdateQuery | QueryBuilderAst.DeleteQuery;
9
+ export declare namespace QueryBuilderAst {
10
+ interface SelectQuery {
11
+ readonly _tag: 'SelectQuery';
12
+ readonly columns: string[];
13
+ readonly pickFirst: false | {
14
+ fallback: () => any;
15
+ } | 'throws';
16
+ readonly select: {
17
+ columns: ReadonlyArray<string>;
18
+ };
19
+ readonly orderBy: ReadonlyArray<OrderBy>;
20
+ readonly offset: Option.Option<number>;
21
+ readonly limit: Option.Option<number>;
22
+ readonly tableDef: TableDefBase;
23
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
24
+ readonly resultSchemaSingle: Schema.Schema<any>;
25
+ }
26
+ interface CountQuery {
27
+ readonly _tag: 'CountQuery';
28
+ readonly tableDef: TableDefBase;
29
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
30
+ readonly resultSchema: Schema.Schema<number, ReadonlyArray<{
31
+ count: number;
32
+ }>>;
33
+ }
34
+ interface RowQuery {
35
+ readonly _tag: 'RowQuery';
36
+ readonly tableDef: ClientDocumentTableDef.Any;
37
+ readonly id: string | SessionIdSymbol;
38
+ readonly explicitDefaultValues: Record<string, unknown>;
39
+ }
40
+ interface InsertQuery {
41
+ readonly _tag: 'InsertQuery';
42
+ readonly tableDef: TableDefBase;
43
+ readonly values: Record<string, unknown>;
44
+ readonly onConflict: OnConflict | undefined;
45
+ readonly returning: string[] | undefined;
46
+ readonly resultSchema: Schema.Schema<any>;
47
+ }
48
+ interface OnConflict {
49
+ /** Conflicting column name */
50
+ readonly targets: string[];
51
+ readonly action: {
52
+ readonly _tag: 'ignore';
53
+ } | {
54
+ readonly _tag: 'replace';
55
+ } | {
56
+ readonly _tag: 'update';
57
+ readonly update: Record<string, unknown>;
58
+ };
59
+ }
60
+ interface UpdateQuery {
61
+ readonly _tag: 'UpdateQuery';
62
+ readonly tableDef: TableDefBase;
63
+ readonly values: Record<string, unknown>;
64
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
65
+ readonly returning: string[] | undefined;
66
+ readonly resultSchema: Schema.Schema<any>;
67
+ }
68
+ interface DeleteQuery {
69
+ readonly _tag: 'DeleteQuery';
70
+ readonly tableDef: TableDefBase;
71
+ readonly where: ReadonlyArray<QueryBuilderAst.Where>;
72
+ readonly returning: string[] | undefined;
73
+ readonly resultSchema: Schema.Schema<any>;
74
+ }
75
+ type WriteQuery = InsertQuery | UpdateQuery | DeleteQuery;
76
+ interface Where {
77
+ readonly col: string;
78
+ readonly op: QueryBuilder.WhereOps;
79
+ readonly value: unknown;
80
+ }
81
+ interface OrderBy {
82
+ readonly col: string;
83
+ readonly direction: 'asc' | 'desc';
84
+ }
85
+ }
86
+ export declare const QueryBuilderAstSymbol: unique symbol;
87
+ export type QueryBuilderAstSymbol = typeof QueryBuilderAstSymbol;
88
+ export declare const QueryBuilderResultSymbol: unique symbol;
89
+ export type QueryBuilderResultSymbol = typeof QueryBuilderResultSymbol;
90
+ export declare const QueryBuilderTypeId: unique symbol;
91
+ export type QueryBuilderTypeId = typeof QueryBuilderTypeId;
92
+ export declare const isQueryBuilder: (value: unknown) => value is QueryBuilder<any, any, any>;
93
+ export type QueryBuilder<TResult, TTableDef extends TableDefBase,
94
+ /** Used to gradually remove features from the API based on the query context */
95
+ TWithout extends QueryBuilder.ApiFeature = never> = {
96
+ readonly [QueryBuilderTypeId]: QueryBuilderTypeId;
97
+ readonly [QueryBuilderAstSymbol]: QueryBuilderAst;
98
+ readonly ['ResultType']: TResult;
99
+ readonly asSql: () => {
100
+ query: string;
101
+ bindValues: SqlValue[];
102
+ };
103
+ readonly toString: () => string;
104
+ } & Omit<QueryBuilder.ApiFull<TResult, TTableDef, TWithout>, TWithout>;
105
+ export declare namespace QueryBuilder {
106
+ type Any = QueryBuilder<any, any, any>;
107
+ type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In;
108
+ namespace WhereOps {
109
+ type Equality = '=' | '!=';
110
+ type Order = '<' | '>' | '<=' | '>=';
111
+ type Like = 'LIKE' | 'NOT LIKE' | 'ILIKE' | 'NOT ILIKE';
112
+ type In = 'IN' | 'NOT IN';
113
+ type SingleValue = Equality | Order | Like;
114
+ type MultiValue = In;
115
+ }
116
+ type ApiFeature = 'select' | 'where' | 'count' | 'orderBy' | 'offset' | 'limit' | 'first' | 'row' | 'insert' | 'update' | 'delete' | 'returning' | 'onConflict';
117
+ type WhereParams<TTableDef extends TableDefBase> = Partial<{
118
+ [K in keyof TTableDef['sqliteDef']['columns']]: TTableDef['sqliteDef']['columns'][K]['schema']['Type'] | {
119
+ op: QueryBuilder.WhereOps.SingleValue;
120
+ value: TTableDef['sqliteDef']['columns'][K]['schema']['Type'];
121
+ } | {
122
+ op: QueryBuilder.WhereOps.MultiValue;
123
+ value: ReadonlyArray<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>;
124
+ } | undefined;
125
+ }>;
126
+ type OrderByParams<TTableDef extends TableDefBase> = ReadonlyArray<{
127
+ col: keyof TTableDef['sqliteDef']['columns'] & string;
128
+ direction: 'asc' | 'desc';
129
+ }>;
130
+ type ApiFull<TResult, TTableDef extends TableDefBase, TWithout extends ApiFeature> = {
131
+ /**
132
+ * `SELECT *` is the default
133
+ *
134
+ * Example:
135
+ * ```ts
136
+ * db.todos.select('id', 'text', 'completed')
137
+ * db.todos.select('id')
138
+ * ```
139
+ */
140
+ readonly select: {
141
+ /** Selects and plucks a single column */
142
+ <TColumn extends keyof TTableDef['sqliteDef']['columns'] & string>(pluckColumn: TColumn): QueryBuilder<ReadonlyArray<TTableDef['sqliteDef']['columns'][TColumn]['schema']['Type']>, TTableDef, TWithout | 'row' | 'select' | 'returning' | 'onConflict'>;
143
+ /** Select multiple columns */
144
+ <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(...columns: TColumns[]): QueryBuilder<ReadonlyArray<{
145
+ readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type'];
146
+ }>, TTableDef, TWithout | 'row' | 'select' | 'count' | 'returning' | 'onConflict'>;
147
+ };
148
+ /**
149
+ * Notes:
150
+ * - All where clauses are `AND`ed together by default.
151
+ * - `null` values only support `=` and `!=` which is translated to `IS NULL` and `IS NOT NULL`.
152
+ *
153
+ * Example:
154
+ * ```ts
155
+ * db.todos.where('completed', true)
156
+ * db.todos.where('completed', '!=', true)
157
+ * db.todos.where({ completed: true })
158
+ * db.todos.where({ completed: { op: '!=', value: true } })
159
+ * ```
160
+ *
161
+ * TODO: Also support `OR`
162
+ */
163
+ readonly where: {
164
+ (params: QueryBuilder.WhereParams<TTableDef>): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>;
165
+ <TColName extends keyof TTableDef['sqliteDef']['columns']>(col: TColName, value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type']): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>;
166
+ <TColName extends keyof TTableDef['sqliteDef']['columns']>(col: TColName, op: QueryBuilder.WhereOps, value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type']): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>;
167
+ };
168
+ /**
169
+ * Example:
170
+ * ```ts
171
+ * db.todos.count()
172
+ * db.todos.count().where('completed', true)
173
+ * ```
174
+ */
175
+ readonly count: () => QueryBuilder<number, TTableDef, TWithout | 'row' | 'count' | 'select' | 'orderBy' | 'first' | 'offset' | 'limit' | 'returning' | 'onConflict'>;
176
+ /**
177
+ * Example:
178
+ * ```ts
179
+ * db.todos.orderBy('createdAt', 'desc')
180
+ * ```
181
+ */
182
+ readonly orderBy: {
183
+ <TColName extends keyof TTableDef['sqliteDef']['columns'] & string>(col: TColName, direction: 'asc' | 'desc'): QueryBuilder<TResult, TTableDef, TWithout | 'returning' | 'onConflict'>;
184
+ <TParams extends QueryBuilder.OrderByParams<TTableDef>>(params: TParams): QueryBuilder<TResult, TTableDef, TWithout | 'returning' | 'onConflict'>;
185
+ };
186
+ /**
187
+ * Example:
188
+ * ```ts
189
+ * db.todos.offset(10)
190
+ * ```
191
+ */
192
+ readonly offset: (offset: number) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'offset' | 'orderBy' | 'returning' | 'onConflict'>;
193
+ /**
194
+ * Example:
195
+ * ```ts
196
+ * db.todos.limit(10)
197
+ * ```
198
+ */
199
+ readonly limit: (limit: number) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'limit' | 'offset' | 'first' | 'orderBy' | 'returning' | 'onConflict'>;
200
+ /**
201
+ * Example:
202
+ * ```ts
203
+ * db.todos.first()
204
+ * db.todos.where('id', '123').first()
205
+ * ```
206
+ *
207
+ * Query will throw if no rows are returned and no fallback is provided.
208
+ */
209
+ readonly first: <TFallback = never>(options?: {
210
+ /** @default 'throws' */
211
+ fallback?: (() => TFallback | GetSingle<TResult>) | 'throws';
212
+ }) => QueryBuilder<TFallback | GetSingle<TResult>, TTableDef, TWithout | 'row' | 'first' | 'orderBy' | 'select' | 'limit' | 'offset' | 'where' | 'returning' | 'onConflict'>;
213
+ /**
214
+ * Insert a new row into the table
215
+ *
216
+ * Example:
217
+ * ```ts
218
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' })
219
+ * ```
220
+ */
221
+ readonly insert: (values: TTableDef['insertSchema']['Type']) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'where'>;
222
+ /**
223
+ * Example: If the row already exists, it will be ignored.
224
+ * ```ts
225
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')
226
+ * ```
227
+ *
228
+ * Example: If the row already exists, it will be replaced.
229
+ * ```ts
230
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')
231
+ * ```
232
+ *
233
+ * Example: If the row already exists, it will be updated.
234
+ * ```ts
235
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'update', { text: 'Buy soy milk' })
236
+ * ```
237
+ *
238
+ * NOTE This API doesn't yet support composite primary keys.
239
+ */
240
+ readonly onConflict: {
241
+ <TTarget extends SingleOrReadonlyArray<keyof TTableDef['sqliteDef']['columns']>>(target: TTarget, action: 'ignore' | 'replace'): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'where'>;
242
+ <TTarget extends SingleOrReadonlyArray<keyof TTableDef['sqliteDef']['columns']>>(target: TTarget, action: 'update', updateValues: Partial<TTableDef['rowSchema']['Type']>): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'where'>;
243
+ };
244
+ /**
245
+ * Similar to the `.select` API but for write queries (insert, update, delete).
246
+ *
247
+ * Example:
248
+ * ```ts
249
+ * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).returning('id')
250
+ * ```
251
+ */
252
+ readonly returning: <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(...columns: TColumns[]) => QueryBuilder<ReadonlyArray<{
253
+ readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type'];
254
+ }>, TTableDef>;
255
+ /**
256
+ * Update rows in the table that match the where clause
257
+ *
258
+ * Example:
259
+ * ```ts
260
+ * db.todos.update({ status: 'completed' }).where({ id: '123' })
261
+ * ```
262
+ */
263
+ readonly update: (values: Partial<TTableDef['rowSchema']['Type']>) => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'onConflict'>;
264
+ /**
265
+ * Delete rows from the table that match the where clause
266
+ *
267
+ * Example:
268
+ * ```ts
269
+ * db.todos.delete().where({ status: 'completed' })
270
+ * ```
271
+ *
272
+ * Note that it's generally recommended to do soft-deletes for synced apps.
273
+ */
274
+ readonly delete: () => QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select' | 'count' | 'orderBy' | 'first' | 'offset' | 'limit' | 'onConflict'>;
275
+ };
276
+ }
277
+ export declare namespace RowQuery {
278
+ type GetOrCreateOptions<TTableDef extends ClientDocumentTableDef.TraitAny> = {
279
+ default: Partial<TTableDef['Value']>;
280
+ };
281
+ type RequiredColumnsOptions<TTableDef extends TableDefBase> = {
282
+ /**
283
+ * Values to be inserted into the row if it doesn't exist yet
284
+ */
285
+ explicitDefaultValues: Pick<SqliteDsl.FromColumns.RowDecodedAll<TTableDef['sqliteDef']['columns']>, SqliteDsl.FromColumns.RequiredInsertColumnNames<Omit<TTableDef['sqliteDef']['columns'], 'id'>>>;
286
+ };
287
+ type Result<TTableDef extends TableDefBase> = SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>;
288
+ type DocumentResult<TTableDef extends ClientDocumentTableDef.Any> = GetValForKey<SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>, 'value'>;
289
+ type ResultEncoded<TTableDef extends TableDefBase> = TTableDef['options']['isClientDocumentTable'] extends true ? GetValForKey<SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>, 'value'> : SqliteDsl.FromColumns.RowEncoded<TTableDef['sqliteDef']['columns']>;
290
+ type GetIdColumnType<TTableDef extends TableDefBase> = TTableDef['sqliteDef']['columns']['id']['schema']['Type'];
291
+ }
292
+ type GetSingle<T> = T extends ReadonlyArray<infer U> ? U : never;
293
+ export {};
294
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/query-builder/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Predicate } from '@livestore/utils/effect';
2
+ export const QueryBuilderAstSymbol = Symbol.for('QueryBuilderAst');
3
+ export const QueryBuilderResultSymbol = Symbol.for('QueryBuilderResult');
4
+ export const QueryBuilderTypeId = Symbol.for('QueryBuilder');
5
+ export const isQueryBuilder = (value) => Predicate.hasProperty(value, QueryBuilderTypeId);
6
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/query-builder/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,SAAS,EAAe,MAAM,yBAAyB,CAAA;AAkG7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAGlE,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAGxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AAG5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAwC,EAAE,CACrF,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { SqlValue } from '../../../../util.js';
2
+ import type { QueryBuilderAst } from './api.js';
3
+ export declare const astToSql: (ast: QueryBuilderAst) => {
4
+ query: string;
5
+ bindValues: SqlValue[];
6
+ };
7
+ //# sourceMappingURL=astToSql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astToSql.d.ts","sourceRoot":"","sources":["../../../../../src/schema/state/sqlite/query-builder/astToSql.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AA6D/C,eAAO,MAAM,QAAQ,GAAI,KAAK,eAAe,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,QAAQ,EAAE,CAAA;CAoKtF,CAAA"}