@lix-js/sdk 0.4.7 → 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 (1812) hide show
  1. package/dist/account/create-account.d.ts +18 -4
  2. package/dist/account/create-account.d.ts.map +1 -1
  3. package/dist/account/create-account.js +27 -3
  4. package/dist/account/create-account.js.map +1 -1
  5. package/dist/account/create-account.test.js +42 -4
  6. package/dist/account/create-account.test.js.map +1 -1
  7. package/dist/account/index.d.ts +1 -1
  8. package/dist/account/index.d.ts.map +1 -1
  9. package/dist/account/index.js +1 -1
  10. package/dist/account/index.js.map +1 -1
  11. package/dist/account/schema.d.ts +44 -0
  12. package/dist/account/schema.d.ts.map +1 -0
  13. package/dist/account/schema.js +112 -0
  14. package/dist/account/schema.js.map +1 -0
  15. package/dist/account/schema.test.d.ts +2 -0
  16. package/dist/account/schema.test.d.ts.map +1 -0
  17. package/dist/account/schema.test.js +310 -0
  18. package/dist/account/schema.test.js.map +1 -0
  19. package/dist/account/switch-account.d.ts +2 -2
  20. package/dist/account/switch-account.d.ts.map +1 -1
  21. package/dist/account/switch-account.js +8 -2
  22. package/dist/account/switch-account.js.map +1 -1
  23. package/dist/account/switch-account.test.js +31 -10
  24. package/dist/account/switch-account.test.js.map +1 -1
  25. package/dist/change/apply-changes.d.ts +13 -0
  26. package/dist/change/apply-changes.d.ts.map +1 -1
  27. package/dist/change/apply-changes.js +14 -4
  28. package/dist/change/apply-changes.js.map +1 -1
  29. package/dist/change/apply-changes.test.js +91 -1
  30. package/dist/change/apply-changes.test.js.map +1 -1
  31. package/dist/change/create-change-v2.d.ts +11 -0
  32. package/dist/change/create-change-v2.d.ts.map +1 -0
  33. package/dist/change/create-change-v2.js +31 -0
  34. package/dist/change/create-change-v2.js.map +1 -0
  35. package/dist/change/create-change-v2.test.d.ts +2 -0
  36. package/dist/change/create-change-v2.test.d.ts.map +1 -0
  37. package/dist/change/create-change-v2.test.js +39 -0
  38. package/dist/change/create-change-v2.test.js.map +1 -0
  39. package/dist/change/create-change.d.ts +11 -22
  40. package/dist/change/create-change.d.ts.map +1 -1
  41. package/dist/change/create-change.js +31 -83
  42. package/dist/change/create-change.js.map +1 -1
  43. package/dist/change/create-change.test.js +127 -176
  44. package/dist/change/create-change.test.js.map +1 -1
  45. package/dist/change/index.d.ts +1 -2
  46. package/dist/change/index.d.ts.map +1 -1
  47. package/dist/change/index.js +1 -2
  48. package/dist/change/index.js.map +1 -1
  49. package/dist/change/mock-change.d.ts +1 -1
  50. package/dist/change/mock-change.d.ts.map +1 -1
  51. package/dist/change/mock-change.js +1 -0
  52. package/dist/change/mock-change.js.map +1 -1
  53. package/dist/change/schema.d.ts +66 -0
  54. package/dist/change/schema.d.ts.map +1 -0
  55. package/dist/change/schema.js +103 -0
  56. package/dist/change/schema.js.map +1 -0
  57. package/dist/change/schema.test.d.ts +2 -0
  58. package/dist/change/schema.test.d.ts.map +1 -0
  59. package/dist/change/schema.test.js +268 -0
  60. package/dist/change/schema.test.js.map +1 -0
  61. package/dist/change-author/index.d.ts +2 -0
  62. package/dist/change-author/index.d.ts.map +1 -0
  63. package/dist/change-author/index.js +2 -0
  64. package/dist/change-author/index.js.map +1 -0
  65. package/dist/change-author/schema.d.ts +34 -0
  66. package/dist/change-author/schema.d.ts.map +1 -0
  67. package/dist/change-author/schema.js +41 -0
  68. package/dist/change-author/schema.js.map +1 -0
  69. package/dist/change-author/schema.test.d.ts +2 -0
  70. package/dist/change-author/schema.test.d.ts.map +1 -0
  71. package/dist/change-author/schema.test.js +310 -0
  72. package/dist/change-author/schema.test.js.map +1 -0
  73. package/dist/change-conflict/create-change-conflict.d.ts.map +1 -1
  74. package/dist/change-conflict/create-change-conflict.js +24 -6
  75. package/dist/change-conflict/create-change-conflict.js.map +1 -1
  76. package/dist/change-conflict/create-change-conflict.test.js +13 -11
  77. package/dist/change-conflict/create-change-conflict.test.js.map +1 -1
  78. package/dist/change-conflict/detect-change-conflicts.d.ts.map +1 -1
  79. package/dist/change-conflict/detect-change-conflicts.js +2 -0
  80. package/dist/change-conflict/detect-change-conflicts.js.map +1 -1
  81. package/dist/change-conflict/detect-change-conflicts.test.js +17 -13
  82. package/dist/change-conflict/detect-change-conflicts.test.js.map +1 -1
  83. package/dist/change-conflict/detect-diverging-entity-conflict.d.ts.map +1 -1
  84. package/dist/change-conflict/detect-diverging-entity-conflict.js +3 -1
  85. package/dist/change-conflict/detect-diverging-entity-conflict.js.map +1 -1
  86. package/dist/change-conflict/detect-diverging-entity-conflict.test.js +23 -21
  87. package/dist/change-conflict/detect-diverging-entity-conflict.test.js.map +1 -1
  88. package/dist/change-conflict/garbage-collect-change-conflicts.d.ts.map +1 -1
  89. package/dist/change-conflict/garbage-collect-change-conflicts.js +2 -0
  90. package/dist/change-conflict/garbage-collect-change-conflicts.js.map +1 -1
  91. package/dist/change-conflict/garbage-collect-change-conflicts.test.js +15 -15
  92. package/dist/change-conflict/garbage-collect-change-conflicts.test.js.map +1 -1
  93. package/dist/change-conflict/resolve-conflict-by-selecting.d.ts.map +1 -1
  94. package/dist/change-conflict/resolve-conflict-by-selecting.js +2 -2
  95. package/dist/change-conflict/resolve-conflict-by-selecting.js.map +1 -1
  96. package/dist/change-conflict/resolve-conflict-by-selecting.test.js +17 -8
  97. package/dist/change-conflict/resolve-conflict-by-selecting.test.js.map +1 -1
  98. package/dist/change-proposal/create-change-proposal.d.ts +16 -0
  99. package/dist/change-proposal/create-change-proposal.d.ts.map +1 -0
  100. package/dist/change-proposal/create-change-proposal.js +52 -0
  101. package/dist/change-proposal/create-change-proposal.js.map +1 -0
  102. package/dist/change-proposal/create-change-proposal.test.d.ts +2 -0
  103. package/dist/change-proposal/create-change-proposal.test.d.ts.map +1 -0
  104. package/dist/change-proposal/create-change-proposal.test.js +91 -0
  105. package/dist/change-proposal/create-change-proposal.test.js.map +1 -0
  106. package/dist/change-proposal/database-schema.d.ts +13 -0
  107. package/dist/change-proposal/database-schema.d.ts.map +1 -0
  108. package/dist/change-proposal/database-schema.js +17 -0
  109. package/dist/change-proposal/database-schema.js.map +1 -0
  110. package/dist/change-proposal/database-schema.test.d.ts +2 -0
  111. package/dist/change-proposal/database-schema.test.d.ts.map +1 -0
  112. package/dist/change-proposal/database-schema.test.js +159 -0
  113. package/dist/change-proposal/database-schema.test.js.map +1 -0
  114. package/dist/change-proposal/index.d.ts +3 -0
  115. package/dist/change-proposal/index.d.ts.map +1 -0
  116. package/dist/change-proposal/index.js +3 -0
  117. package/dist/change-proposal/index.js.map +1 -0
  118. package/dist/change-set/apply-change-set.d.ts +10 -0
  119. package/dist/change-set/apply-change-set.d.ts.map +1 -0
  120. package/dist/change-set/apply-change-set.js +139 -0
  121. package/dist/change-set/apply-change-set.js.map +1 -0
  122. package/dist/change-set/apply-change-set.test.d.ts +2 -0
  123. package/dist/change-set/apply-change-set.test.d.ts.map +1 -0
  124. package/dist/change-set/apply-change-set.test.js +393 -0
  125. package/dist/change-set/apply-change-set.test.js.map +1 -0
  126. package/dist/change-set/before-after-of-file.d.ts +31 -0
  127. package/dist/change-set/before-after-of-file.d.ts.map +1 -0
  128. package/dist/change-set/before-after-of-file.js +191 -0
  129. package/dist/change-set/before-after-of-file.js.map +1 -0
  130. package/dist/change-set/before-after-of-file.test.d.ts +2 -0
  131. package/dist/change-set/before-after-of-file.test.d.ts.map +1 -0
  132. package/dist/change-set/before-after-of-file.test.js +221 -0
  133. package/dist/change-set/before-after-of-file.test.js.map +1 -0
  134. package/dist/change-set/change-set-element-in-symmetric-difference.d.ts +2 -1
  135. package/dist/change-set/change-set-element-in-symmetric-difference.d.ts.map +1 -1
  136. package/dist/change-set/change-set-element-in-symmetric-difference.js.map +1 -1
  137. package/dist/change-set/change-set-element-in-symmetric-difference.test.js +204 -34
  138. package/dist/change-set/change-set-element-in-symmetric-difference.test.js.map +1 -1
  139. package/dist/change-set/checkout-change-set.d.ts +15 -0
  140. package/dist/change-set/checkout-change-set.d.ts.map +1 -0
  141. package/dist/change-set/checkout-change-set.js +64 -0
  142. package/dist/change-set/checkout-change-set.js.map +1 -0
  143. package/dist/change-set/checkout-change-set.test.d.ts +2 -0
  144. package/dist/change-set/checkout-change-set.test.d.ts.map +1 -0
  145. package/dist/change-set/checkout-change-set.test.js +127 -0
  146. package/dist/change-set/checkout-change-set.test.js.map +1 -0
  147. package/dist/change-set/create-change-set.d.ts +19 -20
  148. package/dist/change-set/create-change-set.d.ts.map +1 -1
  149. package/dist/change-set/create-change-set.js +73 -34
  150. package/dist/change-set/create-change-set.js.map +1 -1
  151. package/dist/change-set/create-change-set.test.js +78 -27
  152. package/dist/change-set/create-change-set.test.js.map +1 -1
  153. package/dist/change-set/create-checkpoint.d.ts +19 -0
  154. package/dist/change-set/create-checkpoint.d.ts.map +1 -0
  155. package/dist/change-set/create-checkpoint.js +95 -0
  156. package/dist/change-set/create-checkpoint.js.map +1 -0
  157. package/dist/change-set/create-checkpoint.test.d.ts +2 -0
  158. package/dist/change-set/create-checkpoint.test.d.ts.map +1 -0
  159. package/dist/change-set/create-checkpoint.test.js +347 -0
  160. package/dist/change-set/create-checkpoint.test.js.map +1 -0
  161. package/dist/change-set/create-merge-change-set.d.ts +23 -0
  162. package/dist/change-set/create-merge-change-set.d.ts.map +1 -0
  163. package/dist/change-set/create-merge-change-set.js +68 -0
  164. package/dist/change-set/create-merge-change-set.js.map +1 -0
  165. package/dist/change-set/create-merge-change-set.test.d.ts +2 -0
  166. package/dist/change-set/create-merge-change-set.test.d.ts.map +1 -0
  167. package/dist/change-set/create-merge-change-set.test.js +211 -0
  168. package/dist/change-set/create-merge-change-set.test.js.map +1 -0
  169. package/dist/change-set/create-transition-change-set.d.ts +18 -0
  170. package/dist/change-set/create-transition-change-set.d.ts.map +1 -0
  171. package/dist/change-set/create-transition-change-set.js +102 -0
  172. package/dist/change-set/create-transition-change-set.js.map +1 -0
  173. package/dist/change-set/create-transition-change-set.test.d.ts +2 -0
  174. package/dist/change-set/create-transition-change-set.test.d.ts.map +1 -0
  175. package/dist/change-set/create-transition-change-set.test.js +211 -0
  176. package/dist/change-set/create-transition-change-set.test.js.map +1 -0
  177. package/dist/change-set/create-undo-change-set.d.ts +27 -0
  178. package/dist/change-set/create-undo-change-set.d.ts.map +1 -0
  179. package/dist/change-set/create-undo-change-set.js +122 -0
  180. package/dist/change-set/create-undo-change-set.js.map +1 -0
  181. package/dist/change-set/create-undo-change-set.test.d.ts +2 -0
  182. package/dist/change-set/create-undo-change-set.test.d.ts.map +1 -0
  183. package/dist/change-set/create-undo-change-set.test.js +273 -0
  184. package/dist/change-set/create-undo-change-set.test.js.map +1 -0
  185. package/dist/change-set/database-schema.d.ts +39 -0
  186. package/dist/change-set/database-schema.d.ts.map +1 -0
  187. package/dist/change-set/database-schema.js +86 -0
  188. package/dist/change-set/database-schema.js.map +1 -0
  189. package/dist/change-set/database-schema.test.d.ts +2 -0
  190. package/dist/change-set/database-schema.test.d.ts.map +1 -0
  191. package/dist/change-set/database-schema.test.js +547 -0
  192. package/dist/change-set/database-schema.test.js.map +1 -0
  193. package/dist/change-set/diff-for-file.d.ts +29 -0
  194. package/dist/change-set/diff-for-file.d.ts.map +1 -0
  195. package/dist/change-set/diff-for-file.js +19 -0
  196. package/dist/change-set/diff-for-file.js.map +1 -0
  197. package/dist/change-set/get-before-after-of-file.d.ts +31 -0
  198. package/dist/change-set/get-before-after-of-file.d.ts.map +1 -0
  199. package/dist/change-set/get-before-after-of-file.js +189 -0
  200. package/dist/change-set/get-before-after-of-file.js.map +1 -0
  201. package/dist/change-set/get-before-after-of-file.test.d.ts +2 -0
  202. package/dist/change-set/get-before-after-of-file.test.d.ts.map +1 -0
  203. package/dist/change-set/get-before-after-of-file.test.js +220 -0
  204. package/dist/change-set/get-before-after-of-file.test.js.map +1 -0
  205. package/dist/change-set/index.d.ts +2 -1
  206. package/dist/change-set/index.d.ts.map +1 -1
  207. package/dist/change-set/index.js +2 -1
  208. package/dist/change-set/index.js.map +1 -1
  209. package/dist/change-set/merge-change-sets.d.ts +23 -0
  210. package/dist/change-set/merge-change-sets.d.ts.map +1 -0
  211. package/dist/change-set/merge-change-sets.js +69 -0
  212. package/dist/change-set/merge-change-sets.js.map +1 -0
  213. package/dist/change-set/merge-change-sets.test.d.ts +2 -0
  214. package/dist/change-set/merge-change-sets.test.d.ts.map +1 -0
  215. package/dist/change-set/merge-change-sets.test.js +184 -0
  216. package/dist/change-set/merge-change-sets.test.js.map +1 -0
  217. package/dist/change-set/restore-change-set.d.ts +14 -0
  218. package/dist/change-set/restore-change-set.d.ts.map +1 -0
  219. package/dist/change-set/restore-change-set.js +98 -0
  220. package/dist/change-set/restore-change-set.js.map +1 -0
  221. package/dist/change-set/restore-change-set.test.d.ts +2 -0
  222. package/dist/change-set/restore-change-set.test.d.ts.map +1 -0
  223. package/dist/change-set/restore-change-set.test.js +238 -0
  224. package/dist/change-set/restore-change-set.test.js.map +1 -0
  225. package/dist/change-set/schema.d.ts +105 -0
  226. package/dist/change-set/schema.d.ts.map +1 -0
  227. package/dist/change-set/schema.js +122 -0
  228. package/dist/change-set/schema.js.map +1 -0
  229. package/dist/change-set/schema.test.d.ts +2 -0
  230. package/dist/change-set/schema.test.d.ts.map +1 -0
  231. package/dist/change-set/schema.test.js +574 -0
  232. package/dist/change-set/schema.test.js.map +1 -0
  233. package/dist/change-set-edge/database-schema.d.ts +11 -0
  234. package/dist/change-set-edge/database-schema.d.ts.map +1 -0
  235. package/dist/change-set-edge/database-schema.js +29 -0
  236. package/dist/change-set-edge/database-schema.js.map +1 -0
  237. package/dist/change-set-edge/database-schema.test.d.ts +2 -0
  238. package/dist/change-set-edge/database-schema.test.d.ts.map +1 -0
  239. package/dist/change-set-edge/database-schema.test.js +166 -0
  240. package/dist/change-set-edge/database-schema.test.js.map +1 -0
  241. package/dist/change-set-edge/index.d.ts +2 -0
  242. package/dist/change-set-edge/index.d.ts.map +1 -0
  243. package/dist/change-set-edge/index.js +2 -0
  244. package/dist/change-set-edge/index.js.map +1 -0
  245. package/dist/change-set-v2/apply-change-set.d.ts +10 -0
  246. package/dist/change-set-v2/apply-change-set.d.ts.map +1 -0
  247. package/dist/change-set-v2/apply-change-set.js +147 -0
  248. package/dist/change-set-v2/apply-change-set.js.map +1 -0
  249. package/dist/change-set-v2/apply-change-set.test.d.ts +2 -0
  250. package/dist/change-set-v2/apply-change-set.test.d.ts.map +1 -0
  251. package/dist/change-set-v2/apply-change-set.test.js +270 -0
  252. package/dist/change-set-v2/apply-change-set.test.js.map +1 -0
  253. package/dist/change-set-v2/create-change-set.d.ts +10 -0
  254. package/dist/change-set-v2/create-change-set.d.ts.map +1 -0
  255. package/dist/change-set-v2/create-change-set.js +57 -0
  256. package/dist/change-set-v2/create-change-set.js.map +1 -0
  257. package/dist/change-set-v2/create-change-set.test.d.ts +2 -0
  258. package/dist/change-set-v2/create-change-set.test.d.ts.map +1 -0
  259. package/dist/change-set-v2/create-change-set.test.js +59 -0
  260. package/dist/change-set-v2/create-change-set.test.js.map +1 -0
  261. package/dist/change-set-v2/create-checkpoint.d.ts +7 -0
  262. package/dist/change-set-v2/create-checkpoint.d.ts.map +1 -0
  263. package/dist/change-set-v2/create-checkpoint.js +79 -0
  264. package/dist/change-set-v2/create-checkpoint.js.map +1 -0
  265. package/dist/change-set-v2/create-checkpoint.test.d.ts +2 -0
  266. package/dist/change-set-v2/create-checkpoint.test.d.ts.map +1 -0
  267. package/dist/change-set-v2/create-checkpoint.test.js +289 -0
  268. package/dist/change-set-v2/create-checkpoint.test.js.map +1 -0
  269. package/dist/change-set-v2/create-merge-change-set.d.ts +23 -0
  270. package/dist/change-set-v2/create-merge-change-set.d.ts.map +1 -0
  271. package/dist/change-set-v2/create-merge-change-set.js +68 -0
  272. package/dist/change-set-v2/create-merge-change-set.js.map +1 -0
  273. package/dist/change-set-v2/create-merge-change-set.test.d.ts +2 -0
  274. package/dist/change-set-v2/create-merge-change-set.test.d.ts.map +1 -0
  275. package/dist/change-set-v2/create-merge-change-set.test.js +223 -0
  276. package/dist/change-set-v2/create-merge-change-set.test.js.map +1 -0
  277. package/dist/change-set-v2/index.d.ts +5 -0
  278. package/dist/change-set-v2/index.d.ts.map +1 -0
  279. package/dist/change-set-v2/index.js +5 -0
  280. package/dist/change-set-v2/index.js.map +1 -0
  281. package/dist/change-set-v2/schema.d.ts +50 -0
  282. package/dist/change-set-v2/schema.d.ts.map +1 -0
  283. package/dist/change-set-v2/schema.js +347 -0
  284. package/dist/change-set-v2/schema.js.map +1 -0
  285. package/dist/change-set-v2/schema.test.d.ts +2 -0
  286. package/dist/change-set-v2/schema.test.d.ts.map +1 -0
  287. package/dist/change-set-v2/schema.test.js +713 -0
  288. package/dist/change-set-v2/schema.test.js.map +1 -0
  289. package/dist/commit/apply-commit.d.ts +32 -0
  290. package/dist/commit/apply-commit.d.ts.map +1 -0
  291. package/dist/commit/apply-commit.js +63 -0
  292. package/dist/commit/apply-commit.js.map +1 -0
  293. package/dist/commit/apply-commit.test.d.ts +2 -0
  294. package/dist/commit/apply-commit.test.d.ts.map +1 -0
  295. package/dist/commit/apply-commit.test.js +367 -0
  296. package/dist/commit/apply-commit.test.js.map +1 -0
  297. package/dist/commit/create-checkpoint.d.ts +19 -0
  298. package/dist/commit/create-checkpoint.d.ts.map +1 -0
  299. package/dist/commit/create-checkpoint.js +118 -0
  300. package/dist/commit/create-checkpoint.js.map +1 -0
  301. package/dist/commit/create-checkpoint.test.d.ts +2 -0
  302. package/dist/commit/create-checkpoint.test.d.ts.map +1 -0
  303. package/dist/commit/create-checkpoint.test.js +472 -0
  304. package/dist/commit/create-checkpoint.test.js.map +1 -0
  305. package/dist/commit/create-commit.d.ts +38 -0
  306. package/dist/commit/create-commit.d.ts.map +1 -0
  307. package/dist/commit/create-commit.js +68 -0
  308. package/dist/commit/create-commit.js.map +1 -0
  309. package/dist/commit/create-merge-commit.d.ts +24 -0
  310. package/dist/commit/create-merge-commit.d.ts.map +1 -0
  311. package/dist/commit/create-merge-commit.js +103 -0
  312. package/dist/commit/create-merge-commit.js.map +1 -0
  313. package/dist/commit/create-merge-commit.test.d.ts +2 -0
  314. package/dist/commit/create-merge-commit.test.d.ts.map +1 -0
  315. package/dist/commit/create-merge-commit.test.js +242 -0
  316. package/dist/commit/create-merge-commit.test.js.map +1 -0
  317. package/dist/commit/create-transition-commit.d.ts +18 -0
  318. package/dist/commit/create-transition-commit.d.ts.map +1 -0
  319. package/dist/commit/create-transition-commit.js +136 -0
  320. package/dist/commit/create-transition-commit.js.map +1 -0
  321. package/dist/commit/create-transition-commit.test.d.ts +2 -0
  322. package/dist/commit/create-transition-commit.test.d.ts.map +1 -0
  323. package/dist/commit/create-transition-commit.test.js +221 -0
  324. package/dist/commit/create-transition-commit.test.js.map +1 -0
  325. package/dist/commit/create-undo-commit.d.ts +27 -0
  326. package/dist/commit/create-undo-commit.d.ts.map +1 -0
  327. package/dist/commit/create-undo-commit.js +143 -0
  328. package/dist/commit/create-undo-commit.js.map +1 -0
  329. package/dist/commit/create-undo-commit.test.d.ts +2 -0
  330. package/dist/commit/create-undo-commit.test.d.ts.map +1 -0
  331. package/dist/commit/create-undo-commit.test.js +298 -0
  332. package/dist/commit/create-undo-commit.test.js.map +1 -0
  333. package/dist/commit/index.d.ts +6 -0
  334. package/dist/commit/index.d.ts.map +1 -0
  335. package/dist/commit/index.js +6 -0
  336. package/dist/commit/index.js.map +1 -0
  337. package/dist/commit/schema.d.ts +73 -0
  338. package/dist/commit/schema.d.ts.map +1 -0
  339. package/dist/commit/schema.js +90 -0
  340. package/dist/commit/schema.js.map +1 -0
  341. package/dist/commit/schema.test.d.ts +2 -0
  342. package/dist/commit/schema.test.d.ts.map +1 -0
  343. package/dist/commit/schema.test.js +216 -0
  344. package/dist/commit/schema.test.js.map +1 -0
  345. package/dist/database/apply-schema.d.ts +3 -0
  346. package/dist/database/apply-schema.d.ts.map +1 -1
  347. package/dist/database/apply-schema.js +91 -258
  348. package/dist/database/apply-schema.js.map +1 -1
  349. package/dist/database/execute-sync.d.ts +12 -6
  350. package/dist/database/execute-sync.d.ts.map +1 -1
  351. package/dist/database/execute-sync.js +25 -24
  352. package/dist/database/execute-sync.js.map +1 -1
  353. package/dist/database/execute-sync.test.js +53 -60
  354. package/dist/database/execute-sync.test.js.map +1 -1
  355. package/dist/database/graph-traversal-mode.d.ts +72 -0
  356. package/dist/database/graph-traversal-mode.d.ts.map +1 -0
  357. package/dist/database/graph-traversal-mode.js +2 -0
  358. package/dist/database/graph-traversal-mode.js.map +1 -0
  359. package/dist/database/index.d.ts +1 -2
  360. package/dist/database/index.d.ts.map +1 -1
  361. package/dist/database/index.js +1 -2
  362. package/dist/database/index.js.map +1 -1
  363. package/dist/database/init-db.d.ts +2 -0
  364. package/dist/database/init-db.d.ts.map +1 -1
  365. package/dist/database/init-db.js +119 -67
  366. package/dist/database/init-db.js.map +1 -1
  367. package/dist/database/init-db.test.js +2 -480
  368. package/dist/database/init-db.test.js.map +1 -1
  369. package/dist/database/kysely-plugin/json-column-plugin.d.ts +7 -0
  370. package/dist/database/kysely-plugin/json-column-plugin.d.ts.map +1 -0
  371. package/dist/database/kysely-plugin/json-column-plugin.js +210 -0
  372. package/dist/database/kysely-plugin/json-column-plugin.js.map +1 -0
  373. package/dist/database/kysely-plugin/json-column-plugin.test.d.ts +2 -0
  374. package/dist/database/kysely-plugin/json-column-plugin.test.d.ts.map +1 -0
  375. package/dist/database/kysely-plugin/json-column-plugin.test.js +329 -0
  376. package/dist/database/kysely-plugin/json-column-plugin.test.js.map +1 -0
  377. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.d.ts.map +1 -1
  378. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js +5 -10
  379. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js.map +1 -1
  380. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.js +1 -1
  381. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.js.map +1 -1
  382. package/dist/database/kysely-plugin/serialize-jsonb-plugin.d.ts +14 -2
  383. package/dist/database/kysely-plugin/serialize-jsonb-plugin.d.ts.map +1 -1
  384. package/dist/database/kysely-plugin/serialize-jsonb-plugin.js +145 -74
  385. package/dist/database/kysely-plugin/serialize-jsonb-plugin.js.map +1 -1
  386. package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.js +145 -1
  387. package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.js.map +1 -1
  388. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.d.ts +15 -0
  389. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.d.ts.map +1 -0
  390. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.js +31 -0
  391. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.js.map +1 -0
  392. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.d.ts +2 -0
  393. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.d.ts.map +1 -0
  394. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.js +51 -0
  395. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.js.map +1 -0
  396. package/dist/database/mutation-log/database-schema.d.ts.map +1 -1
  397. package/dist/database/mutation-log/database-schema.js +0 -4
  398. package/dist/database/mutation-log/database-schema.js.map +1 -1
  399. package/dist/database/nano-id.d.ts +4 -1
  400. package/dist/database/nano-id.d.ts.map +1 -1
  401. package/dist/database/nano-id.js +4 -1
  402. package/dist/database/nano-id.js.map +1 -1
  403. package/dist/database/nano-id.test.js +3 -3
  404. package/dist/database/nano-id.test.js.map +1 -1
  405. package/dist/database/schema.d.ts +50 -209
  406. package/dist/database/schema.d.ts.map +1 -1
  407. package/dist/database/schema.js +39 -1
  408. package/dist/database/schema.js.map +1 -1
  409. package/dist/deterministic/generate-human-id.d.ts +20 -0
  410. package/dist/deterministic/generate-human-id.d.ts.map +1 -0
  411. package/dist/deterministic/generate-human-id.js +86 -0
  412. package/dist/deterministic/generate-human-id.js.map +1 -0
  413. package/dist/deterministic/generate-human-id.test.d.ts +2 -0
  414. package/dist/deterministic/generate-human-id.test.d.ts.map +1 -0
  415. package/dist/deterministic/generate-human-id.test.js +123 -0
  416. package/dist/deterministic/generate-human-id.test.js.map +1 -0
  417. package/dist/deterministic/index.d.ts +8 -0
  418. package/dist/deterministic/index.d.ts.map +1 -0
  419. package/dist/deterministic/index.js +8 -0
  420. package/dist/deterministic/index.js.map +1 -0
  421. package/dist/deterministic/is-deterministic-mode.d.ts +14 -0
  422. package/dist/deterministic/is-deterministic-mode.d.ts.map +1 -0
  423. package/dist/deterministic/is-deterministic-mode.js +25 -0
  424. package/dist/deterministic/is-deterministic-mode.js.map +1 -0
  425. package/dist/deterministic/is-deterministic-mode.test.d.ts +2 -0
  426. package/dist/deterministic/is-deterministic-mode.test.d.ts.map +1 -0
  427. package/dist/deterministic/is-deterministic-mode.test.js +103 -0
  428. package/dist/deterministic/is-deterministic-mode.test.js.map +1 -0
  429. package/dist/deterministic/nano-id.d.ts +61 -0
  430. package/dist/deterministic/nano-id.d.ts.map +1 -0
  431. package/dist/deterministic/nano-id.js +161 -0
  432. package/dist/deterministic/nano-id.js.map +1 -0
  433. package/dist/deterministic/nano-id.test.d.ts +2 -0
  434. package/dist/deterministic/nano-id.test.d.ts.map +1 -0
  435. package/dist/deterministic/nano-id.test.js +163 -0
  436. package/dist/deterministic/nano-id.test.js.map +1 -0
  437. package/dist/deterministic/options.d.ts +53 -0
  438. package/dist/deterministic/options.d.ts.map +1 -0
  439. package/dist/deterministic/options.js +52 -0
  440. package/dist/deterministic/options.js.map +1 -0
  441. package/dist/deterministic/options.test.d.ts +2 -0
  442. package/dist/deterministic/options.test.d.ts.map +1 -0
  443. package/dist/deterministic/options.test.js +111 -0
  444. package/dist/deterministic/options.test.js.map +1 -0
  445. package/dist/deterministic/random.d.ts +68 -0
  446. package/dist/deterministic/random.d.ts.map +1 -0
  447. package/dist/deterministic/random.js +225 -0
  448. package/dist/deterministic/random.js.map +1 -0
  449. package/dist/deterministic/random.test.d.ts +2 -0
  450. package/dist/deterministic/random.test.d.ts.map +1 -0
  451. package/dist/deterministic/random.test.js +244 -0
  452. package/dist/deterministic/random.test.js.map +1 -0
  453. package/dist/deterministic/sequence.d.ts +56 -0
  454. package/dist/deterministic/sequence.d.ts.map +1 -0
  455. package/dist/deterministic/sequence.js +107 -0
  456. package/dist/deterministic/sequence.js.map +1 -0
  457. package/dist/deterministic/sequence.test.d.ts +2 -0
  458. package/dist/deterministic/sequence.test.d.ts.map +1 -0
  459. package/dist/deterministic/sequence.test.js +71 -0
  460. package/dist/deterministic/sequence.test.js.map +1 -0
  461. package/dist/deterministic/timestamp.d.ts +47 -0
  462. package/dist/deterministic/timestamp.d.ts.map +1 -0
  463. package/dist/deterministic/timestamp.js +74 -0
  464. package/dist/deterministic/timestamp.js.map +1 -0
  465. package/dist/deterministic/timestamp.test.d.ts +2 -0
  466. package/dist/deterministic/timestamp.test.d.ts.map +1 -0
  467. package/dist/deterministic/timestamp.test.js +145 -0
  468. package/dist/deterministic/timestamp.test.js.map +1 -0
  469. package/dist/deterministic/uuid-v7.d.ts +49 -0
  470. package/dist/deterministic/uuid-v7.d.ts.map +1 -0
  471. package/dist/deterministic/uuid-v7.js +75 -0
  472. package/dist/deterministic/uuid-v7.js.map +1 -0
  473. package/dist/deterministic/uuid-v7.test.d.ts +2 -0
  474. package/dist/deterministic/uuid-v7.test.d.ts.map +1 -0
  475. package/dist/deterministic/uuid-v7.test.js +114 -0
  476. package/dist/deterministic/uuid-v7.test.js.map +1 -0
  477. package/dist/discussion/create-discussion.d.ts +2 -1
  478. package/dist/discussion/create-discussion.d.ts.map +1 -1
  479. package/dist/discussion/create-discussion.js.map +1 -1
  480. package/dist/discussion/create-discussion.test.js +13 -2
  481. package/dist/discussion/create-discussion.test.js.map +1 -1
  482. package/dist/entity/eb-entity.d.ts +76 -0
  483. package/dist/entity/eb-entity.d.ts.map +1 -0
  484. package/dist/entity/eb-entity.js +156 -0
  485. package/dist/entity/eb-entity.js.map +1 -0
  486. package/dist/entity/eb-entity.test.d.ts +2 -0
  487. package/dist/entity/eb-entity.test.d.ts.map +1 -0
  488. package/dist/entity/eb-entity.test.js +573 -0
  489. package/dist/entity/eb-entity.test.js.map +1 -0
  490. package/dist/entity/index.d.ts +7 -0
  491. package/dist/entity/index.d.ts.map +1 -0
  492. package/dist/entity/index.js +4 -0
  493. package/dist/entity/index.js.map +1 -0
  494. package/dist/entity/label/create-entity-label.d.ts +61 -0
  495. package/dist/entity/label/create-entity-label.d.ts.map +1 -0
  496. package/dist/entity/label/create-entity-label.js +92 -0
  497. package/dist/entity/label/create-entity-label.js.map +1 -0
  498. package/dist/entity/label/create-entity-label.test.d.ts +2 -0
  499. package/dist/entity/label/create-entity-label.test.d.ts.map +1 -0
  500. package/dist/entity/label/create-entity-label.test.js +261 -0
  501. package/dist/entity/label/create-entity-label.test.js.map +1 -0
  502. package/dist/entity/label/schema.d.ts +40 -0
  503. package/dist/entity/label/schema.d.ts.map +1 -0
  504. package/dist/entity/label/schema.js +42 -0
  505. package/dist/entity/label/schema.js.map +1 -0
  506. package/dist/entity/label/schema.test.d.ts +2 -0
  507. package/dist/entity/label/schema.test.d.ts.map +1 -0
  508. package/dist/entity/label/schema.test.js +596 -0
  509. package/dist/entity/label/schema.test.js.map +1 -0
  510. package/dist/entity/schema.d.ts +13 -0
  511. package/dist/entity/schema.d.ts.map +1 -0
  512. package/dist/entity/schema.js +5 -0
  513. package/dist/entity/schema.js.map +1 -0
  514. package/dist/entity/thread/create-entity-thread.d.ts +75 -0
  515. package/dist/entity/thread/create-entity-thread.d.ts.map +1 -0
  516. package/dist/entity/thread/create-entity-thread.js +109 -0
  517. package/dist/entity/thread/create-entity-thread.js.map +1 -0
  518. package/dist/entity/thread/create-entity-thread.test.d.ts +2 -0
  519. package/dist/entity/thread/create-entity-thread.test.d.ts.map +1 -0
  520. package/dist/entity/thread/create-entity-thread.test.js +240 -0
  521. package/dist/entity/thread/create-entity-thread.test.js.map +1 -0
  522. package/dist/entity/thread/query-threads.test.d.ts +2 -0
  523. package/dist/entity/thread/query-threads.test.d.ts.map +1 -0
  524. package/dist/entity/thread/query-threads.test.js +330 -0
  525. package/dist/entity/thread/query-threads.test.js.map +1 -0
  526. package/dist/entity/thread/schema.d.ts +40 -0
  527. package/dist/entity/thread/schema.d.ts.map +1 -0
  528. package/dist/entity/thread/schema.js +42 -0
  529. package/dist/entity/thread/schema.js.map +1 -0
  530. package/dist/entity/thread/schema.test.d.ts +2 -0
  531. package/dist/entity/thread/schema.test.d.ts.map +1 -0
  532. package/dist/entity/thread/schema.test.js +144 -0
  533. package/dist/entity/thread/schema.test.js.map +1 -0
  534. package/dist/entity-views/entity-state-all.d.ts +269 -0
  535. package/dist/entity-views/entity-state-all.d.ts.map +1 -0
  536. package/dist/entity-views/entity-state-all.js +254 -0
  537. package/dist/entity-views/entity-state-all.js.map +1 -0
  538. package/dist/entity-views/entity-state-all.test.d.ts +2 -0
  539. package/dist/entity-views/entity-state-all.test.d.ts.map +1 -0
  540. package/dist/entity-views/entity-state-all.test.js +544 -0
  541. package/dist/entity-views/entity-state-all.test.js.map +1 -0
  542. package/dist/entity-views/entity-state-history.d.ts +218 -0
  543. package/dist/entity-views/entity-state-history.d.ts.map +1 -0
  544. package/dist/entity-views/entity-state-history.js +61 -0
  545. package/dist/entity-views/entity-state-history.js.map +1 -0
  546. package/dist/entity-views/entity-state-history.test.d.ts +2 -0
  547. package/dist/entity-views/entity-state-history.test.d.ts.map +1 -0
  548. package/dist/entity-views/entity-state-history.test.js +329 -0
  549. package/dist/entity-views/entity-state-history.test.js.map +1 -0
  550. package/dist/entity-views/entity-state.d.ts +269 -0
  551. package/dist/entity-views/entity-state.d.ts.map +1 -0
  552. package/dist/entity-views/entity-state.js +251 -0
  553. package/dist/entity-views/entity-state.js.map +1 -0
  554. package/dist/entity-views/entity-state.test.d.ts +2 -0
  555. package/dist/entity-views/entity-state.test.d.ts.map +1 -0
  556. package/dist/entity-views/entity-state.test.js +616 -0
  557. package/dist/entity-views/entity-state.test.js.map +1 -0
  558. package/dist/entity-views/entity-view-builder.d.ts +92 -0
  559. package/dist/entity-views/entity-view-builder.d.ts.map +1 -0
  560. package/dist/entity-views/entity-view-builder.js +63 -0
  561. package/dist/entity-views/entity-view-builder.js.map +1 -0
  562. package/dist/entity-views/entity-view-builder.test.d.ts +2 -0
  563. package/dist/entity-views/entity-view-builder.test.d.ts.map +1 -0
  564. package/dist/entity-views/entity-view-builder.test.js +247 -0
  565. package/dist/entity-views/entity-view-builder.test.js.map +1 -0
  566. package/dist/entity-views/index.d.ts +2 -0
  567. package/dist/entity-views/index.d.ts.map +1 -0
  568. package/dist/entity-views/index.js +2 -0
  569. package/dist/entity-views/index.js.map +1 -0
  570. package/dist/entity-views/types.d.ts +309 -0
  571. package/dist/entity-views/types.d.ts.map +1 -0
  572. package/dist/entity-views/types.js +2 -0
  573. package/dist/entity-views/types.js.map +1 -0
  574. package/dist/entity-views/types.test.d.ts +2 -0
  575. package/dist/entity-views/types.test.d.ts.map +1 -0
  576. package/dist/entity-views/types.test.js +62 -0
  577. package/dist/entity-views/types.test.js.map +1 -0
  578. package/dist/file/database-schema.d.ts +25 -0
  579. package/dist/file/database-schema.d.ts.map +1 -0
  580. package/dist/file/database-schema.js +26 -0
  581. package/dist/file/database-schema.js.map +1 -0
  582. package/dist/file/database-schema.test.d.ts +2 -0
  583. package/dist/file/database-schema.test.d.ts.map +1 -0
  584. package/dist/file/database-schema.test.js +60 -0
  585. package/dist/file/database-schema.test.js.map +1 -0
  586. package/dist/file/file-handlers.d.ts +15 -0
  587. package/dist/file/file-handlers.d.ts.map +1 -0
  588. package/dist/file/file-handlers.js +354 -0
  589. package/dist/file/file-handlers.js.map +1 -0
  590. package/dist/file/file-handlers.test.d.ts +2 -0
  591. package/dist/file/file-handlers.test.d.ts.map +1 -0
  592. package/dist/file/file-handlers.test.js +151 -0
  593. package/dist/file/file-handlers.test.js.map +1 -0
  594. package/dist/file/index.d.ts +1 -1
  595. package/dist/file/index.d.ts.map +1 -1
  596. package/dist/file/index.js +1 -1
  597. package/dist/file/index.js.map +1 -1
  598. package/dist/file/materialize-file-data-at-changeset.d.ts +9 -0
  599. package/dist/file/materialize-file-data-at-changeset.d.ts.map +1 -0
  600. package/dist/file/materialize-file-data-at-changeset.js +119 -0
  601. package/dist/file/materialize-file-data-at-changeset.js.map +1 -0
  602. package/dist/file/materialize-file-data-at-commit.d.ts +9 -0
  603. package/dist/file/materialize-file-data-at-commit.d.ts.map +1 -0
  604. package/dist/file/materialize-file-data-at-commit.js +119 -0
  605. package/dist/file/materialize-file-data-at-commit.js.map +1 -0
  606. package/dist/file/materialize-file-data.d.ts +8 -0
  607. package/dist/file/materialize-file-data.d.ts.map +1 -0
  608. package/dist/file/materialize-file-data.js +91 -0
  609. package/dist/file/materialize-file-data.js.map +1 -0
  610. package/dist/file/materialize-file-data.test.d.ts +2 -0
  611. package/dist/file/materialize-file-data.test.d.ts.map +1 -0
  612. package/dist/file/materialize-file-data.test.js +90 -0
  613. package/dist/file/materialize-file-data.test.js.map +1 -0
  614. package/dist/file/schema.d.ts +109 -0
  615. package/dist/file/schema.d.ts.map +1 -0
  616. package/dist/file/schema.js +333 -0
  617. package/dist/file/schema.js.map +1 -0
  618. package/dist/file/schema.test.d.ts +2 -0
  619. package/dist/file/schema.test.d.ts.map +1 -0
  620. package/dist/file/schema.test.js +1313 -0
  621. package/dist/file/schema.test.js.map +1 -0
  622. package/dist/file/store-detected-change-schema.d.ts +8 -0
  623. package/dist/file/store-detected-change-schema.d.ts.map +1 -0
  624. package/dist/file/store-detected-change-schema.js +41 -0
  625. package/dist/file/store-detected-change-schema.js.map +1 -0
  626. package/dist/file/store-detected-change-schema.test.d.ts +2 -0
  627. package/dist/file/store-detected-change-schema.test.d.ts.map +1 -0
  628. package/dist/file/store-detected-change-schema.test.js +211 -0
  629. package/dist/file/store-detected-change-schema.test.js.map +1 -0
  630. package/dist/file/unknown-file-fallback-plugin.d.ts +22 -0
  631. package/dist/file/unknown-file-fallback-plugin.d.ts.map +1 -0
  632. package/dist/file/unknown-file-fallback-plugin.js +73 -0
  633. package/dist/file/unknown-file-fallback-plugin.js.map +1 -0
  634. package/dist/file/unknown-file-fallback-plugin.test.d.ts +2 -0
  635. package/dist/file/unknown-file-fallback-plugin.test.d.ts.map +1 -0
  636. package/dist/file/unknown-file-fallback-plugin.test.js +305 -0
  637. package/dist/file/unknown-file-fallback-plugin.test.js.map +1 -0
  638. package/dist/file-queue/database-schema.d.ts +17 -0
  639. package/dist/file-queue/database-schema.d.ts.map +1 -0
  640. package/dist/file-queue/database-schema.js +53 -0
  641. package/dist/file-queue/database-schema.js.map +1 -0
  642. package/dist/file-queue/file-handlers.d.ts +1 -1
  643. package/dist/file-queue/file-handlers.d.ts.map +1 -1
  644. package/dist/file-queue/file-handlers.js +60 -29
  645. package/dist/file-queue/file-handlers.js.map +1 -1
  646. package/dist/file-queue/file-queue-process.d.ts.map +1 -1
  647. package/dist/file-queue/file-queue-process.js +26 -17
  648. package/dist/file-queue/file-queue-process.js.map +1 -1
  649. package/dist/file-queue/file-queue-process.test.js +133 -43
  650. package/dist/file-queue/file-queue-process.test.js.map +1 -1
  651. package/dist/file-queue/with-skip-file-queue.d.ts +18 -0
  652. package/dist/file-queue/with-skip-file-queue.d.ts.map +1 -1
  653. package/dist/file-queue/with-skip-file-queue.js +56 -10
  654. package/dist/file-queue/with-skip-file-queue.js.map +1 -1
  655. package/dist/file-queue/with-skip-file-queue.test.js +28 -12
  656. package/dist/file-queue/with-skip-file-queue.test.js.map +1 -1
  657. package/dist/hooks/create-hooks.d.ts +50 -0
  658. package/dist/hooks/create-hooks.d.ts.map +1 -0
  659. package/dist/hooks/create-hooks.js +25 -0
  660. package/dist/hooks/create-hooks.js.map +1 -0
  661. package/dist/hooks/create-hooks.test.d.ts +2 -0
  662. package/dist/hooks/create-hooks.test.d.ts.map +1 -0
  663. package/dist/hooks/create-hooks.test.js +98 -0
  664. package/dist/hooks/create-hooks.test.js.map +1 -0
  665. package/dist/hooks/index.d.ts +2 -0
  666. package/dist/hooks/index.d.ts.map +1 -0
  667. package/dist/hooks/index.js +2 -0
  668. package/dist/hooks/index.js.map +1 -0
  669. package/dist/index.d.ts +13 -6
  670. package/dist/index.d.ts.map +1 -1
  671. package/dist/index.js +13 -6
  672. package/dist/index.js.map +1 -1
  673. package/dist/key-value/database-schema.d.ts +3 -2
  674. package/dist/key-value/database-schema.d.ts.map +1 -1
  675. package/dist/key-value/database-schema.js +3 -3
  676. package/dist/key-value/database-schema.test.js +13 -4
  677. package/dist/key-value/database-schema.test.js.map +1 -1
  678. package/dist/key-value/index.d.ts +2 -0
  679. package/dist/key-value/index.d.ts.map +1 -0
  680. package/dist/key-value/index.js +2 -0
  681. package/dist/key-value/index.js.map +1 -0
  682. package/dist/key-value/schema.d.ts +81 -0
  683. package/dist/key-value/schema.d.ts.map +1 -0
  684. package/dist/key-value/schema.js +31 -0
  685. package/dist/key-value/schema.js.map +1 -0
  686. package/dist/key-value/schema.test.d.ts +2 -0
  687. package/dist/key-value/schema.test.d.ts.map +1 -0
  688. package/dist/key-value/schema.test.js +237 -0
  689. package/dist/key-value/schema.test.js.map +1 -0
  690. package/dist/key-value-v2/schema.d.ts +27 -0
  691. package/dist/key-value-v2/schema.d.ts.map +1 -0
  692. package/dist/key-value-v2/schema.js +73 -0
  693. package/dist/key-value-v2/schema.js.map +1 -0
  694. package/dist/key-value-v2/schema.test.d.ts +2 -0
  695. package/dist/key-value-v2/schema.test.d.ts.map +1 -0
  696. package/dist/key-value-v2/schema.test.js +144 -0
  697. package/dist/key-value-v2/schema.test.js.map +1 -0
  698. package/dist/label/create-label.d.ts +20 -0
  699. package/dist/label/create-label.d.ts.map +1 -0
  700. package/dist/label/create-label.js +45 -0
  701. package/dist/label/create-label.js.map +1 -0
  702. package/dist/label/create-label.test.d.ts +2 -0
  703. package/dist/label/create-label.test.d.ts.map +1 -0
  704. package/dist/label/create-label.test.js +191 -0
  705. package/dist/label/create-label.test.js.map +1 -0
  706. package/dist/label/index.d.ts +3 -0
  707. package/dist/label/index.d.ts.map +1 -0
  708. package/dist/label/index.js +3 -0
  709. package/dist/label/index.js.map +1 -0
  710. package/dist/label/schema.d.ts +22 -0
  711. package/dist/label/schema.d.ts.map +1 -0
  712. package/dist/label/schema.js +26 -0
  713. package/dist/label/schema.js.map +1 -0
  714. package/dist/label/schema.test.d.ts +2 -0
  715. package/dist/label/schema.test.d.ts.map +1 -0
  716. package/dist/label/schema.test.js +76 -0
  717. package/dist/label/schema.test.js.map +1 -0
  718. package/dist/lix/index.d.ts +3 -3
  719. package/dist/lix/index.d.ts.map +1 -1
  720. package/dist/lix/index.js +3 -6
  721. package/dist/lix/index.js.map +1 -1
  722. package/dist/lix/merge.test.js +4 -1
  723. package/dist/lix/merge.test.js.map +1 -1
  724. package/dist/lix/new-lix.d.ts +79 -4
  725. package/dist/lix/new-lix.d.ts.map +1 -1
  726. package/dist/lix/new-lix.js +487 -8
  727. package/dist/lix/new-lix.js.map +1 -1
  728. package/dist/lix/new-lix.test.js +346 -17
  729. package/dist/lix/new-lix.test.js.map +1 -1
  730. package/dist/lix/open-lix-in-memory.test.js +2 -7
  731. package/dist/lix/open-lix-in-memory.test.js.map +1 -1
  732. package/dist/lix/open-lix.d.ts +68 -7
  733. package/dist/lix/open-lix.d.ts.map +1 -1
  734. package/dist/lix/open-lix.js +190 -32
  735. package/dist/lix/open-lix.js.map +1 -1
  736. package/dist/lix/open-lix.test.js +296 -25
  737. package/dist/lix/open-lix.test.js.map +1 -1
  738. package/dist/lix/storage/in-memory.d.ts +35 -0
  739. package/dist/lix/storage/in-memory.d.ts.map +1 -0
  740. package/dist/lix/storage/in-memory.js +50 -0
  741. package/dist/lix/storage/in-memory.js.map +1 -0
  742. package/dist/lix/storage/in-memory.test.d.ts +2 -0
  743. package/dist/lix/storage/in-memory.test.d.ts.map +1 -0
  744. package/dist/lix/storage/in-memory.test.js +85 -0
  745. package/dist/lix/storage/in-memory.test.js.map +1 -0
  746. package/dist/lix/storage/lix-storage-adapter.d.ts +46 -0
  747. package/dist/lix/storage/lix-storage-adapter.d.ts.map +1 -0
  748. package/dist/lix/storage/lix-storage-adapter.js +2 -0
  749. package/dist/lix/storage/lix-storage-adapter.js.map +1 -0
  750. package/dist/lix/storage/opfs.d.ts +95 -0
  751. package/dist/lix/storage/opfs.d.ts.map +1 -0
  752. package/dist/lix/storage/opfs.js +263 -0
  753. package/dist/lix/storage/opfs.js.map +1 -0
  754. package/dist/lix/storage/opfs.test.d.ts +2 -0
  755. package/dist/lix/storage/opfs.test.d.ts.map +1 -0
  756. package/dist/lix/storage/opfs.test.js +350 -0
  757. package/dist/lix/storage/opfs.test.js.map +1 -0
  758. package/dist/log/create-lix-own-log.d.ts +74 -0
  759. package/dist/log/create-lix-own-log.d.ts.map +1 -0
  760. package/dist/log/create-lix-own-log.js +92 -0
  761. package/dist/log/create-lix-own-log.js.map +1 -0
  762. package/dist/log/create-lix-own-log.test.d.ts +2 -0
  763. package/dist/log/create-lix-own-log.test.d.ts.map +1 -0
  764. package/dist/log/create-lix-own-log.test.js +85 -0
  765. package/dist/log/create-lix-own-log.test.js.map +1 -0
  766. package/dist/log/create-log.d.ts +32 -0
  767. package/dist/log/create-log.d.ts.map +1 -0
  768. package/dist/log/create-log.js +43 -0
  769. package/dist/log/create-log.js.map +1 -0
  770. package/dist/log/database-schema.d.ts +33 -0
  771. package/dist/log/database-schema.d.ts.map +1 -0
  772. package/dist/log/database-schema.js +14 -0
  773. package/dist/log/database-schema.js.map +1 -0
  774. package/dist/log/database-schema.test.d.ts +2 -0
  775. package/dist/log/database-schema.test.d.ts.map +1 -0
  776. package/dist/log/database-schema.test.js +22 -0
  777. package/dist/log/database-schema.test.js.map +1 -0
  778. package/dist/log/index.d.ts +3 -0
  779. package/dist/log/index.d.ts.map +1 -0
  780. package/dist/log/index.js +3 -0
  781. package/dist/log/index.js.map +1 -0
  782. package/dist/log/schema.d.ts +32 -0
  783. package/dist/log/schema.d.ts.map +1 -0
  784. package/dist/log/schema.js +42 -0
  785. package/dist/log/schema.js.map +1 -0
  786. package/dist/log/schema.test.d.ts +2 -0
  787. package/dist/log/schema.test.d.ts.map +1 -0
  788. package/dist/log/schema.test.js +119 -0
  789. package/dist/log/schema.test.js.map +1 -0
  790. package/dist/observe/create-observe.d.ts +17 -0
  791. package/dist/observe/create-observe.d.ts.map +1 -0
  792. package/dist/observe/create-observe.js +147 -0
  793. package/dist/observe/create-observe.js.map +1 -0
  794. package/dist/observe/create-observe.test.d.ts +2 -0
  795. package/dist/observe/create-observe.test.d.ts.map +1 -0
  796. package/dist/observe/create-observe.test.js +638 -0
  797. package/dist/observe/create-observe.test.js.map +1 -0
  798. package/dist/observe/determine-schema-keys.d.ts +6 -0
  799. package/dist/observe/determine-schema-keys.d.ts.map +1 -0
  800. package/dist/observe/determine-schema-keys.js +145 -0
  801. package/dist/observe/determine-schema-keys.js.map +1 -0
  802. package/dist/observe/determine-schema-keys.test.d.ts +2 -0
  803. package/dist/observe/determine-schema-keys.test.d.ts.map +1 -0
  804. package/dist/observe/determine-schema-keys.test.js +266 -0
  805. package/dist/observe/determine-schema-keys.test.js.map +1 -0
  806. package/dist/observe/index.d.ts +2 -0
  807. package/dist/observe/index.d.ts.map +1 -0
  808. package/dist/observe/index.js +2 -0
  809. package/dist/observe/index.js.map +1 -0
  810. package/dist/observe/lix-observable.d.ts +31 -0
  811. package/dist/observe/lix-observable.d.ts.map +1 -0
  812. package/dist/observe/lix-observable.js +65 -0
  813. package/dist/observe/lix-observable.js.map +1 -0
  814. package/dist/observe/lix-observable.test.d.ts +2 -0
  815. package/dist/observe/lix-observable.test.d.ts.map +1 -0
  816. package/dist/observe/lix-observable.test.js +187 -0
  817. package/dist/observe/lix-observable.test.js.map +1 -0
  818. package/dist/own-change-control/apply-own-change.d.ts +5 -1
  819. package/dist/own-change-control/apply-own-change.d.ts.map +1 -1
  820. package/dist/own-change-control/apply-own-change.js +26 -12
  821. package/dist/own-change-control/apply-own-change.js.map +1 -1
  822. package/dist/own-change-control/apply-own-change.test.js +86 -48
  823. package/dist/own-change-control/apply-own-change.test.js.map +1 -1
  824. package/dist/own-change-control/change-controlled-tables.d.ts +5 -7
  825. package/dist/own-change-control/change-controlled-tables.d.ts.map +1 -1
  826. package/dist/own-change-control/change-controlled-tables.js +27 -21
  827. package/dist/own-change-control/change-controlled-tables.js.map +1 -1
  828. package/dist/own-change-control/change-controlled-tables.test.js +35 -5
  829. package/dist/own-change-control/change-controlled-tables.test.js.map +1 -1
  830. package/dist/own-change-control/database-triggers.d.ts +2 -1
  831. package/dist/own-change-control/database-triggers.d.ts.map +1 -1
  832. package/dist/own-change-control/database-triggers.js +209 -67
  833. package/dist/own-change-control/database-triggers.js.map +1 -1
  834. package/dist/own-change-control/database-triggers.test.js +139 -8
  835. package/dist/own-change-control/database-triggers.test.js.map +1 -1
  836. package/dist/own-change-control/with-skip-own-change-control.d.ts.map +1 -1
  837. package/dist/own-change-control/with-skip-own-change-control.js +28 -6
  838. package/dist/own-change-control/with-skip-own-change-control.js.map +1 -1
  839. package/dist/own-change-control/with-skip-own-change-control.test.js +38 -1
  840. package/dist/own-change-control/with-skip-own-change-control.test.js.map +1 -1
  841. package/dist/plugin/index.d.ts +2 -1
  842. package/dist/plugin/index.d.ts.map +1 -1
  843. package/dist/plugin/index.js +1 -1
  844. package/dist/plugin/index.js.map +1 -1
  845. package/dist/plugin/lix-plugin.d.ts +26 -47
  846. package/dist/plugin/lix-plugin.d.ts.map +1 -1
  847. package/dist/plugin/lix-plugin.js +1 -1
  848. package/dist/plugin/lix-plugin.js.map +1 -1
  849. package/dist/plugin/lix-plugin.test-d.js +17 -11
  850. package/dist/plugin/lix-plugin.test-d.js.map +1 -1
  851. package/dist/plugin/load-plugin.d.ts.map +1 -1
  852. package/dist/plugin/load-plugin.js.map +1 -1
  853. package/dist/plugin/mock-json-plugin.d.ts +17 -0
  854. package/dist/plugin/mock-json-plugin.d.ts.map +1 -0
  855. package/dist/plugin/mock-json-plugin.flatten.d.ts +3 -0
  856. package/dist/plugin/mock-json-plugin.flatten.d.ts.map +1 -0
  857. package/dist/plugin/mock-json-plugin.flatten.js +124 -0
  858. package/dist/plugin/mock-json-plugin.flatten.js.map +1 -0
  859. package/dist/plugin/mock-json-plugin.js +101 -0
  860. package/dist/plugin/mock-json-plugin.js.map +1 -0
  861. package/dist/plugin/mock-json-plugin.test.d.ts +2 -0
  862. package/dist/plugin/mock-json-plugin.test.d.ts.map +1 -0
  863. package/dist/plugin/mock-json-plugin.test.js +164 -0
  864. package/dist/plugin/mock-json-plugin.test.js.map +1 -0
  865. package/dist/prototype/database-schema.d.ts +43 -0
  866. package/dist/prototype/database-schema.d.ts.map +1 -0
  867. package/dist/prototype/database-schema.js +72 -0
  868. package/dist/prototype/database-schema.js.map +1 -0
  869. package/dist/prototype/file-handlers.d.ts +24 -0
  870. package/dist/prototype/file-handlers.d.ts.map +1 -0
  871. package/dist/prototype/file-handlers.js +129 -0
  872. package/dist/prototype/file-handlers.js.map +1 -0
  873. package/dist/prototype/file-schema.d.ts +47 -0
  874. package/dist/prototype/file-schema.d.ts.map +1 -0
  875. package/dist/prototype/file-schema.js +135 -0
  876. package/dist/prototype/file-schema.js.map +1 -0
  877. package/dist/prototype/file-schema.test.d.ts +2 -0
  878. package/dist/prototype/file-schema.test.d.ts.map +1 -0
  879. package/dist/prototype/file-schema.test.js +146 -0
  880. package/dist/prototype/file-schema.test.js.map +1 -0
  881. package/dist/prototype/get-and-materialize-row.d.ts +5 -0
  882. package/dist/prototype/get-and-materialize-row.d.ts.map +1 -0
  883. package/dist/prototype/get-and-materialize-row.js +99 -0
  884. package/dist/prototype/get-and-materialize-row.js.map +1 -0
  885. package/dist/prototype/json-plugin.d.ts +49 -0
  886. package/dist/prototype/json-plugin.d.ts.map +1 -0
  887. package/dist/prototype/json-plugin.js +104 -0
  888. package/dist/prototype/json-plugin.js.map +1 -0
  889. package/dist/prototype/validate-file-path.d.ts +16 -0
  890. package/dist/prototype/validate-file-path.d.ts.map +1 -0
  891. package/dist/prototype/validate-file-path.js +44 -0
  892. package/dist/prototype/validate-file-path.js.map +1 -0
  893. package/dist/prototype/validate-file-path.test.d.ts +2 -0
  894. package/dist/prototype/validate-file-path.test.d.ts.map +1 -0
  895. package/dist/prototype/validate-file-path.test.js +36 -0
  896. package/dist/prototype/validate-file-path.test.js.map +1 -0
  897. package/dist/prototype/version-schema.d.ts +34 -0
  898. package/dist/prototype/version-schema.d.ts.map +1 -0
  899. package/dist/prototype/version-schema.js +86 -0
  900. package/dist/prototype/version-schema.js.map +1 -0
  901. package/dist/prototype/version-schema.test.d.ts +2 -0
  902. package/dist/prototype/version-schema.test.d.ts.map +1 -0
  903. package/dist/prototype/version-schema.test.js +114 -0
  904. package/dist/prototype/version-schema.test.js.map +1 -0
  905. package/dist/query-filter/change-conflict-in-version.d.ts +2 -0
  906. package/dist/query-filter/change-conflict-in-version.d.ts.map +1 -1
  907. package/dist/query-filter/change-conflict-in-version.js +2 -0
  908. package/dist/query-filter/change-conflict-in-version.js.map +1 -1
  909. package/dist/query-filter/change-has-label.d.ts +9 -3
  910. package/dist/query-filter/change-has-label.d.ts.map +1 -1
  911. package/dist/query-filter/change-has-label.js +7 -4
  912. package/dist/query-filter/change-has-label.js.map +1 -1
  913. package/dist/query-filter/change-has-label.test.js +36 -11
  914. package/dist/query-filter/change-has-label.test.js.map +1 -1
  915. package/dist/query-filter/change-in-version.d.ts +2 -0
  916. package/dist/query-filter/change-in-version.d.ts.map +1 -1
  917. package/dist/query-filter/change-in-version.js +2 -0
  918. package/dist/query-filter/change-in-version.js.map +1 -1
  919. package/dist/query-filter/change-is-leaf-in-version.d.ts +1 -0
  920. package/dist/query-filter/change-is-leaf-in-version.d.ts.map +1 -1
  921. package/dist/query-filter/change-is-leaf-in-version.js +1 -0
  922. package/dist/query-filter/change-is-leaf-in-version.js.map +1 -1
  923. package/dist/query-filter/change-is-leaf-of.d.ts +2 -0
  924. package/dist/query-filter/change-is-leaf-of.d.ts.map +1 -1
  925. package/dist/query-filter/change-is-leaf-of.js +2 -0
  926. package/dist/query-filter/change-is-leaf-of.js.map +1 -1
  927. package/dist/query-filter/change-is-leaf-v2.d.ts +69 -0
  928. package/dist/query-filter/change-is-leaf-v2.d.ts.map +1 -0
  929. package/dist/query-filter/change-is-leaf-v2.js +116 -0
  930. package/dist/query-filter/change-is-leaf-v2.js.map +1 -0
  931. package/dist/query-filter/change-is-leaf-v2.test.d.ts +2 -0
  932. package/dist/query-filter/change-is-leaf-v2.test.d.ts.map +1 -0
  933. package/dist/query-filter/change-is-leaf-v2.test.js +237 -0
  934. package/dist/query-filter/change-is-leaf-v2.test.js.map +1 -0
  935. package/dist/query-filter/change-is-leaf.d.ts +2 -0
  936. package/dist/query-filter/change-is-leaf.d.ts.map +1 -1
  937. package/dist/query-filter/change-is-leaf.js +2 -0
  938. package/dist/query-filter/change-is-leaf.js.map +1 -1
  939. package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts +2 -0
  940. package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts.map +1 -1
  941. package/dist/query-filter/change-is-lowest-common-ancestor-of.js +4 -0
  942. package/dist/query-filter/change-is-lowest-common-ancestor-of.js.map +1 -1
  943. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js +5 -3
  944. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js.map +1 -1
  945. package/dist/query-filter/change-set-element-in-ancestry-of.d.ts +30 -0
  946. package/dist/query-filter/change-set-element-in-ancestry-of.d.ts.map +1 -0
  947. package/dist/query-filter/change-set-element-in-ancestry-of.js +51 -0
  948. package/dist/query-filter/change-set-element-in-ancestry-of.js.map +1 -0
  949. package/dist/query-filter/change-set-element-in-ancestry-of.test.d.ts +2 -0
  950. package/dist/query-filter/change-set-element-in-ancestry-of.test.d.ts.map +1 -0
  951. package/dist/query-filter/change-set-element-in-ancestry-of.test.js +396 -0
  952. package/dist/query-filter/change-set-element-in-ancestry-of.test.js.map +1 -0
  953. package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts +21 -0
  954. package/dist/query-filter/change-set-element-in-symmetric-difference-of.d.ts.map +1 -0
  955. package/dist/query-filter/change-set-element-in-symmetric-difference-of.js +37 -0
  956. package/dist/query-filter/change-set-element-in-symmetric-difference-of.js.map +1 -0
  957. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts +2 -0
  958. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.d.ts.map +1 -0
  959. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js +276 -0
  960. package/dist/query-filter/change-set-element-in-symmetric-difference-of.test.js.map +1 -0
  961. package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts +20 -0
  962. package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts.map +1 -0
  963. package/dist/query-filter/change-set-element-in-symmetric-difference.js +36 -0
  964. package/dist/query-filter/change-set-element-in-symmetric-difference.js.map +1 -0
  965. package/dist/query-filter/change-set-element-in-symmetric-difference.test.d.ts +2 -0
  966. package/dist/query-filter/change-set-element-in-symmetric-difference.test.d.ts.map +1 -0
  967. package/dist/query-filter/change-set-element-in-symmetric-difference.test.js +369 -0
  968. package/dist/query-filter/change-set-element-in-symmetric-difference.test.js.map +1 -0
  969. package/dist/query-filter/change-set-element-is-leaf-of.d.ts +29 -0
  970. package/dist/query-filter/change-set-element-is-leaf-of.d.ts.map +1 -0
  971. package/dist/query-filter/change-set-element-is-leaf-of.js +113 -0
  972. package/dist/query-filter/change-set-element-is-leaf-of.js.map +1 -0
  973. package/dist/query-filter/change-set-element-is-leaf-of.test.d.ts +2 -0
  974. package/dist/query-filter/change-set-element-is-leaf-of.test.d.ts.map +1 -0
  975. package/dist/query-filter/change-set-element-is-leaf-of.test.js +574 -0
  976. package/dist/query-filter/change-set-element-is-leaf-of.test.js.map +1 -0
  977. package/dist/query-filter/change-set-has-label.d.ts +19 -3
  978. package/dist/query-filter/change-set-has-label.d.ts.map +1 -1
  979. package/dist/query-filter/change-set-has-label.js +17 -4
  980. package/dist/query-filter/change-set-has-label.js.map +1 -1
  981. package/dist/query-filter/change-set-has-label.test.js +13 -20
  982. package/dist/query-filter/change-set-has-label.test.js.map +1 -1
  983. package/dist/query-filter/change-set-is-ancestor-of.d.ts +51 -0
  984. package/dist/query-filter/change-set-is-ancestor-of.d.ts.map +1 -0
  985. package/dist/query-filter/change-set-is-ancestor-of.js +63 -0
  986. package/dist/query-filter/change-set-is-ancestor-of.js.map +1 -0
  987. package/dist/query-filter/change-set-is-ancestor-of.test.d.ts +2 -0
  988. package/dist/query-filter/change-set-is-ancestor-of.test.d.ts.map +1 -0
  989. package/dist/query-filter/change-set-is-ancestor-of.test.js +153 -0
  990. package/dist/query-filter/change-set-is-ancestor-of.test.js.map +1 -0
  991. package/dist/query-filter/change-set-is-descendant-of.d.ts +44 -0
  992. package/dist/query-filter/change-set-is-descendant-of.d.ts.map +1 -0
  993. package/dist/query-filter/change-set-is-descendant-of.js +56 -0
  994. package/dist/query-filter/change-set-is-descendant-of.js.map +1 -0
  995. package/dist/query-filter/change-set-is-descendant-of.test.d.ts +2 -0
  996. package/dist/query-filter/change-set-is-descendant-of.test.d.ts.map +1 -0
  997. package/dist/query-filter/change-set-is-descendant-of.test.js +137 -0
  998. package/dist/query-filter/change-set-is-descendant-of.test.js.map +1 -0
  999. package/dist/query-filter/commit-is-ancestor-of.d.ts +51 -0
  1000. package/dist/query-filter/commit-is-ancestor-of.d.ts.map +1 -0
  1001. package/dist/query-filter/commit-is-ancestor-of.js +63 -0
  1002. package/dist/query-filter/commit-is-ancestor-of.js.map +1 -0
  1003. package/dist/query-filter/commit-is-ancestor-of.test.d.ts +2 -0
  1004. package/dist/query-filter/commit-is-ancestor-of.test.d.ts.map +1 -0
  1005. package/dist/query-filter/commit-is-ancestor-of.test.js +292 -0
  1006. package/dist/query-filter/commit-is-ancestor-of.test.js.map +1 -0
  1007. package/dist/query-filter/commit-is-descendant-of.d.ts +44 -0
  1008. package/dist/query-filter/commit-is-descendant-of.d.ts.map +1 -0
  1009. package/dist/query-filter/commit-is-descendant-of.js +56 -0
  1010. package/dist/query-filter/commit-is-descendant-of.js.map +1 -0
  1011. package/dist/query-filter/commit-is-descendant-of.test.d.ts +2 -0
  1012. package/dist/query-filter/commit-is-descendant-of.test.d.ts.map +1 -0
  1013. package/dist/query-filter/commit-is-descendant-of.test.js +325 -0
  1014. package/dist/query-filter/commit-is-descendant-of.test.js.map +1 -0
  1015. package/dist/query-filter/index.d.ts +5 -8
  1016. package/dist/query-filter/index.d.ts.map +1 -1
  1017. package/dist/query-filter/index.js +5 -8
  1018. package/dist/query-filter/index.js.map +1 -1
  1019. package/dist/query-filter/version-change-in-difference.d.ts +2 -0
  1020. package/dist/query-filter/version-change-in-difference.d.ts.map +1 -1
  1021. package/dist/query-filter/version-change-in-difference.js +2 -0
  1022. package/dist/query-filter/version-change-in-difference.js.map +1 -1
  1023. package/dist/query-filter/version-change-in-symmetric-difference.d.ts +2 -0
  1024. package/dist/query-filter/version-change-in-symmetric-difference.d.ts.map +1 -1
  1025. package/dist/query-filter/version-change-in-symmetric-difference.js +2 -0
  1026. package/dist/query-filter/version-change-in-symmetric-difference.js.map +1 -1
  1027. package/dist/schema-definition/definition.d.ts +449 -0
  1028. package/dist/schema-definition/definition.d.ts.map +1 -0
  1029. package/dist/schema-definition/definition.js +106 -0
  1030. package/dist/schema-definition/definition.js.map +1 -0
  1031. package/dist/schema-definition/definition.test-d.d.ts +2 -0
  1032. package/dist/schema-definition/definition.test-d.d.ts.map +1 -0
  1033. package/dist/schema-definition/definition.test-d.js +177 -0
  1034. package/dist/schema-definition/definition.test-d.js.map +1 -0
  1035. package/dist/schema-definition/definition.test.d.ts +2 -0
  1036. package/dist/schema-definition/definition.test.d.ts.map +1 -0
  1037. package/dist/schema-definition/definition.test.js +369 -0
  1038. package/dist/schema-definition/definition.test.js.map +1 -0
  1039. package/dist/schema-definition/index.d.ts +4 -0
  1040. package/dist/schema-definition/index.d.ts.map +1 -0
  1041. package/dist/schema-definition/index.js +4 -0
  1042. package/dist/schema-definition/index.js.map +1 -0
  1043. package/dist/schema-definition/json-type.d.ts +24 -0
  1044. package/dist/schema-definition/json-type.d.ts.map +1 -0
  1045. package/dist/schema-definition/json-type.js +42 -0
  1046. package/dist/schema-definition/json-type.js.map +1 -0
  1047. package/dist/schema-definition/json-type.test.d.ts +2 -0
  1048. package/dist/schema-definition/json-type.test.d.ts.map +1 -0
  1049. package/dist/schema-definition/json-type.test.js +21 -0
  1050. package/dist/schema-definition/json-type.test.js.map +1 -0
  1051. package/dist/schema-definition/validate-lix-schema.d.ts +65 -0
  1052. package/dist/schema-definition/validate-lix-schema.d.ts.map +1 -0
  1053. package/dist/schema-definition/validate-lix-schema.js +93 -0
  1054. package/dist/schema-definition/validate-lix-schema.js.map +1 -0
  1055. package/dist/schema-definition/validate-lix-schema.test.d.ts +2 -0
  1056. package/dist/schema-definition/validate-lix-schema.test.d.ts.map +1 -0
  1057. package/dist/schema-definition/validate-lix-schema.test.js +73 -0
  1058. package/dist/schema-definition/validate-lix-schema.test.js.map +1 -0
  1059. package/dist/server-protocol-handler/create-server-protocol-handler.d.ts +0 -1
  1060. package/dist/server-protocol-handler/create-server-protocol-handler.d.ts.map +1 -1
  1061. package/dist/server-protocol-handler/create-server-protocol-handler.js +0 -2
  1062. package/dist/server-protocol-handler/create-server-protocol-handler.js.map +1 -1
  1063. package/dist/server-protocol-handler/environment/create-in-memory-environment.d.ts.map +1 -1
  1064. package/dist/server-protocol-handler/environment/create-in-memory-environment.js +5 -20
  1065. package/dist/server-protocol-handler/environment/create-in-memory-environment.js.map +1 -1
  1066. package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js +13 -14
  1067. package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js.map +1 -1
  1068. package/dist/server-protocol-handler/environment/environment.d.ts +0 -4
  1069. package/dist/server-protocol-handler/environment/environment.d.ts.map +1 -1
  1070. package/dist/server-protocol-handler/routes/get-v1.d.ts.map +1 -1
  1071. package/dist/server-protocol-handler/routes/get-v1.js +1 -1
  1072. package/dist/server-protocol-handler/routes/get-v1.js.map +1 -1
  1073. package/dist/server-protocol-handler/routes/get-v1.test.js +11 -12
  1074. package/dist/server-protocol-handler/routes/get-v1.test.js.map +1 -1
  1075. package/dist/server-protocol-handler/routes/new-v1.d.ts.map +1 -1
  1076. package/dist/server-protocol-handler/routes/new-v1.js +3 -5
  1077. package/dist/server-protocol-handler/routes/new-v1.js.map +1 -1
  1078. package/dist/server-protocol-handler/routes/new-v1.test.js +7 -8
  1079. package/dist/server-protocol-handler/routes/new-v1.test.js.map +1 -1
  1080. package/dist/server-protocol-handler/routes/pull-v1.test.js +48 -32
  1081. package/dist/server-protocol-handler/routes/pull-v1.test.js.map +1 -1
  1082. package/dist/server-protocol-handler/routes/push-v1.d.ts.map +1 -1
  1083. package/dist/server-protocol-handler/routes/push-v1.js +2 -0
  1084. package/dist/server-protocol-handler/routes/push-v1.js.map +1 -1
  1085. package/dist/server-protocol-handler/routes/push-v1.test.js +22 -26
  1086. package/dist/server-protocol-handler/routes/push-v1.test.js.map +1 -1
  1087. package/dist/services/env-variables/index.d.ts +1 -1
  1088. package/dist/services/env-variables/index.js +2 -2
  1089. package/dist/services/env-variables/index.js.map +1 -1
  1090. package/dist/services/telemetry/capture.d.ts.map +1 -1
  1091. package/dist/snapshot/create-snapshot.d.ts +3 -14
  1092. package/dist/snapshot/create-snapshot.d.ts.map +1 -1
  1093. package/dist/snapshot/create-snapshot.js +14 -19
  1094. package/dist/snapshot/create-snapshot.js.map +1 -1
  1095. package/dist/snapshot/create-snapshot.test.js +48 -19
  1096. package/dist/snapshot/create-snapshot.test.js.map +1 -1
  1097. package/dist/snapshot/database-schema.d.ts +19 -0
  1098. package/dist/snapshot/database-schema.d.ts.map +1 -0
  1099. package/dist/snapshot/database-schema.js +33 -0
  1100. package/dist/snapshot/database-schema.js.map +1 -0
  1101. package/dist/snapshot/database-schema.test.d.ts +2 -0
  1102. package/dist/snapshot/database-schema.test.d.ts.map +1 -0
  1103. package/dist/snapshot/database-schema.test.js +58 -0
  1104. package/dist/snapshot/database-schema.test.js.map +1 -0
  1105. package/dist/snapshot/index.d.ts +1 -0
  1106. package/dist/snapshot/index.d.ts.map +1 -1
  1107. package/dist/snapshot/index.js +1 -0
  1108. package/dist/snapshot/index.js.map +1 -1
  1109. package/dist/snapshot/json-sha-256.d.ts +2 -1
  1110. package/dist/snapshot/json-sha-256.d.ts.map +1 -1
  1111. package/dist/snapshot/json-sha-256.js +1 -3
  1112. package/dist/snapshot/json-sha-256.js.map +1 -1
  1113. package/dist/snapshot/json-sha-256.test.js +40 -2
  1114. package/dist/snapshot/json-sha-256.test.js.map +1 -1
  1115. package/dist/snapshot/mock-json-snapshot.d.ts +1 -1
  1116. package/dist/snapshot/mock-json-snapshot.d.ts.map +1 -1
  1117. package/dist/snapshot/schema.d.ts +8 -0
  1118. package/dist/snapshot/schema.d.ts.map +1 -0
  1119. package/dist/snapshot/schema.js +20 -0
  1120. package/dist/snapshot/schema.js.map +1 -0
  1121. package/dist/snapshot/schema.test.d.ts +2 -0
  1122. package/dist/snapshot/schema.test.d.ts.map +1 -0
  1123. package/dist/snapshot/schema.test.js +202 -0
  1124. package/dist/snapshot/schema.test.js.map +1 -0
  1125. package/dist/state/cache/clear-state-cache.d.ts +8 -0
  1126. package/dist/state/cache/clear-state-cache.d.ts.map +1 -0
  1127. package/dist/state/cache/clear-state-cache.js +14 -0
  1128. package/dist/state/cache/clear-state-cache.js.map +1 -0
  1129. package/dist/state/cache/clear-state-cache.test.d.ts +2 -0
  1130. package/dist/state/cache/clear-state-cache.test.d.ts.map +1 -0
  1131. package/dist/state/cache/clear-state-cache.test.js +34 -0
  1132. package/dist/state/cache/clear-state-cache.test.js.map +1 -0
  1133. package/dist/state/cache/is-stale-state-cache.d.ts +5 -0
  1134. package/dist/state/cache/is-stale-state-cache.d.ts.map +1 -0
  1135. package/dist/state/cache/is-stale-state-cache.js +22 -0
  1136. package/dist/state/cache/is-stale-state-cache.js.map +1 -0
  1137. package/dist/state/cache/is-stale-state-cache.test.d.ts +2 -0
  1138. package/dist/state/cache/is-stale-state-cache.test.d.ts.map +1 -0
  1139. package/dist/state/cache/is-stale-state-cache.test.js +27 -0
  1140. package/dist/state/cache/is-stale-state-cache.test.js.map +1 -0
  1141. package/dist/state/cache/mark-state-cache-as-stale.d.ts +10 -0
  1142. package/dist/state/cache/mark-state-cache-as-stale.d.ts.map +1 -0
  1143. package/dist/state/cache/mark-state-cache-as-stale.js +42 -0
  1144. package/dist/state/cache/mark-state-cache-as-stale.js.map +1 -0
  1145. package/dist/state/cache/populate-state-cache.d.ts +9 -0
  1146. package/dist/state/cache/populate-state-cache.d.ts.map +1 -0
  1147. package/dist/state/cache/populate-state-cache.js +106 -0
  1148. package/dist/state/cache/populate-state-cache.js.map +1 -0
  1149. package/dist/state/cache/populate-state-cache.test.d.ts +2 -0
  1150. package/dist/state/cache/populate-state-cache.test.d.ts.map +1 -0
  1151. package/dist/state/cache/populate-state-cache.test.js +204 -0
  1152. package/dist/state/cache/populate-state-cache.test.js.map +1 -0
  1153. package/dist/state/cache/schema.d.ts +20 -0
  1154. package/dist/state/cache/schema.d.ts.map +1 -0
  1155. package/dist/state/cache/schema.js +21 -0
  1156. package/dist/state/cache/schema.js.map +1 -0
  1157. package/dist/state/cache/update-state-cache.d.ts +21 -0
  1158. package/dist/state/cache/update-state-cache.d.ts.map +1 -0
  1159. package/dist/state/cache/update-state-cache.js +294 -0
  1160. package/dist/state/cache/update-state-cache.js.map +1 -0
  1161. package/dist/state/cache/update-state-cache.test.d.ts +2 -0
  1162. package/dist/state/cache/update-state-cache.test.d.ts.map +1 -0
  1163. package/dist/state/cache/update-state-cache.test.js +440 -0
  1164. package/dist/state/cache/update-state-cache.test.js.map +1 -0
  1165. package/dist/state/commit.d.ts +18 -0
  1166. package/dist/state/commit.d.ts.map +1 -0
  1167. package/dist/state/commit.js +457 -0
  1168. package/dist/state/commit.js.map +1 -0
  1169. package/dist/state/commit.test.d.ts +2 -0
  1170. package/dist/state/commit.test.d.ts.map +1 -0
  1171. package/dist/state/commit.test.js +1173 -0
  1172. package/dist/state/commit.test.js.map +1 -0
  1173. package/dist/state/create-changeset-for-transaction.d.ts +15 -0
  1174. package/dist/state/create-changeset-for-transaction.d.ts.map +1 -0
  1175. package/dist/state/create-changeset-for-transaction.js +237 -0
  1176. package/dist/state/create-changeset-for-transaction.js.map +1 -0
  1177. package/dist/state/get-version-record-by-id-or-throw.d.ts +6 -0
  1178. package/dist/state/get-version-record-by-id-or-throw.d.ts.map +1 -0
  1179. package/dist/state/get-version-record-by-id-or-throw.js +36 -0
  1180. package/dist/state/get-version-record-by-id-or-throw.js.map +1 -0
  1181. package/dist/state/handle-state-mutation.d.ts +6 -0
  1182. package/dist/state/handle-state-mutation.d.ts.map +1 -0
  1183. package/dist/state/handle-state-mutation.js +157 -0
  1184. package/dist/state/handle-state-mutation.js.map +1 -0
  1185. package/dist/state/handle-state-mutation.test.d.ts +2 -0
  1186. package/dist/state/handle-state-mutation.test.d.ts.map +1 -0
  1187. package/dist/state/handle-state-mutation.test.js +686 -0
  1188. package/dist/state/handle-state-mutation.test.js.map +1 -0
  1189. package/dist/state/insert-transaction-state.d.ts +71 -0
  1190. package/dist/state/insert-transaction-state.d.ts.map +1 -0
  1191. package/dist/state/insert-transaction-state.js +272 -0
  1192. package/dist/state/insert-transaction-state.js.map +1 -0
  1193. package/dist/state/insert-transaction-state.test.d.ts +2 -0
  1194. package/dist/state/insert-transaction-state.test.d.ts.map +1 -0
  1195. package/dist/state/insert-transaction-state.test.js +789 -0
  1196. package/dist/state/insert-transaction-state.test.js.map +1 -0
  1197. package/dist/state/materialize-state.d.ts +3 -0
  1198. package/dist/state/materialize-state.d.ts.map +1 -0
  1199. package/dist/state/materialize-state.js +230 -0
  1200. package/dist/state/materialize-state.js.map +1 -0
  1201. package/dist/state/materialize-state.test.d.ts +2 -0
  1202. package/dist/state/materialize-state.test.d.ts.map +1 -0
  1203. package/dist/state/materialize-state.test.js +1934 -0
  1204. package/dist/state/materialize-state.test.js.map +1 -0
  1205. package/dist/state/primary-key.d.ts +39 -0
  1206. package/dist/state/primary-key.d.ts.map +1 -0
  1207. package/dist/state/primary-key.js +62 -0
  1208. package/dist/state/primary-key.js.map +1 -0
  1209. package/dist/state/primary-key.test.d.ts +2 -0
  1210. package/dist/state/primary-key.test.d.ts.map +1 -0
  1211. package/dist/state/primary-key.test.js +114 -0
  1212. package/dist/state/primary-key.test.js.map +1 -0
  1213. package/dist/state/resolved-state-view.d.ts +33 -0
  1214. package/dist/state/resolved-state-view.d.ts.map +1 -0
  1215. package/dist/state/resolved-state-view.js +182 -0
  1216. package/dist/state/resolved-state-view.js.map +1 -0
  1217. package/dist/state/resolved-state-view.test.d.ts +2 -0
  1218. package/dist/state/resolved-state-view.test.d.ts.map +1 -0
  1219. package/dist/state/resolved-state-view.test.js +433 -0
  1220. package/dist/state/resolved-state-view.test.js.map +1 -0
  1221. package/dist/state/schema.bench.d.ts +2 -0
  1222. package/dist/state/schema.bench.d.ts.map +1 -0
  1223. package/dist/state/schema.bench.js +36 -0
  1224. package/dist/state/schema.bench.js.map +1 -0
  1225. package/dist/state/schema.d.ts +43 -0
  1226. package/dist/state/schema.d.ts.map +1 -0
  1227. package/dist/state/schema.js +789 -0
  1228. package/dist/state/schema.js.map +1 -0
  1229. package/dist/state/schema.test.d.ts +2 -0
  1230. package/dist/state/schema.test.d.ts.map +1 -0
  1231. package/dist/state/schema.test.js +2701 -0
  1232. package/dist/state/schema.test.js.map +1 -0
  1233. package/dist/state/untracked/schema.d.ts +25 -0
  1234. package/dist/state/untracked/schema.d.ts.map +1 -0
  1235. package/dist/state/untracked/schema.js +38 -0
  1236. package/dist/state/untracked/schema.js.map +1 -0
  1237. package/dist/state/untracked/schema.test.d.ts +2 -0
  1238. package/dist/state/untracked/schema.test.d.ts.map +1 -0
  1239. package/dist/state/untracked/schema.test.js +275 -0
  1240. package/dist/state/untracked/schema.test.js.map +1 -0
  1241. package/dist/state/untracked/update-untracked-state.d.ts +36 -0
  1242. package/dist/state/untracked/update-untracked-state.d.ts.map +1 -0
  1243. package/dist/state/untracked/update-untracked-state.js +113 -0
  1244. package/dist/state/untracked/update-untracked-state.js.map +1 -0
  1245. package/dist/state/untracked/update-untracked-state.test.d.ts +2 -0
  1246. package/dist/state/untracked/update-untracked-state.test.d.ts.map +1 -0
  1247. package/dist/state/untracked/update-untracked-state.test.js +417 -0
  1248. package/dist/state/untracked/update-untracked-state.test.js.map +1 -0
  1249. package/dist/state/validate-snapshot-content.d.ts +9 -0
  1250. package/dist/state/validate-snapshot-content.d.ts.map +1 -0
  1251. package/dist/state/validate-snapshot-content.js +42 -0
  1252. package/dist/state/validate-snapshot-content.js.map +1 -0
  1253. package/dist/state/validate-snapshot-content.test.d.ts +2 -0
  1254. package/dist/state/validate-snapshot-content.test.d.ts.map +1 -0
  1255. package/dist/state/validate-snapshot-content.test.js +67 -0
  1256. package/dist/state/validate-snapshot-content.test.js.map +1 -0
  1257. package/dist/state/validate-state-mutation.d.ts +13 -0
  1258. package/dist/state/validate-state-mutation.d.ts.map +1 -0
  1259. package/dist/state/validate-state-mutation.js +645 -0
  1260. package/dist/state/validate-state-mutation.js.map +1 -0
  1261. package/dist/state/validate-state-mutation.test.d.ts +2 -0
  1262. package/dist/state/validate-state-mutation.test.d.ts.map +1 -0
  1263. package/dist/state/validate-state-mutation.test.js +2859 -0
  1264. package/dist/state/validate-state-mutation.test.js.map +1 -0
  1265. package/dist/state-history/schema.d.ts +68 -0
  1266. package/dist/state-history/schema.d.ts.map +1 -0
  1267. package/dist/state-history/schema.js +116 -0
  1268. package/dist/state-history/schema.js.map +1 -0
  1269. package/dist/state-history/schema.test.d.ts +2 -0
  1270. package/dist/state-history/schema.test.d.ts.map +1 -0
  1271. package/dist/state-history/schema.test.js +855 -0
  1272. package/dist/state-history/schema.test.js.map +1 -0
  1273. package/dist/stored-schema/index.d.ts +2 -0
  1274. package/dist/stored-schema/index.d.ts.map +1 -0
  1275. package/dist/stored-schema/index.js +2 -0
  1276. package/dist/stored-schema/index.js.map +1 -0
  1277. package/dist/stored-schema/schema.d.ts +25 -0
  1278. package/dist/stored-schema/schema.d.ts.map +1 -0
  1279. package/dist/stored-schema/schema.js +48 -0
  1280. package/dist/stored-schema/schema.js.map +1 -0
  1281. package/dist/stored-schema/schema.test.d.ts +2 -0
  1282. package/dist/stored-schema/schema.test.d.ts.map +1 -0
  1283. package/dist/stored-schema/schema.test.js +192 -0
  1284. package/dist/stored-schema/schema.test.js.map +1 -0
  1285. package/dist/sync/get-diffing-rows.d.ts +12 -0
  1286. package/dist/sync/get-diffing-rows.d.ts.map +1 -1
  1287. package/dist/sync/get-diffing-rows.js +14 -0
  1288. package/dist/sync/get-diffing-rows.js.map +1 -1
  1289. package/dist/sync/merge-state.d.ts.map +1 -1
  1290. package/dist/sync/merge-state.js +2 -1
  1291. package/dist/sync/merge-state.js.map +1 -1
  1292. package/dist/sync/pull-from-server.d.ts.map +1 -1
  1293. package/dist/sync/pull-from-server.js +2 -1
  1294. package/dist/sync/pull-from-server.js.map +1 -1
  1295. package/dist/sync/pull-from-server.test.js +32 -28
  1296. package/dist/sync/pull-from-server.test.js.map +1 -1
  1297. package/dist/sync/push-to-server.d.ts +10 -1
  1298. package/dist/sync/push-to-server.d.ts.map +1 -1
  1299. package/dist/sync/push-to-server.js +10 -1
  1300. package/dist/sync/push-to-server.js.map +1 -1
  1301. package/dist/sync/push-to-server.test.js +62 -63
  1302. package/dist/sync/push-to-server.test.js.map +1 -1
  1303. package/dist/sync/sync-process.d.ts +1 -1
  1304. package/dist/sync/sync-process.d.ts.map +1 -1
  1305. package/dist/sync/sync-process.js +1 -2
  1306. package/dist/sync/sync-process.js.map +1 -1
  1307. package/dist/sync/sync-process.test.js +20 -17
  1308. package/dist/sync/sync-process.test.js.map +1 -1
  1309. package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts +8 -0
  1310. package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts.map +1 -0
  1311. package/dist/test-utilities/simulation-test/cache-miss-simulation.js +79 -0
  1312. package/dist/test-utilities/simulation-test/cache-miss-simulation.js.map +1 -0
  1313. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts +2 -0
  1314. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts.map +1 -0
  1315. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js +127 -0
  1316. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js.map +1 -0
  1317. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts +2 -0
  1318. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts.map +1 -0
  1319. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js +2 -0
  1320. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js.map +1 -0
  1321. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts +10 -0
  1322. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts.map +1 -0
  1323. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js +52 -0
  1324. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js.map +1 -0
  1325. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts +2 -0
  1326. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts.map +1 -0
  1327. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js +71 -0
  1328. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js.map +1 -0
  1329. package/dist/test-utilities/simulation-test/simulation-test.d.ts +82 -0
  1330. package/dist/test-utilities/simulation-test/simulation-test.d.ts.map +1 -0
  1331. package/dist/test-utilities/simulation-test/simulation-test.js +85 -0
  1332. package/dist/test-utilities/simulation-test/simulation-test.js.map +1 -0
  1333. package/dist/test-utilities/simulation-test/simulation-test.test.d.ts +2 -0
  1334. package/dist/test-utilities/simulation-test/simulation-test.test.d.ts.map +1 -0
  1335. package/dist/test-utilities/simulation-test/simulation-test.test.js +310 -0
  1336. package/dist/test-utilities/simulation-test/simulation-test.test.js.map +1 -0
  1337. package/dist/thread/comment-utils.d.ts +2 -0
  1338. package/dist/thread/comment-utils.d.ts.map +1 -0
  1339. package/dist/thread/comment-utils.js +2 -0
  1340. package/dist/thread/comment-utils.js.map +1 -0
  1341. package/dist/thread/comment.d.ts +24 -0
  1342. package/dist/thread/comment.d.ts.map +1 -0
  1343. package/dist/thread/comment.js +43 -0
  1344. package/dist/thread/comment.js.map +1 -0
  1345. package/dist/thread/create-thread-comment.d.ts +18 -0
  1346. package/dist/thread/create-thread-comment.d.ts.map +1 -0
  1347. package/dist/thread/create-thread-comment.js +64 -0
  1348. package/dist/thread/create-thread-comment.js.map +1 -0
  1349. package/dist/thread/create-thread-comment.test.d.ts +2 -0
  1350. package/dist/thread/create-thread-comment.test.d.ts.map +1 -0
  1351. package/dist/thread/create-thread-comment.test.js +97 -0
  1352. package/dist/thread/create-thread-comment.test.js.map +1 -0
  1353. package/dist/thread/create-thread.d.ts +42 -0
  1354. package/dist/thread/create-thread.d.ts.map +1 -0
  1355. package/dist/thread/create-thread.js +79 -0
  1356. package/dist/thread/create-thread.js.map +1 -0
  1357. package/dist/thread/create-thread.test.d.ts +2 -0
  1358. package/dist/thread/create-thread.test.d.ts.map +1 -0
  1359. package/dist/thread/create-thread.test.js +175 -0
  1360. package/dist/thread/create-thread.test.js.map +1 -0
  1361. package/dist/thread/database-schema.d.ts +20 -0
  1362. package/dist/thread/database-schema.d.ts.map +1 -0
  1363. package/dist/thread/database-schema.js +57 -0
  1364. package/dist/thread/database-schema.js.map +1 -0
  1365. package/dist/thread/database-schema.test.d.ts +2 -0
  1366. package/dist/thread/database-schema.test.d.ts.map +1 -0
  1367. package/dist/thread/database-schema.test.js +59 -0
  1368. package/dist/thread/database-schema.test.js.map +1 -0
  1369. package/dist/thread/index.d.ts +5 -0
  1370. package/dist/thread/index.d.ts.map +1 -0
  1371. package/dist/thread/index.js +4 -0
  1372. package/dist/thread/index.js.map +1 -0
  1373. package/dist/thread/schema.d.ts +62 -0
  1374. package/dist/thread/schema.d.ts.map +1 -0
  1375. package/dist/thread/schema.js +72 -0
  1376. package/dist/thread/schema.js.map +1 -0
  1377. package/dist/thread/schema.test.d.ts +2 -0
  1378. package/dist/thread/schema.test.d.ts.map +1 -0
  1379. package/dist/thread/schema.test.js +125 -0
  1380. package/dist/thread/schema.test.js.map +1 -0
  1381. package/dist/version/create-version.d.ts +14 -17
  1382. package/dist/version/create-version.d.ts.map +1 -1
  1383. package/dist/version/create-version.js +53 -52
  1384. package/dist/version/create-version.js.map +1 -1
  1385. package/dist/version/create-version.test.js +121 -109
  1386. package/dist/version/create-version.test.js.map +1 -1
  1387. package/dist/version/database-schema.d.ts +21 -0
  1388. package/dist/version/database-schema.d.ts.map +1 -0
  1389. package/dist/version/database-schema.js +169 -0
  1390. package/dist/version/database-schema.js.map +1 -0
  1391. package/dist/version/database-schema.test.d.ts +2 -0
  1392. package/dist/version/database-schema.test.d.ts.map +1 -0
  1393. package/dist/version/database-schema.test.js +625 -0
  1394. package/dist/version/database-schema.test.js.map +1 -0
  1395. package/dist/version/index.d.ts +1 -5
  1396. package/dist/version/index.d.ts.map +1 -1
  1397. package/dist/version/index.js +1 -5
  1398. package/dist/version/index.js.map +1 -1
  1399. package/dist/version/merge-version.d.ts +3 -0
  1400. package/dist/version/merge-version.d.ts.map +1 -1
  1401. package/dist/version/merge-version.js +3 -0
  1402. package/dist/version/merge-version.js.map +1 -1
  1403. package/dist/version/merge-version.test.js +10 -5
  1404. package/dist/version/merge-version.test.js.map +1 -1
  1405. package/dist/version/schema.d.ts +78 -0
  1406. package/dist/version/schema.d.ts.map +1 -0
  1407. package/dist/version/schema.js +147 -0
  1408. package/dist/version/schema.js.map +1 -0
  1409. package/dist/version/schema.test.d.ts +2 -0
  1410. package/dist/version/schema.test.d.ts.map +1 -0
  1411. package/dist/version/schema.test.js +884 -0
  1412. package/dist/version/schema.test.js.map +1 -0
  1413. package/dist/version/select-active-version.d.ts +7 -0
  1414. package/dist/version/select-active-version.d.ts.map +1 -0
  1415. package/dist/version/select-active-version.js +7 -0
  1416. package/dist/version/select-active-version.js.map +1 -0
  1417. package/dist/version/switch-version.d.ts +5 -5
  1418. package/dist/version/switch-version.d.ts.map +1 -1
  1419. package/dist/version/switch-version.js +6 -62
  1420. package/dist/version/switch-version.js.map +1 -1
  1421. package/dist/version/switch-version.test.js +14 -214
  1422. package/dist/version/switch-version.test.js.map +1 -1
  1423. package/dist/version/update-changes-in-version.d.ts +2 -0
  1424. package/dist/version/update-changes-in-version.d.ts.map +1 -1
  1425. package/dist/version/update-changes-in-version.js +2 -0
  1426. package/dist/version/update-changes-in-version.js.map +1 -1
  1427. package/dist/version-v2/create-version.d.ts +18 -0
  1428. package/dist/version-v2/create-version.d.ts.map +1 -0
  1429. package/dist/version-v2/create-version.js +35 -0
  1430. package/dist/version-v2/create-version.js.map +1 -0
  1431. package/dist/version-v2/create-version.test.d.ts +2 -0
  1432. package/dist/version-v2/create-version.test.d.ts.map +1 -0
  1433. package/dist/version-v2/create-version.test.js +88 -0
  1434. package/dist/version-v2/create-version.test.js.map +1 -0
  1435. package/dist/version-v2/database-schema.d.ts +21 -0
  1436. package/dist/version-v2/database-schema.d.ts.map +1 -0
  1437. package/dist/version-v2/database-schema.js +169 -0
  1438. package/dist/version-v2/database-schema.js.map +1 -0
  1439. package/dist/version-v2/database-schema.test.d.ts +2 -0
  1440. package/dist/version-v2/database-schema.test.d.ts.map +1 -0
  1441. package/dist/version-v2/database-schema.test.js +625 -0
  1442. package/dist/version-v2/database-schema.test.js.map +1 -0
  1443. package/dist/version-v2/index.d.ts +2 -0
  1444. package/dist/version-v2/index.d.ts.map +1 -0
  1445. package/dist/version-v2/index.js +2 -0
  1446. package/dist/version-v2/index.js.map +1 -0
  1447. package/dist/version-v2/swich-version.d.ts +27 -0
  1448. package/dist/version-v2/swich-version.d.ts.map +1 -0
  1449. package/dist/version-v2/swich-version.js +46 -0
  1450. package/dist/version-v2/swich-version.js.map +1 -0
  1451. package/dist/version-v2/switch-version.d.ts +27 -0
  1452. package/dist/version-v2/switch-version.d.ts.map +1 -0
  1453. package/dist/version-v2/switch-version.js +91 -0
  1454. package/dist/version-v2/switch-version.js.map +1 -0
  1455. package/dist/version-v2/switch-version.test.d.ts +2 -0
  1456. package/dist/version-v2/switch-version.test.d.ts.map +1 -0
  1457. package/dist/version-v2/switch-version.test.js +110 -0
  1458. package/dist/version-v2/switch-version.test.js.map +1 -0
  1459. package/dist/version-v2/with-skip-update-working-change-set.d.ts +3 -0
  1460. package/dist/version-v2/with-skip-update-working-change-set.d.ts.map +1 -0
  1461. package/dist/version-v2/with-skip-update-working-change-set.js +50 -0
  1462. package/dist/version-v2/with-skip-update-working-change-set.js.map +1 -0
  1463. package/dist/version-v2/with-skip-update-working-change-set.test.d.ts +2 -0
  1464. package/dist/version-v2/with-skip-update-working-change-set.test.d.ts.map +1 -0
  1465. package/dist/version-v2/with-skip-update-working-change-set.test.js +49 -0
  1466. package/dist/version-v2/with-skip-update-working-change-set.test.js.map +1 -0
  1467. package/dist/zettel-ast/index.d.ts +11 -0
  1468. package/dist/zettel-ast/index.d.ts.map +1 -0
  1469. package/dist/zettel-ast/index.js +11 -0
  1470. package/dist/zettel-ast/index.js.map +1 -0
  1471. package/package.json +12 -11
  1472. package/src/account/create-account.test.ts +49 -4
  1473. package/src/account/create-account.ts +37 -7
  1474. package/src/account/index.ts +5 -1
  1475. package/src/account/schema.test.ts +370 -0
  1476. package/src/account/schema.ts +132 -0
  1477. package/src/account/switch-account.test.ts +33 -10
  1478. package/src/account/switch-account.ts +13 -4
  1479. package/src/change/index.ts +4 -2
  1480. package/src/change/schema.test.ts +322 -0
  1481. package/src/change/schema.ts +173 -0
  1482. package/src/change-author/index.ts +4 -0
  1483. package/src/change-author/schema.test.ts +364 -0
  1484. package/src/change-author/schema.ts +54 -0
  1485. package/src/change-conflict/create-change-conflict.test.ts +14 -11
  1486. package/src/change-conflict/create-change-conflict.ts +29 -6
  1487. package/src/change-conflict/detect-change-conflicts.test.ts +18 -15
  1488. package/src/change-conflict/detect-change-conflicts.ts +3 -0
  1489. package/src/change-conflict/detect-diverging-entity-conflict.test.ts +24 -21
  1490. package/src/change-conflict/detect-diverging-entity-conflict.ts +4 -1
  1491. package/src/change-conflict/garbage-collect-change-conflicts.test.ts +16 -15
  1492. package/src/change-conflict/garbage-collect-change-conflicts.ts +3 -0
  1493. package/src/change-conflict/resolve-conflict-by-selecting.test.ts +18 -8
  1494. package/src/change-conflict/resolve-conflict-by-selecting.ts +3 -2
  1495. package/src/change-proposal/create-change-proposal.test.ts +106 -0
  1496. package/src/change-proposal/create-change-proposal.ts +71 -0
  1497. package/src/change-proposal/database-schema.test.ts +180 -0
  1498. package/src/change-proposal/database-schema.ts +32 -0
  1499. package/src/change-proposal/index.ts +2 -0
  1500. package/src/change-set/apply-change-set.test.ts +472 -0
  1501. package/src/change-set/apply-change-set.ts +174 -0
  1502. package/src/change-set/create-change-set.test.ts +87 -27
  1503. package/src/change-set/create-change-set.ts +95 -43
  1504. package/src/change-set/index.ts +9 -1
  1505. package/src/change-set/schema.test.ts +671 -0
  1506. package/src/change-set/schema.ts +150 -0
  1507. package/src/commit/apply-commit.test.ts +426 -0
  1508. package/src/commit/apply-commit.ts +74 -0
  1509. package/src/commit/create-checkpoint.test.ts +605 -0
  1510. package/src/commit/create-checkpoint.ts +140 -0
  1511. package/src/commit/create-commit.ts +80 -0
  1512. package/src/commit/create-merge-commit.test.ts +268 -0
  1513. package/src/commit/create-merge-commit.ts +138 -0
  1514. package/src/commit/create-transition-commit.test.ts +256 -0
  1515. package/src/commit/create-transition-commit.ts +187 -0
  1516. package/src/commit/create-undo-commit.test.ts +358 -0
  1517. package/src/commit/create-undo-commit.ts +180 -0
  1518. package/src/commit/index.ts +11 -0
  1519. package/src/commit/schema.test.ts +257 -0
  1520. package/src/commit/schema.ts +104 -0
  1521. package/src/database/execute-sync.test.ts +60 -72
  1522. package/src/database/execute-sync.ts +26 -27
  1523. package/src/database/graph-traversal-mode.ts +75 -0
  1524. package/src/database/index.ts +1 -2
  1525. package/src/database/init-db.ts +158 -74
  1526. package/src/database/kysely-plugin/json-column-plugin.test.ts +404 -0
  1527. package/src/database/kysely-plugin/json-column-plugin.ts +280 -0
  1528. package/src/database/kysely-plugin/parse-jsonb-plugin-v1.ts +5 -10
  1529. package/src/database/kysely-plugin/parse-jsonb-plugin-v2.ts +1 -1
  1530. package/src/database/kysely-plugin/serialize-jsonb-plugin.test.ts +177 -2
  1531. package/src/database/kysely-plugin/serialize-jsonb-plugin.ts +186 -87
  1532. package/src/database/kysely-plugin/view-insert-returning-error-plugin.test.ts +62 -0
  1533. package/src/database/kysely-plugin/view-insert-returning-error-plugin.ts +49 -0
  1534. package/src/database/nano-id.test.ts +3 -3
  1535. package/src/database/nano-id.ts +4 -1
  1536. package/src/database/schema.ts +105 -270
  1537. package/src/deterministic/generate-human-id.test.ts +154 -0
  1538. package/src/deterministic/generate-human-id.ts +94 -0
  1539. package/src/deterministic/index.ts +7 -0
  1540. package/src/deterministic/is-deterministic-mode.test.ts +133 -0
  1541. package/src/deterministic/is-deterministic-mode.ts +32 -0
  1542. package/src/deterministic/nano-id.test.ts +200 -0
  1543. package/src/deterministic/nano-id.ts +188 -0
  1544. package/src/deterministic/options.test.ts +157 -0
  1545. package/src/deterministic/options.ts +62 -0
  1546. package/src/deterministic/random.test.ts +293 -0
  1547. package/src/deterministic/random.ts +261 -0
  1548. package/src/deterministic/sequence.test.ts +93 -0
  1549. package/src/deterministic/sequence.ts +132 -0
  1550. package/src/deterministic/timestamp.test.ts +170 -0
  1551. package/src/deterministic/timestamp.ts +83 -0
  1552. package/src/deterministic/uuid-v7.test.ts +144 -0
  1553. package/src/deterministic/uuid-v7.ts +82 -0
  1554. package/src/entity/eb-entity.test.ts +687 -0
  1555. package/src/entity/eb-entity.ts +203 -0
  1556. package/src/entity/index.ts +12 -0
  1557. package/src/entity/label/create-entity-label.test.ts +316 -0
  1558. package/src/entity/label/create-entity-label.ts +113 -0
  1559. package/src/entity/label/schema.test.ts +692 -0
  1560. package/src/entity/label/schema.ts +55 -0
  1561. package/src/entity/schema.ts +22 -0
  1562. package/src/entity/thread/create-entity-thread.test.ts +282 -0
  1563. package/src/entity/thread/create-entity-thread.ts +134 -0
  1564. package/src/entity/thread/query-threads.test.ts +394 -0
  1565. package/src/entity/thread/schema.test.ts +170 -0
  1566. package/src/entity/thread/schema.ts +55 -0
  1567. package/src/entity-views/README.md +214 -0
  1568. package/src/entity-views/entity-state-all.test.ts +647 -0
  1569. package/src/entity-views/entity-state-all.ts +575 -0
  1570. package/src/entity-views/entity-state-history.test.ts +387 -0
  1571. package/src/entity-views/entity-state-history.ts +275 -0
  1572. package/src/entity-views/entity-state.test.ts +732 -0
  1573. package/src/entity-views/entity-state.ts +571 -0
  1574. package/src/entity-views/entity-view-builder.test.ts +293 -0
  1575. package/src/entity-views/entity-view-builder.ts +148 -0
  1576. package/src/entity-views/index.ts +1 -0
  1577. package/src/entity-views/types.test.ts +99 -0
  1578. package/src/entity-views/types.ts +328 -0
  1579. package/src/file/file-handlers.test.ts +174 -0
  1580. package/src/file/file-handlers.ts +404 -0
  1581. package/src/file/index.ts +5 -1
  1582. package/src/file/materialize-file-data-at-commit.ts +157 -0
  1583. package/src/file/materialize-file-data.test.ts +107 -0
  1584. package/src/file/materialize-file-data.ts +120 -0
  1585. package/src/file/schema.test.ts +1646 -0
  1586. package/src/file/schema.ts +427 -0
  1587. package/src/file/store-detected-change-schema.test.ts +248 -0
  1588. package/src/file/store-detected-change-schema.ts +52 -0
  1589. package/src/file/unknown-file-fallback-plugin.test.ts +368 -0
  1590. package/src/file/unknown-file-fallback-plugin.ts +95 -0
  1591. package/src/hooks/create-hooks.test.ts +125 -0
  1592. package/src/hooks/create-hooks.ts +68 -0
  1593. package/src/hooks/index.ts +1 -0
  1594. package/src/index.ts +13 -6
  1595. package/src/key-value/index.ts +1 -0
  1596. package/src/key-value/schema.test.ts +280 -0
  1597. package/src/key-value/schema.ts +98 -0
  1598. package/src/label/create-label.test.ts +234 -0
  1599. package/src/label/create-label.ts +61 -0
  1600. package/src/label/index.ts +2 -0
  1601. package/src/label/schema.test.ts +92 -0
  1602. package/src/label/schema.ts +37 -0
  1603. package/src/lix/index.ts +3 -6
  1604. package/src/lix/new-lix.test.ts +412 -16
  1605. package/src/lix/new-lix.ts +619 -8
  1606. package/src/lix/open-lix.test.ts +369 -27
  1607. package/src/lix/open-lix.ts +256 -46
  1608. package/src/lix/storage/in-memory.test.ts +106 -0
  1609. package/src/lix/storage/in-memory.ts +64 -0
  1610. package/src/lix/storage/lix-storage-adapter.ts +52 -0
  1611. package/src/lix/storage/opfs.test.ts +438 -0
  1612. package/src/lix/storage/opfs.ts +313 -0
  1613. package/src/log/create-lix-own-log.test.ts +123 -0
  1614. package/src/log/create-lix-own-log.ts +113 -0
  1615. package/src/log/create-log.ts +52 -0
  1616. package/src/log/index.ts +2 -0
  1617. package/src/log/schema.test.ts +140 -0
  1618. package/src/log/schema.ts +51 -0
  1619. package/src/observe/create-observe.test.ts +836 -0
  1620. package/src/observe/create-observe.ts +184 -0
  1621. package/src/observe/determine-schema-keys.test.ts +371 -0
  1622. package/src/observe/determine-schema-keys.ts +165 -0
  1623. package/src/observe/index.ts +1 -0
  1624. package/src/observe/lix-observable.test.ts +247 -0
  1625. package/src/observe/lix-observable.ts +92 -0
  1626. package/src/plugin/index.ts +2 -2
  1627. package/src/plugin/lix-plugin.test-d.ts +26 -15
  1628. package/src/plugin/lix-plugin.ts +43 -52
  1629. package/src/plugin/mock-json-plugin.flatten.ts +161 -0
  1630. package/src/plugin/mock-json-plugin.test.ts +214 -0
  1631. package/src/plugin/mock-json-plugin.ts +113 -0
  1632. package/src/query-filter/change-set-element-in-ancestry-of.test.ts +440 -0
  1633. package/src/query-filter/change-set-element-in-ancestry-of.ts +69 -0
  1634. package/src/query-filter/change-set-element-in-symmetric-difference.test.ts +410 -0
  1635. package/src/{change-set → query-filter}/change-set-element-in-symmetric-difference.ts +4 -3
  1636. package/src/query-filter/change-set-element-is-leaf-of.test.ts +623 -0
  1637. package/src/query-filter/change-set-element-is-leaf-of.ts +132 -0
  1638. package/src/query-filter/commit-is-ancestor-of.test.ts +333 -0
  1639. package/src/query-filter/commit-is-ancestor-of.ts +77 -0
  1640. package/src/query-filter/commit-is-descendant-of.test.ts +365 -0
  1641. package/src/query-filter/commit-is-descendant-of.ts +70 -0
  1642. package/src/query-filter/index.ts +5 -8
  1643. package/src/schema-definition/definition.test-d.ts +253 -0
  1644. package/src/schema-definition/definition.test.ts +425 -0
  1645. package/src/schema-definition/definition.ts +502 -0
  1646. package/src/schema-definition/index.ts +13 -0
  1647. package/src/schema-definition/json-type.test.ts +30 -0
  1648. package/src/schema-definition/json-type.ts +53 -0
  1649. package/src/schema-definition/validate-lix-schema.test.ts +94 -0
  1650. package/src/schema-definition/validate-lix-schema.ts +104 -0
  1651. package/src/server-protocol-handler/create-server-protocol-handler.ts +0 -4
  1652. package/src/server-protocol-handler/environment/create-in-memory-environment.test.ts +13 -14
  1653. package/src/server-protocol-handler/environment/create-in-memory-environment.ts +5 -24
  1654. package/src/server-protocol-handler/environment/environment.ts +0 -5
  1655. package/src/server-protocol-handler/routes/get-v1.test.ts +11 -12
  1656. package/src/server-protocol-handler/routes/get-v1.ts +3 -1
  1657. package/src/server-protocol-handler/routes/new-v1.test.ts +7 -8
  1658. package/src/server-protocol-handler/routes/new-v1.ts +3 -5
  1659. package/src/server-protocol-handler/routes/pull-v1.test.ts +49 -33
  1660. package/src/server-protocol-handler/routes/pull-v1.ts +1 -1
  1661. package/src/server-protocol-handler/routes/push-v1.test.ts +26 -27
  1662. package/src/server-protocol-handler/routes/push-v1.ts +4 -1
  1663. package/src/snapshot/schema.test.ts +268 -0
  1664. package/src/snapshot/schema.ts +29 -0
  1665. package/src/state/README.md +95 -0
  1666. package/src/state/cache/clear-state-cache.test.ts +43 -0
  1667. package/src/state/cache/clear-state-cache.ts +16 -0
  1668. package/src/state/cache/is-stale-state-cache.test.ts +35 -0
  1669. package/src/state/cache/is-stale-state-cache.ts +29 -0
  1670. package/src/state/cache/mark-state-cache-as-stale.ts +53 -0
  1671. package/src/state/cache/populate-state-cache.test.ts +259 -0
  1672. package/src/state/cache/populate-state-cache.ts +124 -0
  1673. package/src/state/cache/schema.ts +41 -0
  1674. package/src/state/cache/update-state-cache.test.ts +510 -0
  1675. package/src/state/cache/update-state-cache.ts +317 -0
  1676. package/src/state/commit.test.ts +1402 -0
  1677. package/src/state/commit.ts +587 -0
  1678. package/src/state/insert-transaction-state.test.ts +928 -0
  1679. package/src/state/insert-transaction-state.ts +306 -0
  1680. package/src/state/materialize-state.test.ts +2358 -0
  1681. package/src/state/materialize-state.ts +235 -0
  1682. package/src/state/primary-key.test.ts +158 -0
  1683. package/src/state/primary-key.ts +80 -0
  1684. package/src/state/resolved-state-view.test.ts +521 -0
  1685. package/src/state/resolved-state-view.ts +202 -0
  1686. package/src/state/schema.bench.ts +43 -0
  1687. package/src/state/schema.test.ts +3260 -0
  1688. package/src/state/schema.ts +992 -0
  1689. package/src/state/untracked/schema.test.ts +301 -0
  1690. package/src/state/untracked/schema.ts +55 -0
  1691. package/src/state/untracked/update-untracked-state.test.ts +466 -0
  1692. package/src/state/untracked/update-untracked-state.ts +133 -0
  1693. package/src/state/validate-state-mutation.test.ts +3308 -0
  1694. package/src/state/validate-state-mutation.ts +866 -0
  1695. package/src/state-history/schema.test.ts +1002 -0
  1696. package/src/state-history/schema.ts +221 -0
  1697. package/src/stored-schema/index.ts +4 -0
  1698. package/src/stored-schema/schema.test.ts +240 -0
  1699. package/src/stored-schema/schema.ts +67 -0
  1700. package/src/sync/get-diffing-rows.ts +16 -0
  1701. package/src/sync/merge-state.ts +7 -4
  1702. package/src/sync/pull-from-server.test.ts +33 -28
  1703. package/src/sync/pull-from-server.ts +4 -2
  1704. package/src/sync/push-to-server.test.ts +79 -83
  1705. package/src/sync/push-to-server.ts +11 -2
  1706. package/src/sync/sync-process.test.ts +21 -18
  1707. package/src/sync/sync-process.ts +2 -3
  1708. package/src/test-utilities/simulation-test/cache-miss-simulation.test.ts +162 -0
  1709. package/src/test-utilities/simulation-test/cache-miss-simulation.ts +99 -0
  1710. package/src/test-utilities/simulation-test/chaotic-timestamp-simulation.ts +0 -0
  1711. package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.test.ts +88 -0
  1712. package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.ts +69 -0
  1713. package/src/test-utilities/simulation-test/simulation-test.test.ts +400 -0
  1714. package/src/test-utilities/simulation-test/simulation-test.ts +176 -0
  1715. package/src/thread/create-thread-comment.test.ts +122 -0
  1716. package/src/thread/create-thread-comment.ts +84 -0
  1717. package/src/thread/create-thread.test.ts +212 -0
  1718. package/src/thread/create-thread.ts +108 -0
  1719. package/src/thread/index.ts +9 -0
  1720. package/src/thread/schema.test.ts +157 -0
  1721. package/src/thread/schema.ts +90 -0
  1722. package/src/version/create-version.test.ts +135 -116
  1723. package/src/version/create-version.ts +64 -61
  1724. package/src/version/index.ts +5 -6
  1725. package/src/version/schema.test.ts +1030 -0
  1726. package/src/version/schema.ts +163 -0
  1727. package/src/version/select-active-version.ts +18 -0
  1728. package/src/version/switch-version.test.ts +14 -275
  1729. package/src/version/switch-version.ts +9 -79
  1730. package/src/zettel-ast/index.ts +10 -0
  1731. package/src/account/database-schema.test.ts +0 -184
  1732. package/src/account/database-schema.ts +0 -54
  1733. package/src/change/apply-changes.test.ts +0 -268
  1734. package/src/change/apply-changes.ts +0 -114
  1735. package/src/change/create-change.test.ts +0 -296
  1736. package/src/change/create-change.ts +0 -129
  1737. package/src/change/mock-change.ts +0 -21
  1738. package/src/change-schema/README.md +0 -3
  1739. package/src/change-schema/index.ts +0 -4
  1740. package/src/change-schema/types.test-d.ts +0 -52
  1741. package/src/change-schema/types.ts +0 -53
  1742. package/src/change-set/change-set-element-in-symmetric-difference.test.ts +0 -128
  1743. package/src/database/apply-schema.ts +0 -272
  1744. package/src/database/init-db.test.ts +0 -626
  1745. package/src/database/mutation-log/database-schema.ts +0 -128
  1746. package/src/database/mutation-log/lix-session.ts +0 -19
  1747. package/src/discussion/create-comment.ts +0 -18
  1748. package/src/discussion/create-discussion.test.ts +0 -45
  1749. package/src/discussion/create-discussion.ts +0 -48
  1750. package/src/discussion/index.ts +0 -2
  1751. package/src/file/validate-file-path.test.ts +0 -44
  1752. package/src/file/validate-file-path.ts +0 -60
  1753. package/src/file-queue/file-handlers.ts +0 -267
  1754. package/src/file-queue/file-queue-process.test.ts +0 -456
  1755. package/src/file-queue/file-queue-process.ts +0 -108
  1756. package/src/file-queue/file-queue-settled.test.ts +0 -56
  1757. package/src/file-queue/file-queue-settled.ts +0 -31
  1758. package/src/file-queue/index.ts +0 -1
  1759. package/src/file-queue/with-skip-file-queue.test.ts +0 -158
  1760. package/src/file-queue/with-skip-file-queue.ts +0 -33
  1761. package/src/key-value/database-schema.test.ts +0 -140
  1762. package/src/key-value/database-schema.ts +0 -66
  1763. package/src/lix/close-lix.ts +0 -8
  1764. package/src/lix/merge.get-leaf-changes-only-in-source.test.ts +0 -143
  1765. package/src/lix/merge.get-leaf-changes-only-in-source.ts +0 -46
  1766. package/src/lix/merge.test.ts +0 -858
  1767. package/src/lix/merge.ts +0 -244
  1768. package/src/lix/open-lix-in-memory.test.ts +0 -34
  1769. package/src/lix/open-lix-in-memory.ts +0 -28
  1770. package/src/lix/to-blob.ts +0 -14
  1771. package/src/own-change-control/apply-own-change.test.ts +0 -361
  1772. package/src/own-change-control/apply-own-change.ts +0 -110
  1773. package/src/own-change-control/change-controlled-tables.test.ts +0 -69
  1774. package/src/own-change-control/change-controlled-tables.ts +0 -102
  1775. package/src/own-change-control/database-triggers.test.ts +0 -259
  1776. package/src/own-change-control/database-triggers.ts +0 -189
  1777. package/src/own-change-control/index.ts +0 -1
  1778. package/src/own-change-control/with-skip-own-change-control.test.ts +0 -57
  1779. package/src/own-change-control/with-skip-own-change-control.ts +0 -34
  1780. package/src/plugin/load-plugin.ts +0 -37
  1781. package/src/plugin/with-transaction.ts +0 -22
  1782. package/src/query-filter/change-conflict-in-version.test.ts +0 -62
  1783. package/src/query-filter/change-conflict-in-version.ts +0 -25
  1784. package/src/query-filter/change-has-label.test.ts +0 -52
  1785. package/src/query-filter/change-has-label.ts +0 -41
  1786. package/src/query-filter/change-in-version.test.ts +0 -82
  1787. package/src/query-filter/change-in-version.ts +0 -31
  1788. package/src/query-filter/change-is-leaf-in-version.test.ts +0 -77
  1789. package/src/query-filter/change-is-leaf-in-version.ts +0 -36
  1790. package/src/query-filter/change-is-leaf-of.bench.ts +0 -175
  1791. package/src/query-filter/change-is-leaf-of.test.ts +0 -84
  1792. package/src/query-filter/change-is-leaf-of.ts +0 -46
  1793. package/src/query-filter/change-is-leaf.test.ts +0 -140
  1794. package/src/query-filter/change-is-leaf.ts +0 -25
  1795. package/src/query-filter/change-is-lowest-common-ancestor-of.test.ts +0 -173
  1796. package/src/query-filter/change-is-lowest-common-ancestor-of.ts +0 -57
  1797. package/src/query-filter/change-set-has-label.test.ts +0 -50
  1798. package/src/query-filter/change-set-has-label.ts +0 -36
  1799. package/src/query-filter/version-change-in-difference.test.ts +0 -105
  1800. package/src/query-filter/version-change-in-difference.ts +0 -37
  1801. package/src/query-filter/version-change-in-symmetric-difference.test.ts +0 -104
  1802. package/src/query-filter/version-change-in-symmetric-difference.ts +0 -52
  1803. package/src/snapshot/create-snapshot.test.ts +0 -68
  1804. package/src/snapshot/create-snapshot.ts +0 -40
  1805. package/src/snapshot/index.ts +0 -2
  1806. package/src/snapshot/json-sha-256.test.ts +0 -12
  1807. package/src/snapshot/json-sha-256.ts +0 -35
  1808. package/src/snapshot/mock-json-snapshot.ts +0 -14
  1809. package/src/version/merge-version.test.ts +0 -530
  1810. package/src/version/merge-version.ts +0 -88
  1811. package/src/version/update-changes-in-version.test.ts +0 -371
  1812. package/src/version/update-changes-in-version.ts +0 -47
@@ -0,0 +1,2358 @@
1
+ import { describe, expect } from "vitest";
2
+ import { selectActiveVersion } from "../version/select-active-version.js";
3
+ import { createVersion } from "../version/create-version.js";
4
+ import { timestamp } from "../deterministic/timestamp.js";
5
+ import {
6
+ simulationTest,
7
+ normalSimulation,
8
+ outOfOrderSequenceSimulation,
9
+ } from "../test-utilities/simulation-test/simulation-test.js";
10
+
11
+ describe("internal_materialization_version_tips", () => {
12
+ simulationTest(
13
+ "includes all versions with state, even if other versions branch from them",
14
+ async ({ openSimulatedLix }) => {
15
+ // Test the rule: "if a version entity exists, the version is active.
16
+ // even if other versions 'build' on this version by branching away from the commit"
17
+ const lix = await openSimulatedLix({
18
+ keyValues: [
19
+ {
20
+ key: "lix_deterministic_mode",
21
+ value: { enabled: true, bootstrap: true },
22
+ },
23
+ ],
24
+ });
25
+
26
+ // Create base version with state
27
+ await createVersion({ lix, id: "base-version" });
28
+ await lix.db
29
+ .insertInto("state_all")
30
+ .values({
31
+ entity_id: "base-entity",
32
+ schema_key: "mock_entity",
33
+ schema_version: "1.0",
34
+ file_id: "mock-file",
35
+ version_id: "base-version",
36
+ plugin_key: "mock-plugin",
37
+ snapshot_content: { id: "base-entity", name: "Base Entity" },
38
+ })
39
+ .execute();
40
+
41
+ // Get base version's current commit
42
+ const baseVersion = await lix.db
43
+ .selectFrom("version")
44
+ .select("commit_id")
45
+ .where("id", "=", "base-version")
46
+ .executeTakeFirstOrThrow();
47
+
48
+ // Create version A that branches from base version's commit
49
+ await createVersion({ lix, id: "version-a" });
50
+ await lix.db
51
+ .updateTable("version")
52
+ .set({ commit_id: baseVersion.commit_id })
53
+ .where("id", "=", "version-a")
54
+ .execute();
55
+
56
+ // Add state to version A (this will create a new commit, making base-version no longer a "tip")
57
+ await lix.db
58
+ .insertInto("state_all")
59
+ .values({
60
+ entity_id: "entity-a",
61
+ schema_key: "mock_entity",
62
+ schema_version: "1.0",
63
+ file_id: "mock-file",
64
+ version_id: "version-a",
65
+ plugin_key: "mock-plugin",
66
+ snapshot_content: { id: "entity-a", name: "Version A Entity" },
67
+ })
68
+ .execute();
69
+
70
+ // Create version B that also branches from base version's commit
71
+ await createVersion({ lix, id: "version-b" });
72
+ await lix.db
73
+ .updateTable("version")
74
+ .set({ commit_id: baseVersion.commit_id })
75
+ .where("id", "=", "version-b")
76
+ .execute();
77
+
78
+ // Add state to version B
79
+ await lix.db
80
+ .insertInto("state_all")
81
+ .values({
82
+ entity_id: "entity-b",
83
+ schema_key: "mock_entity",
84
+ schema_version: "1.0",
85
+ file_id: "mock-file",
86
+ version_id: "version-b",
87
+ plugin_key: "mock-plugin",
88
+ snapshot_content: { id: "entity-b", name: "Version B Entity" },
89
+ })
90
+ .execute();
91
+
92
+ // Now base-version has children (version-a and version-b branched from it),
93
+ // so it's no longer a "tip" commit. But it still has important state that should be materialized.
94
+
95
+ // Query version tips - should include ALL versions with state, not just leaf tips
96
+ const tips = await lix.db
97
+ .selectFrom("internal_materialization_version_tips" as any)
98
+ .selectAll()
99
+ .where("version_id", "in", ["base-version", "version-a", "version-b"])
100
+ .orderBy("version_id")
101
+ .execute();
102
+
103
+ // All three versions should be included because they all have entities/state
104
+ expect(tips).toHaveLength(3);
105
+
106
+ const baseVersionTip = tips.find(
107
+ (t: any) => t.version_id === "base-version"
108
+ );
109
+ const versionATip = tips.find((t: any) => t.version_id === "version-a");
110
+ const versionBTip = tips.find((t: any) => t.version_id === "version-b");
111
+
112
+ // All versions should be present in version tips
113
+ expect(baseVersionTip).toBeDefined();
114
+ expect(versionATip).toBeDefined();
115
+ expect(versionBTip).toBeDefined();
116
+
117
+ // Verify that the base version's state can be materialized (not excluded from materialization pipeline)
118
+ const baseMaterializedState = await lix.db
119
+ .selectFrom("internal_state_materializer" as any)
120
+ .selectAll()
121
+ .where("version_id", "=", "base-version")
122
+ .where("entity_id", "=", "base-entity")
123
+ .executeTakeFirst();
124
+
125
+ expect(baseMaterializedState).toBeDefined();
126
+ expect(baseMaterializedState!.snapshot_content).toEqual({
127
+ id: "base-entity",
128
+ name: "Base Entity",
129
+ });
130
+ },
131
+ {
132
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
133
+ }
134
+ );
135
+
136
+ simulationTest(
137
+ "finds tip commit for a version with single commit",
138
+ async ({ openSimulatedLix }) => {
139
+ const lix = await openSimulatedLix({
140
+ keyValues: [
141
+ {
142
+ key: "lix_deterministic_mode",
143
+ value: { enabled: true, bootstrap: true },
144
+ },
145
+ ],
146
+ });
147
+
148
+ const activeVersion =
149
+ await selectActiveVersion(lix).executeTakeFirstOrThrow();
150
+
151
+ // Query the view
152
+ const results = await lix.db
153
+ .selectFrom("internal_materialization_version_tips" as any)
154
+ .where("version_id", "=", activeVersion.id)
155
+ .selectAll()
156
+ .execute();
157
+
158
+ // Verify results
159
+ expect(results).toHaveLength(1);
160
+ expect(results[0]?.version_id).toBe(activeVersion.id);
161
+ expect(results[0]?.tip_commit_id).toBe(activeVersion.commit_id);
162
+ },
163
+ {
164
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
165
+ }
166
+ );
167
+
168
+ simulationTest(
169
+ "updates tip when new commit is added",
170
+ async ({ openSimulatedLix }) => {
171
+ const lix = await openSimulatedLix({
172
+ keyValues: [
173
+ {
174
+ key: "lix_deterministic_mode",
175
+ value: { enabled: true, bootstrap: true },
176
+ },
177
+ ],
178
+ });
179
+
180
+ const activeVersion =
181
+ await selectActiveVersion(lix).executeTakeFirstOrThrow();
182
+
183
+ // Get initial tip
184
+ const initialResults = await lix.db
185
+ .selectFrom("internal_materialization_version_tips" as any)
186
+ .where("version_id", "=", activeVersion.id)
187
+ .selectAll()
188
+ .execute();
189
+
190
+ const initialTip = initialResults[0]?.tip_commit_id;
191
+
192
+ // Insert state to trigger a new commit
193
+ await lix.db
194
+ .insertInto("state")
195
+ .values({
196
+ entity_id: "entity-1",
197
+ schema_key: "mock_entity",
198
+ schema_version: "1.0",
199
+ file_id: "mock-file",
200
+ plugin_key: "mock-plugin",
201
+ snapshot_content: { id: "entity-1", name: "Test Entity" },
202
+ })
203
+ .execute();
204
+
205
+ // Get updated tip
206
+ const updatedResults = await lix.db
207
+ .selectFrom("internal_materialization_version_tips" as any)
208
+ .where("version_id", "=", activeVersion.id)
209
+ .selectAll()
210
+ .execute();
211
+
212
+ const updatedTip = updatedResults[0]?.tip_commit_id;
213
+
214
+ // Verify tip changed
215
+ expect(updatedTip).not.toBe(initialTip);
216
+ expect(updatedResults).toHaveLength(1);
217
+ expect(updatedResults[0]?.version_id).toBe(activeVersion.id);
218
+ },
219
+ {
220
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
221
+ }
222
+ );
223
+
224
+ simulationTest(
225
+ "handles multiple versions with independent tips",
226
+ async ({ openSimulatedLix }) => {
227
+ const lix = await openSimulatedLix({
228
+ keyValues: [
229
+ {
230
+ key: "lix_deterministic_mode",
231
+ value: { enabled: true, bootstrap: true },
232
+ },
233
+ ],
234
+ });
235
+
236
+ // Create two versions
237
+ await createVersion({ lix, id: "version-1" });
238
+ await createVersion({ lix, id: "version-2" });
239
+
240
+ // Add state to version1 to create a commit
241
+ await lix.db
242
+ .insertInto("state_all")
243
+ .values({
244
+ entity_id: "entity-1",
245
+ schema_key: "mock_entity",
246
+ schema_version: "1.0",
247
+ file_id: "mock-file",
248
+ version_id: "version-1",
249
+ plugin_key: "mock-plugin",
250
+ snapshot_content: { id: "entity-1", name: "Version 1 Entity" },
251
+ })
252
+ .execute();
253
+
254
+ // Add state to version2 to create a commit
255
+ await lix.db
256
+ .insertInto("state_all")
257
+ .values({
258
+ entity_id: "entity-2",
259
+ schema_key: "mock_entity",
260
+ schema_version: "1.0",
261
+ file_id: "mock-file",
262
+ version_id: "version-2",
263
+ plugin_key: "mock-plugin",
264
+ snapshot_content: { id: "entity-2", name: "Version 2 Entity" },
265
+ })
266
+ .execute();
267
+
268
+ // Get tips for both versions
269
+ const tips = await lix.db
270
+ .selectFrom("internal_materialization_version_tips" as any)
271
+ .selectAll()
272
+ .where("version_id", "in", ["version-1", "version-2"])
273
+ .orderBy("version_id")
274
+ .execute();
275
+
276
+ // Should have two different tips
277
+ expect(tips).toHaveLength(2); // includes the default version
278
+ const v1Tip = tips.find((t: any) => t.version_id === "version-1");
279
+ const v2Tip = tips.find((t: any) => t.version_id === "version-2");
280
+
281
+ expect(v1Tip).toBeDefined();
282
+ expect(v2Tip).toBeDefined();
283
+ expect(v1Tip?.tip_commit_id).not.toBe(v2Tip?.tip_commit_id);
284
+
285
+ // Add more state to version1 to move its tip
286
+ await lix.db
287
+ .insertInto("state_all")
288
+ .values({
289
+ entity_id: "entity-3",
290
+ schema_key: "mock_entity",
291
+ schema_version: "1.0",
292
+ file_id: "mock-file",
293
+ version_id: "version-1",
294
+ plugin_key: "mock-plugin",
295
+ snapshot_content: {
296
+ id: "entity-3",
297
+ name: "Another Version 1 Entity",
298
+ },
299
+ })
300
+ .execute();
301
+
302
+ // Get updated tips
303
+ const updatedTips = await lix.db
304
+ .selectFrom("internal_materialization_version_tips" as any)
305
+ .selectAll()
306
+ .orderBy("version_id")
307
+ .execute();
308
+
309
+ const v1UpdatedTip = updatedTips.find(
310
+ (t: any) => t.version_id === "version-1"
311
+ );
312
+ const v2UpdatedTip = updatedTips.find(
313
+ (t: any) => t.version_id === "version-2"
314
+ );
315
+
316
+ // Version 1 tip should have changed, version 2 should remain the same
317
+ expect(v1UpdatedTip?.tip_commit_id).not.toBe(v1Tip?.tip_commit_id);
318
+ expect(v2UpdatedTip?.tip_commit_id).toBe(v2Tip?.tip_commit_id);
319
+ },
320
+ {
321
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
322
+ }
323
+ );
324
+ });
325
+
326
+ describe("internal_materialization_commit_graph", () => {
327
+ simulationTest(
328
+ "builds linear commit history with correct depths",
329
+ async ({ openSimulatedLix }) => {
330
+ // Linear history: initial -> commit1 -> commit2 -> commit3 (tip)
331
+ // Expected depths: 3 2 1 0
332
+ const lix = await openSimulatedLix({
333
+ keyValues: [
334
+ {
335
+ key: "lix_deterministic_mode",
336
+ value: { enabled: true, bootstrap: true },
337
+ },
338
+ ],
339
+ });
340
+
341
+ // Create a version
342
+ const initialVersion = await createVersion({
343
+ lix,
344
+ id: "linear-test-version",
345
+ });
346
+
347
+ // Create commit 1 (will be at depth 2)
348
+ await lix.db
349
+ .insertInto("state_all")
350
+ .values({
351
+ entity_id: "entity-1",
352
+ schema_key: "mock_entity",
353
+ schema_version: "1.0",
354
+ file_id: "mock-file",
355
+ version_id: "linear-test-version",
356
+ plugin_key: "mock-plugin",
357
+ snapshot_content: { id: "entity-1", name: "First commit" },
358
+ })
359
+ .execute();
360
+
361
+ // Get first commit id
362
+ const commits1 = await lix.db
363
+ .selectFrom("commit")
364
+ .innerJoin("version", "version.commit_id", "commit.id")
365
+ .select("commit.id")
366
+ .where("version.id", "=", "linear-test-version")
367
+ .orderBy("commit.lixcol_created_at", "desc")
368
+ .limit(1)
369
+ .execute();
370
+ const commit1Id = commits1[0]!.id;
371
+
372
+ // Create commit 2 (will be at depth 1)
373
+ await lix.db
374
+ .insertInto("state_all")
375
+ .values({
376
+ entity_id: "entity-2",
377
+ schema_key: "mock_entity",
378
+ schema_version: "1.0",
379
+ file_id: "mock-file",
380
+ version_id: "linear-test-version",
381
+ plugin_key: "mock-plugin",
382
+ snapshot_content: { id: "entity-2", name: "Second commit" },
383
+ })
384
+ .execute();
385
+
386
+ // Get second commit id
387
+ const commits2 = await lix.db
388
+ .selectFrom("commit")
389
+ .innerJoin("version", "version.commit_id", "commit.id")
390
+ .select("commit.id")
391
+ .where("version.id", "=", "linear-test-version")
392
+ .orderBy("commit.lixcol_created_at", "desc")
393
+ .limit(1)
394
+ .execute();
395
+ const commit2Id = commits2[0]!.id;
396
+
397
+ // Create commit 3 (will be at depth 0 - tip)
398
+ await lix.db
399
+ .insertInto("state_all")
400
+ .values({
401
+ entity_id: "entity-3",
402
+ schema_key: "mock_entity",
403
+ schema_version: "1.0",
404
+ file_id: "mock-file",
405
+ version_id: "linear-test-version",
406
+ plugin_key: "mock-plugin",
407
+ snapshot_content: { id: "entity-3", name: "Third commit" },
408
+ })
409
+ .execute();
410
+
411
+ // Get third commit id
412
+ const commits3 = await lix.db
413
+ .selectFrom("commit")
414
+ .innerJoin("version", "version.commit_id", "commit.id")
415
+ .select("commit.id")
416
+ .where("version.id", "=", "linear-test-version")
417
+ .orderBy("commit.lixcol_created_at", "desc")
418
+ .limit(1)
419
+ .execute();
420
+
421
+ const commit3Id = commits3[0]!.id;
422
+
423
+ // Query the commit graph view
424
+ const graph = await lix.db
425
+ .selectFrom("internal_materialization_commit_graph" as any)
426
+ .selectAll()
427
+ .where("version_id", "=", "linear-test-version")
428
+ .orderBy("depth")
429
+ .execute();
430
+
431
+ // Verify we have 4 commits with correct depths (including initial)
432
+ expect(graph).toHaveLength(4);
433
+
434
+ // Commit 3 (tip) should be at depth 0
435
+ expect(graph[0]).toMatchObject({
436
+ commit_id: commit3Id,
437
+ version_id: "linear-test-version",
438
+ depth: 0,
439
+ });
440
+
441
+ // Commit 2 should be at depth 1
442
+ expect(graph[1]).toMatchObject({
443
+ commit_id: commit2Id,
444
+ version_id: "linear-test-version",
445
+ depth: 1,
446
+ });
447
+
448
+ // Commit 1 should be at depth 2
449
+ expect(graph[2]).toMatchObject({
450
+ commit_id: commit1Id,
451
+ version_id: "linear-test-version",
452
+ depth: 2,
453
+ });
454
+
455
+ // Initial commit should be at depth 3
456
+ expect(graph[3]).toMatchObject({
457
+ version_id: "linear-test-version",
458
+ commit_id: initialVersion.commit_id,
459
+ depth: 3,
460
+ });
461
+ },
462
+ {
463
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
464
+ }
465
+ );
466
+
467
+ simulationTest(
468
+ "handles branching commit history",
469
+ async ({ openSimulatedLix }) => {
470
+ // Branching history:
471
+ // initial
472
+ // |
473
+ // commit1 (depth 2)
474
+ // / \
475
+ // commit2a commit2b (both depth 1)
476
+ // | |
477
+ // commit3a commit3b (both depth 0 - tips)
478
+
479
+ const lix = await openSimulatedLix({
480
+ keyValues: [
481
+ {
482
+ key: "lix_deterministic_mode",
483
+ value: { enabled: true, bootstrap: true },
484
+ },
485
+ ],
486
+ });
487
+
488
+ // Create two versions that branch from a common commit
489
+ await createVersion({ lix, id: "branch-version-1" });
490
+ await createVersion({ lix, id: "branch-version-2" });
491
+
492
+ // Create a common commit in version1
493
+ await lix.db
494
+ .insertInto("state_all")
495
+ .values({
496
+ entity_id: "common-entity",
497
+ schema_key: "mock_entity",
498
+ schema_version: "1.0",
499
+ file_id: "mock-file",
500
+ version_id: "branch-version-1",
501
+ plugin_key: "mock-plugin",
502
+ snapshot_content: { id: "common-entity", name: "Common commit" },
503
+ })
504
+ .execute();
505
+
506
+ // Get the common commit id
507
+ const commonCommit = await lix.db
508
+ .selectFrom("commit")
509
+ .innerJoin("version", "version.commit_id", "commit.id")
510
+ .select("commit.id")
511
+ .where("version.id", "=", "branch-version-1")
512
+ .orderBy("commit.lixcol_created_at", "desc")
513
+ .limit(1)
514
+ .execute();
515
+ const commonCommitId = commonCommit[0]!.id;
516
+
517
+ // Update version2 to point to the common commit (simulating a branch)
518
+ await lix.db
519
+ .updateTable("version")
520
+ .set({ commit_id: commonCommitId })
521
+ .where("id", "=", "branch-version-2")
522
+ .execute();
523
+
524
+ // Create diverging commits in version1
525
+ await lix.db
526
+ .insertInto("state_all")
527
+ .values({
528
+ entity_id: "branch1-entity",
529
+ schema_key: "mock_entity",
530
+ schema_version: "1.0",
531
+ file_id: "mock-file",
532
+ version_id: "branch-version-1",
533
+ plugin_key: "mock-plugin",
534
+ snapshot_content: { id: "branch1-entity", name: "Branch 1 commit" },
535
+ })
536
+ .execute();
537
+
538
+ // Create diverging commits in version2
539
+ await lix.db
540
+ .insertInto("state_all")
541
+ .values({
542
+ entity_id: "branch2-entity",
543
+ schema_key: "mock_entity",
544
+ schema_version: "1.0",
545
+ file_id: "mock-file",
546
+ version_id: "branch-version-2",
547
+ plugin_key: "mock-plugin",
548
+ snapshot_content: { id: "branch2-entity", name: "Branch 2 commit" },
549
+ })
550
+ .execute();
551
+
552
+ // Query the commit graph for version1
553
+ const graph1 = await lix.db
554
+ .selectFrom("internal_materialization_commit_graph" as any)
555
+ .selectAll()
556
+ .where("version_id", "=", "branch-version-1")
557
+ .orderBy("depth")
558
+ .execute();
559
+
560
+ // Query the commit graph for version2
561
+ const graph2 = await lix.db
562
+ .selectFrom("internal_materialization_commit_graph" as any)
563
+ .selectAll()
564
+ .where("version_id", "=", "branch-version-2")
565
+ .orderBy("depth")
566
+ .execute();
567
+
568
+ // Version 1 should have its own tip at depth 0 and common commit at depth 1
569
+ expect(graph1).toHaveLength(3); // initial, common, branch1
570
+ expect(graph1[0]).toMatchObject({
571
+ version_id: "branch-version-1",
572
+ depth: 0,
573
+ });
574
+ expect(graph1[1]).toMatchObject({
575
+ commit_id: commonCommitId,
576
+ version_id: "branch-version-1",
577
+ depth: 1,
578
+ });
579
+
580
+ // Version 2 should have its own tip at depth 0 and common commit at depth 1
581
+ expect(graph2).toHaveLength(3); // initial, common, branch2
582
+ expect(graph2[0]).toMatchObject({
583
+ version_id: "branch-version-2",
584
+ depth: 0,
585
+ });
586
+ expect(graph2[1]).toMatchObject({
587
+ commit_id: commonCommitId,
588
+ version_id: "branch-version-2",
589
+ depth: 1,
590
+ });
591
+
592
+ // Both versions should see the common commit at the same relative depth
593
+ const v1CommonDepth = graph1.find(
594
+ (g: any) => g.commit_id === commonCommitId
595
+ )?.depth;
596
+ const v2CommonDepth = graph2.find(
597
+ (g: any) => g.commit_id === commonCommitId
598
+ )?.depth;
599
+ expect(v1CommonDepth).toBe(1);
600
+ expect(v2CommonDepth).toBe(1);
601
+ },
602
+ {
603
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
604
+ }
605
+ );
606
+
607
+ simulationTest(
608
+ "handles merge commits without duplicates",
609
+ async ({ openSimulatedLix }) => {
610
+ // Diamond pattern:
611
+ // initial
612
+ // |
613
+ // commit1
614
+ // / \
615
+ // commit2a commit2b
616
+ // \ /
617
+ // commit3 (merge commit with two parents)
618
+
619
+ const lix = await openSimulatedLix({
620
+ keyValues: [
621
+ {
622
+ key: "lix_deterministic_mode",
623
+ value: { enabled: true, bootstrap: true },
624
+ },
625
+ ],
626
+ });
627
+
628
+ // Create version A
629
+ await createVersion({ lix, id: "merge-version-a" });
630
+
631
+ // Create version B that will diverge
632
+ await createVersion({ lix, id: "merge-version-b" });
633
+
634
+ // Add unique changes to version A
635
+ await lix.db
636
+ .insertInto("state_all")
637
+ .values({
638
+ entity_id: "entity-a",
639
+ schema_key: "mock_entity",
640
+ schema_version: "1.0",
641
+ file_id: "mock-file",
642
+ version_id: "merge-version-a",
643
+ plugin_key: "mock-plugin",
644
+ snapshot_content: { id: "entity-a", name: "Version A change" },
645
+ })
646
+ .execute();
647
+
648
+ // Add unique changes to version B
649
+ await lix.db
650
+ .insertInto("state_all")
651
+ .values({
652
+ entity_id: "entity-b",
653
+ schema_key: "mock_entity",
654
+ schema_version: "1.0",
655
+ file_id: "mock-file",
656
+ version_id: "merge-version-b",
657
+ plugin_key: "mock-plugin",
658
+ snapshot_content: { id: "entity-b", name: "Version B change" },
659
+ })
660
+ .execute();
661
+
662
+ // Get both version tips
663
+ const versionATip = await lix.db
664
+ .selectFrom("version")
665
+ .select("commit_id")
666
+ .where("id", "=", "merge-version-a")
667
+ .executeTakeFirstOrThrow();
668
+
669
+ const versionBTip = await lix.db
670
+ .selectFrom("version")
671
+ .select("commit_id")
672
+ .where("id", "=", "merge-version-b")
673
+ .executeTakeFirstOrThrow();
674
+
675
+ // Create a merge commit manually with two parent edges
676
+ const ts = timestamp({ lix });
677
+ const mergeCommitId = `merge-${ts}`;
678
+ const mergeChangeSetId = `cs-${mergeCommitId}`;
679
+
680
+ // Create the change set first
681
+ await lix.db
682
+ .insertInto("change_set_all")
683
+ .values({
684
+ id: mergeChangeSetId,
685
+ lixcol_version_id: "global",
686
+ })
687
+ .execute();
688
+
689
+ // Create the merge commit in commit_all (global version)
690
+ await lix.db
691
+ .insertInto("commit_all")
692
+ .values({
693
+ id: mergeCommitId,
694
+ change_set_id: mergeChangeSetId,
695
+ lixcol_version_id: "global",
696
+ })
697
+ .execute();
698
+
699
+ // Create edges to both parents
700
+ await lix.db
701
+ .insertInto("change")
702
+ .values([
703
+ {
704
+ id: `edge-1-${mergeCommitId}`,
705
+ entity_id: `edge-${mergeCommitId}-${versionATip.commit_id}`,
706
+ schema_key: "lix_commit_edge",
707
+ schema_version: "1.0",
708
+ file_id: "lix-file",
709
+ plugin_key: "lix",
710
+ snapshot_content: {
711
+ parent_id: versionATip.commit_id,
712
+ child_id: mergeCommitId,
713
+ },
714
+ created_at: ts,
715
+ },
716
+ {
717
+ id: `edge-2-${mergeCommitId}`,
718
+ entity_id: `edge-${mergeCommitId}-${versionBTip.commit_id}`,
719
+ schema_key: "lix_commit_edge",
720
+ schema_version: "1.0",
721
+ file_id: "lix-file",
722
+ plugin_key: "lix",
723
+ snapshot_content: {
724
+ parent_id: versionBTip.commit_id,
725
+ child_id: mergeCommitId,
726
+ },
727
+ created_at: ts,
728
+ },
729
+ ])
730
+ .execute();
731
+
732
+ // Update version A to point to the merge commit
733
+ await lix.db
734
+ .updateTable("version")
735
+ .set({ commit_id: mergeCommitId })
736
+ .where("id", "=", "merge-version-a")
737
+ .execute();
738
+
739
+ // Query the commit graph for the merged version
740
+ const graph = await lix.db
741
+ .selectFrom("internal_materialization_commit_graph" as any)
742
+ .selectAll()
743
+ .where("version_id", "=", "merge-version-a")
744
+ .orderBy("depth")
745
+ .execute();
746
+
747
+ // Count how many times each commit appears
748
+ const commitCounts = new Map<string, number>();
749
+ for (const entry of graph) {
750
+ const count = commitCounts.get(entry.commit_id) || 0;
751
+ commitCounts.set(entry.commit_id, count + 1);
752
+ }
753
+
754
+ // Verify no commit appears more than once (no duplicates)
755
+ for (const [, count] of commitCounts) {
756
+ expect(count).toBe(1);
757
+ }
758
+
759
+ // Verify the merge commit is at depth 0 (tip)
760
+ expect(graph[0]).toMatchObject({
761
+ commit_id: mergeCommitId,
762
+ version_id: "merge-version-a",
763
+ depth: 0,
764
+ });
765
+
766
+ // Verify both parent commits appear in the graph
767
+ const hasVersionATip = graph.some(
768
+ (g: any) => g.commit_id === versionATip.commit_id
769
+ );
770
+ const hasVersionBTip = graph.some(
771
+ (g: any) => g.commit_id === versionBTip.commit_id
772
+ );
773
+ expect(hasVersionATip).toBe(true);
774
+ expect(hasVersionBTip).toBe(true);
775
+
776
+ // Verify we have expected commits
777
+ // We should have at least 4 commits:
778
+ // - 1 merge commit (depth 0)
779
+ // - 2 parent commits from divergent versions (depth 1)
780
+ // - At least 1 shared initial commit (depth 2)
781
+ expect(graph.length).toBeGreaterThanOrEqual(4);
782
+
783
+ // The merge commit should have two commits at depth 1 (its parents)
784
+ const depth1Commits = graph.filter((g: any) => g.depth === 1);
785
+ expect(depth1Commits).toHaveLength(2);
786
+ },
787
+ {
788
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
789
+ }
790
+ );
791
+
792
+ simulationTest(
793
+ "detects and handles cycles gracefully",
794
+ async ({ openSimulatedLix }) => {
795
+ // Test that cycle detection prevents infinite loops in recursive CTEs
796
+ // This tests the path-based cycle detection in version ancestry
797
+ const lix = await openSimulatedLix({
798
+ keyValues: [
799
+ {
800
+ key: "lix_deterministic_mode",
801
+ value: { enabled: true, bootstrap: true },
802
+ },
803
+ ],
804
+ });
805
+
806
+ // Create three versions
807
+ await createVersion({ lix, id: "version-cycle-a" });
808
+ await createVersion({
809
+ lix,
810
+ id: "version-cycle-b",
811
+ inherits_from_version_id: "version-cycle-a",
812
+ });
813
+ await createVersion({
814
+ lix,
815
+ id: "version-cycle-c",
816
+ inherits_from_version_id: "version-cycle-b",
817
+ });
818
+
819
+ // Manually create a cycle by updating version A to inherit from C
820
+ // This simulates data corruption: A -> B -> C -> A
821
+ await lix.db
822
+ .updateTable("version")
823
+ .set({
824
+ inherits_from_version_id: "version-cycle-c",
825
+ })
826
+ .where("id", "=", "version-cycle-a")
827
+ .execute();
828
+
829
+ // Query version ancestry - should not hang due to cycle detection
830
+ const ancestry = await lix.db
831
+ .selectFrom("internal_materialization_version_ancestry" as any)
832
+ .selectAll()
833
+ .where("version_id", "=", "version-cycle-a")
834
+ .execute();
835
+
836
+ // Version A should see itself and its ancestors, but stop when cycle detected
837
+ const ancestorIds = ancestry.map((a: any) => a.ancestor_version_id);
838
+ const uniqueAncestors = new Set(ancestorIds);
839
+
840
+ // Should contain A (itself), B, and C - cycle detection should have stopped
841
+ expect(uniqueAncestors.has("version-cycle-a")).toBe(true);
842
+ expect(uniqueAncestors.has("version-cycle-b")).toBe(true);
843
+ expect(uniqueAncestors.has("version-cycle-c")).toBe(true);
844
+
845
+ // The important part is that cycle detection prevented infinite recursion
846
+ // We should have a finite number of results even with a cycle
847
+ expect(ancestry.length).toBeLessThan(20); // Would be infinite without cycle detection
848
+
849
+ // Check that we stopped at reasonable inheritance depths
850
+ const maxDepth = Math.max(
851
+ ...ancestry.map((a: any) => a.inheritance_depth)
852
+ );
853
+ expect(maxDepth).toBeLessThanOrEqual(3); // Should stop after traversing the cycle once
854
+ },
855
+ {
856
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
857
+ }
858
+ );
859
+
860
+ simulationTest(
861
+ "associates commits with correct version",
862
+ async ({ openSimulatedLix }) => {
863
+ // Create multiple versions and verify version_id association
864
+ const lix = await openSimulatedLix({
865
+ keyValues: [
866
+ {
867
+ key: "lix_deterministic_mode",
868
+ value: { enabled: true, bootstrap: true },
869
+ },
870
+ ],
871
+ });
872
+
873
+ // Create three versions
874
+ await createVersion({ lix, id: "version-x" });
875
+ await createVersion({ lix, id: "version-y" });
876
+ await createVersion({ lix, id: "version-z" });
877
+
878
+ // Add commits to each version
879
+ await lix.db
880
+ .insertInto("state_all")
881
+ .values({
882
+ entity_id: "entity-x",
883
+ schema_key: "mock_entity",
884
+ schema_version: "1.0",
885
+ file_id: "mock-file",
886
+ version_id: "version-x",
887
+ plugin_key: "mock-plugin",
888
+ snapshot_content: { id: "entity-x", name: "Version X Entity" },
889
+ })
890
+ .execute();
891
+
892
+ await lix.db
893
+ .insertInto("state_all")
894
+ .values({
895
+ entity_id: "entity-y",
896
+ schema_key: "mock_entity",
897
+ schema_version: "1.0",
898
+ file_id: "mock-file",
899
+ version_id: "version-y",
900
+ plugin_key: "mock-plugin",
901
+ snapshot_content: { id: "entity-y", name: "Version Y Entity" },
902
+ })
903
+ .execute();
904
+
905
+ // Query graphs for each version
906
+ const graphX = await lix.db
907
+ .selectFrom("internal_materialization_commit_graph" as any)
908
+ .selectAll()
909
+ .where("version_id", "=", "version-x")
910
+ .execute();
911
+
912
+ const graphY = await lix.db
913
+ .selectFrom("internal_materialization_commit_graph" as any)
914
+ .selectAll()
915
+ .where("version_id", "=", "version-y")
916
+ .execute();
917
+
918
+ const graphZ = await lix.db
919
+ .selectFrom("internal_materialization_commit_graph" as any)
920
+ .selectAll()
921
+ .where("version_id", "=", "version-z")
922
+ .execute();
923
+
924
+ // Each version should only see commits associated with it
925
+ expect(graphX.every((g: any) => g.version_id === "version-x")).toBe(true);
926
+ expect(graphY.every((g: any) => g.version_id === "version-y")).toBe(true);
927
+
928
+ // Version X should have 2 commits (initial + one change)
929
+ expect(graphX).toHaveLength(2);
930
+
931
+ // Version Y should have 2 commits (initial + one change)
932
+ expect(graphY).toHaveLength(2);
933
+
934
+ // Version Z has only the initial commit, so will appear with 1 commit in the graph
935
+ expect(graphZ).toHaveLength(1);
936
+
937
+ // Verify each version has its own unique tip commit
938
+ const xTip = graphX.find((g: any) => g.depth === 0);
939
+ const yTip = graphY.find((g: any) => g.depth === 0);
940
+
941
+ expect(xTip).toBeDefined();
942
+ expect(yTip).toBeDefined();
943
+ expect(xTip!.commit_id).not.toBe(yTip!.commit_id);
944
+
945
+ // The commit graph correctly associates commits with their versions
946
+ // Each graph entry has the correct version_id
947
+ const allGraphEntries = [...graphX, ...graphY, ...graphZ];
948
+ expect(
949
+ allGraphEntries.every(
950
+ (g: any) =>
951
+ g.version_id === "version-x" ||
952
+ g.version_id === "version-y" ||
953
+ g.version_id === "version-z"
954
+ )
955
+ ).toBe(true);
956
+ },
957
+ {
958
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
959
+ }
960
+ );
961
+ });
962
+
963
+ describe("internal_materialization_latest_visible_state", () => {
964
+ simulationTest(
965
+ "finds latest change for each entity in a single version",
966
+ async ({ openSimulatedLix }) => {
967
+ // Create version with multiple changes to same entity
968
+ // Verify only the latest (closest to tip) change is visible
969
+ const lix = await openSimulatedLix({
970
+ keyValues: [
971
+ {
972
+ key: "lix_deterministic_mode",
973
+ value: { enabled: true, bootstrap: true },
974
+ },
975
+ ],
976
+ });
977
+
978
+ // Create a version
979
+ await createVersion({ lix, id: "latest-test-version" });
980
+
981
+ // Create multiple changes to the same entity
982
+ // First change - create entity
983
+ await lix.db
984
+ .insertInto("state_all")
985
+ .values({
986
+ entity_id: "entity-1",
987
+ schema_key: "mock_entity",
988
+ schema_version: "1.0",
989
+ file_id: "mock-file",
990
+ version_id: "latest-test-version",
991
+ plugin_key: "mock-plugin",
992
+ snapshot_content: { id: "entity-1", name: "Initial Name", value: 1 },
993
+ })
994
+ .execute();
995
+
996
+ // Second change - update entity
997
+ await lix.db
998
+ .insertInto("state_all")
999
+ .values({
1000
+ entity_id: "entity-1",
1001
+ schema_key: "mock_entity",
1002
+ schema_version: "1.0",
1003
+ file_id: "mock-file",
1004
+ version_id: "latest-test-version",
1005
+ plugin_key: "mock-plugin",
1006
+ snapshot_content: { id: "entity-1", name: "Updated Name", value: 2 },
1007
+ })
1008
+ .execute();
1009
+
1010
+ // Third change - another update
1011
+ await lix.db
1012
+ .insertInto("state_all")
1013
+ .values({
1014
+ entity_id: "entity-1",
1015
+ schema_key: "mock_entity",
1016
+ schema_version: "1.0",
1017
+ file_id: "mock-file",
1018
+ version_id: "latest-test-version",
1019
+ plugin_key: "mock-plugin",
1020
+ snapshot_content: { id: "entity-1", name: "Final Name", value: 3 },
1021
+ })
1022
+ .execute();
1023
+
1024
+ // Query the latest visible state view
1025
+ const latestState = await lix.db
1026
+ .selectFrom("internal_materialization_latest_visible_state" as any)
1027
+ .selectAll()
1028
+ .where("version_id", "=", "latest-test-version")
1029
+ .where("entity_id", "=", "entity-1")
1030
+ .execute();
1031
+
1032
+ // Should only have one entry (the latest)
1033
+ expect(latestState).toHaveLength(1);
1034
+
1035
+ // Should be the most recent change (closest to tip, depth 0)
1036
+ const state = latestState[0]!;
1037
+ expect(state.entity_id).toBe("entity-1");
1038
+ expect(state.snapshot_content).toEqual({
1039
+ id: "entity-1",
1040
+ name: "Final Name",
1041
+ value: 3,
1042
+ });
1043
+ expect(state.depth).toBe(0); // Latest commit is at depth 0
1044
+
1045
+ // Verify it selected the change from the newest commit
1046
+ const commits = await lix.db
1047
+ .selectFrom("commit")
1048
+ .innerJoin("version", "version.commit_id", "commit.id")
1049
+ .select("commit.id")
1050
+ .where("version.id", "=", "latest-test-version")
1051
+ .orderBy("commit.lixcol_created_at", "desc")
1052
+ .execute();
1053
+
1054
+ expect(state.commit_id).toBe(commits[0]!.id);
1055
+ },
1056
+ {
1057
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1058
+ }
1059
+ );
1060
+
1061
+ simulationTest(
1062
+ "handles multiple entities with different change histories",
1063
+ async ({ openSimulatedLix }) => {
1064
+ // Create multiple entities with different numbers of changes
1065
+ // Verify each entity shows its latest state
1066
+ const lix = await openSimulatedLix({
1067
+ keyValues: [
1068
+ {
1069
+ key: "lix_deterministic_mode",
1070
+ value: { enabled: true, bootstrap: true },
1071
+ },
1072
+ ],
1073
+ });
1074
+
1075
+ // Create a version
1076
+ await createVersion({ lix, id: "multi-entity-version" });
1077
+
1078
+ // Entity 1: Three changes
1079
+ await lix.db
1080
+ .insertInto("state_all")
1081
+ .values({
1082
+ entity_id: "entity-1",
1083
+ schema_key: "mock_entity",
1084
+ schema_version: "1.0",
1085
+ file_id: "mock-file",
1086
+ version_id: "multi-entity-version",
1087
+ plugin_key: "mock-plugin",
1088
+ snapshot_content: { id: "entity-1", version: 1 },
1089
+ })
1090
+ .execute();
1091
+
1092
+ await lix.db
1093
+ .insertInto("state_all")
1094
+ .values({
1095
+ entity_id: "entity-1",
1096
+ schema_key: "mock_entity",
1097
+ schema_version: "1.0",
1098
+ file_id: "mock-file",
1099
+ version_id: "multi-entity-version",
1100
+ plugin_key: "mock-plugin",
1101
+ snapshot_content: { id: "entity-1", version: 2 },
1102
+ })
1103
+ .execute();
1104
+
1105
+ await lix.db
1106
+ .insertInto("state_all")
1107
+ .values({
1108
+ entity_id: "entity-1",
1109
+ schema_key: "mock_entity",
1110
+ schema_version: "1.0",
1111
+ file_id: "mock-file",
1112
+ version_id: "multi-entity-version",
1113
+ plugin_key: "mock-plugin",
1114
+ snapshot_content: { id: "entity-1", version: 3 },
1115
+ })
1116
+ .execute();
1117
+
1118
+ // Entity 2: Two changes
1119
+ await lix.db
1120
+ .insertInto("state_all")
1121
+ .values({
1122
+ entity_id: "entity-2",
1123
+ schema_key: "mock_entity",
1124
+ schema_version: "1.0",
1125
+ file_id: "mock-file",
1126
+ version_id: "multi-entity-version",
1127
+ plugin_key: "mock-plugin",
1128
+ snapshot_content: { id: "entity-2", status: "created" },
1129
+ })
1130
+ .execute();
1131
+
1132
+ await lix.db
1133
+ .insertInto("state_all")
1134
+ .values({
1135
+ entity_id: "entity-2",
1136
+ schema_key: "mock_entity",
1137
+ schema_version: "1.0",
1138
+ file_id: "mock-file",
1139
+ version_id: "multi-entity-version",
1140
+ plugin_key: "mock-plugin",
1141
+ snapshot_content: { id: "entity-2", status: "updated" },
1142
+ })
1143
+ .execute();
1144
+
1145
+ // Entity 3: Single change
1146
+ await lix.db
1147
+ .insertInto("state_all")
1148
+ .values({
1149
+ entity_id: "entity-3",
1150
+ schema_key: "mock_entity",
1151
+ schema_version: "1.0",
1152
+ file_id: "mock-file",
1153
+ version_id: "multi-entity-version",
1154
+ plugin_key: "mock-plugin",
1155
+ snapshot_content: { id: "entity-3", data: "single-change" },
1156
+ })
1157
+ .execute();
1158
+
1159
+ // Query the latest visible state view
1160
+ const latestStates = await lix.db
1161
+ .selectFrom("internal_materialization_latest_visible_state" as any)
1162
+ .selectAll()
1163
+ .where("version_id", "=", "multi-entity-version")
1164
+ .where("schema_key", "=", "mock_entity")
1165
+ .orderBy("entity_id")
1166
+ .execute();
1167
+
1168
+ // Should have exactly 3 entries (one per entity)
1169
+ expect(latestStates).toHaveLength(3);
1170
+
1171
+ // Verify each entity shows its latest state
1172
+ const entity1State = latestStates.find(
1173
+ (s: any) => s.entity_id === "entity-1"
1174
+ );
1175
+ const entity2State = latestStates.find(
1176
+ (s: any) => s.entity_id === "entity-2"
1177
+ );
1178
+ const entity3State = latestStates.find(
1179
+ (s: any) => s.entity_id === "entity-3"
1180
+ );
1181
+
1182
+ expect(entity1State).toBeDefined();
1183
+ expect(entity1State!.snapshot_content).toEqual({
1184
+ id: "entity-1",
1185
+ version: 3,
1186
+ });
1187
+
1188
+ expect(entity2State).toBeDefined();
1189
+ expect(entity2State!.snapshot_content).toEqual({
1190
+ id: "entity-2",
1191
+ status: "updated",
1192
+ });
1193
+
1194
+ expect(entity3State).toBeDefined();
1195
+ expect(entity3State!.snapshot_content).toEqual({
1196
+ id: "entity-3",
1197
+ data: "single-change",
1198
+ });
1199
+
1200
+ // The depths depend on which commit each entity's latest change was in
1201
+ // Entity-1's latest change (version 3) was in the 4th commit from tip
1202
+ expect(entity1State!.depth).toBe(3);
1203
+
1204
+ // Entity-2's latest change was in the 2nd commit from tip
1205
+ expect(entity2State!.depth).toBe(1);
1206
+
1207
+ // Entity-3's only change was in the tip commit
1208
+ expect(entity3State!.depth).toBe(0);
1209
+
1210
+ // Each entity correctly shows its latest state regardless of depth
1211
+ // This demonstrates that the view correctly selects the most recent
1212
+ // change for each entity, even when they're at different depths
1213
+ },
1214
+ {
1215
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1216
+ }
1217
+ );
1218
+
1219
+ simulationTest(
1220
+ "respects first-seen-wins principle for commits at same depth",
1221
+ async () => {
1222
+ // TODO: Create scenario where multiple changes exist at same depth
1223
+ // Verify consistent selection based on first-seen
1224
+ },
1225
+ {
1226
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1227
+ }
1228
+ );
1229
+
1230
+ simulationTest(
1231
+ "includes NULL snapshots (deletions) in results",
1232
+ async ({ openSimulatedLix }) => {
1233
+ // Create entity, then delete it (NULL snapshot)
1234
+ // Verify deletion tombstone appears in latest visible state
1235
+ const lix = await openSimulatedLix({
1236
+ keyValues: [
1237
+ {
1238
+ key: "lix_deterministic_mode",
1239
+ value: { enabled: true, bootstrap: true },
1240
+ },
1241
+ ],
1242
+ });
1243
+
1244
+ // Create a version
1245
+ await createVersion({ lix, id: "deletion-test-version" });
1246
+
1247
+ // Create an entity
1248
+ await lix.db
1249
+ .insertInto("state_all")
1250
+ .values({
1251
+ entity_id: "entity-to-delete",
1252
+ schema_key: "mock_entity",
1253
+ schema_version: "1.0",
1254
+ file_id: "mock-file",
1255
+ version_id: "deletion-test-version",
1256
+ plugin_key: "mock-plugin",
1257
+ snapshot_content: {
1258
+ id: "entity-to-delete",
1259
+ name: "Original Entity",
1260
+ active: true,
1261
+ },
1262
+ })
1263
+ .execute();
1264
+
1265
+ // Update the entity
1266
+ await lix.db
1267
+ .insertInto("state_all")
1268
+ .values({
1269
+ entity_id: "entity-to-delete",
1270
+ schema_key: "mock_entity",
1271
+ schema_version: "1.0",
1272
+ file_id: "mock-file",
1273
+ version_id: "deletion-test-version",
1274
+ plugin_key: "mock-plugin",
1275
+ snapshot_content: {
1276
+ id: "entity-to-delete",
1277
+ name: "Updated Entity",
1278
+ active: true,
1279
+ },
1280
+ })
1281
+ .execute();
1282
+
1283
+ // Delete the entity by inserting NULL snapshot
1284
+ await lix.db
1285
+ .insertInto("state_all")
1286
+ .values({
1287
+ entity_id: "entity-to-delete",
1288
+ schema_key: "mock_entity",
1289
+ schema_version: "1.0",
1290
+ file_id: "mock-file",
1291
+ version_id: "deletion-test-version",
1292
+ plugin_key: "mock-plugin",
1293
+ // @ts-expect-error - snapshot_content is intentionally NULL for deletion
1294
+ snapshot_content: null, // Deletion tombstone
1295
+ })
1296
+ .execute();
1297
+
1298
+ // Query the latest visible state view
1299
+ const latestState = await lix.db
1300
+ .selectFrom("internal_materialization_latest_visible_state" as any)
1301
+ .selectAll()
1302
+ .where("version_id", "=", "deletion-test-version")
1303
+ .where("entity_id", "=", "entity-to-delete")
1304
+ .execute();
1305
+
1306
+ // Should have exactly one entry - the deletion tombstone
1307
+ expect(latestState).toHaveLength(1);
1308
+
1309
+ const deletionState = latestState[0]!;
1310
+
1311
+ // Verify it's the deletion (NULL snapshot)
1312
+ expect(deletionState.entity_id).toBe("entity-to-delete");
1313
+ expect(deletionState.snapshot_content).toBeNull();
1314
+ expect(deletionState.depth).toBe(0); // Latest commit
1315
+
1316
+ // Verify it's tracking the deletion, not earlier states
1317
+ expect(deletionState.schema_key).toBe("mock_entity");
1318
+ expect(deletionState.file_id).toBe("mock-file");
1319
+
1320
+ // Create another entity that is NOT deleted to verify filtering
1321
+ await lix.db
1322
+ .insertInto("state_all")
1323
+ .values({
1324
+ entity_id: "entity-still-exists",
1325
+ schema_key: "mock_entity",
1326
+ schema_version: "1.0",
1327
+ file_id: "mock-file",
1328
+ version_id: "deletion-test-version",
1329
+ plugin_key: "mock-plugin",
1330
+ snapshot_content: {
1331
+ id: "entity-still-exists",
1332
+ name: "Active Entity",
1333
+ },
1334
+ })
1335
+ .execute();
1336
+
1337
+ // Query all latest states for this version
1338
+ const allStates = await lix.db
1339
+ .selectFrom("internal_materialization_latest_visible_state" as any)
1340
+ .selectAll()
1341
+ .where("version_id", "=", "deletion-test-version")
1342
+ .where("schema_key", "=", "mock_entity")
1343
+ .orderBy("entity_id")
1344
+ .execute();
1345
+
1346
+ // Should have both entities
1347
+ expect(allStates).toHaveLength(2);
1348
+
1349
+ // One is deleted (NULL), one exists
1350
+ const deletedEntity = allStates.find(
1351
+ (s: any) => s.entity_id === "entity-to-delete"
1352
+ );
1353
+ const activeEntity = allStates.find(
1354
+ (s: any) => s.entity_id === "entity-still-exists"
1355
+ );
1356
+
1357
+ expect(deletedEntity!.snapshot_content).toBeNull();
1358
+ expect(activeEntity!.snapshot_content).not.toBeNull();
1359
+ expect(activeEntity!.snapshot_content).toEqual({
1360
+ id: "entity-still-exists",
1361
+ name: "Active Entity",
1362
+ });
1363
+ },
1364
+ {
1365
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1366
+ }
1367
+ );
1368
+ });
1369
+
1370
+ describe("internal_materialization_version_ancestry", () => {
1371
+ simulationTest(
1372
+ "version is its own ancestor at depth 0",
1373
+ async ({ openSimulatedLix }) => {
1374
+ // Create a version and verify it appears as its own ancestor
1375
+ // at inheritance depth 0
1376
+ const lix = await openSimulatedLix({
1377
+ keyValues: [
1378
+ {
1379
+ key: "lix_deterministic_mode",
1380
+ value: { enabled: true, bootstrap: true },
1381
+ },
1382
+ ],
1383
+ });
1384
+
1385
+ // Create a standalone version
1386
+ await createVersion({ lix, id: "standalone-version" });
1387
+
1388
+ // Query the version ancestry view
1389
+ const ancestry = await lix.db
1390
+ .selectFrom("internal_materialization_version_ancestry" as any)
1391
+ .selectAll()
1392
+ .where("version_id", "=", "standalone-version")
1393
+ .execute();
1394
+
1395
+ // By default, versions inherit from 'global'
1396
+ // Should have two entries: itself (depth 0) and global (depth 1)
1397
+ expect(ancestry).toHaveLength(2);
1398
+
1399
+ // Check self-ancestry at depth 0
1400
+ const selfAncestor = ancestry.find(
1401
+ (a: any) => a.ancestor_version_id === "standalone-version"
1402
+ );
1403
+ expect(selfAncestor).toBeDefined();
1404
+ expect(selfAncestor!.version_id).toBe("standalone-version");
1405
+ expect(selfAncestor!.ancestor_version_id).toBe("standalone-version");
1406
+ expect(selfAncestor!.inheritance_depth).toBe(0);
1407
+
1408
+ // Check global ancestry at depth 1
1409
+ const globalAncestor = ancestry.find(
1410
+ (a: any) => a.ancestor_version_id === "global"
1411
+ );
1412
+ expect(globalAncestor).toBeDefined();
1413
+ expect(globalAncestor!.version_id).toBe("standalone-version");
1414
+ expect(globalAncestor!.ancestor_version_id).toBe("global");
1415
+ expect(globalAncestor!.inheritance_depth).toBe(1);
1416
+ },
1417
+ {
1418
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1419
+ }
1420
+ );
1421
+
1422
+ simulationTest(
1423
+ "handles single-level inheritance",
1424
+ async ({ openSimulatedLix }) => {
1425
+ const lix = await openSimulatedLix({
1426
+ keyValues: [
1427
+ {
1428
+ key: "lix_deterministic_mode",
1429
+ value: { enabled: true, bootstrap: true },
1430
+ },
1431
+ ],
1432
+ });
1433
+
1434
+ // Create parent version A
1435
+ await createVersion({ lix, id: "version-a" });
1436
+
1437
+ // Create child version B that inherits from A
1438
+ await createVersion({
1439
+ lix,
1440
+ id: "version-b",
1441
+ inherits_from_version_id: "version-a",
1442
+ });
1443
+
1444
+ // Query ancestry for version B
1445
+ const ancestry = await lix.db
1446
+ .selectFrom("internal_materialization_version_ancestry" as any)
1447
+ .selectAll()
1448
+ .where("version_id", "=", "version-b")
1449
+ .orderBy("inheritance_depth", "asc")
1450
+ .execute();
1451
+
1452
+ // Version B should see:
1453
+ // - Itself at depth 0
1454
+ // - Version A at depth 1
1455
+ // - Global at depth 2 (inherited through A)
1456
+ expect(ancestry).toHaveLength(3);
1457
+
1458
+ expect(ancestry[0]).toEqual({
1459
+ version_id: "version-b",
1460
+ ancestor_version_id: "version-b",
1461
+ inheritance_depth: 0,
1462
+ });
1463
+
1464
+ expect(ancestry[1]).toEqual({
1465
+ version_id: "version-b",
1466
+ ancestor_version_id: "version-a",
1467
+ inheritance_depth: 1,
1468
+ });
1469
+
1470
+ expect(ancestry[2]).toEqual({
1471
+ version_id: "version-b",
1472
+ ancestor_version_id: "global",
1473
+ inheritance_depth: 2,
1474
+ });
1475
+ },
1476
+ {
1477
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1478
+ }
1479
+ );
1480
+
1481
+ simulationTest(
1482
+ "handles multi-level inheritance chain",
1483
+ async ({ openSimulatedLix }) => {
1484
+ const lix = await openSimulatedLix({
1485
+ keyValues: [
1486
+ {
1487
+ key: "lix_deterministic_mode",
1488
+ value: { enabled: true, bootstrap: true },
1489
+ },
1490
+ ],
1491
+ });
1492
+
1493
+ // Create inheritance chain: global → A → B → C → D
1494
+ await createVersion({ lix, id: "version-a" });
1495
+
1496
+ await createVersion({
1497
+ lix,
1498
+ id: "version-b",
1499
+ inherits_from_version_id: "version-a",
1500
+ });
1501
+
1502
+ await createVersion({
1503
+ lix,
1504
+ id: "version-c",
1505
+ inherits_from_version_id: "version-b",
1506
+ });
1507
+
1508
+ await createVersion({
1509
+ lix,
1510
+ id: "version-d",
1511
+ inherits_from_version_id: "version-c",
1512
+ });
1513
+
1514
+ // Query ancestry for version D
1515
+ const ancestry = await lix.db
1516
+ .selectFrom("internal_materialization_version_ancestry" as any)
1517
+ .selectAll()
1518
+ .where("version_id", "=", "version-d")
1519
+ .orderBy("inheritance_depth", "asc")
1520
+ .execute();
1521
+
1522
+ // Version D should see all ancestors at correct depths
1523
+ expect(ancestry).toHaveLength(5);
1524
+
1525
+ expect(ancestry[0]).toEqual({
1526
+ version_id: "version-d",
1527
+ ancestor_version_id: "version-d",
1528
+ inheritance_depth: 0,
1529
+ });
1530
+
1531
+ expect(ancestry[1]).toEqual({
1532
+ version_id: "version-d",
1533
+ ancestor_version_id: "version-c",
1534
+ inheritance_depth: 1,
1535
+ });
1536
+
1537
+ expect(ancestry[2]).toEqual({
1538
+ version_id: "version-d",
1539
+ ancestor_version_id: "version-b",
1540
+ inheritance_depth: 2,
1541
+ });
1542
+
1543
+ expect(ancestry[3]).toEqual({
1544
+ version_id: "version-d",
1545
+ ancestor_version_id: "version-a",
1546
+ inheritance_depth: 3,
1547
+ });
1548
+
1549
+ expect(ancestry[4]).toEqual({
1550
+ version_id: "version-d",
1551
+ ancestor_version_id: "global",
1552
+ inheritance_depth: 4,
1553
+ });
1554
+ },
1555
+ {
1556
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1557
+ }
1558
+ );
1559
+
1560
+ simulationTest(
1561
+ "handles diamond inheritance pattern",
1562
+ async ({ openSimulatedLix }) => {
1563
+ const lix = await openSimulatedLix({
1564
+ keyValues: [
1565
+ {
1566
+ key: "lix_deterministic_mode",
1567
+ value: { enabled: true, bootstrap: true },
1568
+ },
1569
+ ],
1570
+ });
1571
+
1572
+ // Create diamond pattern:
1573
+ // global
1574
+ // |
1575
+ // A
1576
+ // / \
1577
+ // B C
1578
+ // \ /
1579
+ // D
1580
+
1581
+ // Note: In this system, a version can only inherit from ONE parent
1582
+ // So D inherits from B, which inherits from A
1583
+ // C also inherits from A, but D doesn't directly inherit from C
1584
+
1585
+ await createVersion({ lix, id: "version-a" });
1586
+
1587
+ await createVersion({
1588
+ lix,
1589
+ id: "version-b",
1590
+ inherits_from_version_id: "version-a",
1591
+ });
1592
+
1593
+ await createVersion({
1594
+ lix,
1595
+ id: "version-c",
1596
+ inherits_from_version_id: "version-a",
1597
+ });
1598
+
1599
+ // D inherits from B (not from both B and C)
1600
+ await createVersion({
1601
+ lix,
1602
+ id: "version-d",
1603
+ inherits_from_version_id: "version-b",
1604
+ });
1605
+
1606
+ // Query ancestry for version D
1607
+ const ancestryD = await lix.db
1608
+ .selectFrom("internal_materialization_version_ancestry" as any)
1609
+ .selectAll()
1610
+ .where("version_id", "=", "version-d")
1611
+ .orderBy("inheritance_depth", "asc")
1612
+ .execute();
1613
+
1614
+ // D should see: itself, B, A, global
1615
+ expect(ancestryD).toHaveLength(4);
1616
+
1617
+ expect(ancestryD[0]).toEqual({
1618
+ version_id: "version-d",
1619
+ ancestor_version_id: "version-d",
1620
+ inheritance_depth: 0,
1621
+ });
1622
+
1623
+ expect(ancestryD[1]).toEqual({
1624
+ version_id: "version-d",
1625
+ ancestor_version_id: "version-b",
1626
+ inheritance_depth: 1,
1627
+ });
1628
+
1629
+ expect(ancestryD[2]).toEqual({
1630
+ version_id: "version-d",
1631
+ ancestor_version_id: "version-a",
1632
+ inheritance_depth: 2,
1633
+ });
1634
+
1635
+ expect(ancestryD[3]).toEqual({
1636
+ version_id: "version-d",
1637
+ ancestor_version_id: "global",
1638
+ inheritance_depth: 3,
1639
+ });
1640
+
1641
+ // Verify C also sees A as ancestor
1642
+ const ancestryC = await lix.db
1643
+ .selectFrom("internal_materialization_version_ancestry" as any)
1644
+ .selectAll()
1645
+ .where("version_id", "=", "version-c")
1646
+ .orderBy("inheritance_depth", "asc")
1647
+ .execute();
1648
+
1649
+ expect(ancestryC).toHaveLength(3);
1650
+ expect(ancestryC[1]?.ancestor_version_id).toBe("version-a");
1651
+ expect(ancestryC[1]?.inheritance_depth).toBe(1);
1652
+ },
1653
+ {
1654
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1655
+ }
1656
+ );
1657
+
1658
+ simulationTest(
1659
+ "handles version with no inheritance",
1660
+ async ({ openSimulatedLix }) => {
1661
+ const lix = await openSimulatedLix({
1662
+ keyValues: [
1663
+ {
1664
+ key: "lix_deterministic_mode",
1665
+ value: { enabled: true, bootstrap: true },
1666
+ },
1667
+ ],
1668
+ });
1669
+
1670
+ // Create a version that explicitly does NOT inherit from global
1671
+ await createVersion({
1672
+ lix,
1673
+ id: "standalone-version",
1674
+ inherits_from_version_id: null,
1675
+ });
1676
+
1677
+ // Query ancestry
1678
+ const ancestry = await lix.db
1679
+ .selectFrom("internal_materialization_version_ancestry" as any)
1680
+ .selectAll()
1681
+ .where("version_id", "=", "standalone-version")
1682
+ .orderBy("inheritance_depth", "asc")
1683
+ .execute();
1684
+
1685
+ // Should only see itself as ancestor
1686
+ expect(ancestry).toHaveLength(1);
1687
+
1688
+ expect(ancestry[0]).toEqual({
1689
+ version_id: "standalone-version",
1690
+ ancestor_version_id: "standalone-version",
1691
+ inheritance_depth: 0,
1692
+ });
1693
+ },
1694
+ {
1695
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1696
+ }
1697
+ );
1698
+
1699
+ simulationTest(
1700
+ "cycle detection prevents infinite recursion",
1701
+ async ({ openSimulatedLix }) => {
1702
+ const lix = await openSimulatedLix({
1703
+ keyValues: [
1704
+ {
1705
+ key: "lix_deterministic_mode",
1706
+ value: { enabled: true, bootstrap: true },
1707
+ },
1708
+ ],
1709
+ });
1710
+
1711
+ // Create version A that will later point to B
1712
+ await createVersion({
1713
+ lix,
1714
+ id: "version-a",
1715
+ inherits_from_version_id: null, // Start with no inheritance
1716
+ });
1717
+
1718
+ // Create version B that inherits from A
1719
+ await createVersion({
1720
+ lix,
1721
+ id: "version-b",
1722
+ inherits_from_version_id: "version-a",
1723
+ });
1724
+
1725
+ // Now update A to inherit from B, creating a cycle
1726
+ // This would create A -> B -> A -> B -> ...
1727
+ await lix.db
1728
+ .updateTable("version")
1729
+ .set({ inherits_from_version_id: "version-b" })
1730
+ .where("id", "=", "version-a")
1731
+ .execute();
1732
+
1733
+ // Query ancestry for version A with DISTINCT to remove duplicates
1734
+ const ancestryA = await lix.db
1735
+ .selectFrom("internal_materialization_version_ancestry" as any)
1736
+ .selectAll()
1737
+ .where("version_id", "=", "version-a")
1738
+ .distinct()
1739
+ .orderBy("inheritance_depth", "asc")
1740
+ .execute();
1741
+
1742
+ // Should have exactly 2 entries due to cycle detection
1743
+ // A sees: itself (depth 0), B (depth 1)
1744
+ // The cycle detection prevents seeing A again at depth 2
1745
+ expect(ancestryA).toHaveLength(2);
1746
+
1747
+ expect(ancestryA[0]).toEqual({
1748
+ version_id: "version-a",
1749
+ ancestor_version_id: "version-a",
1750
+ inheritance_depth: 0,
1751
+ });
1752
+
1753
+ expect(ancestryA[1]).toEqual({
1754
+ version_id: "version-a",
1755
+ ancestor_version_id: "version-b",
1756
+ inheritance_depth: 1,
1757
+ });
1758
+
1759
+ // Query ancestry for version B
1760
+ const ancestryB = await lix.db
1761
+ .selectFrom("internal_materialization_version_ancestry" as any)
1762
+ .selectAll()
1763
+ .where("version_id", "=", "version-b")
1764
+ .distinct()
1765
+ .orderBy("inheritance_depth", "asc")
1766
+ .execute();
1767
+
1768
+ // B should also see exactly 2 entries
1769
+ // B sees: itself (depth 0), A (depth 1)
1770
+ expect(ancestryB).toHaveLength(2);
1771
+
1772
+ expect(ancestryB[0]).toEqual({
1773
+ version_id: "version-b",
1774
+ ancestor_version_id: "version-b",
1775
+ inheritance_depth: 0,
1776
+ });
1777
+
1778
+ expect(ancestryB[1]).toEqual({
1779
+ version_id: "version-b",
1780
+ ancestor_version_id: "version-a",
1781
+ inheritance_depth: 1,
1782
+ });
1783
+ },
1784
+ {
1785
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1786
+ }
1787
+ );
1788
+ });
1789
+
1790
+ describe("internal_state_materializer", () => {
1791
+ simulationTest(
1792
+ "shows entity from own version",
1793
+ async ({ openSimulatedLix }) => {
1794
+ const lix = await openSimulatedLix({
1795
+ keyValues: [
1796
+ {
1797
+ key: "lix_deterministic_mode",
1798
+ value: { enabled: true, bootstrap: true },
1799
+ },
1800
+ ],
1801
+ });
1802
+
1803
+ // Create a version
1804
+ await createVersion({ lix, id: "version-1" });
1805
+
1806
+ // Insert an entity directly to version-1
1807
+ await lix.db
1808
+ .insertInto("key_value_all")
1809
+ .values({
1810
+ key: "test-key",
1811
+ value: "test-value",
1812
+ lixcol_version_id: "version-1",
1813
+ })
1814
+ .execute();
1815
+
1816
+ // Query the materializer for version-1
1817
+ const materializedState = await lix.db
1818
+ .selectFrom("internal_state_materializer" as any)
1819
+ .selectAll()
1820
+ .where("version_id", "=", "version-1")
1821
+ .where("entity_id", "=", "test-key")
1822
+ .executeTakeFirst();
1823
+
1824
+ const cachedState = await lix.db
1825
+ .selectFrom("state_all")
1826
+ .selectAll()
1827
+ .where("version_id", "=", "version-1")
1828
+ .where("entity_id", "=", "test-key")
1829
+ .executeTakeFirst();
1830
+
1831
+ expect(materializedState).toBeDefined();
1832
+ expect(materializedState!.snapshot_content).toEqual({
1833
+ key: "test-key",
1834
+ value: "test-value",
1835
+ });
1836
+ expect(materializedState!.inherited_from_version_id).toBeNull(); // Not inherited
1837
+
1838
+ expect(materializedState).toEqual(cachedState);
1839
+ },
1840
+ {
1841
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1842
+ }
1843
+ );
1844
+
1845
+ simulationTest(
1846
+ "inherits entity from parent version",
1847
+ async ({ openSimulatedLix }) => {
1848
+ const lix = await openSimulatedLix({
1849
+ keyValues: [
1850
+ {
1851
+ key: "lix_deterministic_mode",
1852
+ value: { enabled: true, bootstrap: true },
1853
+ },
1854
+ ],
1855
+ });
1856
+
1857
+ // Create parent and child versions
1858
+ await createVersion({ lix, id: "parent-version" });
1859
+ await createVersion({
1860
+ lix,
1861
+ id: "child-version",
1862
+ inherits_from_version_id: "parent-version",
1863
+ });
1864
+
1865
+ // Add entity to parent version
1866
+ await lix.db
1867
+ .insertInto("key_value_all")
1868
+ .values({
1869
+ key: "inherited-key",
1870
+ value: "parent-value",
1871
+ lixcol_version_id: "parent-version",
1872
+ })
1873
+ .execute();
1874
+
1875
+ // Query the materializer for child version
1876
+ const materializedState = await lix.db
1877
+ .selectFrom("internal_state_materializer" as any)
1878
+ .selectAll()
1879
+ .where("version_id", "=", "child-version")
1880
+ .where("entity_id", "=", "inherited-key")
1881
+ .executeTakeFirst();
1882
+
1883
+ const cachedState = await lix.db
1884
+ .selectFrom("state_all")
1885
+ .selectAll()
1886
+ .where("version_id", "=", "child-version")
1887
+ .where("entity_id", "=", "inherited-key")
1888
+ .executeTakeFirst();
1889
+
1890
+ // Child should see the entity from parent
1891
+ expect(materializedState).toBeDefined();
1892
+ expect(materializedState!.snapshot_content).toEqual({
1893
+ key: "inherited-key",
1894
+ value: "parent-value",
1895
+ });
1896
+ expect(materializedState!.inherited_from_version_id).toBe(
1897
+ "parent-version"
1898
+ );
1899
+
1900
+ expect(materializedState).toEqual(cachedState);
1901
+ },
1902
+ {
1903
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1904
+ }
1905
+ );
1906
+
1907
+ simulationTest(
1908
+ "child version overrides parent entity",
1909
+ async ({ openSimulatedLix }) => {
1910
+ const lix = await openSimulatedLix({
1911
+ keyValues: [
1912
+ {
1913
+ key: "lix_deterministic_mode",
1914
+ value: { enabled: true, bootstrap: true },
1915
+ },
1916
+ ],
1917
+ });
1918
+
1919
+ // Create parent and child versions
1920
+ await createVersion({ lix, id: "parent-version" });
1921
+ await createVersion({
1922
+ lix,
1923
+ id: "child-version",
1924
+ inherits_from_version_id: "parent-version",
1925
+ });
1926
+
1927
+ // Add entity to parent version
1928
+ await lix.db
1929
+ .insertInto("key_value_all")
1930
+ .values({
1931
+ key: "shared-key",
1932
+ value: "parent-value",
1933
+ lixcol_version_id: "parent-version",
1934
+ })
1935
+ .execute();
1936
+
1937
+ // Update the inherited entity in child version
1938
+ await lix.db
1939
+ .updateTable("key_value_all")
1940
+ .set({
1941
+ value: "child-value",
1942
+ })
1943
+ .where("key", "=", "shared-key")
1944
+ .where("lixcol_version_id", "=", "child-version")
1945
+ .execute();
1946
+
1947
+ // Query the materializer for child version
1948
+ const materializedState = await lix.db
1949
+ .selectFrom("internal_state_materializer" as any)
1950
+ .selectAll()
1951
+ .where("version_id", "=", "child-version")
1952
+ .where("entity_id", "=", "shared-key")
1953
+ .executeTakeFirst();
1954
+
1955
+ const cachedState = await lix.db
1956
+ .selectFrom("state_all")
1957
+ .selectAll()
1958
+ .where("version_id", "=", "child-version")
1959
+ .where("entity_id", "=", "shared-key")
1960
+ .executeTakeFirst();
1961
+
1962
+ // Child should see its own value, not parent's
1963
+ expect(materializedState).toBeDefined();
1964
+ expect(materializedState!.snapshot_content).toEqual({
1965
+ key: "shared-key",
1966
+ value: "child-value",
1967
+ });
1968
+ expect(materializedState!.inherited_from_version_id).toBeNull(); // Not inherited
1969
+
1970
+ expect(materializedState).toEqual(cachedState);
1971
+ },
1972
+ {
1973
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
1974
+ }
1975
+ );
1976
+
1977
+ simulationTest(
1978
+ "handles multi-level inheritance",
1979
+ async ({ openSimulatedLix }) => {
1980
+ const lix = await openSimulatedLix({
1981
+ keyValues: [
1982
+ {
1983
+ key: "lix_deterministic_mode",
1984
+ value: { enabled: true, bootstrap: true },
1985
+ },
1986
+ ],
1987
+ });
1988
+
1989
+ // Create inheritance chain: A -> B -> C
1990
+ await createVersion({ lix, id: "version-a" });
1991
+ await createVersion({
1992
+ lix,
1993
+ id: "version-b",
1994
+ inherits_from_version_id: "version-a",
1995
+ });
1996
+ await createVersion({
1997
+ lix,
1998
+ id: "version-c",
1999
+ inherits_from_version_id: "version-b",
2000
+ });
2001
+
2002
+ // Add entity to version A
2003
+ await lix.db
2004
+ .insertInto("key_value_all")
2005
+ .values({
2006
+ key: "deep-key",
2007
+ value: "value-from-a",
2008
+ lixcol_version_id: "version-a",
2009
+ })
2010
+ .execute();
2011
+
2012
+ // Add different entity to version B
2013
+ await lix.db
2014
+ .insertInto("key_value_all")
2015
+ .values({
2016
+ key: "b-only-key",
2017
+ value: "value-from-b",
2018
+ lixcol_version_id: "version-b",
2019
+ })
2020
+ .execute();
2021
+
2022
+ // Query materializer for version C
2023
+ const materializedStates = await lix.db
2024
+ .selectFrom("internal_state_materializer" as any)
2025
+ .selectAll()
2026
+ .where("version_id", "=", "version-c")
2027
+ .where("schema_key", "=", "lix_key_value")
2028
+ .where("entity_id", "in", ["deep-key", "b-only-key"])
2029
+ .orderBy("entity_id")
2030
+ .execute();
2031
+
2032
+ // C should see both entities
2033
+ expect(materializedStates).toHaveLength(2);
2034
+
2035
+ // Check inherited from A (through B)
2036
+ const deepKey = materializedStates.find(
2037
+ (s: any) => s.entity_id === "deep-key"
2038
+ );
2039
+ expect(deepKey).toBeDefined();
2040
+ expect(deepKey!.snapshot_content).toEqual({
2041
+ key: "deep-key",
2042
+ value: "value-from-a",
2043
+ });
2044
+ expect(deepKey!.inherited_from_version_id).toBe("version-a");
2045
+
2046
+ // Check inherited from B
2047
+ const bKey = materializedStates.find(
2048
+ (s: any) => s.entity_id === "b-only-key"
2049
+ );
2050
+ expect(bKey).toBeDefined();
2051
+ expect(bKey!.snapshot_content).toEqual({
2052
+ key: "b-only-key",
2053
+ value: "value-from-b",
2054
+ });
2055
+ expect(bKey!.inherited_from_version_id).toBe("version-b");
2056
+ },
2057
+ {
2058
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
2059
+ }
2060
+ );
2061
+
2062
+ simulationTest(
2063
+ "includes deleted entities as tombstones (NULL snapshots)",
2064
+ async ({ openSimulatedLix }) => {
2065
+ const lix = await openSimulatedLix({
2066
+ keyValues: [
2067
+ {
2068
+ key: "lix_deterministic_mode",
2069
+ value: { enabled: true, bootstrap: true },
2070
+ },
2071
+ ],
2072
+ });
2073
+
2074
+ // Create a version
2075
+ await createVersion({ lix, id: "version-1" });
2076
+
2077
+ // Insert an entity
2078
+ await lix.db
2079
+ .insertInto("key_value_all")
2080
+ .values({
2081
+ key: "entity-to-delete",
2082
+ value: "initial-value",
2083
+ lixcol_version_id: "version-1",
2084
+ })
2085
+ .execute();
2086
+
2087
+ // Delete the entity (update to NULL snapshot)
2088
+ await lix.db
2089
+ .deleteFrom("key_value_all")
2090
+ .where("key", "=", "entity-to-delete")
2091
+ .where("lixcol_version_id", "=", "version-1")
2092
+ .execute();
2093
+
2094
+ // Query the materializer - should return deleted entities as tombstones
2095
+ const materializedState = await lix.db
2096
+ .selectFrom("internal_state_materializer" as any)
2097
+ .selectAll()
2098
+ .where("version_id", "=", "version-1")
2099
+ .where("entity_id", "=", "entity-to-delete")
2100
+ .executeTakeFirst();
2101
+
2102
+ // Materializer should include the deleted entity as a tombstone
2103
+ expect(materializedState).toBeDefined();
2104
+ expect(materializedState!.snapshot_content).toBeNull();
2105
+ expect(materializedState!.entity_id).toBe("entity-to-delete");
2106
+ expect(materializedState!.version_id).toBe("version-1");
2107
+
2108
+ // But the latest visible state should still have it with NULL
2109
+ const latestVisible = await lix.db
2110
+ .selectFrom("internal_materialization_latest_visible_state" as any)
2111
+ .selectAll()
2112
+ .where("version_id", "=", "version-1")
2113
+ .where("entity_id", "=", "entity-to-delete")
2114
+ .executeTakeFirst();
2115
+
2116
+ expect(latestVisible).toBeDefined();
2117
+ expect(latestVisible!.snapshot_content).toBeNull();
2118
+ },
2119
+ {
2120
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
2121
+ }
2122
+ );
2123
+
2124
+ simulationTest(
2125
+ "deletion in child overrides parent entity",
2126
+ async ({ openSimulatedLix }) => {
2127
+ const lix = await openSimulatedLix({
2128
+ keyValues: [
2129
+ {
2130
+ key: "lix_deterministic_mode",
2131
+ value: { enabled: true, bootstrap: true },
2132
+ },
2133
+ ],
2134
+ });
2135
+
2136
+ // Create parent and child versions
2137
+ await createVersion({ lix, id: "parent-version" });
2138
+ await createVersion({
2139
+ lix,
2140
+ id: "child-version",
2141
+ inherits_from_version_id: "parent-version",
2142
+ });
2143
+
2144
+ // Add entity to parent version
2145
+ await lix.db
2146
+ .insertInto("key_value_all")
2147
+ .values({
2148
+ key: "entity-to-override",
2149
+ value: "parent-value",
2150
+ lixcol_version_id: "parent-version",
2151
+ })
2152
+ .execute();
2153
+
2154
+ // Delete the inherited entity in child version
2155
+ await lix.db
2156
+ .deleteFrom("key_value_all")
2157
+ .where("key", "=", "entity-to-override")
2158
+ .where("lixcol_version_id", "=", "child-version")
2159
+ .execute();
2160
+
2161
+ // Query materializer for parent - should see the entity
2162
+ const parentState = await lix.db
2163
+ .selectFrom("internal_state_materializer" as any)
2164
+ .selectAll()
2165
+ .where("version_id", "=", "parent-version")
2166
+ .where("entity_id", "=", "entity-to-override")
2167
+ .executeTakeFirst();
2168
+
2169
+ const parentCachedState = await lix.db
2170
+ .selectFrom("state_all")
2171
+ .selectAll()
2172
+ .where("version_id", "=", "parent-version")
2173
+ .where("entity_id", "=", "entity-to-override")
2174
+ .executeTakeFirst();
2175
+
2176
+ expect(parentCachedState).toEqual(parentState);
2177
+
2178
+ expect(parentState).toBeDefined();
2179
+ expect(parentState!.snapshot_content).toEqual({
2180
+ key: "entity-to-override",
2181
+ value: "parent-value",
2182
+ });
2183
+
2184
+ // Query materializer for child - should see the entity as a tombstone (deleted)
2185
+ const childState = await lix.db
2186
+ .selectFrom("internal_state_materializer" as any)
2187
+ .selectAll()
2188
+ .where("version_id", "=", "child-version")
2189
+ .where("entity_id", "=", "entity-to-override")
2190
+ .executeTakeFirst();
2191
+
2192
+ expect(childState).toBeDefined();
2193
+ expect(childState!.snapshot_content).toBeNull();
2194
+ expect(childState!.entity_id).toBe("entity-to-override");
2195
+ expect(childState!.version_id).toBe("child-version");
2196
+ expect(childState!.inherited_from_version_id).toBeNull(); // Direct deletion in child
2197
+
2198
+ // But the latest visible state for child should have NULL snapshot
2199
+ const childLatestVisible = await lix.db
2200
+ .selectFrom("internal_materialization_latest_visible_state" as any)
2201
+ .selectAll()
2202
+ .where("version_id", "=", "child-version")
2203
+ .where("entity_id", "=", "entity-to-override")
2204
+ .executeTakeFirst();
2205
+
2206
+ expect(childLatestVisible).toBeDefined();
2207
+ expect(childLatestVisible!.snapshot_content).toBeNull();
2208
+ },
2209
+ {
2210
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
2211
+ }
2212
+ );
2213
+
2214
+ simulationTest(
2215
+ "handles diamond inheritance - takes from closest ancestor",
2216
+ async ({ openSimulatedLix }) => {
2217
+ const lix = await openSimulatedLix({
2218
+ keyValues: [
2219
+ {
2220
+ key: "lix_deterministic_mode",
2221
+ value: { enabled: true, bootstrap: true },
2222
+ },
2223
+ ],
2224
+ });
2225
+
2226
+ // Create diamond inheritance pattern:
2227
+ // A (root)
2228
+ // / \
2229
+ // B C
2230
+ // \ /
2231
+ // D
2232
+ //
2233
+ // Note: In Lix, a version can only inherit from one parent directly
2234
+ // So D inherits from B, B inherits from A, C also inherits from A
2235
+
2236
+ await createVersion({ lix, id: "version-a" });
2237
+ await createVersion({
2238
+ lix,
2239
+ id: "version-b",
2240
+ inherits_from_version_id: "version-a",
2241
+ });
2242
+ await createVersion({
2243
+ lix,
2244
+ id: "version-c",
2245
+ inherits_from_version_id: "version-a",
2246
+ });
2247
+ await createVersion({
2248
+ lix,
2249
+ id: "version-d",
2250
+ inherits_from_version_id: "version-b",
2251
+ });
2252
+
2253
+ // Add entity to root version A
2254
+ await lix.db
2255
+ .insertInto("key_value_all")
2256
+ .values({
2257
+ key: "shared-entity",
2258
+ value: "value-from-a",
2259
+ lixcol_version_id: "version-a",
2260
+ })
2261
+ .execute();
2262
+
2263
+ // Override the entity in version B
2264
+ await lix.db
2265
+ .updateTable("key_value_all")
2266
+ .set({
2267
+ value: "value-from-b",
2268
+ })
2269
+ .where("key", "=", "shared-entity")
2270
+ .where("lixcol_version_id", "=", "version-b")
2271
+ .execute();
2272
+
2273
+ // Also override the entity in version C
2274
+ await lix.db
2275
+ .updateTable("key_value_all")
2276
+ .set({
2277
+ value: "value-from-c",
2278
+ })
2279
+ .where("key", "=", "shared-entity")
2280
+ .where("lixcol_version_id", "=", "version-c")
2281
+ .execute();
2282
+
2283
+ // Query materializer for version D
2284
+ const dState = await lix.db
2285
+ .selectFrom("internal_state_materializer" as any)
2286
+ .selectAll()
2287
+ .where("version_id", "=", "version-d")
2288
+ .where("entity_id", "=", "shared-entity")
2289
+ .executeTakeFirst();
2290
+
2291
+ // D should see the value from B (its direct parent), not from A or C
2292
+ expect(dState).toBeDefined();
2293
+ expect(dState!.snapshot_content).toEqual({
2294
+ key: "shared-entity",
2295
+ value: "value-from-b",
2296
+ });
2297
+ expect(dState!.inherited_from_version_id).toBe("version-b");
2298
+
2299
+ // Verify that B sees its own value
2300
+ const bState = await lix.db
2301
+ .selectFrom("internal_state_materializer" as any)
2302
+ .selectAll()
2303
+ .where("version_id", "=", "version-b")
2304
+ .where("entity_id", "=", "shared-entity")
2305
+ .executeTakeFirst();
2306
+
2307
+ expect(bState).toBeDefined();
2308
+ expect(bState!.snapshot_content).toEqual({
2309
+ key: "shared-entity",
2310
+ value: "value-from-b",
2311
+ });
2312
+ expect(bState!.inherited_from_version_id).toBeNull(); // B has its own value
2313
+
2314
+ // Verify that C sees its own value
2315
+ const cState = await lix.db
2316
+ .selectFrom("internal_state_materializer" as any)
2317
+ .selectAll()
2318
+ .where("version_id", "=", "version-c")
2319
+ .where("entity_id", "=", "shared-entity")
2320
+ .executeTakeFirst();
2321
+
2322
+ expect(cState).toBeDefined();
2323
+ expect(cState!.snapshot_content).toEqual({
2324
+ key: "shared-entity",
2325
+ value: "value-from-c",
2326
+ });
2327
+ expect(cState!.inherited_from_version_id).toBeNull(); // C has its own value
2328
+
2329
+ // Test inheritance ranking - add a different entity only in A
2330
+ await lix.db
2331
+ .insertInto("key_value_all")
2332
+ .values({
2333
+ key: "root-only-entity",
2334
+ value: "only-in-a",
2335
+ lixcol_version_id: "version-a",
2336
+ })
2337
+ .execute();
2338
+
2339
+ // D should inherit it through B (depth 2 from D's perspective)
2340
+ const dRootEntity = await lix.db
2341
+ .selectFrom("internal_state_materializer" as any)
2342
+ .selectAll()
2343
+ .where("version_id", "=", "version-d")
2344
+ .where("entity_id", "=", "root-only-entity")
2345
+ .executeTakeFirst();
2346
+
2347
+ expect(dRootEntity).toBeDefined();
2348
+ expect(dRootEntity!.snapshot_content).toEqual({
2349
+ key: "root-only-entity",
2350
+ value: "only-in-a",
2351
+ });
2352
+ expect(dRootEntity!.inherited_from_version_id).toBe("version-a");
2353
+ },
2354
+ {
2355
+ simulations: [normalSimulation, outOfOrderSequenceSimulation],
2356
+ }
2357
+ );
2358
+ });