@lix-js/sdk 0.5.0-preview.0 → 0.5.0-preview.1

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 (1378) hide show
  1. package/dist/account/create-account.d.ts +5 -5
  2. package/dist/account/create-account.d.ts.map +1 -1
  3. package/dist/account/create-account.js +2 -2
  4. package/dist/account/create-account.js.map +1 -1
  5. package/dist/account/index.d.ts +1 -1
  6. package/dist/account/index.d.ts.map +1 -1
  7. package/dist/account/schema.d.ts +23 -7
  8. package/dist/account/schema.d.ts.map +1 -1
  9. package/dist/account/schema.js +84 -27
  10. package/dist/account/schema.js.map +1 -1
  11. package/dist/account/schema.test.js +87 -83
  12. package/dist/account/schema.test.js.map +1 -1
  13. package/dist/account/switch-account.d.ts +2 -2
  14. package/dist/account/switch-account.d.ts.map +1 -1
  15. package/dist/account/switch-account.js +3 -4
  16. package/dist/account/switch-account.js.map +1 -1
  17. package/dist/account/switch-account.test.js +4 -4
  18. package/dist/account/switch-account.test.js.map +1 -1
  19. package/dist/change/apply-changes.d.ts +13 -0
  20. package/dist/change/apply-changes.d.ts.map +1 -1
  21. package/dist/change/apply-changes.js +14 -4
  22. package/dist/change/apply-changes.js.map +1 -1
  23. package/dist/change/apply-changes.test.js +91 -1
  24. package/dist/change/apply-changes.test.js.map +1 -1
  25. package/dist/change/create-change-v2.d.ts +11 -0
  26. package/dist/change/create-change-v2.d.ts.map +1 -0
  27. package/dist/change/create-change-v2.js +31 -0
  28. package/dist/change/create-change-v2.js.map +1 -0
  29. package/dist/change/create-change-v2.test.d.ts +2 -0
  30. package/dist/change/create-change-v2.test.d.ts.map +1 -0
  31. package/dist/change/create-change-v2.test.js +39 -0
  32. package/dist/change/create-change-v2.test.js.map +1 -0
  33. package/dist/change/create-change.d.ts +2 -2
  34. package/dist/change/create-change.d.ts.map +1 -1
  35. package/dist/change/create-change.js +3 -1
  36. package/dist/change/create-change.js.map +1 -1
  37. package/dist/change/create-change.test.js +4 -6
  38. package/dist/change/create-change.test.js.map +1 -1
  39. package/dist/change/index.d.ts +1 -1
  40. package/dist/change/index.d.ts.map +1 -1
  41. package/dist/change/index.js.map +1 -1
  42. package/dist/change/schema.d.ts +40 -2
  43. package/dist/change/schema.d.ts.map +1 -1
  44. package/dist/change/schema.js +50 -9
  45. package/dist/change/schema.js.map +1 -1
  46. package/dist/change/schema.test.js +33 -0
  47. package/dist/change/schema.test.js.map +1 -1
  48. package/dist/change-author/index.d.ts +1 -1
  49. package/dist/change-author/index.d.ts.map +1 -1
  50. package/dist/change-author/index.js +1 -1
  51. package/dist/change-author/index.js.map +1 -1
  52. package/dist/change-author/schema.d.ts +12 -9
  53. package/dist/change-author/schema.d.ts.map +1 -1
  54. package/dist/change-author/schema.js +16 -10
  55. package/dist/change-author/schema.js.map +1 -1
  56. package/dist/change-author/schema.test.js +283 -229
  57. package/dist/change-author/schema.test.js.map +1 -1
  58. package/dist/change-proposal/create-change-proposal.d.ts +3 -3
  59. package/dist/change-proposal/create-change-proposal.d.ts.map +1 -1
  60. package/dist/change-proposal/database-schema.js +1 -1
  61. package/dist/change-set/apply-change-set.d.ts +2 -2
  62. package/dist/change-set/apply-change-set.d.ts.map +1 -1
  63. package/dist/change-set/apply-change-set.js +40 -51
  64. package/dist/change-set/apply-change-set.js.map +1 -1
  65. package/dist/change-set/apply-change-set.test.js +6 -3
  66. package/dist/change-set/apply-change-set.test.js.map +1 -1
  67. package/dist/change-set/before-after-of-file.d.ts +31 -0
  68. package/dist/change-set/before-after-of-file.d.ts.map +1 -0
  69. package/dist/change-set/before-after-of-file.js +191 -0
  70. package/dist/change-set/before-after-of-file.js.map +1 -0
  71. package/dist/change-set/before-after-of-file.test.d.ts +2 -0
  72. package/dist/change-set/before-after-of-file.test.d.ts.map +1 -0
  73. package/dist/change-set/before-after-of-file.test.js +221 -0
  74. package/dist/change-set/before-after-of-file.test.js.map +1 -0
  75. package/dist/change-set/change-set-element-in-symmetric-difference.d.ts +2 -1
  76. package/dist/change-set/change-set-element-in-symmetric-difference.d.ts.map +1 -1
  77. package/dist/change-set/change-set-element-in-symmetric-difference.js.map +1 -1
  78. package/dist/change-set/change-set-element-in-symmetric-difference.test.js +204 -34
  79. package/dist/change-set/change-set-element-in-symmetric-difference.test.js.map +1 -1
  80. package/dist/change-set/checkout-change-set.d.ts +15 -0
  81. package/dist/change-set/checkout-change-set.d.ts.map +1 -0
  82. package/dist/change-set/checkout-change-set.js +64 -0
  83. package/dist/change-set/checkout-change-set.js.map +1 -0
  84. package/dist/change-set/checkout-change-set.test.d.ts +2 -0
  85. package/dist/change-set/checkout-change-set.test.d.ts.map +1 -0
  86. package/dist/change-set/checkout-change-set.test.js +127 -0
  87. package/dist/change-set/checkout-change-set.test.js.map +1 -0
  88. package/dist/change-set/create-change-set.d.ts +7 -9
  89. package/dist/change-set/create-change-set.d.ts.map +1 -1
  90. package/dist/change-set/create-change-set.js +3 -25
  91. package/dist/change-set/create-change-set.js.map +1 -1
  92. package/dist/change-set/create-change-set.test.js +0 -31
  93. package/dist/change-set/create-change-set.test.js.map +1 -1
  94. package/dist/change-set/create-checkpoint.d.ts.map +1 -1
  95. package/dist/change-set/create-checkpoint.js +11 -2
  96. package/dist/change-set/create-checkpoint.js.map +1 -1
  97. package/dist/change-set/create-checkpoint.test.js +53 -0
  98. package/dist/change-set/create-checkpoint.test.js.map +1 -1
  99. package/dist/change-set/create-merge-change-set.d.ts +4 -4
  100. package/dist/change-set/create-merge-change-set.d.ts.map +1 -1
  101. package/dist/change-set/create-transition-change-set.d.ts +4 -4
  102. package/dist/change-set/create-transition-change-set.d.ts.map +1 -1
  103. package/dist/change-set/create-undo-change-set.d.ts +5 -5
  104. package/dist/change-set/create-undo-change-set.d.ts.map +1 -1
  105. package/dist/change-set/create-undo-change-set.js +4 -3
  106. package/dist/change-set/create-undo-change-set.js.map +1 -1
  107. package/dist/change-set/database-schema.d.ts +39 -0
  108. package/dist/change-set/database-schema.d.ts.map +1 -0
  109. package/dist/change-set/database-schema.js +86 -0
  110. package/dist/change-set/database-schema.js.map +1 -0
  111. package/dist/change-set/database-schema.test.d.ts +2 -0
  112. package/dist/change-set/database-schema.test.d.ts.map +1 -0
  113. package/dist/change-set/database-schema.test.js +547 -0
  114. package/dist/change-set/database-schema.test.js.map +1 -0
  115. package/dist/change-set/diff-for-file.d.ts +29 -0
  116. package/dist/change-set/diff-for-file.d.ts.map +1 -0
  117. package/dist/change-set/diff-for-file.js +19 -0
  118. package/dist/change-set/diff-for-file.js.map +1 -0
  119. package/dist/change-set/get-before-after-of-file.d.ts +31 -0
  120. package/dist/change-set/get-before-after-of-file.d.ts.map +1 -0
  121. package/dist/change-set/get-before-after-of-file.js +189 -0
  122. package/dist/change-set/get-before-after-of-file.js.map +1 -0
  123. package/dist/change-set/get-before-after-of-file.test.d.ts +2 -0
  124. package/dist/change-set/get-before-after-of-file.test.d.ts.map +1 -0
  125. package/dist/change-set/get-before-after-of-file.test.js +220 -0
  126. package/dist/change-set/get-before-after-of-file.test.js.map +1 -0
  127. package/dist/change-set/index.d.ts +1 -5
  128. package/dist/change-set/index.d.ts.map +1 -1
  129. package/dist/change-set/index.js +1 -5
  130. package/dist/change-set/index.js.map +1 -1
  131. package/dist/change-set/merge-change-sets.d.ts +23 -0
  132. package/dist/change-set/merge-change-sets.d.ts.map +1 -0
  133. package/dist/change-set/merge-change-sets.js +69 -0
  134. package/dist/change-set/merge-change-sets.js.map +1 -0
  135. package/dist/change-set/merge-change-sets.test.d.ts +2 -0
  136. package/dist/change-set/merge-change-sets.test.d.ts.map +1 -0
  137. package/dist/change-set/merge-change-sets.test.js +184 -0
  138. package/dist/change-set/merge-change-sets.test.js.map +1 -0
  139. package/dist/change-set/restore-change-set.d.ts +14 -0
  140. package/dist/change-set/restore-change-set.d.ts.map +1 -0
  141. package/dist/change-set/restore-change-set.js +98 -0
  142. package/dist/change-set/restore-change-set.js.map +1 -0
  143. package/dist/change-set/restore-change-set.test.d.ts +2 -0
  144. package/dist/change-set/restore-change-set.test.d.ts.map +1 -0
  145. package/dist/change-set/restore-change-set.test.js +238 -0
  146. package/dist/change-set/restore-change-set.test.js.map +1 -0
  147. package/dist/change-set/schema.d.ts +28 -72
  148. package/dist/change-set/schema.d.ts.map +1 -1
  149. package/dist/change-set/schema.js +37 -84
  150. package/dist/change-set/schema.js.map +1 -1
  151. package/dist/change-set/schema.test.js +0 -247
  152. package/dist/change-set/schema.test.js.map +1 -1
  153. package/dist/change-set-edge/database-schema.d.ts +11 -0
  154. package/dist/change-set-edge/database-schema.d.ts.map +1 -0
  155. package/dist/change-set-edge/database-schema.js +29 -0
  156. package/dist/change-set-edge/database-schema.js.map +1 -0
  157. package/dist/change-set-edge/database-schema.test.d.ts +2 -0
  158. package/dist/change-set-edge/database-schema.test.d.ts.map +1 -0
  159. package/dist/change-set-edge/database-schema.test.js +166 -0
  160. package/dist/change-set-edge/database-schema.test.js.map +1 -0
  161. package/dist/change-set-edge/index.d.ts +2 -0
  162. package/dist/change-set-edge/index.d.ts.map +1 -0
  163. package/dist/change-set-edge/index.js +2 -0
  164. package/dist/change-set-edge/index.js.map +1 -0
  165. package/dist/change-set-v2/apply-change-set.d.ts +10 -0
  166. package/dist/change-set-v2/apply-change-set.d.ts.map +1 -0
  167. package/dist/change-set-v2/apply-change-set.js +147 -0
  168. package/dist/change-set-v2/apply-change-set.js.map +1 -0
  169. package/dist/change-set-v2/apply-change-set.test.d.ts +2 -0
  170. package/dist/change-set-v2/apply-change-set.test.d.ts.map +1 -0
  171. package/dist/change-set-v2/apply-change-set.test.js +270 -0
  172. package/dist/change-set-v2/apply-change-set.test.js.map +1 -0
  173. package/dist/change-set-v2/create-change-set.d.ts +10 -0
  174. package/dist/change-set-v2/create-change-set.d.ts.map +1 -0
  175. package/dist/change-set-v2/create-change-set.js +57 -0
  176. package/dist/change-set-v2/create-change-set.js.map +1 -0
  177. package/dist/change-set-v2/create-change-set.test.d.ts +2 -0
  178. package/dist/change-set-v2/create-change-set.test.d.ts.map +1 -0
  179. package/dist/change-set-v2/create-change-set.test.js +59 -0
  180. package/dist/change-set-v2/create-change-set.test.js.map +1 -0
  181. package/dist/change-set-v2/create-checkpoint.d.ts +7 -0
  182. package/dist/change-set-v2/create-checkpoint.d.ts.map +1 -0
  183. package/dist/change-set-v2/create-checkpoint.js +79 -0
  184. package/dist/change-set-v2/create-checkpoint.js.map +1 -0
  185. package/dist/change-set-v2/create-checkpoint.test.d.ts +2 -0
  186. package/dist/change-set-v2/create-checkpoint.test.d.ts.map +1 -0
  187. package/dist/change-set-v2/create-checkpoint.test.js +289 -0
  188. package/dist/change-set-v2/create-checkpoint.test.js.map +1 -0
  189. package/dist/change-set-v2/create-merge-change-set.d.ts +23 -0
  190. package/dist/change-set-v2/create-merge-change-set.d.ts.map +1 -0
  191. package/dist/change-set-v2/create-merge-change-set.js +68 -0
  192. package/dist/change-set-v2/create-merge-change-set.js.map +1 -0
  193. package/dist/change-set-v2/create-merge-change-set.test.d.ts +2 -0
  194. package/dist/change-set-v2/create-merge-change-set.test.d.ts.map +1 -0
  195. package/dist/change-set-v2/create-merge-change-set.test.js +223 -0
  196. package/dist/change-set-v2/create-merge-change-set.test.js.map +1 -0
  197. package/dist/change-set-v2/index.d.ts +5 -0
  198. package/dist/change-set-v2/index.d.ts.map +1 -0
  199. package/dist/change-set-v2/index.js +5 -0
  200. package/dist/change-set-v2/index.js.map +1 -0
  201. package/dist/change-set-v2/schema.d.ts +50 -0
  202. package/dist/change-set-v2/schema.d.ts.map +1 -0
  203. package/dist/change-set-v2/schema.js +347 -0
  204. package/dist/change-set-v2/schema.js.map +1 -0
  205. package/dist/change-set-v2/schema.test.d.ts +2 -0
  206. package/dist/change-set-v2/schema.test.d.ts.map +1 -0
  207. package/dist/change-set-v2/schema.test.js +713 -0
  208. package/dist/change-set-v2/schema.test.js.map +1 -0
  209. package/dist/commit/apply-commit.d.ts +32 -0
  210. package/dist/commit/apply-commit.d.ts.map +1 -0
  211. package/dist/commit/apply-commit.js +63 -0
  212. package/dist/commit/apply-commit.js.map +1 -0
  213. package/dist/commit/apply-commit.test.d.ts +2 -0
  214. package/dist/commit/apply-commit.test.d.ts.map +1 -0
  215. package/dist/commit/apply-commit.test.js +367 -0
  216. package/dist/commit/apply-commit.test.js.map +1 -0
  217. package/dist/commit/create-checkpoint.d.ts +19 -0
  218. package/dist/commit/create-checkpoint.d.ts.map +1 -0
  219. package/dist/commit/create-checkpoint.js +118 -0
  220. package/dist/commit/create-checkpoint.js.map +1 -0
  221. package/dist/commit/create-checkpoint.test.d.ts +2 -0
  222. package/dist/commit/create-checkpoint.test.d.ts.map +1 -0
  223. package/dist/commit/create-checkpoint.test.js +472 -0
  224. package/dist/commit/create-checkpoint.test.js.map +1 -0
  225. package/dist/commit/create-commit.d.ts +38 -0
  226. package/dist/commit/create-commit.d.ts.map +1 -0
  227. package/dist/commit/create-commit.js +68 -0
  228. package/dist/commit/create-commit.js.map +1 -0
  229. package/dist/commit/create-merge-commit.d.ts +24 -0
  230. package/dist/commit/create-merge-commit.d.ts.map +1 -0
  231. package/dist/commit/create-merge-commit.js +103 -0
  232. package/dist/commit/create-merge-commit.js.map +1 -0
  233. package/dist/commit/create-merge-commit.test.d.ts +2 -0
  234. package/dist/commit/create-merge-commit.test.d.ts.map +1 -0
  235. package/dist/commit/create-merge-commit.test.js +242 -0
  236. package/dist/commit/create-merge-commit.test.js.map +1 -0
  237. package/dist/commit/create-transition-commit.d.ts +18 -0
  238. package/dist/commit/create-transition-commit.d.ts.map +1 -0
  239. package/dist/commit/create-transition-commit.js +136 -0
  240. package/dist/commit/create-transition-commit.js.map +1 -0
  241. package/dist/commit/create-transition-commit.test.d.ts +2 -0
  242. package/dist/commit/create-transition-commit.test.d.ts.map +1 -0
  243. package/dist/commit/create-transition-commit.test.js +221 -0
  244. package/dist/commit/create-transition-commit.test.js.map +1 -0
  245. package/dist/commit/create-undo-commit.d.ts +27 -0
  246. package/dist/commit/create-undo-commit.d.ts.map +1 -0
  247. package/dist/commit/create-undo-commit.js +143 -0
  248. package/dist/commit/create-undo-commit.js.map +1 -0
  249. package/dist/commit/create-undo-commit.test.d.ts +2 -0
  250. package/dist/commit/create-undo-commit.test.d.ts.map +1 -0
  251. package/dist/commit/create-undo-commit.test.js +298 -0
  252. package/dist/commit/create-undo-commit.test.js.map +1 -0
  253. package/dist/commit/index.d.ts +6 -0
  254. package/dist/commit/index.d.ts.map +1 -0
  255. package/dist/commit/index.js +6 -0
  256. package/dist/commit/index.js.map +1 -0
  257. package/dist/commit/schema.d.ts +73 -0
  258. package/dist/commit/schema.d.ts.map +1 -0
  259. package/dist/commit/schema.js +90 -0
  260. package/dist/commit/schema.js.map +1 -0
  261. package/dist/commit/schema.test.d.ts +2 -0
  262. package/dist/commit/schema.test.d.ts.map +1 -0
  263. package/dist/commit/schema.test.js +216 -0
  264. package/dist/commit/schema.test.js.map +1 -0
  265. package/dist/database/apply-schema.d.ts +3 -0
  266. package/dist/database/apply-schema.d.ts.map +1 -1
  267. package/dist/database/apply-schema.js +91 -258
  268. package/dist/database/apply-schema.js.map +1 -1
  269. package/dist/database/index.d.ts +0 -2
  270. package/dist/database/index.d.ts.map +1 -1
  271. package/dist/database/index.js +0 -2
  272. package/dist/database/index.js.map +1 -1
  273. package/dist/database/init-db.d.ts.map +1 -1
  274. package/dist/database/init-db.js +83 -44
  275. package/dist/database/init-db.js.map +1 -1
  276. package/dist/database/init-db.test.js +2 -480
  277. package/dist/database/init-db.test.js.map +1 -1
  278. package/dist/database/kysely-plugin/json-column-plugin.d.ts +5 -1
  279. package/dist/database/kysely-plugin/json-column-plugin.d.ts.map +1 -1
  280. package/dist/database/kysely-plugin/json-column-plugin.js +52 -10
  281. package/dist/database/kysely-plugin/json-column-plugin.js.map +1 -1
  282. package/dist/database/kysely-plugin/json-column-plugin.test.d.ts +2 -0
  283. package/dist/database/kysely-plugin/json-column-plugin.test.d.ts.map +1 -0
  284. package/dist/database/kysely-plugin/json-column-plugin.test.js +329 -0
  285. package/dist/database/kysely-plugin/json-column-plugin.test.js.map +1 -0
  286. package/dist/database/mutation-log/database-schema.d.ts.map +1 -1
  287. package/dist/database/mutation-log/database-schema.js +0 -4
  288. package/dist/database/mutation-log/database-schema.js.map +1 -1
  289. package/dist/database/nano-id.d.ts +4 -1
  290. package/dist/database/nano-id.d.ts.map +1 -1
  291. package/dist/database/nano-id.js +4 -1
  292. package/dist/database/nano-id.js.map +1 -1
  293. package/dist/database/nano-id.test.js +3 -3
  294. package/dist/database/nano-id.test.js.map +1 -1
  295. package/dist/database/schema.d.ts +21 -14
  296. package/dist/database/schema.d.ts.map +1 -1
  297. package/dist/database/schema.js +9 -5
  298. package/dist/database/schema.js.map +1 -1
  299. package/dist/deterministic/generate-human-id.d.ts +20 -0
  300. package/dist/deterministic/generate-human-id.d.ts.map +1 -0
  301. package/dist/deterministic/generate-human-id.js +86 -0
  302. package/dist/deterministic/generate-human-id.js.map +1 -0
  303. package/dist/deterministic/generate-human-id.test.d.ts +2 -0
  304. package/dist/deterministic/generate-human-id.test.d.ts.map +1 -0
  305. package/dist/deterministic/generate-human-id.test.js +123 -0
  306. package/dist/deterministic/generate-human-id.test.js.map +1 -0
  307. package/dist/deterministic/index.d.ts +8 -0
  308. package/dist/deterministic/index.d.ts.map +1 -0
  309. package/dist/deterministic/index.js +8 -0
  310. package/dist/deterministic/index.js.map +1 -0
  311. package/dist/deterministic/is-deterministic-mode.d.ts +14 -0
  312. package/dist/deterministic/is-deterministic-mode.d.ts.map +1 -0
  313. package/dist/deterministic/is-deterministic-mode.js +25 -0
  314. package/dist/deterministic/is-deterministic-mode.js.map +1 -0
  315. package/dist/deterministic/is-deterministic-mode.test.d.ts +2 -0
  316. package/dist/deterministic/is-deterministic-mode.test.d.ts.map +1 -0
  317. package/dist/deterministic/is-deterministic-mode.test.js +103 -0
  318. package/dist/deterministic/is-deterministic-mode.test.js.map +1 -0
  319. package/dist/deterministic/nano-id.d.ts +61 -0
  320. package/dist/deterministic/nano-id.d.ts.map +1 -0
  321. package/dist/deterministic/nano-id.js +161 -0
  322. package/dist/deterministic/nano-id.js.map +1 -0
  323. package/dist/deterministic/nano-id.test.d.ts +2 -0
  324. package/dist/deterministic/nano-id.test.d.ts.map +1 -0
  325. package/dist/deterministic/nano-id.test.js +163 -0
  326. package/dist/deterministic/nano-id.test.js.map +1 -0
  327. package/dist/deterministic/options.d.ts +53 -0
  328. package/dist/deterministic/options.d.ts.map +1 -0
  329. package/dist/deterministic/options.js +52 -0
  330. package/dist/deterministic/options.js.map +1 -0
  331. package/dist/deterministic/options.test.d.ts +2 -0
  332. package/dist/deterministic/options.test.d.ts.map +1 -0
  333. package/dist/deterministic/options.test.js +111 -0
  334. package/dist/deterministic/options.test.js.map +1 -0
  335. package/dist/deterministic/random.d.ts +68 -0
  336. package/dist/deterministic/random.d.ts.map +1 -0
  337. package/dist/deterministic/random.js +225 -0
  338. package/dist/deterministic/random.js.map +1 -0
  339. package/dist/deterministic/random.test.d.ts +2 -0
  340. package/dist/deterministic/random.test.d.ts.map +1 -0
  341. package/dist/deterministic/random.test.js +244 -0
  342. package/dist/deterministic/random.test.js.map +1 -0
  343. package/dist/deterministic/sequence.d.ts +56 -0
  344. package/dist/deterministic/sequence.d.ts.map +1 -0
  345. package/dist/deterministic/sequence.js +107 -0
  346. package/dist/deterministic/sequence.js.map +1 -0
  347. package/dist/deterministic/sequence.test.d.ts +2 -0
  348. package/dist/deterministic/sequence.test.d.ts.map +1 -0
  349. package/dist/deterministic/sequence.test.js +71 -0
  350. package/dist/deterministic/sequence.test.js.map +1 -0
  351. package/dist/deterministic/timestamp.d.ts +47 -0
  352. package/dist/deterministic/timestamp.d.ts.map +1 -0
  353. package/dist/deterministic/timestamp.js +74 -0
  354. package/dist/deterministic/timestamp.js.map +1 -0
  355. package/dist/deterministic/timestamp.test.d.ts +2 -0
  356. package/dist/deterministic/timestamp.test.d.ts.map +1 -0
  357. package/dist/deterministic/timestamp.test.js +145 -0
  358. package/dist/deterministic/timestamp.test.js.map +1 -0
  359. package/dist/deterministic/uuid-v7.d.ts +49 -0
  360. package/dist/deterministic/uuid-v7.d.ts.map +1 -0
  361. package/dist/deterministic/uuid-v7.js +75 -0
  362. package/dist/deterministic/uuid-v7.js.map +1 -0
  363. package/dist/deterministic/uuid-v7.test.d.ts +2 -0
  364. package/dist/deterministic/uuid-v7.test.d.ts.map +1 -0
  365. package/dist/deterministic/uuid-v7.test.js +114 -0
  366. package/dist/deterministic/uuid-v7.test.js.map +1 -0
  367. package/dist/discussion/create-discussion.d.ts +2 -1
  368. package/dist/discussion/create-discussion.d.ts.map +1 -1
  369. package/dist/discussion/create-discussion.js.map +1 -1
  370. package/dist/discussion/create-discussion.test.js +13 -2
  371. package/dist/discussion/create-discussion.test.js.map +1 -1
  372. package/dist/entity/eb-entity.d.ts +76 -0
  373. package/dist/entity/eb-entity.d.ts.map +1 -0
  374. package/dist/entity/eb-entity.js +156 -0
  375. package/dist/entity/eb-entity.js.map +1 -0
  376. package/dist/entity/eb-entity.test.d.ts +2 -0
  377. package/dist/entity/eb-entity.test.d.ts.map +1 -0
  378. package/dist/entity/eb-entity.test.js +573 -0
  379. package/dist/entity/eb-entity.test.js.map +1 -0
  380. package/dist/entity/index.d.ts +7 -0
  381. package/dist/entity/index.d.ts.map +1 -0
  382. package/dist/entity/index.js +4 -0
  383. package/dist/entity/index.js.map +1 -0
  384. package/dist/entity/label/create-entity-label.d.ts +61 -0
  385. package/dist/entity/label/create-entity-label.d.ts.map +1 -0
  386. package/dist/entity/label/create-entity-label.js +92 -0
  387. package/dist/entity/label/create-entity-label.js.map +1 -0
  388. package/dist/entity/label/create-entity-label.test.d.ts +2 -0
  389. package/dist/entity/label/create-entity-label.test.d.ts.map +1 -0
  390. package/dist/entity/label/create-entity-label.test.js +261 -0
  391. package/dist/entity/label/create-entity-label.test.js.map +1 -0
  392. package/dist/entity/label/schema.d.ts +40 -0
  393. package/dist/entity/label/schema.d.ts.map +1 -0
  394. package/dist/entity/label/schema.js +42 -0
  395. package/dist/entity/label/schema.js.map +1 -0
  396. package/dist/entity/label/schema.test.d.ts +2 -0
  397. package/dist/entity/label/schema.test.d.ts.map +1 -0
  398. package/dist/entity/label/schema.test.js +596 -0
  399. package/dist/entity/label/schema.test.js.map +1 -0
  400. package/dist/entity/schema.d.ts +13 -0
  401. package/dist/entity/schema.d.ts.map +1 -0
  402. package/dist/entity/schema.js +5 -0
  403. package/dist/entity/schema.js.map +1 -0
  404. package/dist/entity/thread/create-entity-thread.d.ts +75 -0
  405. package/dist/entity/thread/create-entity-thread.d.ts.map +1 -0
  406. package/dist/entity/thread/create-entity-thread.js +109 -0
  407. package/dist/entity/thread/create-entity-thread.js.map +1 -0
  408. package/dist/entity/thread/create-entity-thread.test.d.ts +2 -0
  409. package/dist/entity/thread/create-entity-thread.test.d.ts.map +1 -0
  410. package/dist/entity/thread/create-entity-thread.test.js +240 -0
  411. package/dist/entity/thread/create-entity-thread.test.js.map +1 -0
  412. package/dist/entity/thread/query-threads.test.d.ts +2 -0
  413. package/dist/entity/thread/query-threads.test.d.ts.map +1 -0
  414. package/dist/entity/thread/query-threads.test.js +330 -0
  415. package/dist/entity/thread/query-threads.test.js.map +1 -0
  416. package/dist/entity/thread/schema.d.ts +40 -0
  417. package/dist/entity/thread/schema.d.ts.map +1 -0
  418. package/dist/entity/thread/schema.js +42 -0
  419. package/dist/entity/thread/schema.js.map +1 -0
  420. package/dist/entity/thread/schema.test.d.ts +2 -0
  421. package/dist/entity/thread/schema.test.d.ts.map +1 -0
  422. package/dist/entity/thread/schema.test.js +144 -0
  423. package/dist/entity/thread/schema.test.js.map +1 -0
  424. package/dist/entity-views/entity-state-all.d.ts +52 -0
  425. package/dist/entity-views/entity-state-all.d.ts.map +1 -1
  426. package/dist/entity-views/entity-state-all.js +19 -11
  427. package/dist/entity-views/entity-state-all.js.map +1 -1
  428. package/dist/entity-views/entity-state-all.test.js +173 -0
  429. package/dist/entity-views/entity-state-all.test.js.map +1 -1
  430. package/dist/entity-views/entity-state-history.d.ts +55 -15
  431. package/dist/entity-views/entity-state-history.d.ts.map +1 -1
  432. package/dist/entity-views/entity-state-history.js +7 -4
  433. package/dist/entity-views/entity-state-history.js.map +1 -1
  434. package/dist/entity-views/entity-state-history.test.js +70 -15
  435. package/dist/entity-views/entity-state-history.test.js.map +1 -1
  436. package/dist/entity-views/entity-state.d.ts +52 -0
  437. package/dist/entity-views/entity-state.d.ts.map +1 -1
  438. package/dist/entity-views/entity-state.js +18 -10
  439. package/dist/entity-views/entity-state.js.map +1 -1
  440. package/dist/entity-views/entity-state.test.js +120 -1
  441. package/dist/entity-views/entity-state.test.js.map +1 -1
  442. package/dist/entity-views/entity-view-builder.test.js +6 -6
  443. package/dist/entity-views/entity-view-builder.test.js.map +1 -1
  444. package/dist/entity-views/types.d.ts +2 -2
  445. package/dist/file/database-schema.d.ts +25 -0
  446. package/dist/file/database-schema.d.ts.map +1 -0
  447. package/dist/file/database-schema.js +26 -0
  448. package/dist/file/database-schema.js.map +1 -0
  449. package/dist/file/database-schema.test.d.ts +2 -0
  450. package/dist/file/database-schema.test.d.ts.map +1 -0
  451. package/dist/file/database-schema.test.js +60 -0
  452. package/dist/file/database-schema.test.js.map +1 -0
  453. package/dist/file/file-handlers.d.ts.map +1 -1
  454. package/dist/file/file-handlers.js +36 -0
  455. package/dist/file/file-handlers.js.map +1 -1
  456. package/dist/file/file-handlers.test.js +4 -4
  457. package/dist/file/file-handlers.test.js.map +1 -1
  458. package/dist/file/materialize-file-data-at-changeset.d.ts +1 -1
  459. package/dist/file/materialize-file-data-at-changeset.d.ts.map +1 -1
  460. package/dist/file/materialize-file-data-at-changeset.js +55 -29
  461. package/dist/file/materialize-file-data-at-changeset.js.map +1 -1
  462. package/dist/file/materialize-file-data-at-commit.d.ts +9 -0
  463. package/dist/file/materialize-file-data-at-commit.d.ts.map +1 -0
  464. package/dist/file/materialize-file-data-at-commit.js +119 -0
  465. package/dist/file/materialize-file-data-at-commit.js.map +1 -0
  466. package/dist/file/schema.d.ts +68 -5
  467. package/dist/file/schema.d.ts.map +1 -1
  468. package/dist/file/schema.js +118 -50
  469. package/dist/file/schema.js.map +1 -1
  470. package/dist/file/schema.test.js +543 -35
  471. package/dist/file/schema.test.js.map +1 -1
  472. package/dist/file-queue/database-schema.d.ts +17 -0
  473. package/dist/file-queue/database-schema.d.ts.map +1 -0
  474. package/dist/file-queue/database-schema.js +53 -0
  475. package/dist/file-queue/database-schema.js.map +1 -0
  476. package/dist/file-queue/file-handlers.d.ts +1 -1
  477. package/dist/file-queue/file-handlers.d.ts.map +1 -1
  478. package/dist/file-queue/file-handlers.js +60 -29
  479. package/dist/file-queue/file-handlers.js.map +1 -1
  480. package/dist/file-queue/file-queue-process.d.ts.map +1 -1
  481. package/dist/file-queue/file-queue-process.js +26 -17
  482. package/dist/file-queue/file-queue-process.js.map +1 -1
  483. package/dist/file-queue/file-queue-process.test.js +133 -43
  484. package/dist/file-queue/file-queue-process.test.js.map +1 -1
  485. package/dist/file-queue/with-skip-file-queue.d.ts +18 -0
  486. package/dist/file-queue/with-skip-file-queue.d.ts.map +1 -1
  487. package/dist/file-queue/with-skip-file-queue.js +56 -10
  488. package/dist/file-queue/with-skip-file-queue.js.map +1 -1
  489. package/dist/file-queue/with-skip-file-queue.test.js +28 -12
  490. package/dist/file-queue/with-skip-file-queue.test.js.map +1 -1
  491. package/dist/hooks/create-hooks.d.ts +4 -26
  492. package/dist/hooks/create-hooks.d.ts.map +1 -1
  493. package/dist/hooks/create-hooks.js +3 -7
  494. package/dist/hooks/create-hooks.js.map +1 -1
  495. package/dist/index.d.ts +3 -0
  496. package/dist/index.d.ts.map +1 -1
  497. package/dist/index.js +3 -0
  498. package/dist/index.js.map +1 -1
  499. package/dist/key-value/database-schema.d.ts +3 -2
  500. package/dist/key-value/database-schema.d.ts.map +1 -1
  501. package/dist/key-value/database-schema.js +3 -3
  502. package/dist/key-value/database-schema.test.js +13 -4
  503. package/dist/key-value/database-schema.test.js.map +1 -1
  504. package/dist/key-value/index.d.ts +1 -1
  505. package/dist/key-value/index.d.ts.map +1 -1
  506. package/dist/key-value/index.js.map +1 -1
  507. package/dist/key-value/schema.d.ts +63 -3
  508. package/dist/key-value/schema.d.ts.map +1 -1
  509. package/dist/key-value/schema.js +8 -2
  510. package/dist/key-value/schema.js.map +1 -1
  511. package/dist/key-value/schema.test.js +91 -2
  512. package/dist/key-value/schema.test.js.map +1 -1
  513. package/dist/key-value-v2/schema.d.ts +27 -0
  514. package/dist/key-value-v2/schema.d.ts.map +1 -0
  515. package/dist/key-value-v2/schema.js +73 -0
  516. package/dist/key-value-v2/schema.js.map +1 -0
  517. package/dist/key-value-v2/schema.test.d.ts +2 -0
  518. package/dist/key-value-v2/schema.test.d.ts.map +1 -0
  519. package/dist/key-value-v2/schema.test.js +144 -0
  520. package/dist/key-value-v2/schema.test.js.map +1 -0
  521. package/dist/label/create-label.d.ts +5 -5
  522. package/dist/label/create-label.d.ts.map +1 -1
  523. package/dist/label/create-label.js +2 -2
  524. package/dist/label/create-label.js.map +1 -1
  525. package/dist/label/index.d.ts +1 -1
  526. package/dist/label/index.d.ts.map +1 -1
  527. package/dist/label/index.js.map +1 -1
  528. package/dist/label/schema.d.ts +3 -3
  529. package/dist/label/schema.d.ts.map +1 -1
  530. package/dist/label/schema.js +4 -6
  531. package/dist/label/schema.js.map +1 -1
  532. package/dist/lix/close-lix.d.ts +1 -10
  533. package/dist/lix/close-lix.d.ts.map +1 -1
  534. package/dist/lix/close-lix.js +1 -10
  535. package/dist/lix/close-lix.js.map +1 -1
  536. package/dist/lix/merge.test.js +4 -1
  537. package/dist/lix/merge.test.js.map +1 -1
  538. package/dist/lix/new-lix.d.ts +4 -2
  539. package/dist/lix/new-lix.d.ts.map +1 -1
  540. package/dist/lix/new-lix.js +244 -60
  541. package/dist/lix/new-lix.js.map +1 -1
  542. package/dist/lix/new-lix.test.js +175 -1
  543. package/dist/lix/new-lix.test.js.map +1 -1
  544. package/dist/lix/open-lix-in-memory.d.ts +1 -9
  545. package/dist/lix/open-lix-in-memory.d.ts.map +1 -1
  546. package/dist/lix/open-lix-in-memory.js +7 -15
  547. package/dist/lix/open-lix-in-memory.js.map +1 -1
  548. package/dist/lix/open-lix-in-memory.test.js +2 -1
  549. package/dist/lix/open-lix-in-memory.test.js.map +1 -1
  550. package/dist/lix/open-lix.d.ts +12 -13
  551. package/dist/lix/open-lix.d.ts.map +1 -1
  552. package/dist/lix/open-lix.js +147 -55
  553. package/dist/lix/open-lix.js.map +1 -1
  554. package/dist/lix/open-lix.test.js +242 -3
  555. package/dist/lix/open-lix.test.js.map +1 -1
  556. package/dist/lix/storage/in-memory.d.ts +7 -6
  557. package/dist/lix/storage/in-memory.d.ts.map +1 -1
  558. package/dist/lix/storage/in-memory.js +10 -17
  559. package/dist/lix/storage/in-memory.js.map +1 -1
  560. package/dist/lix/storage/in-memory.test.js +7 -68
  561. package/dist/lix/storage/in-memory.test.js.map +1 -1
  562. package/dist/lix/storage/lix-storage-adapter.d.ts +35 -5
  563. package/dist/lix/storage/lix-storage-adapter.d.ts.map +1 -1
  564. package/dist/lix/storage/opfs.d.ts +39 -10
  565. package/dist/lix/storage/opfs.d.ts.map +1 -1
  566. package/dist/lix/storage/opfs.js +148 -37
  567. package/dist/lix/storage/opfs.js.map +1 -1
  568. package/dist/lix/storage/opfs.test.js +203 -24
  569. package/dist/lix/storage/opfs.test.js.map +1 -1
  570. package/dist/lix/to-blob.d.ts +2 -9
  571. package/dist/lix/to-blob.d.ts.map +1 -1
  572. package/dist/lix/to-blob.js +2 -9
  573. package/dist/lix/to-blob.js.map +1 -1
  574. package/dist/log/create-lix-own-log.d.ts +9 -1
  575. package/dist/log/create-lix-own-log.d.ts.map +1 -1
  576. package/dist/log/create-lix-own-log.js +14 -25
  577. package/dist/log/create-lix-own-log.js.map +1 -1
  578. package/dist/log/create-lix-own-log.test.js +9 -5
  579. package/dist/log/create-lix-own-log.test.js.map +1 -1
  580. package/dist/log/create-log.d.ts +2 -2
  581. package/dist/log/create-log.d.ts.map +1 -1
  582. package/dist/log/create-log.js +2 -2
  583. package/dist/log/create-log.js.map +1 -1
  584. package/dist/log/database-schema.d.ts +33 -0
  585. package/dist/log/database-schema.d.ts.map +1 -0
  586. package/dist/log/database-schema.js +14 -0
  587. package/dist/log/database-schema.js.map +1 -0
  588. package/dist/log/database-schema.test.d.ts +2 -0
  589. package/dist/log/database-schema.test.d.ts.map +1 -0
  590. package/dist/log/database-schema.test.js +22 -0
  591. package/dist/log/database-schema.test.js.map +1 -0
  592. package/dist/log/index.d.ts +1 -1
  593. package/dist/log/index.d.ts.map +1 -1
  594. package/dist/log/index.js.map +1 -1
  595. package/dist/log/schema.d.ts +3 -3
  596. package/dist/log/schema.d.ts.map +1 -1
  597. package/dist/log/schema.js +4 -5
  598. package/dist/log/schema.js.map +1 -1
  599. package/dist/observe/create-observe.d.ts.map +1 -1
  600. package/dist/observe/create-observe.js +32 -3
  601. package/dist/observe/create-observe.js.map +1 -1
  602. package/dist/observe/create-observe.test.js +298 -44
  603. package/dist/observe/create-observe.test.js.map +1 -1
  604. package/dist/observe/determine-schema-keys.d.ts +6 -0
  605. package/dist/observe/determine-schema-keys.d.ts.map +1 -0
  606. package/dist/observe/determine-schema-keys.js +145 -0
  607. package/dist/observe/determine-schema-keys.js.map +1 -0
  608. package/dist/observe/determine-schema-keys.test.d.ts +2 -0
  609. package/dist/observe/determine-schema-keys.test.d.ts.map +1 -0
  610. package/dist/observe/determine-schema-keys.test.js +266 -0
  611. package/dist/observe/determine-schema-keys.test.js.map +1 -0
  612. package/dist/own-change-control/apply-own-change.d.ts +5 -1
  613. package/dist/own-change-control/apply-own-change.d.ts.map +1 -1
  614. package/dist/own-change-control/apply-own-change.js +26 -12
  615. package/dist/own-change-control/apply-own-change.js.map +1 -1
  616. package/dist/own-change-control/apply-own-change.test.js +86 -48
  617. package/dist/own-change-control/apply-own-change.test.js.map +1 -1
  618. package/dist/own-change-control/change-controlled-tables.d.ts +5 -7
  619. package/dist/own-change-control/change-controlled-tables.d.ts.map +1 -1
  620. package/dist/own-change-control/change-controlled-tables.js +27 -21
  621. package/dist/own-change-control/change-controlled-tables.js.map +1 -1
  622. package/dist/own-change-control/change-controlled-tables.test.js +35 -5
  623. package/dist/own-change-control/change-controlled-tables.test.js.map +1 -1
  624. package/dist/own-change-control/database-triggers.d.ts +2 -1
  625. package/dist/own-change-control/database-triggers.d.ts.map +1 -1
  626. package/dist/own-change-control/database-triggers.js +209 -67
  627. package/dist/own-change-control/database-triggers.js.map +1 -1
  628. package/dist/own-change-control/database-triggers.test.js +139 -8
  629. package/dist/own-change-control/database-triggers.test.js.map +1 -1
  630. package/dist/own-change-control/with-skip-own-change-control.d.ts.map +1 -1
  631. package/dist/own-change-control/with-skip-own-change-control.js +28 -6
  632. package/dist/own-change-control/with-skip-own-change-control.js.map +1 -1
  633. package/dist/own-change-control/with-skip-own-change-control.test.js +38 -1
  634. package/dist/own-change-control/with-skip-own-change-control.test.js.map +1 -1
  635. package/dist/plugin/lix-plugin.d.ts +3 -3
  636. package/dist/plugin/lix-plugin.d.ts.map +1 -1
  637. package/dist/plugin/load-plugin.d.ts.map +1 -1
  638. package/dist/plugin/load-plugin.js.map +1 -1
  639. package/dist/prototype/database-schema.d.ts +43 -0
  640. package/dist/prototype/database-schema.d.ts.map +1 -0
  641. package/dist/prototype/database-schema.js +72 -0
  642. package/dist/prototype/database-schema.js.map +1 -0
  643. package/dist/prototype/file-handlers.d.ts +24 -0
  644. package/dist/prototype/file-handlers.d.ts.map +1 -0
  645. package/dist/prototype/file-handlers.js +129 -0
  646. package/dist/prototype/file-handlers.js.map +1 -0
  647. package/dist/prototype/file-schema.d.ts +47 -0
  648. package/dist/prototype/file-schema.d.ts.map +1 -0
  649. package/dist/prototype/file-schema.js +135 -0
  650. package/dist/prototype/file-schema.js.map +1 -0
  651. package/dist/prototype/file-schema.test.d.ts +2 -0
  652. package/dist/prototype/file-schema.test.d.ts.map +1 -0
  653. package/dist/prototype/file-schema.test.js +146 -0
  654. package/dist/prototype/file-schema.test.js.map +1 -0
  655. package/dist/prototype/get-and-materialize-row.d.ts +5 -0
  656. package/dist/prototype/get-and-materialize-row.d.ts.map +1 -0
  657. package/dist/prototype/get-and-materialize-row.js +99 -0
  658. package/dist/prototype/get-and-materialize-row.js.map +1 -0
  659. package/dist/prototype/json-plugin.d.ts +49 -0
  660. package/dist/prototype/json-plugin.d.ts.map +1 -0
  661. package/dist/prototype/json-plugin.js +104 -0
  662. package/dist/prototype/json-plugin.js.map +1 -0
  663. package/dist/prototype/validate-file-path.d.ts +16 -0
  664. package/dist/prototype/validate-file-path.d.ts.map +1 -0
  665. package/dist/prototype/validate-file-path.js +44 -0
  666. package/dist/prototype/validate-file-path.js.map +1 -0
  667. package/dist/prototype/validate-file-path.test.d.ts +2 -0
  668. package/dist/prototype/validate-file-path.test.d.ts.map +1 -0
  669. package/dist/prototype/validate-file-path.test.js +36 -0
  670. package/dist/prototype/validate-file-path.test.js.map +1 -0
  671. package/dist/prototype/version-schema.d.ts +34 -0
  672. package/dist/prototype/version-schema.d.ts.map +1 -0
  673. package/dist/prototype/version-schema.js +86 -0
  674. package/dist/prototype/version-schema.js.map +1 -0
  675. package/dist/prototype/version-schema.test.d.ts +2 -0
  676. package/dist/prototype/version-schema.test.d.ts.map +1 -0
  677. package/dist/prototype/version-schema.test.js +114 -0
  678. package/dist/prototype/version-schema.test.js.map +1 -0
  679. package/dist/query-filter/change-conflict-in-version.d.ts +2 -0
  680. package/dist/query-filter/change-conflict-in-version.d.ts.map +1 -1
  681. package/dist/query-filter/change-conflict-in-version.js +2 -0
  682. package/dist/query-filter/change-conflict-in-version.js.map +1 -1
  683. package/dist/query-filter/change-in-version.d.ts +2 -0
  684. package/dist/query-filter/change-in-version.d.ts.map +1 -1
  685. package/dist/query-filter/change-in-version.js +2 -0
  686. package/dist/query-filter/change-in-version.js.map +1 -1
  687. package/dist/query-filter/change-is-leaf-in-version.d.ts +1 -0
  688. package/dist/query-filter/change-is-leaf-in-version.d.ts.map +1 -1
  689. package/dist/query-filter/change-is-leaf-in-version.js +1 -0
  690. package/dist/query-filter/change-is-leaf-in-version.js.map +1 -1
  691. package/dist/query-filter/change-is-leaf-of.d.ts +2 -0
  692. package/dist/query-filter/change-is-leaf-of.d.ts.map +1 -1
  693. package/dist/query-filter/change-is-leaf-of.js +2 -0
  694. package/dist/query-filter/change-is-leaf-of.js.map +1 -1
  695. package/dist/query-filter/change-is-leaf-v2.d.ts +69 -0
  696. package/dist/query-filter/change-is-leaf-v2.d.ts.map +1 -0
  697. package/dist/query-filter/change-is-leaf-v2.js +116 -0
  698. package/dist/query-filter/change-is-leaf-v2.js.map +1 -0
  699. package/dist/query-filter/change-is-leaf-v2.test.d.ts +2 -0
  700. package/dist/query-filter/change-is-leaf-v2.test.d.ts.map +1 -0
  701. package/dist/query-filter/change-is-leaf-v2.test.js +237 -0
  702. package/dist/query-filter/change-is-leaf-v2.test.js.map +1 -0
  703. package/dist/query-filter/change-is-leaf.d.ts +2 -0
  704. package/dist/query-filter/change-is-leaf.d.ts.map +1 -1
  705. package/dist/query-filter/change-is-leaf.js +2 -0
  706. package/dist/query-filter/change-is-leaf.js.map +1 -1
  707. package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts +2 -0
  708. package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts.map +1 -1
  709. package/dist/query-filter/change-is-lowest-common-ancestor-of.js +4 -0
  710. package/dist/query-filter/change-is-lowest-common-ancestor-of.js.map +1 -1
  711. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js +5 -3
  712. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js.map +1 -1
  713. package/dist/query-filter/change-set-element-in-ancestry-of.d.ts +10 -10
  714. package/dist/query-filter/change-set-element-in-ancestry-of.d.ts.map +1 -1
  715. package/dist/query-filter/change-set-element-in-ancestry-of.js +22 -17
  716. package/dist/query-filter/change-set-element-in-ancestry-of.js.map +1 -1
  717. package/dist/query-filter/change-set-element-in-ancestry-of.test.js +99 -26
  718. package/dist/query-filter/change-set-element-in-ancestry-of.test.js.map +1 -1
  719. package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts +21 -0
  720. package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts.map +1 -0
  721. package/dist/query-filter/change-set-element-in-symmetric-difference-of.js +37 -0
  722. package/dist/query-filter/change-set-element-in-symmetric-difference-of.js.map +1 -0
  723. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts +2 -0
  724. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts.map +1 -0
  725. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js +276 -0
  726. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js.map +1 -0
  727. package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts +2 -2
  728. package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts.map +1 -1
  729. package/dist/query-filter/change-set-element-in-symmetric-difference.js.map +1 -1
  730. package/dist/query-filter/change-set-element-in-symmetric-difference.test.js.map +1 -1
  731. package/dist/query-filter/change-set-element-is-leaf-of.d.ts +11 -11
  732. package/dist/query-filter/change-set-element-is-leaf-of.d.ts.map +1 -1
  733. package/dist/query-filter/change-set-element-is-leaf-of.js +58 -36
  734. package/dist/query-filter/change-set-element-is-leaf-of.js.map +1 -1
  735. package/dist/query-filter/change-set-element-is-leaf-of.test.js +83 -24
  736. package/dist/query-filter/change-set-element-is-leaf-of.test.js.map +1 -1
  737. package/dist/query-filter/change-set-is-ancestor-of.d.ts +2 -2
  738. package/dist/query-filter/change-set-is-ancestor-of.d.ts.map +1 -1
  739. package/dist/query-filter/change-set-is-ancestor-of.js.map +1 -1
  740. package/dist/query-filter/change-set-is-descendant-of.d.ts +2 -2
  741. package/dist/query-filter/change-set-is-descendant-of.d.ts.map +1 -1
  742. package/dist/query-filter/change-set-is-descendant-of.js.map +1 -1
  743. package/dist/query-filter/commit-is-ancestor-of.d.ts +51 -0
  744. package/dist/query-filter/commit-is-ancestor-of.d.ts.map +1 -0
  745. package/dist/query-filter/commit-is-ancestor-of.js +63 -0
  746. package/dist/query-filter/commit-is-ancestor-of.js.map +1 -0
  747. package/dist/query-filter/commit-is-ancestor-of.test.d.ts +2 -0
  748. package/dist/query-filter/commit-is-ancestor-of.test.d.ts.map +1 -0
  749. package/dist/query-filter/commit-is-ancestor-of.test.js +292 -0
  750. package/dist/query-filter/commit-is-ancestor-of.test.js.map +1 -0
  751. package/dist/query-filter/commit-is-descendant-of.d.ts +44 -0
  752. package/dist/query-filter/commit-is-descendant-of.d.ts.map +1 -0
  753. package/dist/query-filter/commit-is-descendant-of.js +56 -0
  754. package/dist/query-filter/commit-is-descendant-of.js.map +1 -0
  755. package/dist/query-filter/commit-is-descendant-of.test.d.ts +2 -0
  756. package/dist/query-filter/commit-is-descendant-of.test.d.ts.map +1 -0
  757. package/dist/query-filter/commit-is-descendant-of.test.js +325 -0
  758. package/dist/query-filter/commit-is-descendant-of.test.js.map +1 -0
  759. package/dist/query-filter/index.d.ts +2 -4
  760. package/dist/query-filter/index.d.ts.map +1 -1
  761. package/dist/query-filter/index.js +2 -4
  762. package/dist/query-filter/index.js.map +1 -1
  763. package/dist/query-filter/version-change-in-difference.d.ts +2 -0
  764. package/dist/query-filter/version-change-in-difference.d.ts.map +1 -1
  765. package/dist/query-filter/version-change-in-difference.js +2 -0
  766. package/dist/query-filter/version-change-in-difference.js.map +1 -1
  767. package/dist/query-filter/version-change-in-symmetric-difference.d.ts +2 -0
  768. package/dist/query-filter/version-change-in-symmetric-difference.d.ts.map +1 -1
  769. package/dist/query-filter/version-change-in-symmetric-difference.js +2 -0
  770. package/dist/query-filter/version-change-in-symmetric-difference.js.map +1 -1
  771. package/dist/schema-definition/definition.d.ts +73 -30
  772. package/dist/schema-definition/definition.d.ts.map +1 -1
  773. package/dist/schema-definition/definition.js +38 -14
  774. package/dist/schema-definition/definition.js.map +1 -1
  775. package/dist/schema-definition/definition.test.js +70 -25
  776. package/dist/schema-definition/definition.test.js.map +1 -1
  777. package/dist/schema-definition/validate-lix-schema.d.ts.map +1 -1
  778. package/dist/schema-definition/validate-lix-schema.js.map +1 -1
  779. package/dist/schema-definition/validate-lix-schema.test.js +1 -1
  780. package/dist/schema-definition/validate-lix-schema.test.js.map +1 -1
  781. package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js +2 -2
  782. package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js.map +1 -1
  783. package/dist/server-protocol-handler/routes/push-v1.test.js +1 -1
  784. package/dist/server-protocol-handler/routes/push-v1.test.js.map +1 -1
  785. package/dist/services/env-variables/index.js +1 -1
  786. package/dist/services/env-variables/index.js.map +1 -1
  787. package/dist/snapshot/create-snapshot.d.ts +2 -2
  788. package/dist/snapshot/create-snapshot.d.ts.map +1 -1
  789. package/dist/snapshot/create-snapshot.test.js +3 -3
  790. package/dist/snapshot/create-snapshot.test.js.map +1 -1
  791. package/dist/snapshot/database-schema.d.ts +19 -0
  792. package/dist/snapshot/database-schema.d.ts.map +1 -0
  793. package/dist/snapshot/database-schema.js +33 -0
  794. package/dist/snapshot/database-schema.js.map +1 -0
  795. package/dist/snapshot/database-schema.test.d.ts +2 -0
  796. package/dist/snapshot/database-schema.test.d.ts.map +1 -0
  797. package/dist/snapshot/database-schema.test.js +58 -0
  798. package/dist/snapshot/database-schema.test.js.map +1 -0
  799. package/dist/snapshot/schema.d.ts.map +1 -1
  800. package/dist/snapshot/schema.js +10 -2
  801. package/dist/snapshot/schema.js.map +1 -1
  802. package/dist/snapshot/schema.test.js +86 -0
  803. package/dist/snapshot/schema.test.js.map +1 -1
  804. package/dist/state/cache/clear-state-cache.d.ts +8 -0
  805. package/dist/state/cache/clear-state-cache.d.ts.map +1 -0
  806. package/dist/state/cache/clear-state-cache.js +14 -0
  807. package/dist/state/cache/clear-state-cache.js.map +1 -0
  808. package/dist/state/cache/clear-state-cache.test.d.ts +2 -0
  809. package/dist/state/cache/clear-state-cache.test.d.ts.map +1 -0
  810. package/dist/state/cache/clear-state-cache.test.js +34 -0
  811. package/dist/state/cache/clear-state-cache.test.js.map +1 -0
  812. package/dist/state/cache/is-stale-state-cache.d.ts +5 -0
  813. package/dist/state/cache/is-stale-state-cache.d.ts.map +1 -0
  814. package/dist/state/cache/is-stale-state-cache.js +22 -0
  815. package/dist/state/cache/is-stale-state-cache.js.map +1 -0
  816. package/dist/state/cache/is-stale-state-cache.test.d.ts +2 -0
  817. package/dist/state/cache/is-stale-state-cache.test.d.ts.map +1 -0
  818. package/dist/state/cache/is-stale-state-cache.test.js +27 -0
  819. package/dist/state/cache/is-stale-state-cache.test.js.map +1 -0
  820. package/dist/state/cache/mark-state-cache-as-stale.d.ts +10 -0
  821. package/dist/state/cache/mark-state-cache-as-stale.d.ts.map +1 -0
  822. package/dist/state/cache/mark-state-cache-as-stale.js +42 -0
  823. package/dist/state/cache/mark-state-cache-as-stale.js.map +1 -0
  824. package/dist/state/cache/populate-state-cache.d.ts +9 -0
  825. package/dist/state/cache/populate-state-cache.d.ts.map +1 -0
  826. package/dist/state/cache/populate-state-cache.js +106 -0
  827. package/dist/state/cache/populate-state-cache.js.map +1 -0
  828. package/dist/state/cache/populate-state-cache.test.d.ts +2 -0
  829. package/dist/state/cache/populate-state-cache.test.d.ts.map +1 -0
  830. package/dist/state/cache/populate-state-cache.test.js +204 -0
  831. package/dist/state/cache/populate-state-cache.test.js.map +1 -0
  832. package/dist/state/cache/schema.d.ts +20 -0
  833. package/dist/state/cache/schema.d.ts.map +1 -0
  834. package/dist/state/cache/schema.js +21 -0
  835. package/dist/state/cache/schema.js.map +1 -0
  836. package/dist/state/cache/update-state-cache.d.ts +21 -0
  837. package/dist/state/cache/update-state-cache.d.ts.map +1 -0
  838. package/dist/state/cache/update-state-cache.js +294 -0
  839. package/dist/state/cache/update-state-cache.js.map +1 -0
  840. package/dist/state/cache/update-state-cache.test.d.ts +2 -0
  841. package/dist/state/cache/update-state-cache.test.d.ts.map +1 -0
  842. package/dist/state/cache/update-state-cache.test.js +440 -0
  843. package/dist/state/cache/update-state-cache.test.js.map +1 -0
  844. package/dist/state/commit.d.ts +18 -0
  845. package/dist/state/commit.d.ts.map +1 -0
  846. package/dist/state/commit.js +457 -0
  847. package/dist/state/commit.js.map +1 -0
  848. package/dist/state/commit.test.d.ts +2 -0
  849. package/dist/state/commit.test.d.ts.map +1 -0
  850. package/dist/state/commit.test.js +1173 -0
  851. package/dist/state/commit.test.js.map +1 -0
  852. package/dist/state/get-version-record-by-id-or-throw.d.ts +2 -2
  853. package/dist/state/get-version-record-by-id-or-throw.d.ts.map +1 -1
  854. package/dist/state/get-version-record-by-id-or-throw.js.map +1 -1
  855. package/dist/state/handle-state-mutation.d.ts +0 -12
  856. package/dist/state/handle-state-mutation.d.ts.map +1 -1
  857. package/dist/state/handle-state-mutation.js +11 -206
  858. package/dist/state/handle-state-mutation.js.map +1 -1
  859. package/dist/state/handle-state-mutation.test.js +213 -159
  860. package/dist/state/handle-state-mutation.test.js.map +1 -1
  861. package/dist/state/insert-transaction-state.d.ts +71 -0
  862. package/dist/state/insert-transaction-state.d.ts.map +1 -0
  863. package/dist/state/insert-transaction-state.js +272 -0
  864. package/dist/state/insert-transaction-state.js.map +1 -0
  865. package/dist/state/insert-transaction-state.test.d.ts +2 -0
  866. package/dist/state/insert-transaction-state.test.d.ts.map +1 -0
  867. package/dist/state/insert-transaction-state.test.js +789 -0
  868. package/dist/state/insert-transaction-state.test.js.map +1 -0
  869. package/dist/state/materialize-state.d.ts +3 -0
  870. package/dist/state/materialize-state.d.ts.map +1 -0
  871. package/dist/state/materialize-state.js +230 -0
  872. package/dist/state/materialize-state.js.map +1 -0
  873. package/dist/state/materialize-state.test.d.ts +2 -0
  874. package/dist/state/materialize-state.test.d.ts.map +1 -0
  875. package/dist/state/materialize-state.test.js +1934 -0
  876. package/dist/state/materialize-state.test.js.map +1 -0
  877. package/dist/state/primary-key.d.ts +39 -0
  878. package/dist/state/primary-key.d.ts.map +1 -0
  879. package/dist/state/primary-key.js +62 -0
  880. package/dist/state/primary-key.js.map +1 -0
  881. package/dist/state/primary-key.test.d.ts +2 -0
  882. package/dist/state/primary-key.test.d.ts.map +1 -0
  883. package/dist/state/primary-key.test.js +114 -0
  884. package/dist/state/primary-key.test.js.map +1 -0
  885. package/dist/state/resolved-state-view.d.ts +33 -0
  886. package/dist/state/resolved-state-view.d.ts.map +1 -0
  887. package/dist/state/resolved-state-view.js +182 -0
  888. package/dist/state/resolved-state-view.js.map +1 -0
  889. package/dist/state/resolved-state-view.test.d.ts +2 -0
  890. package/dist/state/resolved-state-view.test.d.ts.map +1 -0
  891. package/dist/state/resolved-state-view.test.js +433 -0
  892. package/dist/state/resolved-state-view.test.js.map +1 -0
  893. package/dist/state/schema.d.ts +6 -19
  894. package/dist/state/schema.d.ts.map +1 -1
  895. package/dist/state/schema.js +533 -796
  896. package/dist/state/schema.js.map +1 -1
  897. package/dist/state/schema.test.js +1684 -1013
  898. package/dist/state/schema.test.js.map +1 -1
  899. package/dist/state/untracked/schema.d.ts +25 -0
  900. package/dist/state/untracked/schema.d.ts.map +1 -0
  901. package/dist/state/untracked/schema.js +38 -0
  902. package/dist/state/untracked/schema.js.map +1 -0
  903. package/dist/state/untracked/schema.test.d.ts +2 -0
  904. package/dist/state/untracked/schema.test.d.ts.map +1 -0
  905. package/dist/state/untracked/schema.test.js +275 -0
  906. package/dist/state/untracked/schema.test.js.map +1 -0
  907. package/dist/state/untracked/update-untracked-state.d.ts +36 -0
  908. package/dist/state/untracked/update-untracked-state.d.ts.map +1 -0
  909. package/dist/state/untracked/update-untracked-state.js +113 -0
  910. package/dist/state/untracked/update-untracked-state.js.map +1 -0
  911. package/dist/state/untracked/update-untracked-state.test.d.ts +2 -0
  912. package/dist/state/untracked/update-untracked-state.test.d.ts.map +1 -0
  913. package/dist/state/untracked/update-untracked-state.test.js +417 -0
  914. package/dist/state/untracked/update-untracked-state.test.js.map +1 -0
  915. package/dist/state/validate-snapshot-content.d.ts +9 -0
  916. package/dist/state/validate-snapshot-content.d.ts.map +1 -0
  917. package/dist/state/validate-snapshot-content.js +42 -0
  918. package/dist/state/validate-snapshot-content.js.map +1 -0
  919. package/dist/state/validate-snapshot-content.test.d.ts +2 -0
  920. package/dist/state/validate-snapshot-content.test.d.ts.map +1 -0
  921. package/dist/state/validate-snapshot-content.test.js +67 -0
  922. package/dist/state/validate-snapshot-content.test.js.map +1 -0
  923. package/dist/state/validate-state-mutation.d.ts +2 -2
  924. package/dist/state/validate-state-mutation.d.ts.map +1 -1
  925. package/dist/state/validate-state-mutation.js +211 -51
  926. package/dist/state/validate-state-mutation.js.map +1 -1
  927. package/dist/state/validate-state-mutation.test.js +910 -75
  928. package/dist/state/validate-state-mutation.test.js.map +1 -1
  929. package/dist/state-history/schema.d.ts +29 -19
  930. package/dist/state-history/schema.d.ts.map +1 -1
  931. package/dist/state-history/schema.js +49 -37
  932. package/dist/state-history/schema.js.map +1 -1
  933. package/dist/state-history/schema.test.js +221 -67
  934. package/dist/state-history/schema.test.js.map +1 -1
  935. package/dist/stored-schema/index.d.ts +1 -1
  936. package/dist/stored-schema/index.d.ts.map +1 -1
  937. package/dist/stored-schema/index.js +1 -1
  938. package/dist/stored-schema/index.js.map +1 -1
  939. package/dist/stored-schema/schema.d.ts +1 -1
  940. package/dist/stored-schema/schema.d.ts.map +1 -1
  941. package/dist/stored-schema/schema.test.js.map +1 -1
  942. package/dist/sync/push-to-server.test.js.map +1 -1
  943. package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts +8 -0
  944. package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts.map +1 -0
  945. package/dist/test-utilities/simulation-test/cache-miss-simulation.js +79 -0
  946. package/dist/test-utilities/simulation-test/cache-miss-simulation.js.map +1 -0
  947. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts +2 -0
  948. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts.map +1 -0
  949. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js +127 -0
  950. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js.map +1 -0
  951. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts +2 -0
  952. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts.map +1 -0
  953. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js +2 -0
  954. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js.map +1 -0
  955. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts +10 -0
  956. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts.map +1 -0
  957. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js +52 -0
  958. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js.map +1 -0
  959. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts +2 -0
  960. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts.map +1 -0
  961. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js +71 -0
  962. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js.map +1 -0
  963. package/dist/test-utilities/simulation-test/simulation-test.d.ts +82 -0
  964. package/dist/test-utilities/simulation-test/simulation-test.d.ts.map +1 -0
  965. package/dist/test-utilities/simulation-test/simulation-test.js +85 -0
  966. package/dist/test-utilities/simulation-test/simulation-test.js.map +1 -0
  967. package/dist/test-utilities/simulation-test/simulation-test.test.d.ts +2 -0
  968. package/dist/test-utilities/simulation-test/simulation-test.test.d.ts.map +1 -0
  969. package/dist/test-utilities/simulation-test/simulation-test.test.js +310 -0
  970. package/dist/test-utilities/simulation-test/simulation-test.test.js.map +1 -0
  971. package/dist/thread/comment-utils.d.ts +2 -0
  972. package/dist/thread/comment-utils.d.ts.map +1 -0
  973. package/dist/thread/comment-utils.js +2 -0
  974. package/dist/thread/comment-utils.js.map +1 -0
  975. package/dist/thread/comment.d.ts +24 -0
  976. package/dist/thread/comment.d.ts.map +1 -0
  977. package/dist/thread/comment.js +43 -0
  978. package/dist/thread/comment.js.map +1 -0
  979. package/dist/thread/create-thread-comment.d.ts +2 -2
  980. package/dist/thread/create-thread-comment.d.ts.map +1 -1
  981. package/dist/thread/create-thread-comment.js +20 -3
  982. package/dist/thread/create-thread-comment.js.map +1 -1
  983. package/dist/thread/create-thread-comment.test.js +49 -3
  984. package/dist/thread/create-thread-comment.test.js.map +1 -1
  985. package/dist/thread/create-thread.d.ts +18 -4
  986. package/dist/thread/create-thread.d.ts.map +1 -1
  987. package/dist/thread/create-thread.js +24 -3
  988. package/dist/thread/create-thread.js.map +1 -1
  989. package/dist/thread/create-thread.test.js +149 -0
  990. package/dist/thread/create-thread.test.js.map +1 -1
  991. package/dist/thread/database-schema.d.ts +20 -0
  992. package/dist/thread/database-schema.d.ts.map +1 -0
  993. package/dist/thread/database-schema.js +57 -0
  994. package/dist/thread/database-schema.js.map +1 -0
  995. package/dist/thread/database-schema.test.d.ts +2 -0
  996. package/dist/thread/database-schema.test.d.ts.map +1 -0
  997. package/dist/thread/database-schema.test.js +59 -0
  998. package/dist/thread/database-schema.test.js.map +1 -0
  999. package/dist/thread/index.d.ts +2 -1
  1000. package/dist/thread/index.d.ts.map +1 -1
  1001. package/dist/thread/schema.d.ts +13 -10
  1002. package/dist/thread/schema.d.ts.map +1 -1
  1003. package/dist/thread/schema.js +20 -14
  1004. package/dist/thread/schema.js.map +1 -1
  1005. package/dist/thread/schema.test.js +65 -0
  1006. package/dist/thread/schema.test.js.map +1 -1
  1007. package/dist/version/create-version.d.ts +14 -9
  1008. package/dist/version/create-version.d.ts.map +1 -1
  1009. package/dist/version/create-version.js +40 -12
  1010. package/dist/version/create-version.js.map +1 -1
  1011. package/dist/version/create-version.test.js +80 -25
  1012. package/dist/version/create-version.test.js.map +1 -1
  1013. package/dist/version/database-schema.d.ts +21 -0
  1014. package/dist/version/database-schema.d.ts.map +1 -0
  1015. package/dist/version/database-schema.js +169 -0
  1016. package/dist/version/database-schema.js.map +1 -0
  1017. package/dist/version/database-schema.test.d.ts +2 -0
  1018. package/dist/version/database-schema.test.d.ts.map +1 -0
  1019. package/dist/version/database-schema.test.js +625 -0
  1020. package/dist/version/database-schema.test.js.map +1 -0
  1021. package/dist/version/index.d.ts +1 -1
  1022. package/dist/version/index.d.ts.map +1 -1
  1023. package/dist/version/merge-version.d.ts +3 -0
  1024. package/dist/version/merge-version.d.ts.map +1 -1
  1025. package/dist/version/merge-version.js +3 -0
  1026. package/dist/version/merge-version.js.map +1 -1
  1027. package/dist/version/merge-version.test.js +10 -5
  1028. package/dist/version/merge-version.test.js.map +1 -1
  1029. package/dist/version/schema.d.ts +28 -23
  1030. package/dist/version/schema.d.ts.map +1 -1
  1031. package/dist/version/schema.js +42 -30
  1032. package/dist/version/schema.js.map +1 -1
  1033. package/dist/version/schema.test.js +311 -88
  1034. package/dist/version/schema.test.js.map +1 -1
  1035. package/dist/version/select-active-version.d.ts +7 -0
  1036. package/dist/version/select-active-version.d.ts.map +1 -0
  1037. package/dist/version/select-active-version.js +7 -0
  1038. package/dist/version/select-active-version.js.map +1 -0
  1039. package/dist/version/switch-version.d.ts +3 -3
  1040. package/dist/version/switch-version.d.ts.map +1 -1
  1041. package/dist/version/switch-version.js +1 -1
  1042. package/dist/version/switch-version.test.js +1 -1
  1043. package/dist/version/switch-version.test.js.map +1 -1
  1044. package/dist/version/update-changes-in-version.d.ts +2 -0
  1045. package/dist/version/update-changes-in-version.d.ts.map +1 -1
  1046. package/dist/version/update-changes-in-version.js +2 -0
  1047. package/dist/version/update-changes-in-version.js.map +1 -1
  1048. package/dist/version-v2/create-version.d.ts +18 -0
  1049. package/dist/version-v2/create-version.d.ts.map +1 -0
  1050. package/dist/version-v2/create-version.js +35 -0
  1051. package/dist/version-v2/create-version.js.map +1 -0
  1052. package/dist/version-v2/create-version.test.d.ts +2 -0
  1053. package/dist/version-v2/create-version.test.d.ts.map +1 -0
  1054. package/dist/version-v2/create-version.test.js +88 -0
  1055. package/dist/version-v2/create-version.test.js.map +1 -0
  1056. package/dist/version-v2/database-schema.d.ts +21 -0
  1057. package/dist/version-v2/database-schema.d.ts.map +1 -0
  1058. package/dist/version-v2/database-schema.js +169 -0
  1059. package/dist/version-v2/database-schema.js.map +1 -0
  1060. package/dist/version-v2/database-schema.test.d.ts +2 -0
  1061. package/dist/version-v2/database-schema.test.d.ts.map +1 -0
  1062. package/dist/version-v2/database-schema.test.js +625 -0
  1063. package/dist/version-v2/database-schema.test.js.map +1 -0
  1064. package/dist/version-v2/index.d.ts +2 -0
  1065. package/dist/version-v2/index.d.ts.map +1 -0
  1066. package/dist/version-v2/index.js +2 -0
  1067. package/dist/version-v2/index.js.map +1 -0
  1068. package/dist/version-v2/swich-version.d.ts +27 -0
  1069. package/dist/version-v2/swich-version.d.ts.map +1 -0
  1070. package/dist/version-v2/swich-version.js +46 -0
  1071. package/dist/version-v2/swich-version.js.map +1 -0
  1072. package/dist/version-v2/switch-version.d.ts +27 -0
  1073. package/dist/version-v2/switch-version.d.ts.map +1 -0
  1074. package/dist/version-v2/switch-version.js +91 -0
  1075. package/dist/version-v2/switch-version.js.map +1 -0
  1076. package/dist/version-v2/switch-version.test.d.ts +2 -0
  1077. package/dist/version-v2/switch-version.test.d.ts.map +1 -0
  1078. package/dist/version-v2/switch-version.test.js +110 -0
  1079. package/dist/version-v2/switch-version.test.js.map +1 -0
  1080. package/dist/version-v2/with-skip-update-working-change-set.d.ts +3 -0
  1081. package/dist/version-v2/with-skip-update-working-change-set.d.ts.map +1 -0
  1082. package/dist/version-v2/with-skip-update-working-change-set.js +50 -0
  1083. package/dist/version-v2/with-skip-update-working-change-set.js.map +1 -0
  1084. package/dist/version-v2/with-skip-update-working-change-set.test.d.ts +2 -0
  1085. package/dist/version-v2/with-skip-update-working-change-set.test.d.ts.map +1 -0
  1086. package/dist/version-v2/with-skip-update-working-change-set.test.js +49 -0
  1087. package/dist/version-v2/with-skip-update-working-change-set.test.js.map +1 -0
  1088. package/package.json +3 -3
  1089. package/src/account/create-account.ts +7 -7
  1090. package/src/account/index.ts +2 -2
  1091. package/src/account/schema.test.ts +99 -99
  1092. package/src/account/schema.ts +91 -35
  1093. package/src/account/switch-account.test.ts +4 -4
  1094. package/src/account/switch-account.ts +6 -6
  1095. package/src/change/index.ts +4 -1
  1096. package/src/change/schema.test.ts +38 -0
  1097. package/src/change/schema.ts +91 -11
  1098. package/src/change-author/index.ts +4 -1
  1099. package/src/change-author/schema.test.ts +306 -242
  1100. package/src/change-author/schema.ts +18 -12
  1101. package/src/change-proposal/create-change-proposal.ts +3 -3
  1102. package/src/change-proposal/database-schema.ts +1 -1
  1103. package/src/change-set/apply-change-set.test.ts +10 -7
  1104. package/src/change-set/apply-change-set.ts +44 -56
  1105. package/src/change-set/create-change-set.test.ts +0 -39
  1106. package/src/change-set/create-change-set.ts +9 -33
  1107. package/src/change-set/index.ts +3 -11
  1108. package/src/change-set/schema.test.ts +0 -310
  1109. package/src/change-set/schema.ts +43 -100
  1110. package/src/commit/apply-commit.test.ts +426 -0
  1111. package/src/commit/apply-commit.ts +74 -0
  1112. package/src/{change-set → commit}/create-checkpoint.test.ts +244 -26
  1113. package/src/commit/create-checkpoint.ts +140 -0
  1114. package/src/commit/create-commit.ts +80 -0
  1115. package/src/{change-set/create-merge-change-set.test.ts → commit/create-merge-commit.test.ts} +50 -19
  1116. package/src/{change-set/create-merge-change-set.ts → commit/create-merge-commit.ts} +55 -16
  1117. package/src/{change-set/create-transition-change-set.test.ts → commit/create-transition-commit.test.ts} +43 -32
  1118. package/src/{change-set/create-transition-change-set.ts → commit/create-transition-commit.ts} +60 -22
  1119. package/src/{change-set/create-undo-change-set.test.ts → commit/create-undo-commit.test.ts} +52 -23
  1120. package/src/{change-set/create-undo-change-set.ts → commit/create-undo-commit.ts} +59 -26
  1121. package/src/commit/index.ts +11 -0
  1122. package/src/commit/schema.test.ts +257 -0
  1123. package/src/commit/schema.ts +104 -0
  1124. package/src/database/index.ts +0 -2
  1125. package/src/database/init-db.ts +113 -45
  1126. package/src/database/kysely-plugin/json-column-plugin.test.ts +404 -0
  1127. package/src/database/kysely-plugin/json-column-plugin.ts +80 -15
  1128. package/src/database/nano-id.test.ts +3 -3
  1129. package/src/database/nano-id.ts +4 -1
  1130. package/src/database/schema.ts +26 -24
  1131. package/src/deterministic/generate-human-id.test.ts +154 -0
  1132. package/src/deterministic/generate-human-id.ts +94 -0
  1133. package/src/deterministic/index.ts +7 -0
  1134. package/src/deterministic/is-deterministic-mode.test.ts +133 -0
  1135. package/src/deterministic/is-deterministic-mode.ts +32 -0
  1136. package/src/deterministic/nano-id.test.ts +200 -0
  1137. package/src/deterministic/nano-id.ts +188 -0
  1138. package/src/deterministic/options.test.ts +157 -0
  1139. package/src/deterministic/options.ts +62 -0
  1140. package/src/deterministic/random.test.ts +293 -0
  1141. package/src/deterministic/random.ts +261 -0
  1142. package/src/deterministic/sequence.test.ts +93 -0
  1143. package/src/deterministic/sequence.ts +132 -0
  1144. package/src/deterministic/timestamp.test.ts +170 -0
  1145. package/src/deterministic/timestamp.ts +83 -0
  1146. package/src/deterministic/uuid-v7.test.ts +144 -0
  1147. package/src/deterministic/uuid-v7.ts +82 -0
  1148. package/src/entity/eb-entity.test.ts +687 -0
  1149. package/src/entity/eb-entity.ts +203 -0
  1150. package/src/entity/index.ts +12 -0
  1151. package/src/entity/label/create-entity-label.test.ts +316 -0
  1152. package/src/entity/label/create-entity-label.ts +113 -0
  1153. package/src/entity/label/schema.test.ts +692 -0
  1154. package/src/entity/label/schema.ts +55 -0
  1155. package/src/entity/schema.ts +22 -0
  1156. package/src/entity/thread/create-entity-thread.test.ts +282 -0
  1157. package/src/entity/thread/create-entity-thread.ts +134 -0
  1158. package/src/entity/thread/query-threads.test.ts +394 -0
  1159. package/src/entity/thread/schema.test.ts +170 -0
  1160. package/src/entity/thread/schema.ts +55 -0
  1161. package/src/entity-views/README.md +214 -0
  1162. package/src/entity-views/entity-state-all.test.ts +202 -0
  1163. package/src/entity-views/entity-state-all.ts +80 -11
  1164. package/src/entity-views/entity-state-history.test.ts +78 -16
  1165. package/src/entity-views/entity-state-history.ts +68 -19
  1166. package/src/entity-views/entity-state.test.ts +141 -1
  1167. package/src/entity-views/entity-state.ts +79 -10
  1168. package/src/entity-views/entity-view-builder.test.ts +6 -6
  1169. package/src/entity-views/types.ts +2 -2
  1170. package/src/file/file-handlers.test.ts +4 -4
  1171. package/src/file/file-handlers.ts +40 -0
  1172. package/src/file/materialize-file-data-at-commit.ts +157 -0
  1173. package/src/file/schema.test.ts +693 -37
  1174. package/src/file/schema.ts +183 -56
  1175. package/src/hooks/create-hooks.ts +7 -40
  1176. package/src/index.ts +3 -0
  1177. package/src/key-value/index.ts +1 -1
  1178. package/src/key-value/schema.test.ts +103 -2
  1179. package/src/key-value/schema.ts +66 -5
  1180. package/src/label/create-label.ts +7 -7
  1181. package/src/label/index.ts +1 -1
  1182. package/src/label/schema.ts +7 -10
  1183. package/src/lix/new-lix.test.ts +202 -2
  1184. package/src/lix/new-lix.ts +305 -81
  1185. package/src/lix/open-lix.test.ts +308 -5
  1186. package/src/lix/open-lix.ts +169 -68
  1187. package/src/lix/storage/in-memory.test.ts +9 -83
  1188. package/src/lix/storage/in-memory.ts +13 -18
  1189. package/src/lix/storage/lix-storage-adapter.ts +41 -5
  1190. package/src/lix/storage/opfs.test.ts +254 -31
  1191. package/src/lix/storage/opfs.ts +178 -40
  1192. package/src/log/create-lix-own-log.test.ts +11 -7
  1193. package/src/log/create-lix-own-log.ts +21 -32
  1194. package/src/log/create-log.ts +4 -4
  1195. package/src/log/index.ts +1 -1
  1196. package/src/log/schema.ts +6 -10
  1197. package/src/observe/create-observe.test.ts +395 -60
  1198. package/src/observe/create-observe.ts +41 -3
  1199. package/src/observe/determine-schema-keys.test.ts +371 -0
  1200. package/src/observe/determine-schema-keys.ts +165 -0
  1201. package/src/plugin/lix-plugin.ts +3 -3
  1202. package/src/query-filter/change-set-element-in-ancestry-of.test.ts +112 -26
  1203. package/src/query-filter/change-set-element-in-ancestry-of.ts +25 -20
  1204. package/src/query-filter/change-set-element-in-symmetric-difference.test.ts +6 -6
  1205. package/src/query-filter/change-set-element-in-symmetric-difference.ts +3 -3
  1206. package/src/query-filter/change-set-element-is-leaf-of.test.ts +83 -24
  1207. package/src/query-filter/change-set-element-is-leaf-of.ts +61 -39
  1208. package/src/query-filter/commit-is-ancestor-of.test.ts +333 -0
  1209. package/src/query-filter/commit-is-ancestor-of.ts +77 -0
  1210. package/src/query-filter/commit-is-descendant-of.test.ts +365 -0
  1211. package/src/query-filter/commit-is-descendant-of.ts +70 -0
  1212. package/src/query-filter/index.ts +2 -4
  1213. package/src/schema-definition/definition.test.ts +73 -25
  1214. package/src/schema-definition/definition.ts +87 -30
  1215. package/src/schema-definition/index.ts +1 -1
  1216. package/src/schema-definition/validate-lix-schema.test.ts +14 -5
  1217. package/src/schema-definition/validate-lix-schema.ts +9 -13
  1218. package/src/server-protocol-handler/environment/create-in-memory-environment.test.ts +2 -2
  1219. package/src/server-protocol-handler/routes/push-v1.test.ts +1 -1
  1220. package/src/snapshot/schema.test.ts +113 -0
  1221. package/src/snapshot/schema.ts +10 -2
  1222. package/src/state/README.md +95 -0
  1223. package/src/state/cache/clear-state-cache.test.ts +43 -0
  1224. package/src/state/cache/clear-state-cache.ts +16 -0
  1225. package/src/state/cache/is-stale-state-cache.test.ts +35 -0
  1226. package/src/state/cache/is-stale-state-cache.ts +29 -0
  1227. package/src/state/cache/mark-state-cache-as-stale.ts +53 -0
  1228. package/src/state/cache/populate-state-cache.test.ts +259 -0
  1229. package/src/state/cache/populate-state-cache.ts +124 -0
  1230. package/src/state/cache/schema.ts +41 -0
  1231. package/src/state/cache/update-state-cache.test.ts +510 -0
  1232. package/src/state/cache/update-state-cache.ts +317 -0
  1233. package/src/state/commit.test.ts +1402 -0
  1234. package/src/state/commit.ts +587 -0
  1235. package/src/state/insert-transaction-state.test.ts +928 -0
  1236. package/src/state/insert-transaction-state.ts +306 -0
  1237. package/src/state/materialize-state.test.ts +2358 -0
  1238. package/src/state/materialize-state.ts +235 -0
  1239. package/src/state/primary-key.test.ts +158 -0
  1240. package/src/state/primary-key.ts +80 -0
  1241. package/src/state/resolved-state-view.test.ts +521 -0
  1242. package/src/state/resolved-state-view.ts +202 -0
  1243. package/src/state/schema.test.ts +3116 -2272
  1244. package/src/state/schema.ts +614 -910
  1245. package/src/state/untracked/schema.test.ts +301 -0
  1246. package/src/state/untracked/schema.ts +55 -0
  1247. package/src/state/untracked/update-untracked-state.test.ts +466 -0
  1248. package/src/state/untracked/update-untracked-state.ts +133 -0
  1249. package/src/state/validate-state-mutation.test.ts +1032 -77
  1250. package/src/state/validate-state-mutation.ts +270 -68
  1251. package/src/state-history/schema.test.ts +246 -71
  1252. package/src/state-history/schema.ts +78 -55
  1253. package/src/stored-schema/index.ts +4 -1
  1254. package/src/stored-schema/schema.test.ts +7 -7
  1255. package/src/stored-schema/schema.ts +1 -1
  1256. package/src/sync/push-to-server.test.ts +6 -6
  1257. package/src/test-utilities/simulation-test/cache-miss-simulation.test.ts +162 -0
  1258. package/src/test-utilities/simulation-test/cache-miss-simulation.ts +99 -0
  1259. package/src/test-utilities/simulation-test/chaotic-timestamp-simulation.ts +0 -0
  1260. package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.test.ts +88 -0
  1261. package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.ts +69 -0
  1262. package/src/test-utilities/simulation-test/simulation-test.test.ts +400 -0
  1263. package/src/test-utilities/simulation-test/simulation-test.ts +176 -0
  1264. package/src/thread/create-thread-comment.test.ts +62 -3
  1265. package/src/thread/create-thread-comment.ts +34 -6
  1266. package/src/thread/create-thread.test.ts +180 -0
  1267. package/src/thread/create-thread.ts +32 -7
  1268. package/src/thread/index.ts +3 -2
  1269. package/src/thread/schema.test.ts +81 -0
  1270. package/src/thread/schema.ts +24 -19
  1271. package/src/version/create-version.test.ts +92 -26
  1272. package/src/version/create-version.ts +49 -19
  1273. package/src/version/index.ts +2 -2
  1274. package/src/version/schema.test.ts +328 -92
  1275. package/src/version/schema.ts +47 -33
  1276. package/src/version/select-active-version.ts +18 -0
  1277. package/src/version/switch-version.test.ts +1 -1
  1278. package/src/version/switch-version.ts +3 -3
  1279. package/dist/entity-views/entity-state_history.d.ts +0 -67
  1280. package/dist/entity-views/entity-state_history.d.ts.map +0 -1
  1281. package/dist/entity-views/entity-state_history.js +0 -58
  1282. package/dist/entity-views/entity-state_history.js.map +0 -1
  1283. package/dist/entity-views/generic-types.d.ts +0 -128
  1284. package/dist/entity-views/generic-types.d.ts.map +0 -1
  1285. package/dist/entity-views/generic-types.js +0 -2
  1286. package/dist/entity-views/generic-types.js.map +0 -1
  1287. package/dist/entity-views/generic-types.test.d.ts +0 -2
  1288. package/dist/entity-views/generic-types.test.d.ts.map +0 -1
  1289. package/dist/entity-views/generic-types.test.js +0 -99
  1290. package/dist/entity-views/generic-types.test.js.map +0 -1
  1291. package/dist/lix/to-blob.test.d.ts +0 -2
  1292. package/dist/lix/to-blob.test.d.ts.map +0 -1
  1293. package/dist/lix/to-blob.test.js +0 -18
  1294. package/dist/lix/to-blob.test.js.map +0 -1
  1295. package/dist/repository/comparison-example.js +0 -173
  1296. package/dist/repository/comparison-example.js.map +0 -1
  1297. package/dist/repository/entity-repository.d.ts +0 -53
  1298. package/dist/repository/entity-repository.d.ts.map +0 -1
  1299. package/dist/repository/entity-repository.js +0 -187
  1300. package/dist/repository/entity-repository.js.map +0 -1
  1301. package/dist/repository/entity-repository.test.d.ts +0 -2
  1302. package/dist/repository/entity-repository.test.d.ts.map +0 -1
  1303. package/dist/repository/entity-repository.test.js +0 -94
  1304. package/dist/repository/entity-repository.test.js.map +0 -1
  1305. package/dist/repository/example.d.ts +0 -6
  1306. package/dist/repository/example.d.ts.map +0 -1
  1307. package/dist/repository/example.js +0 -87
  1308. package/dist/repository/example.js.map +0 -1
  1309. package/dist/repository/file-repository.d.ts +0 -39
  1310. package/dist/repository/file-repository.d.ts.map +0 -1
  1311. package/dist/repository/file-repository.js +0 -93
  1312. package/dist/repository/file-repository.js.map +0 -1
  1313. package/dist/repository/file-repository.test.d.ts +0 -2
  1314. package/dist/repository/file-repository.test.d.ts.map +0 -1
  1315. package/dist/repository/file-repository.test.js +0 -165
  1316. package/dist/repository/file-repository.test.js.map +0 -1
  1317. package/dist/repository/index.d.ts +0 -6
  1318. package/dist/repository/index.d.ts.map +0 -1
  1319. package/dist/repository/index.js +0 -6
  1320. package/dist/repository/index.js.map +0 -1
  1321. package/dist/repository/integration.test.d.ts +0 -2
  1322. package/dist/repository/integration.test.d.ts.map +0 -1
  1323. package/dist/repository/integration.test.js +0 -136
  1324. package/dist/repository/integration.test.js.map +0 -1
  1325. package/dist/repository/key-value-repository.d.ts +0 -30
  1326. package/dist/repository/key-value-repository.d.ts.map +0 -1
  1327. package/dist/repository/key-value-repository.js +0 -60
  1328. package/dist/repository/key-value-repository.js.map +0 -1
  1329. package/dist/repository/key-value-repository.test.d.ts +0 -2
  1330. package/dist/repository/key-value-repository.test.d.ts.map +0 -1
  1331. package/dist/repository/key-value-repository.test.js +0 -122
  1332. package/dist/repository/key-value-repository.test.js.map +0 -1
  1333. package/dist/repository/markdown-plugin-example.js +0 -118
  1334. package/dist/repository/markdown-plugin-example.js.map +0 -1
  1335. package/dist/repository/query-builder.d.ts +0 -69
  1336. package/dist/repository/query-builder.d.ts.map +0 -1
  1337. package/dist/repository/query-builder.js +0 -155
  1338. package/dist/repository/query-builder.js.map +0 -1
  1339. package/dist/repository/query-builder.test.d.ts +0 -2
  1340. package/dist/repository/query-builder.test.d.ts.map +0 -1
  1341. package/dist/repository/query-builder.test.js +0 -244
  1342. package/dist/repository/query-builder.test.js.map +0 -1
  1343. package/dist/repository/repository-manager.d.ts +0 -27
  1344. package/dist/repository/repository-manager.d.ts.map +0 -1
  1345. package/dist/repository/repository-manager.js +0 -19
  1346. package/dist/repository/repository-manager.js.map +0 -1
  1347. package/dist/repository/repository-manager.test.d.ts +0 -2
  1348. package/dist/repository/repository-manager.test.d.ts.map +0 -1
  1349. package/dist/repository/repository-manager.test.js +0 -65
  1350. package/dist/repository/repository-manager.test.js.map +0 -1
  1351. package/dist/repository/test-helpers.js +0 -402
  1352. package/dist/repository/test-helpers.js.map +0 -1
  1353. package/dist/schema-definition/lix-generated.test.d.ts +0 -2
  1354. package/dist/schema-definition/lix-generated.test.d.ts.map +0 -1
  1355. package/dist/schema-definition/lix-generated.test.js +0 -127
  1356. package/dist/schema-definition/lix-generated.test.js.map +0 -1
  1357. package/dist/state/entity-view-builder.d.ts +0 -145
  1358. package/dist/state/entity-view-builder.d.ts.map +0 -1
  1359. package/dist/state/entity-view-builder.js +0 -280
  1360. package/dist/state/entity-view-builder.js.map +0 -1
  1361. package/dist/state/entity-view-builder.test.d.ts +0 -2
  1362. package/dist/state/entity-view-builder.test.d.ts.map +0 -1
  1363. package/dist/state/entity-view-builder.test.js +0 -523
  1364. package/dist/state/entity-view-builder.test.js.map +0 -1
  1365. package/src/change-set/create-checkpoint.ts +0 -101
  1366. package/src/file/materialize-file-data-at-changeset.ts +0 -123
  1367. package/src/query-filter/change-has-label.test.ts +0 -79
  1368. package/src/query-filter/change-has-label.ts +0 -45
  1369. package/src/query-filter/change-set-has-label.test.ts +0 -42
  1370. package/src/query-filter/change-set-has-label.ts +0 -50
  1371. package/src/query-filter/change-set-is-ancestor-of.test.ts +0 -178
  1372. package/src/query-filter/change-set-is-ancestor-of.ts +0 -77
  1373. package/src/query-filter/change-set-is-descendant-of.test.ts +0 -169
  1374. package/src/query-filter/change-set-is-descendant-of.ts +0 -70
  1375. package/src/state/create-changeset-for-transaction.ts +0 -321
  1376. package/src/state/get-version-record-by-id-or-throw.ts +0 -51
  1377. package/src/state/handle-state-mutation.test.ts +0 -761
  1378. package/src/state/handle-state-mutation.ts +0 -418
@@ -1,8 +1,42 @@
1
1
  import { validateStateMutation } from "./validate-state-mutation.js";
2
- import { handleStateMutation } from "./handle-state-mutation.js";
3
- import { createLixOwnLogSync } from "../log/create-lix-own-log.js";
4
- import { createChangesetForTransaction } from "./create-changeset-for-transaction.js";
2
+ import { sql } from "kysely";
3
+ import { insertTransactionState } from "./insert-transaction-state.js";
4
+ import { executeSync } from "../database/execute-sync.js";
5
+ import { applyMaterializeStateSchema } from "./materialize-state.js";
6
+ import { applyResolvedStateView } from "./resolved-state-view.js";
7
+ import { applyStateCacheSchema } from "./cache/schema.js";
8
+ import { isStaleStateCache } from "./cache/is-stale-state-cache.js";
9
+ import { markStateCacheAsFresh } from "./cache/mark-state-cache-as-stale.js";
10
+ import { applyUntrackedStateSchema } from "./untracked/schema.js";
11
+ import { commit } from "./commit.js";
12
+ import { parseStatePk, serializeStatePk } from "./primary-key.js";
13
+ import { uuidV7 } from "../deterministic/uuid-v7.js";
14
+ import { LixLogSchema } from "../log/schema.js";
15
+ import { shouldLog } from "../log/create-lix-own-log.js";
16
+ import { populateStateCache } from "./cache/populate-state-cache.js";
17
+ // import { createLixOwnLogSync } from "../log/create-lix-own-log.js";
18
+ // Virtual table schema definition
19
+ const VTAB_CREATE_SQL = `CREATE TABLE x(
20
+ _pk HIDDEN TEXT NOT NULL PRIMARY KEY,
21
+ entity_id TEXT,
22
+ schema_key TEXT,
23
+ file_id TEXT,
24
+ version_id TEXT,
25
+ plugin_key TEXT,
26
+ snapshot_content TEXT,
27
+ schema_version TEXT,
28
+ created_at TEXT,
29
+ updated_at TEXT,
30
+ inherited_from_version_id TEXT,
31
+ change_id TEXT,
32
+ untracked INTEGER,
33
+ commit_id TEXT
34
+ ) WITHOUT ROWID;`;
5
35
  export function applyStateDatabaseSchema(sqlite, db, hooks) {
36
+ applyMaterializeStateSchema(sqlite);
37
+ applyStateCacheSchema({ sqlite });
38
+ applyUntrackedStateSchema({ sqlite });
39
+ applyResolvedStateView({ sqlite, db });
6
40
  sqlite.createFunction({
7
41
  name: "validate_snapshot_content",
8
42
  deterministic: true,
@@ -24,196 +58,72 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
24
58
  const module = new capi.sqlite3_module();
25
59
  // Store cursor state
26
60
  const cursorStates = new Map();
27
- // Cache initialization state to avoid repeated table existence checks
28
- let loggingInitialized = null;
29
- const canLog = () => {
30
- if (loggingInitialized === null) {
31
- try {
32
- const tableExists = sqlite.exec({
33
- sql: "SELECT 1 FROM sqlite_master WHERE type='table' AND name='key_value'",
34
- returnValue: "resultRows",
35
- });
36
- loggingInitialized = tableExists && tableExists.length > 0;
37
- }
38
- catch {
39
- loggingInitialized = false;
40
- }
41
- }
42
- return loggingInitialized;
43
- };
44
- const create_temp_change_table_sql = `
45
- -- add a table we use within the transaction
46
- CREATE TEMP TABLE IF NOT EXISTS internal_change_in_transaction (
47
- id TEXT PRIMARY KEY DEFAULT (uuid_v7()),
48
- entity_id TEXT NOT NULL,
49
- schema_key TEXT NOT NULL,
50
- schema_version TEXT NOT NULL,
51
- file_id TEXT NOT NULL,
52
- plugin_key TEXT NOT NULL,
53
- version_id TEXT NOT NULL,
54
- snapshot_content BLOB,
55
- created_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (created_at LIKE '%Z'),
56
- --- NOTE schena_key must be unique per entity_id and file_id
57
- UNIQUE(entity_id, file_id, schema_key, version_id)
58
- ) STRICT;
59
-
60
- `;
61
- sqlite.exec(create_temp_change_table_sql);
61
+ // Guard flag to prevent recursion when logging
62
+ let loggingIsInProgress = false;
63
+ /**
64
+ * Flag to prevent recursion when updating cache state.
65
+ *
66
+ * The guard ensures that while we're marking cache as fresh, any nested state queries
67
+ * bypass the cache and use materialized state directly, preventing recursion.
68
+ *
69
+ * Why is this needed is unclear. Queries are executed in sync. Why concurrent
70
+ * reads simultaneously update the cache is not clear. Given that state
71
+ * materialization is rare, this workaround has been deemed sufficient.
72
+ *
73
+ * This is a temporary fix and should be revisited in the future.
74
+ */
75
+ let isUpdatingCacheState = false;
62
76
  module.installMethods({
63
- xCreate: (db, _pAux, _argc, _argv, pVTab) => {
64
- const sql = `CREATE TABLE x(
65
- entity_id TEXT,
66
- schema_key TEXT,
67
- file_id TEXT,
68
- version_id TEXT,
69
- plugin_key TEXT,
70
- snapshot_content TEXT,
71
- schema_version TEXT,
72
- created_at TEXT,
73
- updated_at TEXT,
74
- inherited_from_version_id TEXT,
75
- change_id TEXT,
76
- untracked INTEGER
77
- )`;
78
- const result = capi.sqlite3_declare_vtab(db, sql);
77
+ xCreate: (dbHandle, _pAux, _argc, _argv, pVTab) => {
78
+ const result = capi.sqlite3_declare_vtab(dbHandle, VTAB_CREATE_SQL);
79
79
  if (result !== capi.SQLITE_OK) {
80
80
  return result;
81
81
  }
82
82
  sqlite.sqlite3.vtab.xVtab.create(pVTab);
83
83
  return capi.SQLITE_OK;
84
84
  },
85
- xConnect: (db, _pAux, _argc, _argv, pVTab) => {
86
- const sql = `CREATE TABLE x(
87
- entity_id TEXT,
88
- schema_key TEXT,
89
- file_id TEXT,
90
- version_id TEXT,
91
- plugin_key TEXT,
92
- snapshot_content TEXT,
93
- schema_version TEXT,
94
- created_at TEXT,
95
- updated_at TEXT,
96
- inherited_from_version_id TEXT,
97
- change_id TEXT,
98
- untracked INTEGER
99
- )`;
100
- const result = capi.sqlite3_declare_vtab(db, sql);
85
+ xConnect: (dbHandle, _pAux, _argc, _argv, pVTab) => {
86
+ const result = capi.sqlite3_declare_vtab(dbHandle, VTAB_CREATE_SQL);
101
87
  if (result !== capi.SQLITE_OK) {
102
88
  return result;
103
89
  }
90
+ // wiping all rows on connect simulates a temp table for internal_change_in_transaction.
91
+ // we need to clear any existing changes on connect in case a transaction remained open.
92
+ // otherwise, the lix can't boot up properly and will throw an error.
93
+ //
94
+ // an open transaction can happen if the storage layer crashes or is not properly shut down.
95
+ //
96
+ // PS internal_change_in_transaction is not a temp table because sqlite
97
+ // prohibits access to temp tables from virtual tables
98
+ executeSync({
99
+ lix: { sqlite },
100
+ query: db.deleteFrom("internal_change_in_transaction"),
101
+ });
104
102
  sqlite.sqlite3.vtab.xVtab.create(pVTab);
105
103
  return capi.SQLITE_OK;
106
104
  },
107
105
  xBegin: () => {
108
- // assert that we are not already in a transaction (the internal_change_in_transaction table is empty)
109
- if (sqlite.exec({
110
- sql: "SELECT * FROM internal_change_in_transaction",
111
- returnValue: "resultRows",
112
- }).length > 0) {
113
- const errorMessage = "Transaction already in progress";
114
- if (canLog()) {
115
- createLixOwnLogSync({
116
- lix: { sqlite, db: db },
117
- key: "lix_state_xbegin_error",
118
- level: "error",
119
- message: `xBegin error: ${errorMessage}`,
120
- });
121
- }
122
- throw new Error(errorMessage);
123
- }
106
+ // TODO comment in after all internal v-table logic uses underlying state view
107
+ // // assert that we are not already in a transaction (the internal_change_in_transaction table is empty)
108
+ // const existingChangesInTransaction = executeSync({
109
+ // lix: { sqlite },
110
+ // query: db.selectFrom("internal_change_in_transaction").selectAll(),
111
+ // });
112
+ // if (existingChangesInTransaction.length > 0) {
113
+ // const errorMessage = "Transaction already in progress";
114
+ // if (canLog()) {
115
+ // createLixOwnLogSync({
116
+ // lix: { sqlite, db: db as any },
117
+ // key: "lix_state_xbegin_error",
118
+ // level: "error",
119
+ // message: `xBegin error: ${errorMessage}`,
120
+ // });
121
+ // }
122
+ // throw new Error(errorMessage);
123
+ // }
124
124
  },
125
125
  xCommit: () => {
126
- const currentTime = new Date().toISOString();
127
- // Insert each row from internal_change_in_transaction into internal_snapshot and internal_change,
128
- // using the same id for snapshot_id in internal_change as in internal_snapshot.
129
- const changesWithoutChangeSets = sqlite.exec({
130
- sql: `
131
- SELECT
132
- id,
133
- entity_id,
134
- schema_key,
135
- schema_version,
136
- file_id,
137
- plugin_key,
138
- version_id,
139
- CASE
140
- WHEN snapshot_content IS NOT NULL THEN json(snapshot_content)
141
- ELSE NULL
142
- END as snapshot_content,
143
- created_at
144
- FROM internal_change_in_transaction
145
- ORDER BY version_id
146
- `,
147
- returnValue: "resultRows",
148
- });
149
- // Group changes by version_id
150
- const changesByVersion = new Map();
151
- for (const changeWithoutChangeset of changesWithoutChangeSets) {
152
- const version_id = changeWithoutChangeset[6];
153
- if (!changesByVersion.has(version_id)) {
154
- changesByVersion.set(version_id, []);
155
- }
156
- changesByVersion.get(version_id).push({
157
- id: changeWithoutChangeset[0],
158
- entity_id: changeWithoutChangeset[1],
159
- schema_key: changeWithoutChangeset[2],
160
- schema_version: changeWithoutChangeset[3],
161
- file_id: changeWithoutChangeset[4],
162
- plugin_key: changeWithoutChangeset[5],
163
- snapshot_content: changeWithoutChangeset[7],
164
- created_at: changeWithoutChangeset[8],
165
- });
166
- }
167
- // Process each version's changes to create changesets
168
- for (const [version_id, versionChanges] of changesByVersion) {
169
- // Create changeset and edges for this version's transaction
170
- createChangesetForTransaction(sqlite, db, currentTime, version_id, versionChanges);
171
- }
172
- const changesToRealize = sqlite.exec({
173
- sql: "SELECT id, entity_id, schema_key, schema_version, file_id, plugin_key, version_id, snapshot_content, created_at FROM internal_change_in_transaction ORDER BY version_id",
174
- returnValue: "resultRows",
175
- });
176
- for (const changeToRealize of changesToRealize) {
177
- const [id, entity_id, schema_key, schema_version, file_id, plugin_key,
178
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
179
- version_id, snapshot_content, created_at,] = changeToRealize;
180
- let snapshot_id = "no-content";
181
- if (snapshot_content) {
182
- // Insert into internal_snapshot
183
- const result = sqlite.exec({
184
- sql: `INSERT OR IGNORE INTO internal_snapshot (content) VALUES (?) RETURNING id`,
185
- bind: [snapshot_content],
186
- returnValue: "resultRows",
187
- });
188
- // Get the 'id' column of the newly created row
189
- if (result && result.length > 0) {
190
- snapshot_id = result[0][0]; // assuming 'id' is the first column
191
- }
192
- }
193
- // Insert into internal_change
194
- sqlite.exec({
195
- sql: `INSERT INTO internal_change (id, entity_id, schema_key, schema_version, file_id, plugin_key, snapshot_id, created_at)
196
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
197
- bind: [
198
- id,
199
- entity_id,
200
- schema_key,
201
- schema_version,
202
- file_id,
203
- plugin_key,
204
- snapshot_id,
205
- created_at,
206
- ],
207
- returnValue: "resultRows",
208
- });
209
- }
210
- sqlite.exec({
211
- sql: "DELETE FROM internal_change_in_transaction",
212
- returnValue: "resultRows",
213
- });
214
- // Emit state commit hook after transaction is successfully committed
215
- hooks._emit("state_commit");
216
- return capi.SQLITE_OK;
126
+ return commit({ lix: { sqlite, db: db, hooks } });
217
127
  },
218
128
  xRollback: () => {
219
129
  sqlite.exec({
@@ -221,7 +131,70 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
221
131
  returnValue: "resultRows",
222
132
  });
223
133
  },
224
- xBestIndex: () => {
134
+ xBestIndex: (pVTab, pIdxInfo) => {
135
+ const idxInfo = sqlite.sqlite3.vtab.xIndexInfo(pIdxInfo);
136
+ // Track which columns have equality constraints
137
+ const usableConstraints = [];
138
+ let argIndex = 0;
139
+ // Column mapping (matching the CREATE TABLE order in xCreate/xConnect)
140
+ const columnMap = [
141
+ "_pk", // 0 (HIDDEN column)
142
+ "entity_id", // 1
143
+ "schema_key", // 2
144
+ "file_id", // 3
145
+ "version_id", // 4
146
+ "plugin_key", // 5
147
+ "snapshot_content", // 6
148
+ "schema_version", // 7
149
+ "created_at", // 8
150
+ "updated_at", // 9
151
+ "inherited_from_version_id", // 10
152
+ "change_id", // 11
153
+ "untracked", // 12
154
+ "commit_id", // 13
155
+ ];
156
+ // Process constraints
157
+ // @ts-expect-error - idxInfo.$nConstraint is not defined in the type
158
+ for (let i = 0; i < idxInfo.$nConstraint; i++) {
159
+ // @ts-expect-error - idxInfo.nthConstraint is not defined in the type
160
+ const constraint = idxInfo.nthConstraint(i);
161
+ // Only handle equality constraints that are usable
162
+ if (constraint.$op === capi.SQLITE_INDEX_CONSTRAINT_EQ &&
163
+ constraint.$usable) {
164
+ const columnName = columnMap[constraint.$iColumn];
165
+ if (columnName) {
166
+ usableConstraints.push(columnName);
167
+ // Mark this constraint as used
168
+ // @ts-expect-error - idxInfo.nthConstraintUsage is not defined in the type
169
+ idxInfo.nthConstraintUsage(i).$argvIndex = ++argIndex;
170
+ }
171
+ }
172
+ }
173
+ const fullTableCost = 1000000; // Default cost for full table scan
174
+ const fullTableRows = 10000000;
175
+ // Set the index string to pass column names to xFilter
176
+ if (usableConstraints.length > 0) {
177
+ const idxStr = usableConstraints.join(",");
178
+ // @ts-expect-error - idxInfo.$idxStr is not defined in the type
179
+ idxInfo.$idxStr = sqlite.sqlite3.wasm.allocCString(idxStr, false);
180
+ // @ts-expect-error - idxInfo.$needToFreeIdxStr is not defined in the type
181
+ idxInfo.$needToFreeIdxStr = 1; // We don't need SQLite to free this string
182
+ // Lower cost when we can use filters (more selective)
183
+ // @ts-expect-error - idxInfo.$estimatedCost is not defined in the type
184
+ idxInfo.$estimatedCost =
185
+ fullTableCost / (usableConstraints.length + 1);
186
+ // @ts-expect-error - idxInfo.$estimatedRows is not defined in the type
187
+ idxInfo.$estimatedRows = Math.ceil(fullTableRows / (usableConstraints.length + 1));
188
+ }
189
+ else {
190
+ // @ts-expect-error - idxInfo.$needToFreeIdxStr is not defined in the type
191
+ idxInfo.$needToFreeIdxStr = 0;
192
+ // Higher cost for full table scan
193
+ // @ts-expect-error - idxInfo.$estimatedCost is not defined in the type
194
+ idxInfo.$estimatedCost = fullTableCost;
195
+ // @ts-expect-error - idxInfo.$estimatedRows is not defined in the type
196
+ idxInfo.$estimatedRows = fullTableRows;
197
+ }
225
198
  return capi.SQLITE_OK;
226
199
  },
227
200
  xDisconnect: () => {
@@ -242,235 +215,115 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
242
215
  cursorStates.delete(pCursor);
243
216
  return capi.SQLITE_OK;
244
217
  },
245
- xFilter: (pCursor) => {
218
+ xFilter: (pCursor, idxNum, idxStrPtr, argc, argv) => {
246
219
  const cursorState = cursorStates.get(pCursor);
247
- // Try cache first - UNION with priority: untracked > tracked > inherited
248
- const cacheResults = sqlite.exec({
249
- sql: `
250
- -- 1. Untracked state (highest priority)
251
- SELECT entity_id, schema_key, file_id, version_id, plugin_key,
252
- snapshot_content, schema_version, created_at, updated_at,
253
- NULL as inherited_from_version_id, 'untracked' as change_id, 1 as untracked
254
- FROM internal_state_all_untracked
255
-
256
- UNION ALL
257
-
258
- -- 2. Tracked state (second priority) - only if no untracked exists
259
- SELECT entity_id, schema_key, file_id, version_id, plugin_key,
260
- snapshot_content, schema_version, created_at, updated_at,
261
- inherited_from_version_id, change_id, 0 as untracked
262
- FROM internal_state_cache
263
- WHERE inheritance_delete_marker = 0 -- Hide copy-on-write deletions
264
- AND NOT EXISTS (
265
- SELECT 1 FROM internal_state_all_untracked unt
266
- WHERE unt.entity_id = internal_state_cache.entity_id
267
- AND unt.schema_key = internal_state_cache.schema_key
268
- AND unt.file_id = internal_state_cache.file_id
269
- AND unt.version_id = internal_state_cache.version_id
270
- )
271
-
272
- UNION ALL
273
-
274
- -- 3. Inherited state (lowest priority) - only if no untracked or tracked exists
275
- SELECT isc.entity_id, isc.schema_key, isc.file_id,
276
- vi.version_id, -- Return child version_id
277
- isc.plugin_key, isc.snapshot_content, isc.schema_version,
278
- isc.created_at, isc.updated_at,
279
- vi.parent_version_id as inherited_from_version_id, isc.change_id, 0 as untracked
280
- FROM (
281
- -- Get version inheritance relationships from cache
282
- SELECT
283
- json_extract(isc_v.snapshot_content, '$.id') AS version_id,
284
- json_extract(isc_v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
285
- FROM internal_state_cache isc_v
286
- WHERE isc_v.schema_key = 'lix_version'
287
- ) vi
288
- JOIN internal_state_cache isc ON isc.version_id = vi.parent_version_id
289
- WHERE vi.parent_version_id IS NOT NULL
290
- -- Only inherit entities that exist (not deleted) in parent
291
- AND isc.inheritance_delete_marker = 0
292
- -- Don't inherit if child has tracked state
293
- AND NOT EXISTS (
294
- SELECT 1 FROM internal_state_cache child_isc
295
- WHERE child_isc.version_id = vi.version_id
296
- AND child_isc.entity_id = isc.entity_id
297
- AND child_isc.schema_key = isc.schema_key
298
- AND child_isc.file_id = isc.file_id
299
- )
300
- -- Don't inherit if child has untracked state
301
- AND NOT EXISTS (
302
- SELECT 1 FROM internal_state_all_untracked unt
303
- WHERE unt.version_id = vi.version_id
304
- AND unt.entity_id = isc.entity_id
305
- AND unt.schema_key = isc.schema_key
306
- AND unt.file_id = isc.file_id
307
- )
308
- `,
309
- returnValue: "resultRows",
310
- });
311
- cursorState.results = cacheResults || [];
312
- cursorState.rowIndex = 0;
313
- // Cache miss - populate cache with actual recursive state query
314
- if (cursorState.results.length === 0) {
315
- if (canLog()) {
316
- createLixOwnLogSync({
317
- lix: { sqlite, db: db },
318
- key: "lix_state_cache_miss",
319
- level: "debug",
320
- message: `Cache miss detected - materializing state from CTE`,
321
- });
322
- }
323
- // Run the expensive recursive CTE to materialize state
324
- // Include deletions when populating cache so inheritance blocking works
325
- const stateResults = selectStateViaCTE(sqlite, {}, true);
326
- // Populate cache with materialized state results
327
- if (stateResults && stateResults.length > 0) {
328
- let cachePopulated = false;
329
- for (const row of stateResults) {
330
- // CTE returns rows as arrays, so access by index
331
- const entity_id = Array.isArray(row) ? row[0] : row.entity_id;
332
- const schema_key = Array.isArray(row) ? row[1] : row.schema_key;
333
- const file_id = Array.isArray(row) ? row[2] : row.file_id;
334
- const plugin_key = Array.isArray(row) ? row[3] : row.plugin_key;
335
- const snapshot_content = Array.isArray(row)
336
- ? row[4]
337
- : row.snapshot_content;
338
- const schema_version = Array.isArray(row)
339
- ? row[5]
340
- : row.schema_version;
341
- const version_id = Array.isArray(row) ? row[6] : row.version_id;
342
- const created_at = Array.isArray(row) ? row[7] : row.created_at;
343
- const updated_at = Array.isArray(row) ? row[8] : row.updated_at;
344
- const inherited_from_version_id = Array.isArray(row)
345
- ? row[9]
346
- : row.inherited_from_version_id;
347
- const change_id = Array.isArray(row) ? row[10] : row.change_id;
348
- // Skip rows with null entity_id (no actual state data found)
349
- if (!entity_id) {
350
- continue;
351
- }
352
- const isDeletion = snapshot_content === null;
353
- // TODO the CTE should not return inherited entities (optimization for later)
354
- // Skip inherited entities - they should be resolved via inheritance logic, not stored as duplicates
355
- if (inherited_from_version_id !== null &&
356
- inherited_from_version_id !== undefined) {
357
- continue;
220
+ const idxStr = sqlite.sqlite3.wasm.cstrToJs(idxStrPtr);
221
+ // Debug: Track recursion depth
222
+ const recursionKey = "_vtab_recursion_depth";
223
+ // @ts-expect-error - using global for debugging
224
+ const currentDepth = (globalThis[recursionKey] || 0) + 1;
225
+ // @ts-expect-error - using global for debugging
226
+ globalThis[recursionKey] = currentDepth;
227
+ if (currentDepth > 10) {
228
+ // @ts-expect-error - using global for debugging
229
+ globalThis[recursionKey] = 0; // Reset
230
+ throw new Error(`Virtual table recursion depth exceeded: ${currentDepth}`);
231
+ }
232
+ try {
233
+ // Extract filter arguments if provided
234
+ const filters = {};
235
+ if (argc > 0 && argv) {
236
+ const args = sqlite.sqlite3.capi.sqlite3_values_to_js(argc, argv);
237
+ // Parse idxStr to understand which columns are being filtered
238
+ // idxStr format: "column1,column2,..."
239
+ if (idxStr) {
240
+ const columns = idxStr.split(",").filter((c) => c.length > 0);
241
+ for (let i = 0; i < Math.min(columns.length, args.length); i++) {
242
+ if (args[i] !== null) {
243
+ filters[columns[i]] = args[i]; // Keep original type
244
+ }
358
245
  }
359
- sqlite.exec({
360
- sql: `INSERT OR REPLACE INTO internal_state_cache
361
- (entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id)
362
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
363
- bind: [
364
- entity_id,
365
- schema_key,
366
- file_id,
367
- version_id,
368
- plugin_key,
369
- isDeletion
370
- ? null
371
- : typeof snapshot_content === "string"
372
- ? snapshot_content
373
- : JSON.stringify(snapshot_content),
374
- schema_version,
375
- created_at,
376
- updated_at,
377
- inherited_from_version_id === null ||
378
- inherited_from_version_id === undefined
379
- ? null
380
- : inherited_from_version_id,
381
- isDeletion ? 1 : 0,
382
- change_id || "unknown-change-id",
383
- ],
384
- });
385
- cachePopulated = true;
386
246
  }
387
- if (cachePopulated && canLog()) {
388
- createLixOwnLogSync({
389
- lix: { sqlite, db: db },
390
- key: "lix_state_cache_populated",
391
- level: "debug",
392
- message: `Cache populated with ${stateResults?.length || 0} rows from CTE`,
393
- });
247
+ }
248
+ // If we're updating cache state, we must use resolved state view directly to avoid recursion
249
+ if (isUpdatingCacheState) {
250
+ // Query directly from resolved state view which handles inheritance correctly
251
+ let query = db
252
+ .selectFrom("internal_resolved_state_all")
253
+ .selectAll();
254
+ // Apply filters
255
+ for (const [column, value] of Object.entries(filters)) {
256
+ query = query.where(column, "=", value);
394
257
  }
258
+ const stateResults = executeSync({
259
+ lix: { sqlite },
260
+ query,
261
+ });
262
+ cursorState.results = stateResults || [];
263
+ cursorState.rowIndex = 0;
264
+ return capi.SQLITE_OK;
395
265
  }
396
- // Re-query cache after population
397
- // Re-query after population with priority: untracked > tracked > inherited
398
- const newResults = sqlite.exec({
399
- sql: `
400
- -- 1. Untracked state (highest priority)
401
- SELECT entity_id, schema_key, file_id, version_id, plugin_key,
402
- snapshot_content, schema_version, created_at, updated_at,
403
- NULL as inherited_from_version_id, 'untracked' as change_id, 1 as untracked
404
- FROM internal_state_all_untracked
405
-
406
- UNION ALL
407
-
408
- -- 2. Tracked state (second priority) - only if no untracked exists
409
- SELECT entity_id, schema_key, file_id, version_id, plugin_key,
410
- snapshot_content, schema_version, created_at, updated_at,
411
- inherited_from_version_id, change_id, 0 as untracked
412
- FROM internal_state_cache
413
- WHERE inheritance_delete_marker = 0 -- Hide copy-on-write deletions
414
- AND NOT EXISTS (
415
- SELECT 1 FROM internal_state_all_untracked unt
416
- WHERE unt.entity_id = internal_state_cache.entity_id
417
- AND unt.schema_key = internal_state_cache.schema_key
418
- AND unt.file_id = internal_state_cache.file_id
419
- AND unt.version_id = internal_state_cache.version_id
420
- )
421
-
422
- UNION ALL
423
-
424
- -- 3. Inherited state (lowest priority) - only if no untracked or tracked exists
425
- SELECT isc.entity_id, isc.schema_key, isc.file_id,
426
- vi.version_id, -- Return child version_id
427
- isc.plugin_key, isc.snapshot_content, isc.schema_version,
428
- isc.created_at, isc.updated_at,
429
- vi.parent_version_id as inherited_from_version_id, isc.change_id, 0 as untracked
430
- FROM (
431
- -- Get version inheritance relationships from cache
432
- SELECT
433
- json_extract(isc_v.snapshot_content, '$.id') AS version_id,
434
- json_extract(isc_v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
435
- FROM internal_state_cache isc_v
436
- WHERE isc_v.schema_key = 'lix_version'
437
- ) vi
438
- JOIN internal_state_cache isc ON isc.version_id = vi.parent_version_id
439
- WHERE vi.parent_version_id IS NOT NULL
440
- -- Only inherit entities that exist (not deleted) in parent
441
- AND isc.inheritance_delete_marker = 0
442
- -- Don't inherit if child has tracked state
443
- AND NOT EXISTS (
444
- SELECT 1 FROM internal_state_cache child_isc
445
- WHERE child_isc.version_id = vi.version_id
446
- AND child_isc.entity_id = isc.entity_id
447
- AND child_isc.schema_key = isc.schema_key
448
- AND child_isc.file_id = isc.file_id
449
- )
450
- -- Don't inherit if child has untracked state
451
- AND NOT EXISTS (
452
- SELECT 1 FROM internal_state_all_untracked unt
453
- WHERE unt.version_id = vi.version_id
454
- AND unt.entity_id = isc.entity_id
455
- AND unt.schema_key = isc.schema_key
456
- AND unt.file_id = isc.file_id
457
- )
458
- `,
459
- returnValue: "resultRows",
266
+ // Normal path: check cache staleness
267
+ const cacheIsStale = isStaleStateCache({
268
+ lix: { sqlite, db: db },
460
269
  });
461
- cursorState.results = newResults || [];
462
- }
463
- else {
464
- if (canLog()) {
465
- createLixOwnLogSync({
466
- lix: { sqlite, db: db },
467
- key: "lix_state_cache_hit",
270
+ // Try cache first - but only if it's not stale
271
+ let cacheResults = null;
272
+ if (!cacheIsStale) {
273
+ // Select directly from resolved state view using Kysely
274
+ let query = db
275
+ .selectFrom("internal_resolved_state_all")
276
+ .selectAll();
277
+ // Apply filters
278
+ for (const [column, value] of Object.entries(filters)) {
279
+ query = query.where(column, "=", value);
280
+ }
281
+ cacheResults = executeSync({
282
+ lix: { sqlite },
283
+ query,
284
+ });
285
+ }
286
+ cursorState.results = cacheResults || [];
287
+ cursorState.rowIndex = 0;
288
+ if (cacheIsStale) {
289
+ // Populate cache directly with materialized state
290
+ populateStateCache(sqlite);
291
+ // Log the cache miss
292
+ insertVTableLog({
293
+ sqlite,
294
+ db: db,
295
+ key: "lix_state_cache_miss",
468
296
  level: "debug",
469
- message: `Cache hit - returning ${cursorState.results.length} cached rows`,
297
+ message: `Cache miss detected - materialized state`,
470
298
  });
299
+ // Mark cache as fresh after population
300
+ isUpdatingCacheState = true;
301
+ try {
302
+ markStateCacheAsFresh({ lix: { sqlite, db: db } });
303
+ }
304
+ finally {
305
+ isUpdatingCacheState = false;
306
+ }
307
+ let query = db
308
+ .selectFrom("internal_resolved_state_all")
309
+ .selectAll();
310
+ // Apply filters
311
+ for (const [column, value] of Object.entries(filters)) {
312
+ query = query.where(column, "=", value);
313
+ }
314
+ const newResults = executeSync({
315
+ lix: { sqlite },
316
+ query,
317
+ });
318
+ cursorState.results = newResults || [];
471
319
  }
320
+ return capi.SQLITE_OK;
321
+ }
322
+ finally {
323
+ // Always decrement recursion depth
324
+ // @ts-expect-error - using global for debugging
325
+ globalThis[recursionKey] = currentDepth - 1;
472
326
  }
473
- return capi.SQLITE_OK;
474
327
  },
475
328
  xNext: (pCursor) => {
476
329
  const cursorState = cursorStates.get(pCursor);
@@ -488,9 +341,28 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
488
341
  capi.sqlite3_result_null(pContext);
489
342
  return capi.SQLITE_OK;
490
343
  }
344
+ // Handle primary key column (_pk)
345
+ if (iCol === 0) {
346
+ if (Array.isArray(row)) {
347
+ // For array results, _pk is at index 0
348
+ capi.sqlite3_result_js(pContext, row[0]);
349
+ }
350
+ else if (row._pk) {
351
+ // If row already has _pk, use it
352
+ capi.sqlite3_result_js(pContext, row._pk);
353
+ }
354
+ else {
355
+ // Generate primary key from row data
356
+ const tag = row.untracked ? "U" : "C";
357
+ const primaryKey = serializeStatePk(tag, row.file_id, row.entity_id, row.version_id);
358
+ capi.sqlite3_result_js(pContext, primaryKey);
359
+ }
360
+ return capi.SQLITE_OK;
361
+ }
491
362
  // Handle array-style results from SQLite exec
492
363
  let value;
493
364
  if (Array.isArray(row)) {
365
+ // For array results, composite_key is at index 0, so we use iCol directly
494
366
  value = row[iCol];
495
367
  }
496
368
  else {
@@ -503,54 +375,54 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
503
375
  capi.sqlite3_result_null(pContext);
504
376
  return capi.SQLITE_OK;
505
377
  }
506
- if (value === null || value === undefined) {
378
+ if (value === null) {
507
379
  capi.sqlite3_result_null(pContext);
508
380
  }
509
- else if (typeof value === "object") {
510
- capi.sqlite3_result_js(pContext, JSON.stringify(value));
511
- }
512
381
  else {
513
382
  capi.sqlite3_result_js(pContext, value);
514
383
  }
515
384
  return capi.SQLITE_OK;
516
385
  },
517
- xRowid: (pCursor, pRowid) => {
518
- const cursorState = cursorStates.get(pCursor);
519
- sqlite.sqlite3.vtab.xRowid(pRowid, cursorState.rowIndex);
520
- return capi.SQLITE_OK;
386
+ xRowid: () => {
387
+ // For WITHOUT ROWID tables, xRowid should not be called
388
+ // But if it is, we return an error
389
+ return capi.SQLITE_ERROR;
521
390
  },
522
391
  xUpdate: (_pVTab, nArg, ppArgv) => {
523
392
  try {
524
393
  // Extract arguments using the proper SQLite WASM API
525
394
  const args = sqlite.sqlite3.capi.sqlite3_values_to_js(nArg, ppArgv);
526
- // DELETE operation: nArg = 1, args[0] = old rowid
395
+ // DELETE operation: nArg = 1, args[0] = old primary key
527
396
  if (nArg === 1) {
528
- // For DELETE, we need the old row data to pass to handleStateMutation
529
- // We can't get this from the virtual table directly, so we'll need to
530
- // handle DELETE differently:
531
- // we query the row by rowid and pass it to handleStateMutation
532
- handleStateDelete(sqlite, args[0], db);
397
+ const oldPk = args[0];
398
+ if (!oldPk) {
399
+ throw new Error("Missing primary key for DELETE operation");
400
+ }
401
+ // Use handleStateDelete for all cases - it handles both tracked and untracked
402
+ handleStateDelete(sqlite, oldPk, db);
533
403
  return capi.SQLITE_OK;
534
404
  }
535
- // INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new rowid
536
- // UPDATE operation: nArg = N+2, args[0] = old rowid, args[1] = new rowid
537
- const isInsert = args[0] === null || args[0] === undefined;
538
- const isUpdate = args[0] !== null && args[0] !== undefined;
405
+ // INSERT operation: nArg = N+2, args[0] = NULL, args[1] = new primary key
406
+ // UPDATE operation: nArg = N+2, args[0] = old primary key, args[1] = new primary key
407
+ const isInsert = args[0] === null;
408
+ const isUpdate = args[0] !== null;
539
409
  if (!isInsert && !isUpdate) {
540
410
  throw new Error("Invalid xUpdate operation");
541
411
  }
542
412
  // Extract column values (args[2] through args[N+1])
543
- // Column order: entity_id, schema_key, file_id, version_id, plugin_key,
413
+ // Column order: _pk, entity_id, schema_key, file_id, version_id, plugin_key,
544
414
  // snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, change_id, untracked
545
- const entity_id = args[2];
546
- const schema_key = args[3];
547
- const file_id = args[4];
548
- const version_id = args[5];
549
- const plugin_key = args[6];
550
- const snapshot_content = args[7];
551
- const schema_version = args[8];
552
- // Skip created_at (args[9]), updated_at (args[10]), inherited_from_version_id (args[11]), change_id (args[12])
553
- const untracked = args[13] ?? false;
415
+ const entity_id = args[3];
416
+ const schema_key = args[4];
417
+ const file_id = args[5];
418
+ const version_id = args[6];
419
+ const plugin_key = args[7];
420
+ // this is an update where we have a snapshot_content
421
+ // the snapshot_content is a JSON string as returned by SQlite
422
+ const snapshot_content = args[8];
423
+ const schema_version = args[9];
424
+ // Skip created_at (args[10]), updated_at (args[11]), inherited_from_version_id (args[12]), change_id (args[13])
425
+ const untracked = args[14] ?? false;
554
426
  // assert required fields
555
427
  if (!entity_id || !schema_key || !file_id || !plugin_key) {
556
428
  throw new Error("Missing required fields for state mutation");
@@ -558,99 +430,75 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
558
430
  if (!version_id) {
559
431
  throw new Error("version_id is required for state mutation");
560
432
  }
561
- // Ensure snapshot_content is a string
562
- const snapshotStr = typeof snapshot_content === "string"
563
- ? snapshot_content
564
- : JSON.stringify(snapshot_content);
565
433
  // Call validation function (same logic as triggers)
566
- const storedSchemaResult = sqlite.exec({
567
- sql: "SELECT value FROM stored_schema WHERE key = ?",
568
- bind: [String(schema_key)],
569
- returnValue: "resultRows",
570
- });
571
- const storedSchema = storedSchemaResult && storedSchemaResult.length > 0
572
- ? storedSchemaResult[0][0]
573
- : null;
434
+ const storedSchema = getStoredSchema(sqlite, db, schema_key);
574
435
  validateStateMutation({
575
436
  lix: { sqlite, db: db },
576
437
  schema: storedSchema ? JSON.parse(storedSchema) : null,
577
- snapshot_content: JSON.parse(snapshotStr),
438
+ snapshot_content: JSON.parse(snapshot_content),
578
439
  operation: isInsert ? "insert" : "update",
579
440
  entity_id: String(entity_id),
580
441
  version_id: String(version_id),
581
442
  untracked: Boolean(untracked),
582
443
  });
583
- // Route based on untracked flag
584
- if (untracked) {
585
- // Handle untracked mutation - write directly to untracked table
586
- sqlite.exec({
587
- sql: `INSERT OR REPLACE INTO internal_state_all_untracked
588
- (entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version)
589
- VALUES (?, ?, ?, ?, ?, ?, ?)`,
590
- bind: [
591
- String(entity_id),
592
- String(schema_key),
593
- String(file_id),
594
- String(version_id),
595
- String(plugin_key),
596
- snapshotStr,
597
- String(schema_version),
598
- ],
599
- });
600
- }
601
- else {
602
- // Handle tracked mutation - normal change control
603
- // If there's existing untracked state, delete it first (tracked overrides untracked)
604
- sqlite.exec({
605
- sql: `DELETE FROM internal_state_all_untracked
606
- WHERE entity_id = ? AND schema_key = ? AND file_id = ? AND version_id = ?`,
607
- bind: [
608
- String(entity_id),
609
- String(schema_key),
610
- String(file_id),
611
- String(version_id),
612
- ],
613
- });
614
- // Call handleStateMutation (same logic as triggers)
615
- handleStateMutation(sqlite, db, String(entity_id), String(schema_key), String(file_id), String(plugin_key), snapshotStr, String(version_id), String(schema_version));
616
- }
617
- // TODO: This cache copying logic is a temporary workaround for shared change sets.
618
- // The proper solution requires improving cache miss logic to handle change set sharing
444
+ // Use insertTransactionState which handles both tracked and untracked entities
445
+ insertTransactionState({
446
+ lix: { sqlite, db },
447
+ data: {
448
+ entity_id: String(entity_id),
449
+ schema_key: String(schema_key),
450
+ file_id: String(file_id),
451
+ plugin_key: String(plugin_key),
452
+ snapshot_content,
453
+ schema_version: String(schema_version),
454
+ version_id: String(version_id),
455
+ untracked: Boolean(untracked),
456
+ },
457
+ });
458
+ // TODO: This cache copying logic is a temporary workaround for shared commits.
459
+ // The proper solution requires improving cache miss logic to handle commit sharing
619
460
  // without duplicating entries. See: https://github.com/opral/lix-sdk/issues/309
620
461
  //
621
- // Handle cache copying for new versions that share change sets
462
+ // Handle cache copying for new versions that share commits
622
463
  if (isInsert && String(schema_key) === "lix_version") {
623
- const versionData = JSON.parse(snapshotStr);
464
+ const versionData = JSON.parse(snapshot_content);
624
465
  const newVersionId = versionData.id;
625
- const changeSetId = versionData.change_set_id;
626
- if (newVersionId && changeSetId) {
627
- // Find other versions that already use this change set
628
- const existingVersionsWithSameChangeSet = sqlite.exec({
466
+ const commitId = versionData.commit_id;
467
+ if (newVersionId && commitId) {
468
+ // Find other versions that point to the same commit
469
+ const existingVersionsWithSameCommit = sqlite.exec({
629
470
  sql: `
630
471
  SELECT json_extract(snapshot_content, '$.id') as version_id
631
472
  FROM internal_state_cache
632
473
  WHERE schema_key = 'lix_version'
633
- AND json_extract(snapshot_content, '$.change_set_id') = ?
474
+ AND json_extract(snapshot_content, '$.commit_id') = ?
634
475
  AND json_extract(snapshot_content, '$.id') != ?
635
476
  `,
636
- bind: [changeSetId, newVersionId],
477
+ bind: [commitId, newVersionId],
637
478
  returnValue: "resultRows",
638
479
  });
639
- // If there are existing versions with the same change set, copy their cache entries
640
- if (existingVersionsWithSameChangeSet &&
641
- existingVersionsWithSameChangeSet.length > 0) {
642
- const sourceVersionId = existingVersionsWithSameChangeSet[0][0]; // Take first existing version
480
+ // If there are existing versions with the same commit, copy their cache entries
481
+ if (existingVersionsWithSameCommit &&
482
+ existingVersionsWithSameCommit.length > 0) {
483
+ const sourceVersionId = existingVersionsWithSameCommit[0][0]; // Take first existing version
643
484
  // Copy cache entries from source version to new version
485
+ // IMPORTANT: When copying cache entries, we need to mark them as inherited
486
+ // if they don't have an inherited_from_version_id already
644
487
  sqlite.exec({
645
488
  sql: `
646
489
  INSERT OR IGNORE INTO internal_state_cache
647
- (entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id)
490
+ (entity_id, schema_key, file_id, version_id, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id, commit_id)
648
491
  SELECT
649
- entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, inheritance_delete_marker, change_id
492
+ entity_id, schema_key, file_id, ?, plugin_key, snapshot_content, schema_version, created_at, updated_at,
493
+ CASE
494
+ WHEN inherited_from_version_id IS NULL THEN ?
495
+ ELSE inherited_from_version_id
496
+ END as inherited_from_version_id,
497
+ inheritance_delete_marker, change_id, commit_id
650
498
  FROM internal_state_cache
651
499
  WHERE version_id = ? AND schema_key != 'lix_version'
652
500
  `,
653
- bind: [newVersionId, sourceVersionId],
501
+ bind: [newVersionId, sourceVersionId, sourceVersionId],
654
502
  });
655
503
  }
656
504
  }
@@ -660,31 +508,14 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
660
508
  catch (error) {
661
509
  const errorMessage = error instanceof Error ? error.message : String(error);
662
510
  // Log error for debugging
663
- if (canLog()) {
664
- createLixOwnLogSync({
665
- lix: { sqlite, db: db },
666
- key: "lix_state_xupdate_error",
667
- level: "error",
668
- message: `xUpdate error: ${errorMessage}`,
669
- });
670
- }
671
- throw error; //new Error("test");
672
- // const vtab = sqlite.sqlite3.vtab.xVtab.get(_pVTab);
673
- // // Set proper error message on the virtual table
674
- // if (vtab) {
675
- // // Free any existing error message first
676
- // if (vtab.zErrMsg) {
677
- // capi.sqlite3_free(vtab.zErrMsg);
678
- // }
679
- // // Allocate new error message using sqlite3_malloc
680
- // const errorBytes = new TextEncoder().encode(errorMessage + "\0");
681
- // const errorPtr = capi.sqlite3_malloc(errorBytes.length);
682
- // if (errorPtr) {
683
- // sqlite.sqlite3.wasm.heap8u().set(errorBytes, errorPtr);
684
- // vtab.zErrMsg = errorPtr;
685
- // }
686
- // }
687
- // return capi.SQLITE_ERROR;
511
+ insertVTableLog({
512
+ sqlite,
513
+ db: db,
514
+ key: "lix_state_xupdate_error",
515
+ level: "error",
516
+ message: `xUpdate error: ${errorMessage}`,
517
+ });
518
+ throw error; // Re-throw to propagate error
688
519
  }
689
520
  },
690
521
  }, false);
@@ -694,7 +525,19 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
694
525
  // Create state view that filters to active version only
695
526
  sqlite.exec(`
696
527
  CREATE VIEW IF NOT EXISTS state AS
697
- SELECT *
528
+ SELECT
529
+ entity_id,
530
+ schema_key,
531
+ file_id,
532
+ plugin_key,
533
+ snapshot_content,
534
+ schema_version,
535
+ created_at,
536
+ updated_at,
537
+ inherited_from_version_id,
538
+ change_id,
539
+ untracked,
540
+ commit_id
698
541
  FROM state_all
699
542
  WHERE version_id IN (SELECT version_id FROM active_version);
700
543
 
@@ -703,11 +546,33 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
703
546
  INSTEAD OF INSERT ON state
704
547
  BEGIN
705
548
  INSERT INTO state_all (
706
- entity_id, schema_key, file_id, version_id, plugin_key,
707
- snapshot_content, schema_version, created_at, updated_at, inherited_from_version_id, change_id, untracked
549
+ entity_id,
550
+ schema_key,
551
+ file_id,
552
+ version_id,
553
+ plugin_key,
554
+ snapshot_content,
555
+ schema_version,
556
+ created_at,
557
+ updated_at,
558
+ inherited_from_version_id,
559
+ change_id,
560
+ untracked,
561
+ commit_id
708
562
  ) VALUES (
709
- NEW.entity_id, NEW.schema_key, NEW.file_id, NEW.version_id, NEW.plugin_key,
710
- NEW.snapshot_content, NEW.schema_version, NEW.created_at, NEW.updated_at, NEW.inherited_from_version_id, NEW.change_id, NEW.untracked
563
+ NEW.entity_id,
564
+ NEW.schema_key,
565
+ NEW.file_id,
566
+ (SELECT version_id FROM active_version),
567
+ NEW.plugin_key,
568
+ NEW.snapshot_content,
569
+ NEW.schema_version,
570
+ NEW.created_at,
571
+ NEW.updated_at,
572
+ NEW.inherited_from_version_id,
573
+ NEW.change_id,
574
+ NEW.untracked,
575
+ NEW.commit_id
711
576
  );
712
577
  END;
713
578
 
@@ -719,7 +584,7 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
719
584
  entity_id = NEW.entity_id,
720
585
  schema_key = NEW.schema_key,
721
586
  file_id = NEW.file_id,
722
- version_id = NEW.version_id,
587
+ version_id = (SELECT version_id FROM active_version),
723
588
  plugin_key = NEW.plugin_key,
724
589
  snapshot_content = NEW.snapshot_content,
725
590
  schema_version = NEW.schema_version,
@@ -727,108 +592,145 @@ export function applyStateDatabaseSchema(sqlite, db, hooks) {
727
592
  updated_at = NEW.updated_at,
728
593
  inherited_from_version_id = NEW.inherited_from_version_id,
729
594
  change_id = NEW.change_id,
730
- untracked = NEW.untracked
595
+ untracked = NEW.untracked,
596
+ commit_id = NEW.commit_id
731
597
  WHERE
732
598
  entity_id = OLD.entity_id
733
599
  AND schema_key = OLD.schema_key
734
600
  AND file_id = OLD.file_id
735
- AND version_id = OLD.version_id;
601
+ AND version_id = (SELECT version_id FROM active_version);
736
602
  END;
737
603
 
738
604
  CREATE TRIGGER IF NOT EXISTS state_delete
739
605
  INSTEAD OF DELETE ON state
740
606
  BEGIN
607
+ -- Delete from state_all (handles both tracked and untracked entities)
741
608
  DELETE FROM state_all
742
- WHERE entity_id = OLD.entity_id
609
+ WHERE
610
+ entity_id = OLD.entity_id
743
611
  AND schema_key = OLD.schema_key
744
612
  AND file_id = OLD.file_id
745
- AND version_id = OLD.version_id;
613
+ AND version_id = (SELECT version_id FROM active_version);
746
614
  END;
747
615
  `);
748
- // Create the cache table for performance optimization and the untracked state table
749
- const sql = `
750
- CREATE TABLE IF NOT EXISTS internal_state_cache (
751
- entity_id TEXT NOT NULL,
752
- schema_key TEXT NOT NULL,
753
- file_id TEXT NOT NULL,
754
- version_id TEXT NOT NULL,
755
- plugin_key TEXT NOT NULL,
756
- snapshot_content TEXT, -- Allow NULL for deletions
757
- schema_version TEXT NOT NULL,
758
- created_at TEXT NOT NULL,
759
- updated_at TEXT NOT NULL,
760
- inherited_from_version_id TEXT,
761
- inheritance_delete_marker INTEGER DEFAULT 0, -- Flag for copy-on-write deletion markers
762
- change_id TEXT, -- Allow NULL during migration and for deletion markers
763
- PRIMARY KEY (entity_id, schema_key, file_id, version_id)
764
- );
765
-
766
- -- Table for untracked state that bypasses change control
767
- CREATE TABLE IF NOT EXISTS internal_state_all_untracked (
768
- entity_id TEXT NOT NULL,
769
- schema_key TEXT NOT NULL,
770
- file_id TEXT NOT NULL,
771
- version_id TEXT NOT NULL,
772
- plugin_key TEXT NOT NULL,
773
- snapshot_content TEXT NOT NULL, -- JSON content
774
- schema_version TEXT NOT NULL,
775
- created_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (created_at LIKE '%Z'),
776
- updated_at TEXT DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')) NOT NULL CHECK (updated_at LIKE '%Z'),
777
- PRIMARY KEY (entity_id, schema_key, file_id, version_id)
778
- ) STRICT;
779
-
780
- -- Trigger to update updated_at on untracked state changes
781
- CREATE TRIGGER IF NOT EXISTS internal_state_all_untracked_update_timestamp
782
- AFTER UPDATE ON internal_state_all_untracked
783
- BEGIN
784
- UPDATE internal_state_all_untracked
785
- SET updated_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now')
786
- WHERE entity_id = NEW.entity_id
787
- AND schema_key = NEW.schema_key
788
- AND file_id = NEW.file_id
789
- AND version_id = NEW.version_id;
790
- END;
791
- `;
792
- return sqlite.exec(sql);
616
+ /**
617
+ * Insert a log entry directly using insertTransactionState to avoid recursion
618
+ * when logging from within the virtual table methods.
619
+ */
620
+ function insertVTableLog(args) {
621
+ if (loggingIsInProgress) {
622
+ return;
623
+ }
624
+ // preventing recursivly logging that we inserted a log entry
625
+ // with this flag
626
+ loggingIsInProgress = true;
627
+ // Check log levels directly from internal state tables to avoid recursion
628
+ const logLevelsResult = executeSync({
629
+ lix: { sqlite: args.sqlite },
630
+ query: args.db
631
+ .selectFrom("internal_resolved_state_all")
632
+ .select(sql `json_extract(snapshot_content, '$.value')`.as("value"))
633
+ .where("schema_key", "=", "lix_key_value")
634
+ .where(sql `json_extract(snapshot_content, '$.key')`, "=", "lix_log_levels")
635
+ .limit(1),
636
+ });
637
+ const logLevelsValue = logLevelsResult[0]?.value;
638
+ // Check if the level is allowed
639
+ if (!shouldLog(logLevelsValue, args.level)) {
640
+ return;
641
+ }
642
+ // Create log entry data
643
+ const lix = { sqlite: args.sqlite, db: args.db };
644
+ const logData = {
645
+ id: uuidV7({ lix }),
646
+ key: args.key,
647
+ message: args.message,
648
+ level: args.level,
649
+ };
650
+ // Insert log using insertTransactionState
651
+ insertTransactionState({
652
+ lix,
653
+ data: {
654
+ entity_id: logData.id,
655
+ schema_key: LixLogSchema["x-lix-key"],
656
+ file_id: "lix",
657
+ plugin_key: "lix_own_entity",
658
+ snapshot_content: JSON.stringify(logData),
659
+ schema_version: LixLogSchema["x-lix-version"],
660
+ // Using global and untracked for vtable logs.
661
+ // if we need to track them, we can change this later
662
+ version_id: "global",
663
+ untracked: true,
664
+ },
665
+ });
666
+ loggingIsInProgress = false;
667
+ }
793
668
  }
794
- export function handleStateDelete(sqlite, rowId, db) {
795
- const rowToDelete = sqlite.exec({
796
- sql: "SELECT * FROM state_all WHERE rowid = ?",
797
- bind: [rowId],
798
- returnValue: "resultRows",
669
+ export function handleStateDelete(sqlite, primaryKey, db) {
670
+ // Query the row to delete using the resolved state view with Kysely
671
+ const rowToDelete = executeSync({
672
+ lix: { sqlite },
673
+ query: db
674
+ .selectFrom("internal_resolved_state_all")
675
+ .select([
676
+ "entity_id",
677
+ "schema_key",
678
+ "file_id",
679
+ "version_id",
680
+ "plugin_key",
681
+ "snapshot_content",
682
+ "schema_version",
683
+ "untracked",
684
+ "inherited_from_version_id",
685
+ ])
686
+ .where("_pk", "=", primaryKey),
799
687
  })[0];
800
- const entity_id = rowToDelete[0];
801
- const schema_key = rowToDelete[1];
802
- const file_id = rowToDelete[2];
803
- const version_id = rowToDelete[3];
804
- const plugin_key = rowToDelete[4];
805
- const snapshot_content = rowToDelete[5];
806
- const schema_version = rowToDelete[6];
807
- // Column indices: created_at[7], updated_at[8], inherited_from_version_id[9], change_id[10], untracked[11]
808
- const untracked = rowToDelete[11];
809
- // If entity is untracked, just delete it without creating changes
688
+ if (!rowToDelete) {
689
+ throw new Error(`Row not found for primary key: ${primaryKey}`);
690
+ }
691
+ const entity_id = rowToDelete.entity_id;
692
+ const schema_key = rowToDelete.schema_key;
693
+ const file_id = rowToDelete.file_id;
694
+ const version_id = rowToDelete.version_id;
695
+ const plugin_key = rowToDelete.plugin_key;
696
+ const snapshot_content = rowToDelete.snapshot_content;
697
+ const schema_version = rowToDelete.schema_version;
698
+ const untracked = rowToDelete.untracked;
699
+ // If entity is untracked, handle differently based on whether it's inherited
810
700
  if (untracked) {
811
- // Delete from untracked table
812
- sqlite.exec({
813
- sql: `DELETE FROM internal_state_all_untracked
814
- WHERE entity_id = ? AND schema_key = ? AND file_id = ? AND version_id = ?`,
815
- bind: [
816
- String(entity_id),
817
- String(schema_key),
818
- String(file_id),
819
- String(version_id),
820
- ],
821
- });
701
+ // Parse the primary key to check if it's inherited untracked (UI tag)
702
+ const parsed = parseStatePk(primaryKey);
703
+ if (parsed.tag === "UI") {
704
+ // For inherited untracked, create a tombstone to block inheritance
705
+ insertTransactionState({
706
+ lix: { sqlite, db },
707
+ data: {
708
+ entity_id: String(entity_id),
709
+ schema_key: String(schema_key),
710
+ file_id: String(file_id),
711
+ plugin_key: String(plugin_key),
712
+ snapshot_content: null, // Deletion tombstone
713
+ schema_version: String(schema_version),
714
+ version_id: String(version_id),
715
+ untracked: true,
716
+ },
717
+ });
718
+ }
719
+ else {
720
+ // For direct untracked (U tag), just delete from untracked table
721
+ executeSync({
722
+ lix: { sqlite },
723
+ query: db
724
+ .deleteFrom("internal_state_all_untracked")
725
+ .where("entity_id", "=", String(entity_id))
726
+ .where("schema_key", "=", String(schema_key))
727
+ .where("file_id", "=", String(file_id))
728
+ .where("version_id", "=", String(version_id)),
729
+ });
730
+ }
822
731
  return;
823
732
  }
824
- const storedSchemaResult = sqlite.exec({
825
- sql: "SELECT value FROM stored_schema WHERE key = ?",
826
- bind: [String(schema_key)],
827
- returnValue: "resultRows",
828
- });
829
- const storedSchema = storedSchemaResult && storedSchemaResult.length > 0
830
- ? storedSchemaResult[0][0]
831
- : null;
733
+ const storedSchema = getStoredSchema(sqlite, db, schema_key);
832
734
  validateStateMutation({
833
735
  lix: { sqlite, db: db },
834
736
  schema: storedSchema ? JSON.parse(storedSchema) : null,
@@ -837,12 +739,37 @@ export function handleStateDelete(sqlite, rowId, db) {
837
739
  entity_id: String(entity_id),
838
740
  version_id: String(version_id),
839
741
  });
840
- handleStateMutation(sqlite, db, String(entity_id), String(schema_key), String(file_id), String(plugin_key), null, // No snapshot content for DELETE
841
- String(version_id), String(schema_version));
742
+ insertTransactionState({
743
+ lix: { sqlite, db },
744
+ data: {
745
+ entity_id: String(entity_id),
746
+ schema_key: String(schema_key),
747
+ file_id: String(file_id),
748
+ plugin_key: String(plugin_key),
749
+ snapshot_content: null, // No snapshot content for DELETE
750
+ schema_version: String(schema_version),
751
+ version_id: String(version_id),
752
+ untracked: false, // tracked entity
753
+ },
754
+ });
842
755
  }
843
756
  // Helper functions for the virtual table
757
+ function getStoredSchema(sqlite, db, schemaKey) {
758
+ // Query directly from internal_resolved_state_all to avoid vtable recursion
759
+ const result = executeSync({
760
+ lix: { sqlite },
761
+ query: db
762
+ .selectFrom("internal_resolved_state_all")
763
+ .select(sql `json_extract(snapshot_content, '$.value')`.as("value"))
764
+ .where("schema_key", "=", "lix_stored_schema")
765
+ .where(sql `json_extract(snapshot_content, '$.key')`, "=", String(schemaKey))
766
+ .limit(1),
767
+ });
768
+ return result && result.length > 0 ? result[0].value : null;
769
+ }
844
770
  function getColumnName(columnIndex) {
845
771
  const columns = [
772
+ "_pk",
846
773
  "entity_id",
847
774
  "schema_key",
848
775
  "file_id",
@@ -855,198 +782,8 @@ function getColumnName(columnIndex) {
855
782
  "inherited_from_version_id",
856
783
  "change_id",
857
784
  "untracked",
785
+ "commit_id",
858
786
  ];
859
787
  return columns[columnIndex] || "unknown";
860
788
  }
861
- function selectStateViaCTE(sqlite, filters, includeDeletions = false) {
862
- let sql = `
863
- WITH
864
- all_changes_with_snapshots AS (
865
- -- Include committed changes
866
- SELECT ic.id, ic.entity_id, ic.schema_key, ic.file_id, ic.plugin_key,
867
- ic.schema_version,
868
- CASE
869
- WHEN ic.snapshot_id = 'no-content' THEN NULL
870
- ELSE json(s.content)
871
- END AS snapshot_content
872
- FROM internal_change ic
873
- LEFT JOIN internal_snapshot s ON ic.snapshot_id = s.id
874
-
875
- UNION ALL
876
-
877
- -- Include changes from current transaction
878
- SELECT ict.id, ict.entity_id, ict.schema_key, ict.file_id, ict.plugin_key,
879
- ict.schema_version, ict.snapshot_content
880
- FROM internal_change_in_transaction ict
881
-
882
- UNION ALL
883
-
884
- -- Include untracked state (pseudo-changes with special change_id)
885
- SELECT 'untracked-' || unt.entity_id || '-' || unt.schema_key AS id,
886
- unt.entity_id, unt.schema_key, unt.file_id, unt.plugin_key,
887
- unt.schema_version, json(unt.snapshot_content) AS snapshot_content
888
- FROM internal_state_all_untracked unt
889
- ),
890
- root_cs_of_all_versions AS (
891
- SELECT json_extract(v.snapshot_content, '$.change_set_id') AS version_change_set_id,
892
- v.entity_id AS version_id
893
- FROM all_changes_with_snapshots v
894
- WHERE v.schema_key = 'lix_version'
895
- ),
896
- reachable_cs_from_roots(id, version_id) AS (
897
- SELECT version_change_set_id, version_id FROM root_cs_of_all_versions
898
- UNION
899
- SELECT json_extract(e.snapshot_content, '$.parent_id'), r.version_id
900
- FROM all_changes_with_snapshots e
901
- JOIN reachable_cs_from_roots r ON json_extract(e.snapshot_content, '$.child_id') = r.id
902
- WHERE e.schema_key = 'lix_change_set_edge'
903
- ),
904
- cse_in_reachable_cs AS (
905
- SELECT json_extract(ias.snapshot_content, '$.entity_id') AS target_entity_id,
906
- json_extract(ias.snapshot_content, '$.file_id') AS target_file_id,
907
- json_extract(ias.snapshot_content, '$.schema_key') AS target_schema_key,
908
- json_extract(ias.snapshot_content, '$.change_id') AS target_change_id,
909
- json_extract(ias.snapshot_content, '$.change_set_id') AS cse_origin_change_set_id,
910
- rcs.version_id
911
- FROM all_changes_with_snapshots ias
912
- JOIN reachable_cs_from_roots rcs ON json_extract(ias.snapshot_content, '$.change_set_id') = rcs.id
913
- WHERE ias.schema_key = 'lix_change_set_element'
914
- ),
915
- leaf_target_snapshots AS (
916
- SELECT target_change.entity_id, target_change.schema_key, target_change.file_id,
917
- target_change.plugin_key, target_change.snapshot_content AS snapshot_content,
918
- target_change.schema_version, r.version_id, target_change.id as change_id
919
- FROM cse_in_reachable_cs r
920
- INNER JOIN all_changes_with_snapshots target_change ON r.target_change_id = target_change.id
921
- WHERE NOT EXISTS (
922
- WITH RECURSIVE descendants_of_current_cs(id) AS (
923
- SELECT r.cse_origin_change_set_id
924
- UNION
925
- SELECT json_extract(edge.snapshot_content, '$.child_id')
926
- FROM all_changes_with_snapshots edge
927
- JOIN descendants_of_current_cs d ON json_extract(edge.snapshot_content, '$.parent_id') = d.id
928
- WHERE edge.schema_key = 'lix_change_set_edge'
929
- AND json_extract(edge.snapshot_content, '$.child_id') IN (
930
- SELECT id FROM reachable_cs_from_roots WHERE version_id = r.version_id
931
- )
932
- )
933
- SELECT 1 FROM cse_in_reachable_cs newer_r
934
- WHERE newer_r.target_entity_id = r.target_entity_id
935
- AND newer_r.target_file_id = r.target_file_id
936
- AND newer_r.target_schema_key = r.target_schema_key
937
- AND newer_r.version_id = r.version_id
938
- AND (newer_r.cse_origin_change_set_id != r.cse_origin_change_set_id OR newer_r.target_change_id != r.target_change_id)
939
- AND newer_r.cse_origin_change_set_id IN descendants_of_current_cs
940
- )
941
- ),
942
- -- Get version inheritance relationships
943
- version_inheritance AS (
944
- SELECT DISTINCT
945
- v.entity_id AS version_id,
946
- json_extract(v.snapshot_content, '$.inherits_from_version_id') AS parent_version_id
947
- FROM all_changes_with_snapshots v
948
- WHERE v.schema_key = 'lix_version'
949
- ),
950
- -- Combine direct entities with inherited entities
951
- all_entities AS (
952
- -- Direct entities from leaf_target_snapshots
953
- SELECT
954
- entity_id, schema_key, file_id, plugin_key, snapshot_content, schema_version,
955
- version_id, version_id as visible_in_version, NULL as inherited_from_version_id, change_id
956
- FROM leaf_target_snapshots
957
-
958
- UNION ALL
959
-
960
- -- Inherited entities from parent versions
961
- SELECT
962
- ls.entity_id, ls.schema_key, ls.file_id, ls.plugin_key, ls.snapshot_content, ls.schema_version,
963
- vi.version_id, -- Use child version_id for testing
964
- vi.version_id as visible_in_version, -- Make visible in child version
965
- vi.parent_version_id as inherited_from_version_id, ls.change_id
966
- FROM version_inheritance vi
967
- JOIN leaf_target_snapshots ls ON ls.version_id = vi.parent_version_id
968
- WHERE vi.parent_version_id IS NOT NULL
969
- AND ls.snapshot_content IS NOT NULL -- Don't inherit deleted entities
970
- -- Don't inherit if child already has this entity (including deletion markers)
971
- -- Use a more comprehensive check that includes both leaf snapshots and direct inheritance blocking
972
- AND NOT EXISTS (
973
- -- Check if there's ANY change for this entity in the child version
974
- -- This includes creation, update, AND deletion changes
975
- SELECT 1 FROM leaf_target_snapshots child_ls
976
- WHERE child_ls.version_id = vi.version_id
977
- AND child_ls.entity_id = ls.entity_id
978
- AND child_ls.schema_key = ls.schema_key
979
- AND child_ls.file_id = ls.file_id
980
- )
981
- -- Additional safeguard: check that no change set element exists for this entity in child
982
- AND NOT EXISTS (
983
- SELECT 1 FROM cse_in_reachable_cs cse
984
- JOIN all_changes_with_snapshots target_change ON cse.target_change_id = target_change.id
985
- WHERE cse.version_id = vi.version_id
986
- AND target_change.entity_id = ls.entity_id
987
- AND target_change.schema_key = ls.schema_key
988
- AND target_change.file_id = ls.file_id
989
- )
990
- ),
991
- -- Prioritize direct entities over inherited ones, then deduplicate
992
- prioritized_entities AS (
993
- SELECT *,
994
- -- Priority: direct entities (inherited_from_version_id IS NULL) over inherited
995
- CASE WHEN inherited_from_version_id IS NULL THEN 1 ELSE 2 END as priority,
996
- -- Row number for deduplication within same priority
997
- ROW_NUMBER() OVER (
998
- PARTITION BY entity_id, schema_key, file_id, visible_in_version
999
- ORDER BY CASE WHEN inherited_from_version_id IS NULL THEN 1 ELSE 2 END,
1000
- -- Among inherited entities, prefer those with earlier timestamps
1001
- version_id
1002
- ) as rn
1003
- FROM all_entities ae
1004
- -- Don't filter out entities with null snapshot_content here
1005
- -- We need deletion markers to be included for proper inheritance blocking
1006
- )
1007
- SELECT DISTINCT
1008
- pe.entity_id,
1009
- pe.schema_key,
1010
- pe.file_id,
1011
- pe.plugin_key,
1012
- pe.snapshot_content,
1013
- pe.schema_version,
1014
- pe.version_id,
1015
- (SELECT MIN(ic.created_at) FROM internal_change ic
1016
- WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id) AS created_at,
1017
- COALESCE(
1018
- (SELECT MAX(ic.created_at) FROM internal_change ic
1019
- WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id
1020
- AND ic.id IN (SELECT cse.target_change_id FROM cse_in_reachable_cs cse WHERE cse.version_id = pe.version_id)),
1021
- (SELECT MIN(ic.created_at) FROM internal_change ic
1022
- WHERE ic.entity_id = pe.entity_id AND ic.schema_key = pe.schema_key AND ic.file_id = pe.file_id)
1023
- ) AS updated_at,
1024
- pe.inherited_from_version_id,
1025
- pe.change_id
1026
- FROM prioritized_entities pe
1027
- WHERE pe.rn = 1
1028
- ${includeDeletions ? "" : "-- Filter out deletion markers from final results\n AND pe.snapshot_content IS NOT NULL"}
1029
- `;
1030
- const bindings = [];
1031
- const conditions = [];
1032
- Object.entries(filters).forEach(([key, value]) => {
1033
- if (key === "version_id") {
1034
- // For version_id filter, use visible_in_version
1035
- conditions.push(`ae.visible_in_version = ?`);
1036
- }
1037
- else {
1038
- conditions.push(`ae.${key} = ?`);
1039
- }
1040
- bindings.push(value);
1041
- });
1042
- if (conditions.length > 0) {
1043
- sql += " AND " + conditions.join(" AND ");
1044
- }
1045
- const result = sqlite.exec({
1046
- sql,
1047
- bind: bindings,
1048
- returnValue: "resultRows",
1049
- });
1050
- return result || [];
1051
- }
1052
789
  //# sourceMappingURL=schema.js.map