@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,3260 @@
1
+ import { test, expect } from "vitest";
2
+ import { openLix } from "../lix/open-lix.js";
3
+ import type { LixSchemaDefinition } from "../schema-definition/definition.js";
4
+ import { Kysely, sql } from "kysely";
5
+ import { createVersion } from "../version/create-version.js";
6
+ import type { LixInternalDatabaseSchema } from "../database/schema.js";
7
+ import {
8
+ simulationTest,
9
+ normalSimulation,
10
+ } from "../test-utilities/simulation-test/simulation-test.js";
11
+
12
+ test("dstest discovery", () => {});
13
+
14
+ simulationTest(
15
+ "select, insert, update, delete entity",
16
+ async ({ openSimulatedLix }) => {
17
+ const mockSchema: LixSchemaDefinition = {
18
+ "x-lix-key": "mock_schema",
19
+ "x-lix-version": "1.0",
20
+ type: "object",
21
+ additionalProperties: false,
22
+ properties: {
23
+ value: {
24
+ type: "string",
25
+ },
26
+ },
27
+ };
28
+
29
+ const lix = await openSimulatedLix({
30
+ keyValues: [
31
+ {
32
+ key: "lix_deterministic_mode",
33
+ value: { enabled: true, bootstrap: true },
34
+ lixcol_version_id: "global",
35
+ },
36
+ ],
37
+ });
38
+
39
+ await lix.db
40
+ .insertInto("stored_schema")
41
+ .values({ value: mockSchema })
42
+ .execute();
43
+
44
+ await lix.db
45
+ .insertInto("state_all")
46
+ .values({
47
+ entity_id: "e0",
48
+ file_id: "f0",
49
+ schema_key: "mock_schema",
50
+ plugin_key: "lix_own_entity",
51
+ schema_version: "1.0",
52
+ version_id: sql`(SELECT version_id FROM active_version)`,
53
+ snapshot_content: {
54
+ value: "hello world",
55
+ },
56
+ })
57
+ .execute();
58
+
59
+ const viewAfterInsert = await lix.db
60
+ .selectFrom("state_all")
61
+ .where("schema_key", "=", "mock_schema")
62
+ .selectAll()
63
+ .execute();
64
+
65
+ expect(viewAfterInsert).toMatchObject([
66
+ {
67
+ entity_id: "e0",
68
+ file_id: "f0",
69
+ schema_key: "mock_schema",
70
+ plugin_key: "lix_own_entity",
71
+ snapshot_content: {
72
+ value: "hello world",
73
+ },
74
+ },
75
+ ]);
76
+
77
+ await lix.db
78
+ .updateTable("state_all")
79
+ .set({
80
+ snapshot_content: {
81
+ value: "hello world - updated",
82
+ },
83
+ })
84
+ .where("entity_id", "=", "e0")
85
+ .where("schema_key", "=", "mock_schema")
86
+ .where("file_id", "=", "f0")
87
+ .execute();
88
+
89
+ const viewAfterUpdate = await lix.db
90
+ .selectFrom("state_all")
91
+ .where("schema_key", "=", "mock_schema")
92
+ .selectAll()
93
+ .execute();
94
+
95
+ expect(viewAfterUpdate).toMatchObject([
96
+ {
97
+ entity_id: "e0",
98
+ file_id: "f0",
99
+ schema_key: "mock_schema",
100
+ plugin_key: "lix_own_entity",
101
+ snapshot_content: {
102
+ value: "hello world - updated",
103
+ },
104
+ },
105
+ ]);
106
+
107
+ await lix.db
108
+ .deleteFrom("state_all")
109
+ .where("entity_id", "=", "e0")
110
+ .where(
111
+ "version_id",
112
+ "=",
113
+ lix.db.selectFrom("active_version").select("version_id")
114
+ )
115
+ .where("schema_key", "=", "mock_schema")
116
+ .execute();
117
+
118
+ const viewAfterDelete = await lix.db
119
+ .selectFrom("state_all")
120
+ .where("schema_key", "=", "mock_schema")
121
+ .selectAll()
122
+ .execute();
123
+
124
+ expect(viewAfterDelete).toHaveLength(0);
125
+ }
126
+ );
127
+
128
+ simulationTest(
129
+ "validates the schema on insert",
130
+ async ({ openSimulatedLix }) => {
131
+ const lix = await openSimulatedLix({
132
+ keyValues: [
133
+ {
134
+ key: "lix_deterministic_mode",
135
+ value: { enabled: true, bootstrap: true },
136
+ lixcol_version_id: "global",
137
+ },
138
+ ],
139
+ });
140
+
141
+ const mockSchema: LixSchemaDefinition = {
142
+ "x-lix-key": "mock_schema",
143
+ "x-lix-version": "1.0",
144
+ type: "object",
145
+ additionalProperties: false,
146
+ properties: {
147
+ value: {
148
+ type: "number",
149
+ },
150
+ },
151
+ };
152
+
153
+ await lix.db
154
+ .insertInto("stored_schema")
155
+ .values({ value: mockSchema })
156
+ .execute();
157
+ await expect(
158
+ lix.db
159
+ .insertInto("state_all")
160
+ .values({
161
+ entity_id: "e0",
162
+ file_id: "f0",
163
+ schema_key: "mock_schema",
164
+ plugin_key: "lix_own_entity",
165
+ schema_version: "1.0",
166
+ snapshot_content: {
167
+ value: "hello world",
168
+ },
169
+ version_id: sql`(SELECT version_id FROM active_version)`,
170
+ })
171
+ .execute()
172
+ ).rejects.toThrow(/value must be number/);
173
+ }
174
+ );
175
+
176
+ simulationTest(
177
+ "validates the schema on update",
178
+ async ({ openSimulatedLix }) => {
179
+ const lix = await openSimulatedLix({});
180
+
181
+ const mockSchema: LixSchemaDefinition = {
182
+ "x-lix-key": "mock_schema",
183
+ "x-lix-version": "1.0",
184
+ type: "object",
185
+ additionalProperties: false,
186
+ properties: {
187
+ value: {
188
+ type: "number",
189
+ },
190
+ },
191
+ };
192
+
193
+ await lix.db
194
+ .insertInto("stored_schema")
195
+ .values({ value: mockSchema })
196
+ .execute();
197
+
198
+ await lix.db
199
+ .insertInto("state_all")
200
+ .values({
201
+ entity_id: "e0",
202
+ file_id: "f0",
203
+ schema_key: "mock_schema",
204
+ plugin_key: "lix_own_entity",
205
+ schema_version: "1.0",
206
+ snapshot_content: {
207
+ value: 5,
208
+ },
209
+ version_id: sql`(SELECT version_id FROM active_version)`,
210
+ })
211
+ .execute();
212
+
213
+ await expect(
214
+ lix.db
215
+ .updateTable("state_all")
216
+ .set({
217
+ snapshot_content: {
218
+ value: "hello world - updated",
219
+ },
220
+ })
221
+ .where("entity_id", "=", "e0")
222
+ .where("schema_key", "=", "mock_schema")
223
+ .where("file_id", "=", "f0")
224
+ .execute()
225
+ ).rejects.toThrow(/value must be number/);
226
+
227
+ const viewAfterFailedUpdate = await lix.db
228
+ .selectFrom("state_all")
229
+ .where("schema_key", "=", "mock_schema")
230
+ .selectAll()
231
+ .execute();
232
+
233
+ expect(viewAfterFailedUpdate).toMatchObject([
234
+ {
235
+ entity_id: "e0",
236
+ file_id: "f0",
237
+ schema_key: "mock_schema",
238
+ plugin_key: "lix_own_entity",
239
+ snapshot_content: {
240
+ value: 5,
241
+ },
242
+ },
243
+ ]);
244
+ }
245
+ );
246
+
247
+ simulationTest(
248
+ "state is separated by version",
249
+ async ({ openSimulatedLix }) => {
250
+ const lix = await openSimulatedLix({
251
+ keyValues: [
252
+ {
253
+ key: "lix_deterministic_mode",
254
+ value: { enabled: true, bootstrap: true },
255
+ lixcol_version_id: "global",
256
+ },
257
+ ],
258
+ });
259
+
260
+ await createVersion({ lix, id: "version_a" });
261
+ await createVersion({ lix, id: "version_b" });
262
+
263
+ await lix.db
264
+ .insertInto("state_all")
265
+ .values([
266
+ {
267
+ entity_id: "e0",
268
+ file_id: "f0",
269
+ schema_key: "mock_schema",
270
+ plugin_key: "mock_plugin",
271
+ schema_version: "1.0",
272
+ snapshot_content: {
273
+ value: "hello world from version a",
274
+ },
275
+ version_id: "version_a",
276
+ },
277
+ {
278
+ entity_id: "e0",
279
+ file_id: "f0",
280
+ schema_key: "mock_schema",
281
+ plugin_key: "mock_plugin",
282
+ schema_version: "1.0",
283
+ snapshot_content: {
284
+ value: "hello world from version b",
285
+ },
286
+ version_id: "version_b",
287
+ },
288
+ ])
289
+ .execute();
290
+
291
+ const stateAfterInserts = await lix.db
292
+ .selectFrom("state_all")
293
+ .where("schema_key", "=", "mock_schema")
294
+ .where("entity_id", "=", "e0")
295
+ .selectAll()
296
+ .execute();
297
+
298
+ expect(stateAfterInserts).toMatchObject([
299
+ {
300
+ entity_id: "e0",
301
+ file_id: "f0",
302
+ schema_key: "mock_schema",
303
+ plugin_key: "mock_plugin",
304
+ snapshot_content: {
305
+ value: "hello world from version a",
306
+ },
307
+ version_id: "version_a",
308
+ },
309
+ {
310
+ entity_id: "e0",
311
+ file_id: "f0",
312
+ schema_key: "mock_schema",
313
+ plugin_key: "mock_plugin",
314
+ snapshot_content: {
315
+ value: "hello world from version b",
316
+ },
317
+ version_id: "version_b",
318
+ },
319
+ ]);
320
+
321
+ // Verify timestamps are present
322
+ expect(stateAfterInserts[0]?.created_at).toBeDefined();
323
+ expect(stateAfterInserts[0]?.updated_at).toBeDefined();
324
+ expect(stateAfterInserts[1]?.created_at).toBeDefined();
325
+ expect(stateAfterInserts[1]?.updated_at).toBeDefined();
326
+
327
+ await lix.db
328
+ .updateTable("state_all")
329
+ .set({
330
+ snapshot_content: { value: "hello world from version b UPDATED" },
331
+ })
332
+ .where("entity_id", "=", "e0")
333
+ .where("schema_key", "=", "mock_schema")
334
+ .where("version_id", "=", "version_b")
335
+ .execute();
336
+
337
+ const stateAfterUpdate = await lix.db
338
+ .selectFrom("state_all")
339
+ .where("schema_key", "=", "mock_schema")
340
+ .where("entity_id", "=", "e0")
341
+ .selectAll()
342
+ .execute();
343
+
344
+ expect(stateAfterUpdate).toMatchObject([
345
+ {
346
+ entity_id: "e0",
347
+ file_id: "f0",
348
+ schema_key: "mock_schema",
349
+ plugin_key: "mock_plugin",
350
+ snapshot_content: {
351
+ value: "hello world from version a",
352
+ },
353
+ version_id: "version_a",
354
+ },
355
+ {
356
+ entity_id: "e0",
357
+ file_id: "f0",
358
+ schema_key: "mock_schema",
359
+ plugin_key: "mock_plugin",
360
+ snapshot_content: {
361
+ value: "hello world from version b UPDATED",
362
+ },
363
+ version_id: "version_b",
364
+ },
365
+ ]);
366
+
367
+ await lix.db
368
+ .deleteFrom("state_all")
369
+ .where("entity_id", "=", "e0")
370
+ .where("version_id", "=", "version_b")
371
+ .execute();
372
+
373
+ const stateAfterDelete = await lix.db
374
+ .selectFrom("state_all")
375
+ .where("schema_key", "=", "mock_schema")
376
+ .where("entity_id", "=", "e0")
377
+ .selectAll()
378
+ .execute();
379
+
380
+ expect(stateAfterDelete).toMatchObject([
381
+ {
382
+ entity_id: "e0",
383
+ file_id: "f0",
384
+ schema_key: "mock_schema",
385
+ plugin_key: "mock_plugin",
386
+ snapshot_content: {
387
+ value: "hello world from version a",
388
+ },
389
+ version_id: "version_a",
390
+ },
391
+ ]);
392
+ }
393
+ );
394
+
395
+ simulationTest(
396
+ "created_at and updated_at timestamps are computed correctly",
397
+ async ({ openSimulatedLix }) => {
398
+ const lix = await openSimulatedLix({
399
+ keyValues: [
400
+ {
401
+ key: "lix_deterministic_mode",
402
+ value: { enabled: true, bootstrap: true },
403
+ lixcol_version_id: "global",
404
+ },
405
+ ],
406
+ });
407
+
408
+ const mockSchema: LixSchemaDefinition = {
409
+ "x-lix-key": "mock_schema",
410
+ "x-lix-version": "1.0",
411
+ type: "object",
412
+ additionalProperties: false,
413
+ properties: {
414
+ value: {
415
+ type: "string",
416
+ },
417
+ },
418
+ };
419
+
420
+ await lix.db
421
+ .insertInto("stored_schema")
422
+ .values({ value: mockSchema })
423
+ .execute();
424
+
425
+ // Insert initial entity
426
+ await lix.db
427
+ .insertInto("state_all")
428
+ .values({
429
+ entity_id: "e0",
430
+ file_id: "f0",
431
+ schema_key: "mock_schema",
432
+ plugin_key: "lix_own_entity",
433
+ schema_version: "1.0",
434
+ version_id: sql`(SELECT version_id FROM active_version)`,
435
+ snapshot_content: {
436
+ value: "initial value",
437
+ },
438
+ })
439
+ .execute();
440
+
441
+ const stateAfterInsert = await lix.db
442
+ .selectFrom("state_all")
443
+ .where("entity_id", "=", "e0")
444
+ .selectAll()
445
+ .execute();
446
+
447
+ expect(stateAfterInsert).toHaveLength(1);
448
+ expect(stateAfterInsert[0]?.created_at).toBeDefined();
449
+ expect(stateAfterInsert[0]?.updated_at).toBeDefined();
450
+ expect(stateAfterInsert[0]?.created_at).toBe(
451
+ stateAfterInsert[0]?.updated_at
452
+ );
453
+
454
+ // Update the entity
455
+ await lix.db
456
+ .updateTable("state_all")
457
+ .set({
458
+ snapshot_content: {
459
+ value: "updated value",
460
+ },
461
+ })
462
+ .where("entity_id", "=", "e0")
463
+ .where("schema_key", "=", "mock_schema")
464
+ .execute();
465
+
466
+ const stateAfterUpdate = await lix.db
467
+ .selectFrom("state_all")
468
+ .where("entity_id", "=", "e0")
469
+ .selectAll()
470
+ .execute();
471
+
472
+ expect(stateAfterUpdate).toHaveLength(1);
473
+ expect(stateAfterUpdate[0]?.created_at).toBeDefined();
474
+ expect(stateAfterUpdate[0]?.updated_at).toBeDefined();
475
+
476
+ // created_at should remain the same
477
+ expect(stateAfterUpdate[0]?.created_at).toBe(
478
+ stateAfterInsert[0]?.created_at
479
+ );
480
+
481
+ // updated_at should be different (newer)
482
+ expect(stateAfterUpdate[0]?.updated_at).not.toBe(
483
+ stateAfterInsert[0]?.updated_at
484
+ );
485
+ }
486
+ );
487
+
488
+ simulationTest(
489
+ "created_at and updated_at are version specific",
490
+ async ({ openSimulatedLix }) => {
491
+ const lix = await openSimulatedLix({
492
+ keyValues: [
493
+ {
494
+ key: "lix_deterministic_mode",
495
+ value: { enabled: true, bootstrap: true },
496
+ lixcol_version_id: "global",
497
+ },
498
+ ],
499
+ });
500
+
501
+ await createVersion({ lix, id: "version_a" });
502
+ await createVersion({ lix, id: "version_b" });
503
+
504
+ const mockSchema: LixSchemaDefinition = {
505
+ "x-lix-key": "mock_schema",
506
+ "x-lix-version": "1.0",
507
+ additionalProperties: false,
508
+ type: "object",
509
+ properties: {
510
+ value: {
511
+ type: "string",
512
+ },
513
+ },
514
+ };
515
+
516
+ await lix.db
517
+ .insertInto("stored_schema")
518
+ .values({ value: mockSchema })
519
+ .execute();
520
+
521
+ // Insert entity in version A
522
+ await lix.db
523
+ .insertInto("state_all")
524
+ .values({
525
+ entity_id: "e0",
526
+ file_id: "f0",
527
+ schema_key: "mock_schema",
528
+ plugin_key: "lix_own_entity",
529
+ schema_version: "1.0",
530
+ version_id: "version_a",
531
+ snapshot_content: {
532
+ value: "value in version a",
533
+ },
534
+ })
535
+ .execute();
536
+
537
+ // Insert same entity in version B
538
+ await lix.db
539
+ .insertInto("state_all")
540
+ .values({
541
+ entity_id: "e0",
542
+ file_id: "f0",
543
+ schema_key: "mock_schema",
544
+ plugin_key: "lix_own_entity",
545
+ schema_version: "1.0",
546
+ version_id: "version_b",
547
+ snapshot_content: {
548
+ value: "value in version b",
549
+ },
550
+ })
551
+ .execute();
552
+
553
+ const stateVersionA = await lix.db
554
+ .selectFrom("state_all")
555
+ .where("entity_id", "=", "e0")
556
+ .where("version_id", "=", "version_a")
557
+ .selectAll()
558
+ .execute();
559
+
560
+ const stateVersionB = await lix.db
561
+ .selectFrom("state_all")
562
+ .where("entity_id", "=", "e0")
563
+ .where("version_id", "=", "version_b")
564
+ .selectAll()
565
+ .execute();
566
+
567
+ expect(stateVersionA).toHaveLength(1);
568
+ expect(stateVersionB).toHaveLength(1);
569
+
570
+ // Both should have timestamps
571
+ expect(stateVersionA[0]?.created_at).toBeDefined();
572
+ expect(stateVersionA[0]?.updated_at).toBeDefined();
573
+ expect(stateVersionB[0]?.created_at).toBeDefined();
574
+ expect(stateVersionB[0]?.updated_at).toBeDefined();
575
+
576
+ // the same entity has been inserted but with different changes
577
+ expect(stateVersionA[0]?.created_at).not.toBe(stateVersionB[0]?.created_at);
578
+
579
+ await lix.db
580
+ .updateTable("state_all")
581
+ .set({
582
+ snapshot_content: {
583
+ value: "updated value in version b",
584
+ },
585
+ })
586
+ .where("entity_id", "=", "e0")
587
+ .where("version_id", "=", "version_b")
588
+ .execute();
589
+
590
+ const updatedStateVersionA = await lix.db
591
+ .selectFrom("state_all")
592
+ .where("entity_id", "=", "e0")
593
+ .where("version_id", "=", "version_a")
594
+ .selectAll()
595
+ .execute();
596
+
597
+ const updatedStateVersionB = await lix.db
598
+ .selectFrom("state_all")
599
+ .where("entity_id", "=", "e0")
600
+ .where("version_id", "=", "version_b")
601
+ .selectAll()
602
+ .execute();
603
+
604
+ // Version A should remain unchanged
605
+ expect(updatedStateVersionA[0]?.updated_at).toBe(
606
+ stateVersionA[0]?.updated_at
607
+ );
608
+
609
+ // Version B should have updated timestamp
610
+ expect(updatedStateVersionB[0]?.updated_at).not.toBe(
611
+ stateVersionB[0]?.updated_at
612
+ );
613
+ }
614
+ );
615
+
616
+ simulationTest(
617
+ "state appears in both versions when they share the same commit",
618
+ async ({ openSimulatedLix }) => {
619
+ const lix = await openSimulatedLix({
620
+ keyValues: [
621
+ {
622
+ key: "lix_deterministic_mode",
623
+ value: { enabled: true, bootstrap: true },
624
+ lixcol_version_id: "global",
625
+ },
626
+ ],
627
+ });
628
+
629
+ const versionA = await createVersion({ lix, id: "version_a" });
630
+ // Insert state into version A
631
+ await lix.db
632
+ .insertInto("state_all")
633
+ .values({
634
+ entity_id: "e0",
635
+ file_id: "f0",
636
+ schema_key: "mock_schema",
637
+ plugin_key: "mock_plugin",
638
+ schema_version: "1.0",
639
+ snapshot_content: {
640
+ value: "shared state",
641
+ },
642
+ version_id: "version_a",
643
+ })
644
+ .execute();
645
+
646
+ const versionAAfterInsert = await lix.db
647
+ .selectFrom("version")
648
+ .where("id", "=", versionA.id)
649
+ .selectAll()
650
+ .executeTakeFirstOrThrow();
651
+
652
+ const sharedCommitId = versionAAfterInsert.commit_id;
653
+
654
+ // Create version B from version A
655
+ const versionB = await createVersion({
656
+ lix,
657
+ id: "version_b",
658
+ commit_id: sharedCommitId,
659
+ });
660
+
661
+ expect(versionB.commit_id).toBe(sharedCommitId);
662
+
663
+ const stateInBothVersions = await lix.db
664
+ .selectFrom("state_all")
665
+ .where("schema_key", "=", "mock_schema")
666
+ .where("entity_id", "=", "e0")
667
+ .selectAll()
668
+ .execute();
669
+
670
+ // Both versions should see the same state
671
+ expect(stateInBothVersions).toMatchObject([
672
+ {
673
+ entity_id: "e0",
674
+ schema_key: "mock_schema",
675
+ snapshot_content: { value: "shared state" },
676
+ version_id: "version_a",
677
+ commit_id: sharedCommitId,
678
+ },
679
+ {
680
+ entity_id: "e0",
681
+ schema_key: "mock_schema",
682
+ snapshot_content: { value: "shared state" },
683
+ version_id: "version_b",
684
+ commit_id: sharedCommitId,
685
+ },
686
+ ]);
687
+ }
688
+ );
689
+
690
+ simulationTest(
691
+ "state diverges when versions have common ancestor but different changes",
692
+ async ({ openSimulatedLix }) => {
693
+ const lix = await openSimulatedLix({
694
+ keyValues: [
695
+ {
696
+ key: "lix_deterministic_mode",
697
+ value: { enabled: true, bootstrap: true },
698
+ lixcol_version_id: "global",
699
+ },
700
+ ],
701
+ });
702
+
703
+ // Create base version and add initial state
704
+ const baseVersion = await createVersion({ lix, id: "base_version" });
705
+
706
+ await lix.db
707
+ .insertInto("state_all")
708
+ .values({
709
+ entity_id: "e0",
710
+ file_id: "f0",
711
+ schema_key: "mock_schema",
712
+ plugin_key: "mock_plugin",
713
+ schema_version: "1.0",
714
+ snapshot_content: {
715
+ value: "base state",
716
+ },
717
+ version_id: "base_version",
718
+ })
719
+ .execute();
720
+
721
+ const baseVersionAfterInsert = await lix.db
722
+ .selectFrom("version")
723
+ .where("id", "=", baseVersion.id)
724
+ .selectAll()
725
+ .executeTakeFirstOrThrow();
726
+
727
+ // Create two versions from the same base version
728
+ await createVersion({
729
+ lix,
730
+ id: "version_a",
731
+ commit_id: baseVersionAfterInsert.commit_id,
732
+ });
733
+
734
+ await createVersion({
735
+ lix,
736
+ id: "version_b",
737
+ commit_id: baseVersionAfterInsert.commit_id,
738
+ });
739
+
740
+ const versions = await lix.db
741
+ .selectFrom("version")
742
+ .where("id", "in", ["base_version", "version_a", "version_b"])
743
+ .select(["id", "commit_id"])
744
+ .execute();
745
+
746
+ expect(versions).toHaveLength(3);
747
+
748
+ // Both versions should initially see the base state
749
+ const initialState = await lix.db
750
+ .selectFrom("state_all")
751
+ .where("schema_key", "=", "mock_schema")
752
+ .where("entity_id", "=", "e0")
753
+ .selectAll()
754
+ .execute();
755
+
756
+ expect(initialState).toHaveLength(3); // base, version_a, version_b
757
+
758
+ // Update state in version A
759
+ await lix.db
760
+ .updateTable("state_all")
761
+ .set({
762
+ snapshot_content: { value: "updated in version A" },
763
+ })
764
+ .where("entity_id", "=", "e0")
765
+ .where("version_id", "=", "version_a")
766
+ .execute();
767
+
768
+ // Update state in version B differently
769
+ await lix.db
770
+ .updateTable("state_all")
771
+ .set({
772
+ snapshot_content: { value: "updated in version B" },
773
+ })
774
+ .where("entity_id", "=", "e0")
775
+ .where("version_id", "=", "version_b")
776
+ .execute();
777
+
778
+ const divergedState = await lix.db
779
+ .selectFrom("state_all")
780
+ .where("schema_key", "=", "mock_schema")
781
+ .where("entity_id", "=", "e0")
782
+ .selectAll()
783
+ .orderBy("version_id")
784
+ .execute();
785
+
786
+ // All three versions should have different states
787
+ expect(divergedState).toMatchObject([
788
+ {
789
+ entity_id: "e0",
790
+ snapshot_content: { value: "base state" },
791
+ version_id: "base_version",
792
+ },
793
+ {
794
+ entity_id: "e0",
795
+ snapshot_content: { value: "updated in version A" },
796
+ version_id: "version_a",
797
+ },
798
+ {
799
+ entity_id: "e0",
800
+ snapshot_content: { value: "updated in version B" },
801
+ version_id: "version_b",
802
+ },
803
+ ]);
804
+ }
805
+ );
806
+
807
+ simulationTest(
808
+ "delete operations remove entries from underlying data",
809
+ async ({ openSimulatedLix }) => {
810
+ const lix = await openSimulatedLix({
811
+ keyValues: [
812
+ {
813
+ key: "lix_deterministic_mode",
814
+ value: { enabled: true, bootstrap: true },
815
+ lixcol_version_id: "global",
816
+ },
817
+ ],
818
+ });
819
+
820
+ const activeVersion = await lix.db
821
+ .selectFrom("active_version")
822
+ .innerJoin("version", "active_version.version_id", "version.id")
823
+ .selectAll("version")
824
+ .executeTakeFirstOrThrow();
825
+
826
+ // Insert initial state
827
+ await lix.db
828
+ .insertInto("state_all")
829
+ .values({
830
+ entity_id: "delete-cache-entity",
831
+ schema_key: "delete-cache-schema",
832
+ file_id: "delete-cache-file",
833
+ plugin_key: "delete-plugin",
834
+ snapshot_content: { to: "delete" },
835
+ schema_version: "1.0",
836
+ version_id: activeVersion.id,
837
+ })
838
+ .execute();
839
+
840
+ // Verify data exists
841
+ const beforeDelete = await lix.db
842
+ .selectFrom("state_all")
843
+ .where("entity_id", "=", "delete-cache-entity")
844
+ .selectAll()
845
+ .execute();
846
+
847
+ expect(beforeDelete).toHaveLength(1);
848
+
849
+ // Delete the state - this creates a deletion change (doesn't physically remove cache entry)
850
+ await lix.db
851
+ .deleteFrom("state_all")
852
+ .where("entity_id", "=", "delete-cache-entity")
853
+ .where("schema_key", "=", "delete-cache-schema")
854
+ .where("file_id", "=", "delete-cache-file")
855
+ .where("version_id", "=", activeVersion.id)
856
+ .execute();
857
+
858
+ // Data should no longer be accessible through state view
859
+ const afterDelete = await lix.db
860
+ .selectFrom("state_all")
861
+ .where("entity_id", "=", "delete-cache-entity")
862
+ .selectAll()
863
+ .execute();
864
+
865
+ expect(afterDelete).toHaveLength(0);
866
+ }
867
+ );
868
+
869
+ simulationTest(
870
+ "change.created_at and state timestamps are consistent",
871
+ async ({ openSimulatedLix }) => {
872
+ const lix = await openSimulatedLix({
873
+ keyValues: [
874
+ {
875
+ key: "lix_deterministic_mode",
876
+ value: { enabled: true, bootstrap: true },
877
+ lixcol_version_id: "global",
878
+ },
879
+ ],
880
+ });
881
+
882
+ const mockSchema: LixSchemaDefinition = {
883
+ "x-lix-key": "mock_schema",
884
+ "x-lix-version": "1.0",
885
+ type: "object",
886
+ additionalProperties: false,
887
+ properties: {
888
+ value: {
889
+ type: "string",
890
+ },
891
+ },
892
+ };
893
+
894
+ await lix.db
895
+ .insertInto("stored_schema")
896
+ .values({ value: mockSchema })
897
+ .execute();
898
+
899
+ // Insert state data
900
+ await lix.db
901
+ .insertInto("state_all")
902
+ .values({
903
+ entity_id: "timestamp-test-entity",
904
+ schema_key: "mock_schema",
905
+ file_id: "timestamp-test-file",
906
+ plugin_key: "timestamp-test-plugin",
907
+ snapshot_content: { value: "timestamp test" },
908
+ schema_version: "1.0",
909
+ version_id: sql`(SELECT version_id FROM active_version)`,
910
+ })
911
+ .execute();
912
+
913
+ // Get the change record
914
+ const changeRecord = await (
915
+ lix.db as unknown as Kysely<LixInternalDatabaseSchema>
916
+ )
917
+ .selectFrom("internal_change")
918
+ .where("entity_id", "=", "timestamp-test-entity")
919
+ .where("schema_key", "=", "mock_schema")
920
+ .select(["created_at"])
921
+ .executeTakeFirstOrThrow();
922
+
923
+ // Get the state cache record
924
+ const cacheRecord = await (
925
+ lix.db as unknown as Kysely<LixInternalDatabaseSchema>
926
+ )
927
+ .selectFrom("internal_state_cache")
928
+ .where("entity_id", "=", "timestamp-test-entity")
929
+ .where("schema_key", "=", "mock_schema")
930
+ .select(["created_at", "updated_at"])
931
+ .executeTakeFirstOrThrow();
932
+
933
+ // Verify all timestamps are identical
934
+ expect(changeRecord.created_at).toBe(cacheRecord.created_at);
935
+ expect(changeRecord.created_at).toBe(cacheRecord.updated_at);
936
+ },
937
+ { simulations: [normalSimulation] }
938
+ );
939
+
940
+ simulationTest(
941
+ "state and state_all views expose change_id for blame and diff functionality",
942
+ async ({ expectDeterministic, openSimulatedLix }) => {
943
+ const lix = await openSimulatedLix({
944
+ keyValues: [
945
+ {
946
+ key: "lix_deterministic_mode",
947
+ value: { enabled: true, bootstrap: true },
948
+ lixcol_version_id: "global",
949
+ },
950
+ ],
951
+ });
952
+
953
+ const mockSchema: LixSchemaDefinition = {
954
+ "x-lix-key": "mock_schema",
955
+ "x-lix-version": "1.0",
956
+ type: "object",
957
+ additionalProperties: false,
958
+ properties: {
959
+ value: {
960
+ type: "string",
961
+ },
962
+ },
963
+ };
964
+
965
+ await lix.db
966
+ .insertInto("stored_schema")
967
+ .values({ value: mockSchema })
968
+ .execute();
969
+
970
+ // Insert initial state using Kysely to ensure virtual table is triggered
971
+ await lix.db
972
+ .insertInto("state_all")
973
+ .values({
974
+ entity_id: "change-id-test-entity",
975
+ schema_key: "mock_schema",
976
+ file_id: "change-id-test-file",
977
+ plugin_key: "change-id-test-plugin",
978
+ snapshot_content: { value: "initial value" },
979
+ schema_version: "1.0",
980
+ version_id: sql`(SELECT version_id FROM active_version)`,
981
+ })
982
+ .execute();
983
+
984
+ // Query state_all view to verify change_id is exposed
985
+ const stateAllResult = await lix.db
986
+ .selectFrom("state_all")
987
+ .where("entity_id", "=", "change-id-test-entity")
988
+ .where("schema_key", "=", "mock_schema")
989
+ .selectAll()
990
+ .execute();
991
+
992
+ expectDeterministic(stateAllResult).toHaveLength(1);
993
+ expect(stateAllResult[0]?.change_id).toBeDefined();
994
+ expect(typeof stateAllResult[0]?.change_id).toBe("string");
995
+
996
+ // Query state view (filtered by active version) to verify change_id is exposed
997
+ const stateResult = await lix.db
998
+ .selectFrom("state")
999
+ .where("entity_id", "=", "change-id-test-entity")
1000
+ .where("schema_key", "=", "mock_schema")
1001
+ .selectAll()
1002
+ .execute();
1003
+
1004
+ expectDeterministic(stateResult).toHaveLength(1);
1005
+ expect(stateResult[0]?.change_id).toBeDefined();
1006
+ expect(typeof stateResult[0]?.change_id).toBe("string");
1007
+
1008
+ // Verify that change_id matches between state and state_all views
1009
+ expect(stateResult[0]?.change_id).toBe(stateAllResult[0]?.change_id);
1010
+
1011
+ // Get the actual change record to verify the change_id is correct
1012
+ const changeRecord = await lix.db
1013
+ .selectFrom("change")
1014
+ .where("entity_id", "=", "change-id-test-entity")
1015
+ .where("schema_key", "=", "mock_schema")
1016
+ .select(["change.id", "snapshot_content"])
1017
+ .executeTakeFirstOrThrow();
1018
+
1019
+ // Verify that the change_id in the views matches the actual change.id
1020
+ expect(stateResult[0]?.change_id).toBe(changeRecord.id);
1021
+ expect(stateAllResult[0]?.change_id).toBe(changeRecord.id);
1022
+
1023
+ // Verify that the snapshot content in the change matches the state view
1024
+ expect(changeRecord.snapshot_content).toEqual({ value: "initial value" });
1025
+ expect(stateResult[0]?.snapshot_content).toEqual({
1026
+ value: "initial value",
1027
+ });
1028
+
1029
+ // Update the entity to create a new change
1030
+ await lix.db
1031
+ .updateTable("state_all")
1032
+ .set({
1033
+ snapshot_content: { value: "updated value" },
1034
+ })
1035
+ .where("entity_id", "=", "change-id-test-entity")
1036
+ .where("schema_key", "=", "mock_schema")
1037
+ .execute();
1038
+
1039
+ // Query again to verify change_id updated after modification
1040
+ const updatedStateResult = await lix.db
1041
+ .selectFrom("state_all")
1042
+ .where("entity_id", "=", "change-id-test-entity")
1043
+ .where("schema_key", "=", "mock_schema")
1044
+ .selectAll()
1045
+ .execute();
1046
+
1047
+ expect(updatedStateResult).toHaveLength(1);
1048
+ expect(updatedStateResult[0]?.change_id).toBeDefined();
1049
+ // The change_id should be different after the update (new change created)
1050
+ expect(updatedStateResult[0]?.change_id).not.toBe(
1051
+ stateResult[0]?.change_id
1052
+ );
1053
+
1054
+ // Get the new change record by matching the change_id from the updated state
1055
+ const newChangeRecord = await lix.db
1056
+ .selectFrom("change")
1057
+ .where("change.id", "=", updatedStateResult[0]!.change_id)
1058
+ .select(["change.id", "snapshot_content"])
1059
+ .executeTakeFirstOrThrow();
1060
+
1061
+ // Verify the new change_id matches the latest change
1062
+ expect(updatedStateResult[0]?.change_id).toBe(newChangeRecord.id);
1063
+
1064
+ // Verify that the updated snapshot content in the change matches the state view
1065
+ expect(newChangeRecord.snapshot_content).toEqual({
1066
+ value: "updated value",
1067
+ });
1068
+ expect(updatedStateResult[0]?.snapshot_content).toEqual({
1069
+ value: "updated value",
1070
+ });
1071
+ }
1072
+ );
1073
+
1074
+ simulationTest(
1075
+ "state and state_all views expose commit_id for history queries",
1076
+ async ({ expectDeterministic, openSimulatedLix }) => {
1077
+ const lix = await openSimulatedLix({
1078
+ keyValues: [
1079
+ {
1080
+ key: "lix_deterministic_mode",
1081
+ value: { enabled: true, bootstrap: true },
1082
+ lixcol_version_id: "global",
1083
+ },
1084
+ ],
1085
+ });
1086
+
1087
+ const mockSchema: LixSchemaDefinition = {
1088
+ "x-lix-key": "mock_schema",
1089
+ "x-lix-version": "1.0",
1090
+ type: "object",
1091
+ additionalProperties: false,
1092
+ properties: {
1093
+ value: {
1094
+ type: "string",
1095
+ },
1096
+ },
1097
+ };
1098
+
1099
+ await lix.db
1100
+ .insertInto("stored_schema")
1101
+ .values({ value: mockSchema })
1102
+ .execute();
1103
+
1104
+ // Insert initial state using Kysely to ensure virtual table is triggered
1105
+ await lix.db
1106
+ .insertInto("state_all")
1107
+ .values({
1108
+ entity_id: "change-set-id-test-entity",
1109
+ schema_key: "mock_schema",
1110
+ file_id: "change-set-id-test-file",
1111
+ plugin_key: "change-set-id-test-plugin",
1112
+ snapshot_content: { value: "initial value" },
1113
+ schema_version: "1.0",
1114
+ version_id: sql`(SELECT version_id FROM active_version)`,
1115
+ })
1116
+ .execute();
1117
+
1118
+ const activeVersionAfterInsert = await lix.db
1119
+ .selectFrom("active_version")
1120
+ .innerJoin("version", "active_version.version_id", "version.id")
1121
+ .selectAll("version")
1122
+ .executeTakeFirstOrThrow();
1123
+
1124
+ // Query state_all view to verify change_set_id is exposed
1125
+ const stateAllResult = await lix.db
1126
+ .selectFrom("state_all")
1127
+ .where("entity_id", "=", "change-set-id-test-entity")
1128
+ .where("schema_key", "=", "mock_schema")
1129
+ .selectAll()
1130
+ .execute();
1131
+
1132
+ expectDeterministic(stateAllResult).toHaveLength(1);
1133
+ expectDeterministic(stateAllResult[0]).toHaveProperty("commit_id");
1134
+ expectDeterministic(stateAllResult[0]?.commit_id).toBe(
1135
+ activeVersionAfterInsert.commit_id
1136
+ );
1137
+
1138
+ // Query state view (filtered by active version) to verify commit_id is exposed
1139
+ const stateResult = await lix.db
1140
+ .selectFrom("state")
1141
+ .where("entity_id", "=", "change-set-id-test-entity")
1142
+ .where("schema_key", "=", "mock_schema")
1143
+ .selectAll()
1144
+ .execute();
1145
+
1146
+ expectDeterministic(stateResult).toHaveLength(1);
1147
+ expectDeterministic(stateResult[0]?.commit_id).toBeDefined();
1148
+ expectDeterministic(stateResult[0]?.commit_id).toBe(
1149
+ activeVersionAfterInsert.commit_id
1150
+ );
1151
+
1152
+ // Verify that commit_id matches between state and state_all views
1153
+ expectDeterministic(stateResult[0]?.commit_id).toBe(
1154
+ stateAllResult[0]?.commit_id
1155
+ );
1156
+
1157
+ // Get the change_set_element records - there should be two:
1158
+ // 1. One in the working change set
1159
+ // 2. One in the version's current change set (after commit)
1160
+ const changeSetElements = await lix.db
1161
+ .selectFrom("change_set_element")
1162
+ .where("entity_id", "=", "change-set-id-test-entity")
1163
+ .where("schema_key", "=", "mock_schema")
1164
+ .where("file_id", "=", "change-set-id-test-file")
1165
+ .select(["change_set_id", "change_id"])
1166
+ .orderBy("change_set_id")
1167
+ .execute();
1168
+
1169
+ expectDeterministic(changeSetElements).toHaveLength(2);
1170
+
1171
+ // Get the version to understand which change sets we're dealing with
1172
+ const version = await lix.db
1173
+ .selectFrom("version")
1174
+ .where("id", "=", activeVersionAfterInsert.id)
1175
+ .select(["id", "commit_id", "working_commit_id"])
1176
+ .executeTakeFirstOrThrow();
1177
+
1178
+ // Get the change set ID from the version's commit
1179
+ const versionCommit = await lix.db
1180
+ .selectFrom("commit")
1181
+ .where("id", "=", version.commit_id)
1182
+ .selectAll()
1183
+ .executeTakeFirstOrThrow();
1184
+
1185
+ // Get the change set ID from the working commit
1186
+ const workingCommit = await lix.db
1187
+ .selectFrom("commit")
1188
+ .where("id", "=", version.working_commit_id)
1189
+ .selectAll()
1190
+ .executeTakeFirstOrThrow();
1191
+
1192
+ // Find which change_set_element is in the version's change set (not working)
1193
+ const versionChangeSetElement = changeSetElements.find(
1194
+ (el) => el.change_set_id === versionCommit.change_set_id
1195
+ );
1196
+ const workingChangeSetElement = changeSetElements.find(
1197
+ (el) => el.change_set_id === workingCommit.change_set_id
1198
+ );
1199
+
1200
+ expectDeterministic(versionChangeSetElement).toBeDefined();
1201
+ expectDeterministic(workingChangeSetElement).toBeDefined();
1202
+
1203
+ // The state view should show the commit_id from the version,
1204
+ // not related to the working change set (which is temporary and not part of the graph)
1205
+ expectDeterministic(stateResult[0]?.commit_id).toBe(version.commit_id);
1206
+ expectDeterministic(stateAllResult[0]?.commit_id).toBe(version.commit_id);
1207
+
1208
+ // Verify that the change_id also matches for consistency
1209
+ expectDeterministic(stateResult[0]?.change_id).toBe(
1210
+ versionChangeSetElement!.change_id
1211
+ );
1212
+ expectDeterministic(stateAllResult[0]?.change_id).toBe(
1213
+ versionChangeSetElement!.change_id
1214
+ );
1215
+ }
1216
+ );
1217
+
1218
+ // Write-through cache behavior tests
1219
+ simulationTest(
1220
+ "write-through cache: insert operations populate cache immediately",
1221
+ async ({ openSimulatedLix }) => {
1222
+ const lix = await openSimulatedLix({
1223
+ keyValues: [
1224
+ {
1225
+ key: "lix_deterministic_mode",
1226
+ value: { enabled: true, bootstrap: true },
1227
+ lixcol_version_id: "global",
1228
+ },
1229
+ ],
1230
+ });
1231
+
1232
+ const activeVersion = await lix.db
1233
+ .selectFrom("active_version")
1234
+ .innerJoin("version", "active_version.version_id", "version.id")
1235
+ .selectAll("version")
1236
+ .executeTakeFirstOrThrow();
1237
+
1238
+ // Insert state data - should populate cache via write-through
1239
+ await lix.db
1240
+ .insertInto("state_all")
1241
+ .values({
1242
+ entity_id: "write-through-entity",
1243
+ schema_key: "write-through-schema",
1244
+ file_id: "write-through-file",
1245
+ plugin_key: "write-through-plugin",
1246
+ snapshot_content: { test: "write-through-data" },
1247
+ schema_version: "1.0",
1248
+ version_id: activeVersion.id,
1249
+ })
1250
+ .execute();
1251
+
1252
+ // Cache should be populated immediately via write-through
1253
+ const cacheEntry = await (
1254
+ lix.db as unknown as Kysely<LixInternalDatabaseSchema>
1255
+ )
1256
+ .selectFrom("internal_state_cache")
1257
+ .where("entity_id", "=", "write-through-entity")
1258
+ .where("schema_key", "=", "write-through-schema")
1259
+ .where("file_id", "=", "write-through-file")
1260
+ .where("version_id", "=", activeVersion.id)
1261
+ .selectAll()
1262
+ .executeTakeFirst();
1263
+
1264
+ expect(cacheEntry).toBeDefined();
1265
+ expect(cacheEntry?.entity_id).toBe("write-through-entity");
1266
+ expect(cacheEntry?.plugin_key).toBe("write-through-plugin");
1267
+ expect(cacheEntry?.snapshot_content).toEqual({
1268
+ test: "write-through-data",
1269
+ });
1270
+
1271
+ // State view should return the same data (from cache)
1272
+ const stateResults = await lix.db
1273
+ .selectFrom("state_all")
1274
+ .where("entity_id", "=", "write-through-entity")
1275
+ .selectAll()
1276
+ .execute();
1277
+
1278
+ expect(stateResults).toHaveLength(1);
1279
+ expect(stateResults[0]?.entity_id).toBe("write-through-entity");
1280
+ expect(stateResults[0]?.snapshot_content).toEqual({
1281
+ test: "write-through-data",
1282
+ });
1283
+ },
1284
+ { simulations: [normalSimulation] }
1285
+ );
1286
+
1287
+ simulationTest(
1288
+ "write-through cache: update operations update cache immediately",
1289
+ async ({ openSimulatedLix }) => {
1290
+ const lix = await openSimulatedLix({
1291
+ keyValues: [
1292
+ {
1293
+ key: "lix_deterministic_mode",
1294
+ value: { enabled: true, bootstrap: true },
1295
+ lixcol_version_id: "global",
1296
+ },
1297
+ ],
1298
+ });
1299
+
1300
+ const activeVersion = await lix.db
1301
+ .selectFrom("active_version")
1302
+ .innerJoin("version", "active_version.version_id", "version.id")
1303
+ .selectAll("version")
1304
+ .executeTakeFirstOrThrow();
1305
+
1306
+ // Insert initial state
1307
+ await lix.db
1308
+ .insertInto("state_all")
1309
+ .values({
1310
+ entity_id: "update-cache-entity",
1311
+ schema_key: "update-cache-schema",
1312
+ file_id: "update-cache-file",
1313
+ plugin_key: "initial-plugin",
1314
+ snapshot_content: { initial: "value" },
1315
+ schema_version: "1.0",
1316
+ version_id: activeVersion.id,
1317
+ })
1318
+ .execute();
1319
+
1320
+ // Update the state - should update cache via write-through
1321
+ await lix.db
1322
+ .updateTable("state_all")
1323
+ .set({
1324
+ snapshot_content: { updated: "value" },
1325
+ plugin_key: "updated-plugin",
1326
+ })
1327
+ .where("entity_id", "=", "update-cache-entity")
1328
+ .where("schema_key", "=", "update-cache-schema")
1329
+ .where("file_id", "=", "update-cache-file")
1330
+ .where("version_id", "=", activeVersion.id)
1331
+ .execute();
1332
+
1333
+ // Cache should be immediately updated
1334
+ const cacheEntry = await (
1335
+ lix.db as unknown as Kysely<LixInternalDatabaseSchema>
1336
+ )
1337
+ .selectFrom("internal_state_cache")
1338
+ .where("entity_id", "=", "update-cache-entity")
1339
+ .where("schema_key", "=", "update-cache-schema")
1340
+ .where("file_id", "=", "update-cache-file")
1341
+ .where("version_id", "=", activeVersion.id)
1342
+ .selectAll()
1343
+ .executeTakeFirst();
1344
+
1345
+ expect(cacheEntry).toBeDefined();
1346
+ expect(cacheEntry?.snapshot_content).toEqual({
1347
+ updated: "value",
1348
+ });
1349
+ expect(cacheEntry?.plugin_key).toBe("updated-plugin");
1350
+
1351
+ // State view should return updated data
1352
+ const stateResults = await lix.db
1353
+ .selectFrom("state_all")
1354
+ .where("entity_id", "=", "update-cache-entity")
1355
+ .selectAll()
1356
+ .execute();
1357
+
1358
+ expect(stateResults).toHaveLength(1);
1359
+ expect(stateResults[0]?.snapshot_content).toEqual({ updated: "value" });
1360
+ expect(stateResults[0]?.plugin_key).toBe("updated-plugin");
1361
+ },
1362
+ { simulations: [normalSimulation] }
1363
+ );
1364
+
1365
+ simulationTest(
1366
+ "delete operations are validated for foreign key constraints",
1367
+ async ({ openSimulatedLix, expectDeterministic }) => {
1368
+ const lix = await openSimulatedLix({
1369
+ keyValues: [
1370
+ {
1371
+ key: "lix_deterministic_mode",
1372
+ value: { enabled: true, bootstrap: true },
1373
+ lixcol_version_id: "global",
1374
+ },
1375
+ ],
1376
+ });
1377
+
1378
+ // Define parent schema (referenced entity)
1379
+ const parentSchema: LixSchemaDefinition = {
1380
+ "x-lix-key": "parent_entity",
1381
+ "x-lix-version": "1.0",
1382
+ "x-lix-primary-key": ["id"],
1383
+ type: "object",
1384
+ properties: {
1385
+ id: { type: "string" },
1386
+ name: { type: "string" },
1387
+ },
1388
+ required: ["id", "name"],
1389
+ additionalProperties: false,
1390
+ };
1391
+
1392
+ // Define child schema with foreign key to parent
1393
+ const childSchema: LixSchemaDefinition = {
1394
+ "x-lix-key": "child_entity",
1395
+ "x-lix-version": "1.0",
1396
+ "x-lix-primary-key": ["id"],
1397
+ "x-lix-foreign-keys": [
1398
+ {
1399
+ properties: ["parent_id"],
1400
+ references: {
1401
+ schemaKey: "parent_entity",
1402
+ properties: ["id"],
1403
+ },
1404
+ },
1405
+ ],
1406
+ type: "object",
1407
+ properties: {
1408
+ id: { type: "string" },
1409
+ parent_id: { type: "string" },
1410
+ value: { type: "string" },
1411
+ },
1412
+ required: ["id", "parent_id", "value"],
1413
+ additionalProperties: false,
1414
+ };
1415
+
1416
+ // Register both schemas
1417
+ await lix.db
1418
+ .insertInto("stored_schema")
1419
+ .values([{ value: parentSchema }, { value: childSchema }])
1420
+ .execute();
1421
+
1422
+ // Insert parent entity
1423
+ await lix.db
1424
+ .insertInto("state_all")
1425
+ .values({
1426
+ entity_id: "parent-1",
1427
+ schema_key: "parent_entity",
1428
+ file_id: "test-file",
1429
+ plugin_key: "test-plugin",
1430
+ snapshot_content: {
1431
+ id: "parent-1",
1432
+ name: "Parent Entity",
1433
+ },
1434
+ schema_version: "1.0",
1435
+ version_id: sql`(SELECT version_id FROM active_version)`,
1436
+ })
1437
+ .execute();
1438
+
1439
+ // Insert child entity that references the parent
1440
+ await lix.db
1441
+ .insertInto("state_all")
1442
+ .values({
1443
+ entity_id: "child-1",
1444
+ schema_key: "child_entity",
1445
+ file_id: "test-file",
1446
+ plugin_key: "test-plugin",
1447
+ snapshot_content: {
1448
+ id: "child-1",
1449
+ parent_id: "parent-1",
1450
+ value: "Child Value",
1451
+ },
1452
+ schema_version: "1.0",
1453
+ version_id: sql`(SELECT version_id FROM active_version)`,
1454
+ })
1455
+ .execute();
1456
+
1457
+ // Verify both entities exist
1458
+ const parentBefore = await lix.db
1459
+ .selectFrom("state_all")
1460
+ .where("entity_id", "=", "parent-1")
1461
+ .where("schema_key", "=", "parent_entity")
1462
+ .selectAll()
1463
+ .execute();
1464
+
1465
+ const childBefore = await lix.db
1466
+ .selectFrom("state_all")
1467
+ .where("entity_id", "=", "child-1")
1468
+ .where("schema_key", "=", "child_entity")
1469
+ .selectAll()
1470
+ .execute();
1471
+
1472
+ expectDeterministic(parentBefore).toHaveLength(1);
1473
+ expectDeterministic(childBefore).toHaveLength(1);
1474
+
1475
+ // Attempting to delete the parent entity should fail due to foreign key constraint
1476
+ // because there's a child entity that references it
1477
+ await expect(
1478
+ lix.db
1479
+ .deleteFrom("state_all")
1480
+ .where("entity_id", "=", "parent-1")
1481
+ .where("schema_key", "=", "parent_entity")
1482
+ .execute()
1483
+ ).rejects.toThrow(/foreign key/i);
1484
+
1485
+ // Verify the parent still exists after failed deletion attempt
1486
+ const parentAfter = await lix.db
1487
+ .selectFrom("state_all")
1488
+ .where("entity_id", "=", "parent-1")
1489
+ .where("schema_key", "=", "parent_entity")
1490
+ .selectAll()
1491
+ .execute();
1492
+
1493
+ expectDeterministic(parentAfter).toHaveLength(1);
1494
+ }
1495
+ );
1496
+
1497
+ simulationTest(
1498
+ "child version inherits entities from parent version",
1499
+ async ({ openSimulatedLix, expectDeterministic }) => {
1500
+ const lix = await openSimulatedLix({
1501
+ keyValues: [
1502
+ {
1503
+ key: "lix_deterministic_mode",
1504
+ value: { enabled: true, bootstrap: true },
1505
+ lixcol_version_id: "global",
1506
+ },
1507
+ ],
1508
+ });
1509
+
1510
+ // Insert an entity into global version
1511
+ await lix.db
1512
+ .insertInto("state_all")
1513
+ .values({
1514
+ entity_id: "global-entity-1",
1515
+ file_id: "test-file",
1516
+ schema_key: "test_schema",
1517
+ plugin_key: "test_plugin",
1518
+ version_id: "global",
1519
+ snapshot_content: {
1520
+ id: "global-entity-1",
1521
+ name: "Global Entity",
1522
+ },
1523
+ schema_version: "1.0",
1524
+ })
1525
+ .execute();
1526
+
1527
+ // Create a child version that inherits from global
1528
+ const childVersion = await createVersion({
1529
+ lix,
1530
+ name: "child-version",
1531
+ });
1532
+
1533
+ // Verify inheritance was set up correctly
1534
+ expectDeterministic(childVersion.inherits_from_version_id).toBe("global");
1535
+
1536
+ // The child version should inherit the entity from global
1537
+ const inheritedEntity = await lix.db
1538
+ .selectFrom("state_all")
1539
+ .where("entity_id", "=", "global-entity-1")
1540
+ .where("version_id", "=", childVersion.id)
1541
+ .selectAll()
1542
+ .execute();
1543
+
1544
+ // This should pass - the entity should be visible in the child version via inheritance
1545
+ expectDeterministic(inheritedEntity).toHaveLength(1);
1546
+ expectDeterministic(inheritedEntity[0]?.entity_id).toBe("global-entity-1");
1547
+ expectDeterministic(inheritedEntity[0]?.version_id).toBe(childVersion.id); // Should return child version ID
1548
+ expectDeterministic(inheritedEntity[0]?.inherited_from_version_id).toBe(
1549
+ "global"
1550
+ ); // Should track inheritance source
1551
+ expectDeterministic(inheritedEntity[0]?.snapshot_content).toEqual({
1552
+ id: "global-entity-1",
1553
+ name: "Global Entity",
1554
+ });
1555
+ }
1556
+ );
1557
+
1558
+ simulationTest(
1559
+ "child version inherits then overrides with own entity",
1560
+ async ({ openSimulatedLix, expectDeterministic }) => {
1561
+ const lix = await openSimulatedLix({
1562
+ keyValues: [
1563
+ {
1564
+ key: "lix_deterministic_mode",
1565
+ value: { enabled: true, bootstrap: true },
1566
+ lixcol_version_id: "global",
1567
+ },
1568
+ ],
1569
+ });
1570
+
1571
+ // Insert an entity into global version
1572
+ await lix.db
1573
+ .insertInto("state_all")
1574
+ .values({
1575
+ entity_id: "shared-entity",
1576
+ file_id: "test-file",
1577
+ schema_key: "test_schema",
1578
+ plugin_key: "test_plugin",
1579
+ version_id: "global",
1580
+ snapshot_content: {
1581
+ id: "shared-entity",
1582
+ name: "Original Global Value",
1583
+ count: 1,
1584
+ },
1585
+ schema_version: "1.0",
1586
+ })
1587
+ .execute();
1588
+
1589
+ // Create a child version that inherits from global
1590
+ const childVersion = await createVersion({
1591
+ lix,
1592
+ id: "child-version",
1593
+ inherits_from_version_id: "global",
1594
+ });
1595
+
1596
+ // Verify the child initially sees the inherited entity
1597
+ const inheritedEntity = await lix.db
1598
+ .selectFrom("state_all")
1599
+ .where("entity_id", "=", "shared-entity")
1600
+ .where("version_id", "=", childVersion.id)
1601
+ .selectAll()
1602
+ .execute();
1603
+
1604
+ expectDeterministic(inheritedEntity).toHaveLength(1);
1605
+ expectDeterministic(inheritedEntity[0]?.version_id).toBe(childVersion.id);
1606
+ expectDeterministic(inheritedEntity[0]?.inherited_from_version_id).toBe(
1607
+ "global"
1608
+ );
1609
+ expectDeterministic(inheritedEntity[0]?.snapshot_content).toEqual({
1610
+ id: "shared-entity",
1611
+ name: "Original Global Value",
1612
+ count: 1,
1613
+ });
1614
+
1615
+ // Now modify the entity in the child version (copy-on-write)
1616
+ await lix.db
1617
+ .updateTable("state_all")
1618
+ .set({
1619
+ snapshot_content: {
1620
+ id: "shared-entity",
1621
+ name: "Modified in Child Version",
1622
+ count: 2,
1623
+ },
1624
+ })
1625
+ .where("entity_id", "=", "shared-entity")
1626
+ .where("version_id", "=", childVersion.id)
1627
+ .execute();
1628
+
1629
+ // Verify the child now has its own version of the entity
1630
+ const childEntity = await lix.db
1631
+ .selectFrom("state_all")
1632
+ .where("entity_id", "=", "shared-entity")
1633
+ .where("version_id", "=", childVersion.id)
1634
+ .selectAll()
1635
+ .execute();
1636
+
1637
+ expectDeterministic(childEntity).toHaveLength(1);
1638
+ expectDeterministic(childEntity[0]?.version_id).toBe(childVersion.id);
1639
+ expectDeterministic(childEntity[0]?.inherited_from_version_id).toBe(null); // No longer inherited
1640
+ expectDeterministic(childEntity[0]?.snapshot_content).toEqual({
1641
+ id: "shared-entity",
1642
+ name: "Modified in Child Version",
1643
+ count: 2,
1644
+ });
1645
+
1646
+ // Verify the global version still has the original value
1647
+ const globalEntity = await lix.db
1648
+ .selectFrom("state_all")
1649
+ .where("entity_id", "=", "shared-entity")
1650
+ .where("version_id", "=", "global")
1651
+ .selectAll()
1652
+ .execute();
1653
+
1654
+ expectDeterministic(globalEntity).toHaveLength(1);
1655
+ expectDeterministic(globalEntity[0]?.version_id).toBe("global");
1656
+ expectDeterministic(globalEntity[0]?.inherited_from_version_id).toBe(null);
1657
+ expectDeterministic(globalEntity[0]?.snapshot_content).toEqual({
1658
+ id: "shared-entity",
1659
+ name: "Original Global Value",
1660
+ count: 1,
1661
+ });
1662
+
1663
+ // Verify we now have 2 separate entities (one in global, one in child)
1664
+ const allEntities = await lix.db
1665
+ .selectFrom("state_all")
1666
+ .where("entity_id", "=", "shared-entity")
1667
+ .where("version_id", "in", ["global", childVersion.id])
1668
+ .orderBy("version_id", "asc")
1669
+ .selectAll()
1670
+ .execute();
1671
+
1672
+ expectDeterministic(allEntities).toHaveLength(2);
1673
+
1674
+ // Child version entity (modified)
1675
+ expectDeterministic(allEntities[0]?.version_id).toBe(childVersion.id);
1676
+ expectDeterministic(allEntities[0]?.inherited_from_version_id).toBe(null);
1677
+ expectDeterministic(allEntities[0]?.snapshot_content).toEqual({
1678
+ id: "shared-entity",
1679
+ name: "Modified in Child Version",
1680
+ count: 2,
1681
+ });
1682
+
1683
+ // Global version entity (original)
1684
+ expectDeterministic(allEntities[1]?.version_id).toBe("global");
1685
+ expectDeterministic(allEntities[1]?.inherited_from_version_id).toBe(null);
1686
+ expectDeterministic(allEntities[1]?.snapshot_content).toEqual({
1687
+ id: "shared-entity",
1688
+ name: "Original Global Value",
1689
+ count: 1,
1690
+ });
1691
+ }
1692
+ );
1693
+
1694
+ simulationTest(
1695
+ "child version deletes inherited entity via copy-on-write",
1696
+ async ({ openSimulatedLix, expectDeterministic }) => {
1697
+ const mockSchema: LixSchemaDefinition = {
1698
+ "x-lix-key": "test_schema",
1699
+ "x-lix-version": "1.0",
1700
+ type: "object",
1701
+ additionalProperties: false,
1702
+ properties: {
1703
+ id: { type: "string" },
1704
+ name: { type: "string" },
1705
+ },
1706
+ };
1707
+
1708
+ const lix = await openSimulatedLix({
1709
+ keyValues: [
1710
+ {
1711
+ key: "lix_deterministic_mode",
1712
+ value: { enabled: true, bootstrap: true },
1713
+ lixcol_version_id: "global",
1714
+ },
1715
+ ],
1716
+ });
1717
+
1718
+ const activeVersion = await lix.db
1719
+ .selectFrom("active_version")
1720
+ .innerJoin("version", "active_version.version_id", "version.id")
1721
+ .selectAll("version")
1722
+ .executeTakeFirstOrThrow();
1723
+
1724
+ // Insert schema
1725
+ await lix.db
1726
+ .insertInto("stored_schema")
1727
+ .values({ value: mockSchema })
1728
+ .execute();
1729
+
1730
+ // Insert an entity into global version
1731
+ await lix.db
1732
+ .insertInto("state_all")
1733
+ .values({
1734
+ entity_id: "shared-entity",
1735
+ file_id: "test-file",
1736
+ schema_key: "test_schema",
1737
+ plugin_key: "test_plugin",
1738
+ version_id: "global",
1739
+ snapshot_content: {
1740
+ id: "shared-entity",
1741
+ name: "shared Entity",
1742
+ },
1743
+ schema_version: "1.0",
1744
+ })
1745
+ .execute();
1746
+
1747
+ // Verify the child initially sees the inherited entity
1748
+ const inheritedEntity = await lix.db
1749
+ .selectFrom("state_all")
1750
+ .where("entity_id", "=", "shared-entity")
1751
+ .where("version_id", "=", activeVersion.id)
1752
+ .selectAll()
1753
+ .execute();
1754
+
1755
+ expectDeterministic(inheritedEntity).toHaveLength(1);
1756
+ expectDeterministic(inheritedEntity[0]?.version_id).toBe(activeVersion.id);
1757
+ expectDeterministic(inheritedEntity[0]?.inherited_from_version_id).toBe(
1758
+ "global"
1759
+ );
1760
+
1761
+ // Delete the inherited entity in child version (should create copy-on-write deletion)
1762
+ await lix.db
1763
+ .deleteFrom("state_all")
1764
+ .where("entity_id", "=", "shared-entity")
1765
+ .where("version_id", "=", activeVersion.id)
1766
+ .execute();
1767
+
1768
+ // Verify the entity is deleted in child version
1769
+ const childEntityAfterDelete = await lix.db
1770
+ .selectFrom("state_all")
1771
+ .where("entity_id", "=", "shared-entity")
1772
+ .where("version_id", "=", activeVersion.id)
1773
+ .selectAll()
1774
+ .execute();
1775
+
1776
+ // Entity should be deleted in child version (copy-on-write deletion)
1777
+ expectDeterministic(childEntityAfterDelete).toHaveLength(0);
1778
+
1779
+ // Verify the entity still exists in global version (not affected by child deletion)
1780
+ const inheritedEntityAfterDelete = await lix.db
1781
+ .selectFrom("state_all")
1782
+ .where("entity_id", "=", "shared-entity")
1783
+ .where("version_id", "=", "global")
1784
+ .selectAll()
1785
+ .execute();
1786
+
1787
+ expectDeterministic(inheritedEntityAfterDelete).toHaveLength(1);
1788
+ expectDeterministic(
1789
+ inheritedEntityAfterDelete[0]?.snapshot_content
1790
+ ).toEqual({
1791
+ id: "shared-entity",
1792
+ name: "shared Entity",
1793
+ });
1794
+
1795
+ // Verify we now only see the global entity through the state view (deletion marker is hidden)
1796
+ const allEntities = await lix.db
1797
+ .selectFrom("state_all")
1798
+ .where("entity_id", "=", "shared-entity")
1799
+ .selectAll()
1800
+ .execute();
1801
+
1802
+ // Both cache hit and cache miss scenarios should behave identically:
1803
+ // copy-on-write deletion hides the entity from child but preserves it in parent
1804
+ expectDeterministic(allEntities).toHaveLength(1);
1805
+ expectDeterministic(allEntities[0]?.version_id).toBe("global");
1806
+ expectDeterministic(allEntities[0]?.inherited_from_version_id).toBe(null); // It's the original global entity
1807
+ }
1808
+ );
1809
+
1810
+ simulationTest(
1811
+ "deleting without filtering for the version_id deletes the entity from all versions",
1812
+ async ({ openSimulatedLix, expectDeterministic }) => {
1813
+ const lix = await openSimulatedLix({
1814
+ keyValues: [
1815
+ {
1816
+ key: "lix_deterministic_mode",
1817
+ value: { enabled: true, bootstrap: true },
1818
+ lixcol_version_id: "global",
1819
+ },
1820
+ ],
1821
+ });
1822
+
1823
+ // Insert an entity into global version
1824
+ await lix.db
1825
+ .insertInto("state_all")
1826
+ .values({
1827
+ entity_id: "shared-entity",
1828
+ file_id: "test-file",
1829
+ schema_key: "test_schema",
1830
+ plugin_key: "test_plugin",
1831
+ version_id: "global",
1832
+ snapshot_content: {
1833
+ id: "shared-entity",
1834
+ name: "Global Entity",
1835
+ },
1836
+ schema_version: "1.0",
1837
+ })
1838
+ .execute();
1839
+
1840
+ // Create a child version that inherits from global
1841
+ const childVersion = await createVersion({
1842
+ lix,
1843
+ name: "child-version",
1844
+ inherits_from_version_id: "global",
1845
+ });
1846
+
1847
+ // Verify inheritance - both global and child should see the entity
1848
+ const beforeDelete = await lix.db
1849
+ .selectFrom("state_all")
1850
+ .where("entity_id", "=", "shared-entity")
1851
+ .where("version_id", "in", ["global", childVersion.id])
1852
+ .selectAll()
1853
+ .execute();
1854
+
1855
+ expectDeterministic(beforeDelete).toHaveLength(2); // One in global, one inherited in child
1856
+ expectDeterministic(beforeDelete).toMatchObject([
1857
+ {
1858
+ entity_id: "shared-entity",
1859
+ version_id: "global",
1860
+ inherited_from_version_id: null,
1861
+ snapshot_content: { id: "shared-entity", name: "Global Entity" },
1862
+ },
1863
+ {
1864
+ entity_id: "shared-entity",
1865
+ version_id: childVersion.id,
1866
+ inherited_from_version_id: "global",
1867
+ snapshot_content: { id: "shared-entity", name: "Global Entity" },
1868
+ },
1869
+ ]);
1870
+
1871
+ await lix.db
1872
+ .deleteFrom("state_all")
1873
+ .where("entity_id", "=", "shared-entity")
1874
+ .where("schema_key", "=", "test_schema")
1875
+ .execute();
1876
+
1877
+ const afterDelete = await lix.db
1878
+ .selectFrom("state_all")
1879
+ .where("entity_id", "=", "shared-entity")
1880
+ .selectAll()
1881
+ .execute();
1882
+
1883
+ // Should be deleted from every version
1884
+ expectDeterministic(afterDelete).toHaveLength(0);
1885
+ }
1886
+ );
1887
+
1888
+ simulationTest(
1889
+ "untracked mutations don't trigger change control",
1890
+ async ({ openSimulatedLix, expectDeterministic }) => {
1891
+ const lix = await openSimulatedLix({
1892
+ keyValues: [
1893
+ {
1894
+ key: "lix_deterministic_mode",
1895
+ value: { enabled: true, bootstrap: true },
1896
+ lixcol_version_id: "global",
1897
+ },
1898
+ ],
1899
+ });
1900
+
1901
+ const mockSchema: LixSchemaDefinition = {
1902
+ "x-lix-key": "mock_schema",
1903
+ "x-lix-version": "1.0",
1904
+ type: "object",
1905
+ additionalProperties: false,
1906
+ properties: {
1907
+ value: {
1908
+ type: "string",
1909
+ },
1910
+ },
1911
+ };
1912
+
1913
+ await lix.db
1914
+ .insertInto("stored_schema")
1915
+ .values({ value: mockSchema })
1916
+ .execute();
1917
+
1918
+ // Count changes before any untracked mutations
1919
+ const changesInitial = await lix.db
1920
+ .selectFrom("change")
1921
+ .selectAll()
1922
+ .execute();
1923
+
1924
+ // 1. INSERT untracked state
1925
+ await lix.db
1926
+ .insertInto("state_all")
1927
+ .values({
1928
+ entity_id: "untracked-entity",
1929
+ file_id: "test-file",
1930
+ schema_key: "mock_schema",
1931
+ plugin_key: "test_plugin",
1932
+ schema_version: "1.0",
1933
+ version_id: sql`(SELECT version_id FROM active_version)`,
1934
+ snapshot_content: {
1935
+ value: "untracked value",
1936
+ },
1937
+ untracked: true,
1938
+ })
1939
+ .execute();
1940
+
1941
+ // Count changes after untracked insert
1942
+ const changesAfterInsert = await lix.db
1943
+ .selectFrom("change")
1944
+ .selectAll()
1945
+ .execute();
1946
+
1947
+ // Number of changes should be identical (no change control for untracked)
1948
+ expectDeterministic(changesAfterInsert.length).toBe(changesInitial.length);
1949
+
1950
+ // Verify the untracked entity exists in state view
1951
+ const untrackedState = await lix.db
1952
+ .selectFrom("state_all")
1953
+ .where("entity_id", "=", "untracked-entity")
1954
+ .selectAll()
1955
+ .execute();
1956
+
1957
+ expectDeterministic(untrackedState).toHaveLength(1);
1958
+ expectDeterministic(untrackedState[0]?.snapshot_content).toEqual({
1959
+ value: "untracked value",
1960
+ });
1961
+ expectDeterministic(untrackedState[0]?.untracked).toBe(1);
1962
+
1963
+ // 2. UPDATE untracked state
1964
+ await lix.db
1965
+ .updateTable("state_all")
1966
+ .where("entity_id", "=", "untracked-entity")
1967
+ .set({
1968
+ snapshot_content: {
1969
+ value: "untracked value updated",
1970
+ },
1971
+ untracked: true,
1972
+ })
1973
+ .execute();
1974
+
1975
+ // Count changes after untracked update
1976
+ const changesAfterUpdate = await lix.db
1977
+ .selectFrom("change")
1978
+ .selectAll()
1979
+ .execute();
1980
+
1981
+ // Number of changes should still be identical (no change control for untracked)
1982
+ expectDeterministic(changesAfterUpdate.length).toBe(changesInitial.length);
1983
+
1984
+ // Verify the untracked entity was updated
1985
+ const updatedState = await lix.db
1986
+ .selectFrom("state_all")
1987
+ .where("entity_id", "=", "untracked-entity")
1988
+ .selectAll()
1989
+ .execute();
1990
+
1991
+ expectDeterministic(updatedState).toHaveLength(1);
1992
+ expectDeterministic(updatedState[0]?.snapshot_content).toEqual({
1993
+ value: "untracked value updated",
1994
+ });
1995
+ expectDeterministic(updatedState[0]?.untracked).toBe(1);
1996
+
1997
+ // 3. DELETE untracked state
1998
+ await lix.db
1999
+ .deleteFrom("state_all")
2000
+ .where("entity_id", "=", "untracked-entity")
2001
+ .execute();
2002
+
2003
+ // Count changes after untracked delete
2004
+ const changesAfterDelete = await lix.db
2005
+ .selectFrom("change")
2006
+ .selectAll()
2007
+ .execute();
2008
+
2009
+ // Number of changes should still be identical (no change control for untracked)
2010
+ expectDeterministic(changesAfterDelete.length).toBe(changesInitial.length);
2011
+
2012
+ // Verify the untracked entity was deleted
2013
+ const deletedState = await lix.db
2014
+ .selectFrom("state_all")
2015
+ .where("entity_id", "=", "untracked-entity")
2016
+ .selectAll()
2017
+ .execute();
2018
+
2019
+ expectDeterministic(deletedState).toHaveLength(0);
2020
+ }
2021
+ );
2022
+
2023
+ simulationTest(
2024
+ "tracked update to previously untracked entity deletes untracked state",
2025
+ async ({ openSimulatedLix, expectDeterministic }) => {
2026
+ const lix = await openSimulatedLix({
2027
+ keyValues: [
2028
+ {
2029
+ key: "lix_deterministic_mode",
2030
+ value: { enabled: true, bootstrap: true },
2031
+ lixcol_version_id: "global",
2032
+ },
2033
+ ],
2034
+ });
2035
+
2036
+ const mockSchema: LixSchemaDefinition = {
2037
+ "x-lix-key": "mock_schema",
2038
+ "x-lix-version": "1.0",
2039
+ type: "object",
2040
+ additionalProperties: false,
2041
+ properties: {
2042
+ value: {
2043
+ type: "string",
2044
+ },
2045
+ },
2046
+ };
2047
+
2048
+ await lix.db
2049
+ .insertInto("stored_schema")
2050
+ .values({ value: mockSchema })
2051
+ .execute();
2052
+
2053
+ // Insert untracked state
2054
+ await lix.db
2055
+ .insertInto("state_all")
2056
+ .values({
2057
+ entity_id: "override-entity",
2058
+ file_id: "test-file",
2059
+ schema_key: "mock_schema",
2060
+ plugin_key: "test_plugin",
2061
+ schema_version: "1.0",
2062
+ version_id: sql`(SELECT version_id FROM active_version)`,
2063
+ snapshot_content: {
2064
+ value: "untracked value",
2065
+ },
2066
+ untracked: true,
2067
+ })
2068
+ .execute();
2069
+
2070
+ // Verify untracked state exists
2071
+ const untrackedState = await lix.db
2072
+ .selectFrom("state_all")
2073
+ .where("entity_id", "=", "override-entity")
2074
+ .selectAll()
2075
+ .execute();
2076
+
2077
+ expectDeterministic(untrackedState).toHaveLength(1);
2078
+ expectDeterministic(untrackedState[0]?.snapshot_content).toEqual({
2079
+ value: "untracked value",
2080
+ });
2081
+
2082
+ // Now update the untracked entity to make it tracked (should delete from untracked table)
2083
+ await lix.db
2084
+ .updateTable("state_all")
2085
+ .set({
2086
+ snapshot_content: {
2087
+ value: "tracked value",
2088
+ },
2089
+ untracked: false,
2090
+ })
2091
+ .where("entity_id", "=", "override-entity")
2092
+ .where("schema_key", "=", "mock_schema")
2093
+ .execute();
2094
+
2095
+ // Verify tracked state has overridden untracked state
2096
+ const finalState = await lix.db
2097
+ .selectFrom("state_all")
2098
+ .where("entity_id", "=", "override-entity")
2099
+ .selectAll()
2100
+ .execute();
2101
+
2102
+ expectDeterministic(finalState).toHaveLength(1);
2103
+ expectDeterministic(finalState[0]?.snapshot_content).toEqual({
2104
+ value: "tracked value",
2105
+ });
2106
+
2107
+ // Verify a change was created for the tracked mutation
2108
+ const changes = await lix.db
2109
+ .selectFrom("change")
2110
+ .where("entity_id", "=", "override-entity")
2111
+ .where("schema_key", "=", "mock_schema")
2112
+ .selectAll()
2113
+ .execute();
2114
+
2115
+ expectDeterministic(changes.length).toBeGreaterThan(0);
2116
+ }
2117
+ );
2118
+
2119
+ simulationTest(
2120
+ "untracked state is persisted across lix sessions",
2121
+ async ({ openSimulatedLix, expectDeterministic }) => {
2122
+ const mockSchema: LixSchemaDefinition = {
2123
+ "x-lix-key": "mock_schema",
2124
+ "x-lix-version": "1.0",
2125
+ type: "object",
2126
+ additionalProperties: false,
2127
+ properties: {
2128
+ value: {
2129
+ type: "string",
2130
+ },
2131
+ },
2132
+ };
2133
+
2134
+ // First session - create and insert untracked state
2135
+ const lix1 = await openSimulatedLix({
2136
+ keyValues: [
2137
+ {
2138
+ key: "lix_deterministic_mode",
2139
+ value: { enabled: true, bootstrap: true },
2140
+ lixcol_version_id: "global",
2141
+ },
2142
+ ],
2143
+ });
2144
+
2145
+ await lix1.db
2146
+ .insertInto("stored_schema")
2147
+ .values({ value: mockSchema })
2148
+ .execute();
2149
+
2150
+ await lix1.db
2151
+ .insertInto("state_all")
2152
+ .values({
2153
+ entity_id: "persistent-entity",
2154
+ file_id: "test-file",
2155
+ schema_key: "mock_schema",
2156
+ plugin_key: "test_plugin",
2157
+ schema_version: "1.0",
2158
+ version_id: sql`(SELECT version_id FROM active_version)`,
2159
+ snapshot_content: {
2160
+ value: "persistent untracked value",
2161
+ },
2162
+ untracked: true,
2163
+ })
2164
+ .execute();
2165
+
2166
+ // Second session - verify untracked state persists
2167
+ const lix2 = await openLix({ blob: await lix1.toBlob() });
2168
+
2169
+ const persistedState = await lix2.db
2170
+ .selectFrom("state_all")
2171
+ .where("entity_id", "=", "persistent-entity")
2172
+ .selectAll()
2173
+ .execute();
2174
+
2175
+ expectDeterministic(persistedState).toHaveLength(1);
2176
+ expectDeterministic(persistedState[0]?.snapshot_content).toEqual({
2177
+ value: "persistent untracked value",
2178
+ });
2179
+
2180
+ await lix2.close();
2181
+ }
2182
+ );
2183
+
2184
+ simulationTest(
2185
+ "untracked state has highest priority in UNION (untracked > tracked > inherited)",
2186
+ async ({ openSimulatedLix, expectDeterministic }) => {
2187
+ const lix = await openSimulatedLix({
2188
+ keyValues: [
2189
+ {
2190
+ key: "lix_deterministic_mode",
2191
+ value: { enabled: true, bootstrap: true },
2192
+ lixcol_version_id: "global",
2193
+ },
2194
+ ],
2195
+ });
2196
+
2197
+ const mockSchema: LixSchemaDefinition = {
2198
+ "x-lix-key": "mock_schema",
2199
+ "x-lix-version": "1.0",
2200
+ type: "object",
2201
+ additionalProperties: false,
2202
+ properties: {
2203
+ value: {
2204
+ type: "string",
2205
+ },
2206
+ },
2207
+ };
2208
+
2209
+ await lix.db
2210
+ .insertInto("stored_schema")
2211
+ .values({ value: mockSchema })
2212
+ .execute();
2213
+
2214
+ // Step 1: Insert tracked state with "init"
2215
+ await lix.db
2216
+ .insertInto("state_all")
2217
+ .values({
2218
+ entity_id: "entity0",
2219
+ file_id: "test-file",
2220
+ schema_key: "mock_schema",
2221
+ plugin_key: "test_plugin",
2222
+ schema_version: "1.0",
2223
+ version_id: sql`(SELECT version_id FROM active_version)`,
2224
+ snapshot_content: {
2225
+ value: "init",
2226
+ },
2227
+ untracked: false,
2228
+ })
2229
+ .execute();
2230
+
2231
+ // Verify tracked state exists
2232
+ const afterInit = await lix.db
2233
+ .selectFrom("state_all")
2234
+ .where("entity_id", "=", "entity0")
2235
+ .selectAll()
2236
+ .execute();
2237
+
2238
+ expectDeterministic(afterInit).toHaveLength(1);
2239
+ expectDeterministic(afterInit[0]?.snapshot_content).toEqual({
2240
+ value: "init",
2241
+ });
2242
+
2243
+ // Step 2: Update to untracked state with "update" (should NOT delete tracked state)
2244
+ await lix.db
2245
+ .updateTable("state_all")
2246
+ .set({
2247
+ snapshot_content: {
2248
+ value: "update",
2249
+ },
2250
+ untracked: true,
2251
+ })
2252
+ .where("entity_id", "=", "entity0")
2253
+ .where("schema_key", "=", "mock_schema")
2254
+ .execute();
2255
+
2256
+ // Step 3: Query should return untracked state "update" (highest priority)
2257
+ const afterUntrackedUpdate = await lix.db
2258
+ .selectFrom("state_all")
2259
+ .where("entity_id", "=", "entity0")
2260
+ .selectAll()
2261
+ .execute();
2262
+
2263
+ expectDeterministic(afterUntrackedUpdate).toHaveLength(1);
2264
+ expectDeterministic(afterUntrackedUpdate[0]?.snapshot_content).toEqual({
2265
+ value: "update",
2266
+ });
2267
+
2268
+ // Step 4: Update back to tracked state with "update2" (should delete untracked state)
2269
+ await lix.db
2270
+ .updateTable("state_all")
2271
+ .set({
2272
+ snapshot_content: {
2273
+ value: "update2",
2274
+ },
2275
+ untracked: false,
2276
+ })
2277
+ .where("entity_id", "=", "entity0")
2278
+ .where("schema_key", "=", "mock_schema")
2279
+ .execute();
2280
+
2281
+ // Step 5: Query should return tracked state "update2"
2282
+ const afterTrackedUpdate = await lix.db
2283
+ .selectFrom("state_all")
2284
+ .where("entity_id", "=", "entity0")
2285
+ .selectAll()
2286
+ .execute();
2287
+
2288
+ expectDeterministic(afterTrackedUpdate).toHaveLength(1);
2289
+ expectDeterministic(afterTrackedUpdate[0]?.snapshot_content).toEqual({
2290
+ value: "update2",
2291
+ });
2292
+
2293
+ // Verify that a change was created for the final tracked mutation
2294
+ const changes = await lix.db
2295
+ .selectFrom("change")
2296
+ .where("entity_id", "=", "entity0")
2297
+ .where("schema_key", "=", "mock_schema")
2298
+ .selectAll()
2299
+ .execute();
2300
+
2301
+ expectDeterministic(changes.length).toBeGreaterThan(0);
2302
+ }
2303
+ );
2304
+
2305
+ simulationTest(
2306
+ "untracked state overrides inherited state (untracked > inherited)",
2307
+ async ({ openSimulatedLix, expectDeterministic }) => {
2308
+ const lix = await openSimulatedLix({
2309
+ keyValues: [
2310
+ {
2311
+ key: "lix_deterministic_mode",
2312
+ value: { enabled: true, bootstrap: true },
2313
+ lixcol_version_id: "global",
2314
+ },
2315
+ ],
2316
+ });
2317
+
2318
+ const mockSchema: LixSchemaDefinition = {
2319
+ "x-lix-key": "mock_schema",
2320
+ "x-lix-version": "1.0",
2321
+ type: "object",
2322
+ additionalProperties: false,
2323
+ properties: {
2324
+ value: {
2325
+ type: "string",
2326
+ },
2327
+ },
2328
+ };
2329
+
2330
+ await lix.db
2331
+ .insertInto("stored_schema")
2332
+ .values({ value: mockSchema })
2333
+ .execute();
2334
+
2335
+ // Step 1: Insert entity in global version (will be inherited by child)
2336
+ await lix.db
2337
+ .insertInto("state_all")
2338
+ .values({
2339
+ entity_id: "inherited-entity",
2340
+ file_id: "test-file",
2341
+ schema_key: "mock_schema",
2342
+ plugin_key: "test_plugin",
2343
+ schema_version: "1.0",
2344
+ version_id: "global",
2345
+ snapshot_content: {
2346
+ value: "inherited value",
2347
+ },
2348
+ untracked: false,
2349
+ })
2350
+ .execute();
2351
+
2352
+ // Step 2: Create a child version that inherits from global
2353
+ const childVersion = await createVersion({ lix, name: "child-version" });
2354
+
2355
+ // Verify inheritance is set up correctly
2356
+ expectDeterministic(childVersion.inherits_from_version_id).toBe("global");
2357
+
2358
+ // Step 3: Verify child initially sees inherited entity
2359
+ const inheritedState = await lix.db
2360
+ .selectFrom("state_all")
2361
+ .where("entity_id", "=", "inherited-entity")
2362
+ .where("version_id", "=", childVersion.id)
2363
+ .selectAll()
2364
+ .execute();
2365
+
2366
+ expectDeterministic(inheritedState).toHaveLength(1);
2367
+ expectDeterministic(inheritedState[0]?.snapshot_content).toEqual({
2368
+ value: "inherited value",
2369
+ });
2370
+ expectDeterministic(inheritedState[0]?.inherited_from_version_id).toBe(
2371
+ "global"
2372
+ );
2373
+
2374
+ // Step 4: Add untracked state for same entity in child version
2375
+ await lix.db
2376
+ .insertInto("state_all")
2377
+ .values({
2378
+ entity_id: "inherited-entity",
2379
+ file_id: "test-file",
2380
+ schema_key: "mock_schema",
2381
+ plugin_key: "test_plugin",
2382
+ schema_version: "1.0",
2383
+ version_id: childVersion.id,
2384
+ snapshot_content: {
2385
+ value: "untracked override",
2386
+ },
2387
+ untracked: true,
2388
+ })
2389
+ .execute();
2390
+
2391
+ // Step 5: Query should return untracked state (higher priority than inherited)
2392
+ const finalState = await lix.db
2393
+ .selectFrom("state_all")
2394
+ .where("entity_id", "=", "inherited-entity")
2395
+ .where("version_id", "=", childVersion.id)
2396
+ .selectAll()
2397
+ .execute();
2398
+
2399
+ expectDeterministic(finalState).toHaveLength(1);
2400
+ expectDeterministic(finalState[0]?.snapshot_content).toEqual({
2401
+ value: "untracked override",
2402
+ });
2403
+ expectDeterministic(finalState[0]?.inherited_from_version_id).toBe(null); // Should not be inherited anymore
2404
+ expectDeterministic(finalState[0]?.version_id).toBe(childVersion.id);
2405
+
2406
+ // Step 6: Verify the inherited entity still exists in global version (unchanged)
2407
+ const globalState = await lix.db
2408
+ .selectFrom("state_all")
2409
+ .where("entity_id", "=", "inherited-entity")
2410
+ .where("version_id", "=", "global")
2411
+ .selectAll()
2412
+ .execute();
2413
+
2414
+ expectDeterministic(globalState).toHaveLength(1);
2415
+ expectDeterministic(globalState[0]?.snapshot_content).toEqual({
2416
+ value: "inherited value",
2417
+ });
2418
+ expectDeterministic(globalState[0]?.inherited_from_version_id).toBe(null);
2419
+
2420
+ // Step 7: No changes should be created for untracked mutations
2421
+ const changes = await lix.db
2422
+ .selectFrom("change")
2423
+ .where("entity_id", "=", "inherited-entity")
2424
+ .where("schema_key", "=", "mock_schema")
2425
+ .selectAll()
2426
+ .execute();
2427
+
2428
+ // Should only have the original change from global version, not the untracked one
2429
+ expectDeterministic(changes).toHaveLength(1);
2430
+ }
2431
+ );
2432
+
2433
+ simulationTest(
2434
+ "untracked state inheritance",
2435
+ async ({ openSimulatedLix, expectDeterministic }) => {
2436
+ const lix = await openSimulatedLix({
2437
+ keyValues: [
2438
+ {
2439
+ key: "lix_deterministic_mode",
2440
+ value: { enabled: true, bootstrap: true },
2441
+ lixcol_version_id: "global",
2442
+ },
2443
+ ],
2444
+ });
2445
+
2446
+ const mockSchema: LixSchemaDefinition = {
2447
+ "x-lix-key": "mock_schema",
2448
+ "x-lix-version": "1.0",
2449
+ type: "object",
2450
+ additionalProperties: false,
2451
+ properties: {
2452
+ value: {
2453
+ type: "string",
2454
+ },
2455
+ },
2456
+ };
2457
+
2458
+ await lix.db
2459
+ .insertInto("stored_schema_all")
2460
+ .values({ value: mockSchema, lixcol_version_id: "global" })
2461
+ .execute();
2462
+
2463
+ const activeVersion = await lix.db
2464
+ .selectFrom("active_version")
2465
+ .innerJoin("version", "active_version.version_id", "version.id")
2466
+ .selectAll("version")
2467
+ .executeTakeFirstOrThrow();
2468
+
2469
+ // inserting into the global version
2470
+ await lix.db
2471
+ .insertInto("state_all")
2472
+ .values({
2473
+ file_id: "test-file",
2474
+ schema_key: "mock_schema",
2475
+ plugin_key: "test_plugin",
2476
+ schema_version: "1.0",
2477
+ entity_id: "test_key",
2478
+ snapshot_content: {
2479
+ value: "test_value",
2480
+ },
2481
+ version_id: "global",
2482
+ untracked: true,
2483
+ })
2484
+ .execute();
2485
+
2486
+ const globalState = await lix.db
2487
+ .selectFrom("state_all")
2488
+ .where("entity_id", "=", "test_key")
2489
+ .where("version_id", "=", "global")
2490
+ .select("snapshot_content")
2491
+ .executeTakeFirstOrThrow();
2492
+
2493
+ expectDeterministic(globalState).toBeDefined();
2494
+
2495
+ const versionState = await lix.db
2496
+ .selectFrom("state_all")
2497
+ .where("entity_id", "=", "test_key")
2498
+ .where("version_id", "=", activeVersion.id)
2499
+ .select("snapshot_content")
2500
+ .executeTakeFirstOrThrow();
2501
+
2502
+ expectDeterministic(versionState).toBeDefined();
2503
+ expectDeterministic(versionState).toEqual(globalState);
2504
+ }
2505
+ );
2506
+
2507
+ simulationTest(
2508
+ "tracked state in child overrides inherited untracked state",
2509
+ async ({ openSimulatedLix, expectDeterministic }) => {
2510
+ const lix = await openSimulatedLix({
2511
+ keyValues: [
2512
+ {
2513
+ key: "lix_deterministic_mode",
2514
+ value: { enabled: true, bootstrap: true },
2515
+ lixcol_version_id: "global",
2516
+ },
2517
+ ],
2518
+ });
2519
+
2520
+ const mockSchema: LixSchemaDefinition = {
2521
+ "x-lix-key": "mock_schema",
2522
+ "x-lix-version": "1.0",
2523
+ type: "object",
2524
+ additionalProperties: false,
2525
+ properties: {
2526
+ value: {
2527
+ type: "string",
2528
+ },
2529
+ },
2530
+ };
2531
+
2532
+ await lix.db
2533
+ .insertInto("stored_schema") // Use stored_schema, not stored_schema_all
2534
+ .values({ value: mockSchema })
2535
+ .execute();
2536
+
2537
+ const childVersion = await createVersion({ lix, name: "child" });
2538
+
2539
+ // 1. Insert untracked state in global version
2540
+ await lix.db
2541
+ .insertInto("state_all")
2542
+ .values({
2543
+ entity_id: "override_test",
2544
+ file_id: "f1",
2545
+ schema_key: "mock_schema",
2546
+ plugin_key: "p1",
2547
+ schema_version: "1.0",
2548
+ snapshot_content: { value: "global untracked" },
2549
+ version_id: "global",
2550
+ untracked: true,
2551
+ })
2552
+ .execute();
2553
+
2554
+ // 2. Verify child inherits untracked state
2555
+ const inheritedState = await lix.db
2556
+ .selectFrom("state_all")
2557
+ .where("entity_id", "=", "override_test")
2558
+ .where("version_id", "=", childVersion.id)
2559
+ .selectAll()
2560
+ .execute();
2561
+
2562
+ expectDeterministic(inheritedState).toHaveLength(1);
2563
+ expectDeterministic(inheritedState[0]?.snapshot_content).toEqual({
2564
+ value: "global untracked",
2565
+ });
2566
+ expectDeterministic(inheritedState[0]?.untracked).toBe(1);
2567
+
2568
+ // 3. Insert tracked state in child version for same entity
2569
+ await lix.db
2570
+ .insertInto("state_all")
2571
+ .values({
2572
+ entity_id: "override_test",
2573
+ file_id: "f1",
2574
+ schema_key: "mock_schema",
2575
+ plugin_key: "p1",
2576
+ schema_version: "1.0",
2577
+ snapshot_content: { value: "child tracked" },
2578
+ version_id: childVersion.id,
2579
+ untracked: false, // Important: this is tracked state
2580
+ })
2581
+ .execute();
2582
+
2583
+ // 4. Verify child now sees tracked state, not inherited untracked
2584
+ const finalState = await lix.db
2585
+ .selectFrom("state_all")
2586
+ .where("entity_id", "=", "override_test")
2587
+ .where("version_id", "=", childVersion.id)
2588
+ .selectAll()
2589
+ .execute();
2590
+
2591
+ expectDeterministic(finalState).toHaveLength(1);
2592
+ expectDeterministic(finalState[0]?.snapshot_content).toEqual({
2593
+ value: "child tracked",
2594
+ });
2595
+ expectDeterministic(finalState[0]?.untracked).toBe(0); // Should be tracked
2596
+ }
2597
+ );
2598
+
2599
+ simulationTest(
2600
+ "untracked state in child overrides inherited untracked state",
2601
+ async ({ openSimulatedLix, expectDeterministic }) => {
2602
+ const lix = await openSimulatedLix({
2603
+ keyValues: [
2604
+ {
2605
+ key: "lix_deterministic_mode",
2606
+ value: { enabled: true, bootstrap: true },
2607
+ lixcol_version_id: "global",
2608
+ },
2609
+ ],
2610
+ });
2611
+
2612
+ const mockSchema: LixSchemaDefinition = {
2613
+ "x-lix-key": "mock_schema",
2614
+ "x-lix-version": "1.0",
2615
+ type: "object",
2616
+ additionalProperties: false,
2617
+ properties: {
2618
+ value: {
2619
+ type: "string",
2620
+ },
2621
+ },
2622
+ };
2623
+
2624
+ await lix.db
2625
+ .insertInto("stored_schema") // Use stored_schema
2626
+ .values({ value: mockSchema })
2627
+ .execute();
2628
+
2629
+ const childVersion = await createVersion({ lix, name: "child" });
2630
+
2631
+ // 1. Insert untracked state in global version
2632
+ await lix.db
2633
+ .insertInto("state_all")
2634
+ .values({
2635
+ entity_id: "untracked_override_test",
2636
+ file_id: "f1",
2637
+ schema_key: "mock_schema",
2638
+ plugin_key: "p1",
2639
+ schema_version: "1.0",
2640
+ snapshot_content: { value: "global untracked" },
2641
+ version_id: "global",
2642
+ untracked: true,
2643
+ })
2644
+ .execute();
2645
+
2646
+ // 2. Verify child inherits untracked state
2647
+ const inheritedState = await lix.db
2648
+ .selectFrom("state_all")
2649
+ .where("entity_id", "=", "untracked_override_test")
2650
+ .where("version_id", "=", childVersion.id)
2651
+ .selectAll()
2652
+ .execute();
2653
+
2654
+ expectDeterministic(inheritedState).toHaveLength(1);
2655
+ expectDeterministic(inheritedState[0]?.snapshot_content).toEqual({
2656
+ value: "global untracked",
2657
+ });
2658
+ expectDeterministic(inheritedState[0]?.untracked).toBe(1);
2659
+
2660
+ // 3. Insert untracked state in child version for same entity
2661
+ await lix.db
2662
+ .insertInto("state_all")
2663
+ .values({
2664
+ entity_id: "untracked_override_test",
2665
+ file_id: "f1",
2666
+ schema_key: "mock_schema",
2667
+ plugin_key: "p1",
2668
+ schema_version: "1.0",
2669
+ snapshot_content: { value: "child untracked" },
2670
+ version_id: childVersion.id,
2671
+ untracked: true,
2672
+ })
2673
+ .execute();
2674
+
2675
+ // 4. Verify child now sees its own untracked state
2676
+ const finalState = await lix.db
2677
+ .selectFrom("state_all")
2678
+ .where("entity_id", "=", "untracked_override_test")
2679
+ .where("version_id", "=", childVersion.id)
2680
+ .selectAll()
2681
+ .execute();
2682
+
2683
+ expectDeterministic(finalState).toHaveLength(1);
2684
+ expectDeterministic(finalState[0]?.snapshot_content).toEqual({
2685
+ value: "child untracked",
2686
+ });
2687
+ expectDeterministic(finalState[0]?.untracked).toBe(1);
2688
+ }
2689
+ );
2690
+
2691
+ simulationTest(
2692
+ "untracked state has untracked change_id for both inherited and non-inherited entities",
2693
+ async ({ openSimulatedLix, expectDeterministic }) => {
2694
+ const lix = await openSimulatedLix({
2695
+ keyValues: [
2696
+ {
2697
+ key: "lix_deterministic_mode",
2698
+ value: { enabled: true, bootstrap: true },
2699
+ lixcol_version_id: "global",
2700
+ },
2701
+ ],
2702
+ });
2703
+
2704
+ const mockSchema: LixSchemaDefinition = {
2705
+ "x-lix-key": "mock_schema",
2706
+ "x-lix-version": "1.0",
2707
+ type: "object",
2708
+ additionalProperties: false,
2709
+ properties: {
2710
+ value: {
2711
+ type: "string",
2712
+ },
2713
+ },
2714
+ };
2715
+
2716
+ await lix.db
2717
+ .insertInto("stored_schema")
2718
+ .values({ value: mockSchema })
2719
+ .execute();
2720
+
2721
+ const childVersion = await createVersion({ lix, name: "child" });
2722
+
2723
+ // 1. Insert untracked state in global version (will be inherited by child)
2724
+ await lix.db
2725
+ .insertInto("state_all")
2726
+ .values({
2727
+ entity_id: "inherited-entity",
2728
+ file_id: "test-file",
2729
+ schema_key: "mock_schema",
2730
+ plugin_key: "test_plugin",
2731
+ schema_version: "1.0",
2732
+ snapshot_content: { value: "global untracked" },
2733
+ version_id: "global",
2734
+ untracked: true,
2735
+ })
2736
+ .execute();
2737
+
2738
+ // 2. Insert untracked state directly in child version (non-inherited)
2739
+ await lix.db
2740
+ .insertInto("state_all")
2741
+ .values({
2742
+ entity_id: "non-inherited-entity",
2743
+ file_id: "test-file",
2744
+ schema_key: "mock_schema",
2745
+ plugin_key: "test_plugin",
2746
+ schema_version: "1.0",
2747
+ snapshot_content: { value: "child untracked" },
2748
+ version_id: childVersion.id,
2749
+ untracked: true,
2750
+ })
2751
+ .execute();
2752
+
2753
+ // 3. Query all untracked entities in child version
2754
+ const untrackedEntities = await lix.db
2755
+ .selectFrom("state_all")
2756
+ .where("version_id", "=", childVersion.id)
2757
+ .where("entity_id", "in", ["inherited-entity", "non-inherited-entity"])
2758
+ .where("untracked", "=", true)
2759
+ .selectAll()
2760
+ .execute();
2761
+
2762
+ expectDeterministic(untrackedEntities).toHaveLength(2);
2763
+
2764
+ // 4. Check that both entities have untracked change_id
2765
+ for (const entity of untrackedEntities) {
2766
+ expectDeterministic(entity.change_id).toBe("untracked");
2767
+ }
2768
+
2769
+ // 5. Verify specific entities
2770
+ const inheritedEntity = untrackedEntities.find(
2771
+ (e) => e.entity_id === "inherited-entity"
2772
+ );
2773
+ const nonInheritedEntity = untrackedEntities.find(
2774
+ (e) => e.entity_id === "non-inherited-entity"
2775
+ );
2776
+
2777
+ expectDeterministic(inheritedEntity).toBeDefined();
2778
+ expectDeterministic(nonInheritedEntity).toBeDefined();
2779
+
2780
+ // Both inherited and non-inherited untracked entities should have change_id = "untracked"
2781
+ expectDeterministic(inheritedEntity?.change_id).toBe("untracked");
2782
+ expectDeterministic(nonInheritedEntity?.change_id).toBe("untracked");
2783
+ }
2784
+ );
2785
+
2786
+ simulationTest(
2787
+ "state version_id defaults active version",
2788
+ async ({ openSimulatedLix, expectDeterministic }) => {
2789
+ const mockSchema: LixSchemaDefinition = {
2790
+ "x-lix-key": "mock_schema",
2791
+ "x-lix-version": "1.0",
2792
+ type: "object",
2793
+ additionalProperties: false,
2794
+ properties: {
2795
+ value: {
2796
+ type: "string",
2797
+ },
2798
+ },
2799
+ };
2800
+
2801
+ const lix = await openSimulatedLix({
2802
+ keyValues: [
2803
+ {
2804
+ key: "lix_deterministic_mode",
2805
+ value: { enabled: true, bootstrap: true },
2806
+ lixcol_version_id: "global",
2807
+ },
2808
+ ],
2809
+ });
2810
+
2811
+ await lix.db
2812
+ .insertInto("stored_schema")
2813
+ .values({ value: mockSchema })
2814
+ .execute();
2815
+
2816
+ // Get the active version ID to verify it gets auto-filled
2817
+ const activeVersion = await lix.db
2818
+ .selectFrom("active_version")
2819
+ .select("version_id")
2820
+ .executeTakeFirstOrThrow();
2821
+
2822
+ // Insert into state view without specifying version_id
2823
+ // This should auto-fill with the active version
2824
+ await lix.db
2825
+ .insertInto("state")
2826
+ .values({
2827
+ entity_id: "entity0",
2828
+ file_id: "f0",
2829
+ schema_key: "mock_schema",
2830
+ plugin_key: "lix_own_entity",
2831
+ schema_version: "1.0",
2832
+ snapshot_content: { value: "initial content" },
2833
+ })
2834
+ .execute();
2835
+
2836
+ // Verify the entity was inserted with the correct version_id
2837
+ const insertedEntity = await lix.db
2838
+ .selectFrom("state")
2839
+ .where("entity_id", "=", "entity0")
2840
+ .selectAll()
2841
+ .execute();
2842
+
2843
+ expectDeterministic(insertedEntity).toHaveLength(1);
2844
+ expectDeterministic(insertedEntity[0]).toMatchObject({
2845
+ entity_id: "entity0",
2846
+ file_id: "f0",
2847
+ schema_key: "mock_schema",
2848
+ plugin_key: "lix_own_entity",
2849
+ schema_version: "1.0",
2850
+ snapshot_content: { value: "initial content" },
2851
+ });
2852
+
2853
+ // Verify the version_id was auto-filled with the active version
2854
+ const entityInStateAll = await lix.db
2855
+ .selectFrom("state_all")
2856
+ .where("entity_id", "=", "entity0")
2857
+ .select("version_id")
2858
+ .executeTakeFirstOrThrow();
2859
+
2860
+ expectDeterministic(entityInStateAll.version_id).toBe(
2861
+ activeVersion.version_id
2862
+ );
2863
+
2864
+ // Test update operation
2865
+ await lix.db
2866
+ .updateTable("state")
2867
+ .where("entity_id", "=", "entity0")
2868
+ .set({
2869
+ snapshot_content: { value: "updated content" },
2870
+ })
2871
+ .execute();
2872
+
2873
+ // Verify update worked
2874
+ const updatedEntity = await lix.db
2875
+ .selectFrom("state")
2876
+ .where("entity_id", "=", "entity0")
2877
+ .selectAll()
2878
+ .execute();
2879
+
2880
+ expectDeterministic(updatedEntity[0]?.snapshot_content).toEqual({
2881
+ value: "updated content",
2882
+ });
2883
+
2884
+ // Test delete operation
2885
+ await lix.db
2886
+ .deleteFrom("state")
2887
+ .where("entity_id", "=", "entity0")
2888
+ .execute();
2889
+
2890
+ // Verify delete worked
2891
+ const deletedEntity = await lix.db
2892
+ .selectFrom("state")
2893
+ .where("entity_id", "=", "entity0")
2894
+ .selectAll()
2895
+ .execute();
2896
+
2897
+ expectDeterministic(deletedEntity).toHaveLength(0);
2898
+ }
2899
+ );
2900
+
2901
+ // https://github.com/opral/lix-sdk/issues/344
2902
+ simulationTest(
2903
+ "deleting key_value entities from state should not cause infinite loop",
2904
+ async ({ openSimulatedLix, expectDeterministic }) => {
2905
+ const lix = await openSimulatedLix({
2906
+ keyValues: [
2907
+ {
2908
+ key: "lix_deterministic_mode",
2909
+ value: { enabled: true, bootstrap: true },
2910
+ lixcol_version_id: "global",
2911
+ },
2912
+ ],
2913
+ });
2914
+
2915
+ // 1. Insert key_value in global version (tracked)
2916
+ await lix.db
2917
+ .insertInto("key_value_all")
2918
+ .values({
2919
+ key: "test-key-global",
2920
+ value: "global-tracked-value",
2921
+ lixcol_version_id: "global",
2922
+ })
2923
+ .execute();
2924
+
2925
+ // 2. Insert key_value in global version (untracked)
2926
+ await lix.db
2927
+ .insertInto("key_value_all")
2928
+ .values({
2929
+ key: "test-key-global-untracked",
2930
+ value: "global-untracked-value",
2931
+ lixcol_version_id: "global",
2932
+ lixcol_untracked: true,
2933
+ })
2934
+ .execute();
2935
+
2936
+ // 3. Insert key_value in active version (tracked)
2937
+ await lix.db
2938
+ .insertInto("key_value")
2939
+ .values({
2940
+ key: "test-key-active",
2941
+ value: "active-tracked-value",
2942
+ })
2943
+ .execute();
2944
+
2945
+ // 4. Insert key_value in active version (untracked)
2946
+ await lix.db
2947
+ .insertInto("key_value")
2948
+ .values({
2949
+ key: "test-key-active-untracked",
2950
+ value: "active-untracked-value",
2951
+ lixcol_untracked: true,
2952
+ })
2953
+ .execute();
2954
+
2955
+ // Verify all entities exist before deletion (including inherited)
2956
+ const entitiesBeforeDelete = await lix.db
2957
+ .selectFrom("state")
2958
+ .where("schema_key", "=", "lix_key_value")
2959
+ .where("entity_id", "like", "test-key-%")
2960
+ .selectAll()
2961
+ .execute();
2962
+
2963
+ // state view shows active version entities + inherited from global
2964
+ expectDeterministic(entitiesBeforeDelete).toHaveLength(4);
2965
+
2966
+ // Delete all key_value entities
2967
+ // this is the reproduction of the infinite loop issue
2968
+ await lix.db
2969
+ .deleteFrom("state")
2970
+ .where("schema_key", "=", "lix_key_value")
2971
+ .execute();
2972
+
2973
+ // Verify all entities are deleted
2974
+ const keyValueAfterDelete = await lix.db
2975
+ .selectFrom("state")
2976
+ .where("schema_key", "=", "lix_key_value")
2977
+ .where("entity_id", "like", "test-key-%")
2978
+ .selectAll()
2979
+ .execute();
2980
+
2981
+ expectDeterministic(keyValueAfterDelete).toHaveLength(0);
2982
+ }
2983
+ );
2984
+
2985
+ // see https://github.com/opral/lix-sdk/issues/359
2986
+ simulationTest(
2987
+ "commit_id in state should be from the real auto-commit, not the working commit",
2988
+ async ({ openSimulatedLix, expectDeterministic }) => {
2989
+ const lix = await openSimulatedLix({
2990
+ keyValues: [
2991
+ {
2992
+ key: "lix_deterministic_mode",
2993
+ value: { enabled: true, bootstrap: true },
2994
+ lixcol_version_id: "global",
2995
+ },
2996
+ ],
2997
+ });
2998
+
2999
+ // Get the active version with its commit_id and working_commit_id
3000
+ const activeVersion = await lix.db
3001
+ .selectFrom("active_version")
3002
+ .innerJoin("version", "version.id", "active_version.version_id")
3003
+ .selectAll("version")
3004
+ .executeTakeFirstOrThrow();
3005
+
3006
+ // Verify we have both commit_id and working_commit_id
3007
+ expectDeterministic(activeVersion.commit_id).toBeTruthy();
3008
+ expectDeterministic(activeVersion.working_commit_id).toBeTruthy();
3009
+ expectDeterministic(activeVersion.commit_id).not.toBe(
3010
+ activeVersion.working_commit_id
3011
+ );
3012
+
3013
+ const commitsBeforeInsert = await lix.db
3014
+ .selectFrom("commit")
3015
+ .select("id")
3016
+ .execute();
3017
+
3018
+ // Insert some state data
3019
+ await lix.db
3020
+ .insertInto("state")
3021
+ .values({
3022
+ entity_id: "test-entity-1",
3023
+ schema_key: "test_schema",
3024
+ file_id: "test-file",
3025
+ plugin_key: "test-plugin",
3026
+ schema_version: "1.0",
3027
+ snapshot_content: { value: "initial value" },
3028
+ })
3029
+ .execute();
3030
+
3031
+ const commitsAfterInsert = await lix.db
3032
+ .selectFrom("commit")
3033
+ .select("id")
3034
+ .execute();
3035
+
3036
+ // two commits for the global and active version
3037
+ expectDeterministic(commitsAfterInsert.length).toBe(
3038
+ commitsBeforeInsert.length + 2
3039
+ );
3040
+
3041
+ const activeVersionAfterInsert = await lix.db
3042
+ .selectFrom("active_version")
3043
+ .innerJoin("version", "active_version.version_id", "version.id")
3044
+ .selectAll("version")
3045
+ .executeTakeFirstOrThrow();
3046
+
3047
+ // Query the state to check the commit_id
3048
+ const stateAfterInsert = await lix.db
3049
+ .selectFrom("state")
3050
+ .where("entity_id", "=", "test-entity-1")
3051
+ .select(["entity_id", "commit_id"])
3052
+ .executeTakeFirstOrThrow();
3053
+
3054
+ // The commit_id should NOT be the working_commit_id
3055
+ expectDeterministic(stateAfterInsert.commit_id).not.toBe(
3056
+ activeVersionAfterInsert.working_commit_id
3057
+ );
3058
+
3059
+ // The commit_id should be the auto-commit ID (not the working commit)
3060
+ expectDeterministic(stateAfterInsert.commit_id).toBe(
3061
+ activeVersionAfterInsert.commit_id
3062
+ );
3063
+
3064
+ // Update the state to trigger another auto-commit
3065
+ await lix.db
3066
+ .updateTable("state")
3067
+ .where("entity_id", "=", "test-entity-1")
3068
+ .set({ snapshot_content: { value: "updated value" } })
3069
+ .execute();
3070
+
3071
+ // Check the state again
3072
+ const stateAfterUpdate = await lix.db
3073
+ .selectFrom("state")
3074
+ .where("entity_id", "=", "test-entity-1")
3075
+ .select(["entity_id", "commit_id"])
3076
+ .executeTakeFirstOrThrow();
3077
+
3078
+ const activeVersionAfterUpdate = await lix.db
3079
+ .selectFrom("active_version")
3080
+ .innerJoin("version", "active_version.version_id", "version.id")
3081
+ .selectAll("version")
3082
+ .executeTakeFirstOrThrow();
3083
+
3084
+ // The commit_id should now be the new auto-commit ID
3085
+ expectDeterministic(stateAfterUpdate.commit_id).toBe(
3086
+ activeVersionAfterUpdate.commit_id
3087
+ );
3088
+ expectDeterministic(stateAfterUpdate.commit_id).not.toBe(
3089
+ activeVersion.working_commit_id
3090
+ );
3091
+ }
3092
+ );
3093
+
3094
+ simulationTest(
3095
+ "delete ALL from state view should delete untracked entities",
3096
+ async ({ openSimulatedLix, expectDeterministic }) => {
3097
+ const lix = await openSimulatedLix({
3098
+ keyValues: [
3099
+ {
3100
+ key: "lix_deterministic_mode",
3101
+ value: { enabled: true, bootstrap: true },
3102
+ lixcol_version_id: "global",
3103
+ },
3104
+ ],
3105
+ });
3106
+
3107
+ // Create a tracked entity in state
3108
+ await lix.db
3109
+ .insertInto("state")
3110
+ .values({
3111
+ entity_id: "tracked-entity",
3112
+ schema_key: "mock_test_schema",
3113
+ file_id: "test-file",
3114
+ plugin_key: "test_plugin",
3115
+ snapshot_content: { value: "tracked" },
3116
+ schema_version: "1.0",
3117
+ })
3118
+ .execute();
3119
+
3120
+ // Create an untracked entity in state_all directly with the active version
3121
+ await lix.db
3122
+ .insertInto("state")
3123
+ .values({
3124
+ entity_id: "untracked-entity",
3125
+ schema_key: "mock_test_schema",
3126
+ file_id: "test-file",
3127
+ plugin_key: "test_plugin",
3128
+ snapshot_content: { value: "untracked" },
3129
+ schema_version: "1.0",
3130
+ untracked: true,
3131
+ })
3132
+ .execute();
3133
+
3134
+ // Verify we have both entities in state view
3135
+ const beforeDelete = await lix.db
3136
+ .selectFrom("state")
3137
+ .where("schema_key", "=", "mock_test_schema")
3138
+ .selectAll()
3139
+ .execute();
3140
+
3141
+ expectDeterministic(beforeDelete).toHaveLength(2);
3142
+ expectDeterministic(
3143
+ beforeDelete.some((e) => e.entity_id === "tracked-entity")
3144
+ ).toBe(true);
3145
+ expectDeterministic(
3146
+ beforeDelete.some((e) => e.entity_id === "untracked-entity")
3147
+ ).toBe(true);
3148
+
3149
+ // Delete ALL from the state view (no WHERE clause)
3150
+ await lix.db
3151
+ .deleteFrom("state")
3152
+ .where("schema_key", "=", "mock_test_schema")
3153
+ .execute();
3154
+
3155
+ // Check if ALL entries were deleted including untracked
3156
+ const afterDelete = await lix.db
3157
+ .selectFrom("state")
3158
+ .where("schema_key", "=", "mock_test_schema")
3159
+ .selectAll()
3160
+ .execute();
3161
+
3162
+ // This should be 0 - all entries including untracked should be deleted
3163
+ expectDeterministic(afterDelete).toHaveLength(0);
3164
+
3165
+ // Also check the underlying state_all table
3166
+ const stateAfterDelete = await lix.db
3167
+ .selectFrom("state_all")
3168
+ .where("schema_key", "=", "mock_test_schema")
3169
+ .selectAll()
3170
+ .execute();
3171
+
3172
+ // All entities should be gone from state_all
3173
+ expectDeterministic(stateAfterDelete).toHaveLength(0);
3174
+ }
3175
+ );
3176
+
3177
+ simulationTest(
3178
+ "delete from state view with WHERE should delete untracked entities",
3179
+ async ({ openSimulatedLix, expectDeterministic }) => {
3180
+ const lix = await openSimulatedLix({
3181
+ keyValues: [
3182
+ {
3183
+ key: "lix_deterministic_mode",
3184
+ value: { enabled: true, bootstrap: true },
3185
+ lixcol_version_id: "global",
3186
+ },
3187
+ ],
3188
+ });
3189
+
3190
+ // Create a tracked entity in state
3191
+ await lix.db
3192
+ .insertInto("state")
3193
+ .values({
3194
+ entity_id: "tracked-entity",
3195
+ schema_key: "mock_test_schema",
3196
+ file_id: "test-file",
3197
+ plugin_key: "test_plugin",
3198
+ snapshot_content: { value: "tracked" },
3199
+ schema_version: "1.0",
3200
+ })
3201
+ .execute();
3202
+
3203
+ // Create an untracked entity in state_all directly with the active version
3204
+ await lix.db
3205
+ .insertInto("state")
3206
+ .values({
3207
+ entity_id: "untracked-entity",
3208
+ schema_key: "mock_test_schema",
3209
+ file_id: "test-file",
3210
+ plugin_key: "test_plugin",
3211
+ snapshot_content: { value: "untracked" },
3212
+ schema_version: "1.0",
3213
+ untracked: true,
3214
+ })
3215
+ .execute();
3216
+
3217
+ // Verify both entities exist in the state view
3218
+ const beforeDelete = await lix.db
3219
+ .selectFrom("state")
3220
+ .where("schema_key", "=", "mock_test_schema")
3221
+ .selectAll()
3222
+ .execute();
3223
+
3224
+ expectDeterministic(beforeDelete).toHaveLength(2);
3225
+ expectDeterministic(
3226
+ beforeDelete.some((e) => e.entity_id === "tracked-entity")
3227
+ ).toBe(true);
3228
+ expectDeterministic(
3229
+ beforeDelete.some((e) => e.entity_id === "untracked-entity")
3230
+ ).toBe(true);
3231
+
3232
+ // Delete the untracked entity from the state view with WHERE clause
3233
+ await lix.db
3234
+ .deleteFrom("state")
3235
+ .where("entity_id", "=", "untracked-entity")
3236
+ .execute();
3237
+
3238
+ // Check if the untracked entry was deleted
3239
+ const afterDelete = await lix.db
3240
+ .selectFrom("state")
3241
+ .where("schema_key", "=", "mock_test_schema")
3242
+ .selectAll()
3243
+ .execute();
3244
+
3245
+ // Should only have the tracked entity remaining
3246
+ expectDeterministic(afterDelete).toHaveLength(1);
3247
+ expectDeterministic(afterDelete[0]?.entity_id).toBe("tracked-entity");
3248
+
3249
+ // Also check the underlying state_all table to confirm deletion
3250
+ const stateAfterDelete = await lix.db
3251
+ .selectFrom("state_all")
3252
+ .where("entity_id", "=", "untracked-entity")
3253
+ .where("schema_key", "=", "mock_test_schema")
3254
+ .selectAll()
3255
+ .execute();
3256
+
3257
+ // The untracked entry should be gone from state_all too
3258
+ expectDeterministic(stateAfterDelete).toHaveLength(0);
3259
+ }
3260
+ );