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