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

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 (2710) hide show
  1. package/README.md +6 -6
  2. package/dist/account/create-account.d.ts +5 -6
  3. package/dist/account/create-account.d.ts.map +1 -1
  4. package/dist/account/create-account.js +7 -9
  5. package/dist/account/create-account.js.map +1 -1
  6. package/dist/account/create-account.test.js +5 -17
  7. package/dist/account/create-account.test.js.map +1 -1
  8. package/dist/account/index.d.ts +1 -1
  9. package/dist/account/index.d.ts.map +1 -1
  10. package/dist/account/index.js +1 -1
  11. package/dist/account/index.js.map +1 -1
  12. package/dist/account/schema-definition.d.ts +53 -0
  13. package/dist/account/schema-definition.d.ts.map +1 -0
  14. package/dist/account/schema-definition.js +50 -0
  15. package/dist/account/schema-definition.js.map +1 -0
  16. package/dist/account/schema.test.js +129 -98
  17. package/dist/account/schema.test.js.map +1 -1
  18. package/dist/account/switch-account.d.ts +2 -2
  19. package/dist/account/switch-account.d.ts.map +1 -1
  20. package/dist/account/switch-account.js +3 -4
  21. package/dist/account/switch-account.js.map +1 -1
  22. package/dist/account/switch-account.test.js +9 -19
  23. package/dist/account/switch-account.test.js.map +1 -1
  24. package/dist/change/index.d.ts +1 -1
  25. package/dist/change/index.d.ts.map +1 -1
  26. package/dist/change/index.js +1 -1
  27. package/dist/change/index.js.map +1 -1
  28. package/dist/change/schema-definition.d.ts +82 -0
  29. package/dist/change/schema-definition.d.ts.map +1 -0
  30. package/dist/change/schema-definition.js +36 -0
  31. package/dist/change/schema-definition.js.map +1 -0
  32. package/dist/change/schema.bench.d.ts +2 -0
  33. package/dist/change/schema.bench.d.ts.map +1 -0
  34. package/dist/change/schema.bench.js +334 -0
  35. package/dist/change/schema.bench.js.map +1 -0
  36. package/dist/change/schema.d.ts +3 -16
  37. package/dist/change/schema.d.ts.map +1 -1
  38. package/dist/change/schema.js +49 -20
  39. package/dist/change/schema.js.map +1 -1
  40. package/dist/change/schema.test.js +115 -6
  41. package/dist/change/schema.test.js.map +1 -1
  42. package/dist/change-author/index.d.ts +1 -1
  43. package/dist/change-author/index.d.ts.map +1 -1
  44. package/dist/change-author/index.js +1 -1
  45. package/dist/change-author/index.js.map +1 -1
  46. package/dist/change-author/schema-definition.d.ts +37 -0
  47. package/dist/change-author/schema-definition.d.ts.map +1 -0
  48. package/dist/change-author/schema-definition.js +35 -0
  49. package/dist/change-author/schema-definition.js.map +1 -0
  50. package/dist/change-author/schema.test.js +392 -223
  51. package/dist/change-author/schema.test.js.map +1 -1
  52. package/dist/change-proposal/accept-change-proposal.d.ts +7 -0
  53. package/dist/change-proposal/accept-change-proposal.d.ts.map +1 -0
  54. package/dist/change-proposal/accept-change-proposal.js +36 -0
  55. package/dist/change-proposal/accept-change-proposal.js.map +1 -0
  56. package/dist/change-proposal/accept-change-proposal.test.d.ts +2 -0
  57. package/dist/change-proposal/accept-change-proposal.test.d.ts.map +1 -0
  58. package/dist/change-proposal/accept-change-proposal.test.js +55 -0
  59. package/dist/change-proposal/accept-change-proposal.test.js.map +1 -0
  60. package/dist/change-proposal/create-change-proposal.d.ts +11 -9
  61. package/dist/change-proposal/create-change-proposal.d.ts.map +1 -1
  62. package/dist/change-proposal/create-change-proposal.js +28 -43
  63. package/dist/change-proposal/create-change-proposal.js.map +1 -1
  64. package/dist/change-proposal/create-change-proposal.test.js +61 -82
  65. package/dist/change-proposal/create-change-proposal.test.js.map +1 -1
  66. package/dist/change-proposal/index.d.ts +4 -2
  67. package/dist/change-proposal/index.d.ts.map +1 -1
  68. package/dist/change-proposal/index.js +4 -2
  69. package/dist/change-proposal/index.js.map +1 -1
  70. package/dist/change-proposal/reject-change-proposal.d.ts +7 -0
  71. package/dist/change-proposal/reject-change-proposal.d.ts.map +1 -0
  72. package/dist/change-proposal/reject-change-proposal.js +15 -0
  73. package/dist/change-proposal/reject-change-proposal.js.map +1 -0
  74. package/dist/change-proposal/reject-change-proposal.test.d.ts +2 -0
  75. package/dist/change-proposal/reject-change-proposal.test.d.ts.map +1 -0
  76. package/dist/change-proposal/reject-change-proposal.test.js +28 -0
  77. package/dist/change-proposal/reject-change-proposal.test.js.map +1 -0
  78. package/dist/change-proposal/schema-definition.d.ts +45 -0
  79. package/dist/change-proposal/schema-definition.d.ts.map +1 -0
  80. package/dist/change-proposal/schema-definition.js +34 -0
  81. package/dist/change-proposal/schema-definition.js.map +1 -0
  82. package/dist/change-proposal/schema.test.d.ts.map +1 -0
  83. package/dist/change-proposal/schema.test.js +103 -0
  84. package/dist/change-proposal/schema.test.js.map +1 -0
  85. package/dist/change-set/apply-change-set.d.ts +2 -2
  86. package/dist/change-set/apply-change-set.d.ts.map +1 -1
  87. package/dist/change-set/apply-change-set.js +49 -72
  88. package/dist/change-set/apply-change-set.js.map +1 -1
  89. package/dist/change-set/apply-change-set.test.js +9 -5
  90. package/dist/change-set/apply-change-set.test.js.map +1 -1
  91. package/dist/change-set/create-change-set.d.ts +6 -10
  92. package/dist/change-set/create-change-set.d.ts.map +1 -1
  93. package/dist/change-set/create-change-set.js +6 -50
  94. package/dist/change-set/create-change-set.js.map +1 -1
  95. package/dist/change-set/create-change-set.test.js +5 -74
  96. package/dist/change-set/create-change-set.test.js.map +1 -1
  97. package/dist/change-set/index.d.ts +1 -5
  98. package/dist/change-set/index.d.ts.map +1 -1
  99. package/dist/change-set/index.js +1 -5
  100. package/dist/change-set/index.js.map +1 -1
  101. package/dist/change-set/schema-definition.d.ts +73 -0
  102. package/dist/change-set/schema-definition.d.ts.map +1 -0
  103. package/dist/change-set/schema-definition.js +72 -0
  104. package/dist/change-set/schema-definition.js.map +1 -0
  105. package/dist/change-set/schema.test.js +12 -401
  106. package/dist/change-set/schema.test.js.map +1 -1
  107. package/dist/commit/index.d.ts +2 -0
  108. package/dist/commit/index.d.ts.map +1 -0
  109. package/dist/commit/index.js +2 -0
  110. package/dist/commit/index.js.map +1 -0
  111. package/dist/commit/schema-definition.d.ts +97 -0
  112. package/dist/commit/schema-definition.d.ts.map +1 -0
  113. package/dist/commit/schema-definition.js +89 -0
  114. package/dist/commit/schema-definition.js.map +1 -0
  115. package/dist/commit/schema.test.d.ts.map +1 -0
  116. package/dist/commit/schema.test.js +295 -0
  117. package/dist/commit/schema.test.js.map +1 -0
  118. package/dist/conversation/create-conversation-message.d.ts +11 -0
  119. package/dist/conversation/create-conversation-message.d.ts.map +1 -0
  120. package/dist/conversation/create-conversation-message.js +59 -0
  121. package/dist/conversation/create-conversation-message.js.map +1 -0
  122. package/dist/conversation/create-conversation-message.test.d.ts +2 -0
  123. package/dist/conversation/create-conversation-message.test.d.ts.map +1 -0
  124. package/dist/conversation/create-conversation-message.test.js +98 -0
  125. package/dist/conversation/create-conversation-message.test.js.map +1 -0
  126. package/dist/conversation/create-conversation.d.ts +39 -0
  127. package/dist/conversation/create-conversation.d.ts.map +1 -0
  128. package/dist/conversation/create-conversation.js +80 -0
  129. package/dist/conversation/create-conversation.js.map +1 -0
  130. package/dist/conversation/create-conversation.test.d.ts +2 -0
  131. package/dist/conversation/create-conversation.test.d.ts.map +1 -0
  132. package/dist/conversation/create-conversation.test.js +157 -0
  133. package/dist/conversation/create-conversation.test.js.map +1 -0
  134. package/dist/conversation/index.d.ts +4 -0
  135. package/dist/conversation/index.d.ts.map +1 -0
  136. package/dist/conversation/index.js +4 -0
  137. package/dist/conversation/index.js.map +1 -0
  138. package/dist/conversation/schema-definition.d.ts +64 -0
  139. package/dist/conversation/schema-definition.d.ts.map +1 -0
  140. package/dist/conversation/schema-definition.js +59 -0
  141. package/dist/conversation/schema-definition.js.map +1 -0
  142. package/dist/database/index.d.ts +0 -3
  143. package/dist/database/index.d.ts.map +1 -1
  144. package/dist/database/index.js +0 -3
  145. package/dist/database/index.js.map +1 -1
  146. package/dist/database/init-db.d.ts +30 -4
  147. package/dist/database/init-db.d.ts.map +1 -1
  148. package/dist/database/init-db.js +99 -80
  149. package/dist/database/init-db.js.map +1 -1
  150. package/dist/database/kysely/index.d.ts +2 -0
  151. package/dist/database/kysely/index.d.ts.map +1 -0
  152. package/dist/database/kysely/index.js +2 -0
  153. package/dist/database/kysely/index.js.map +1 -0
  154. package/dist/database/kysely/json-column-config.d.ts +6 -0
  155. package/dist/database/kysely/json-column-config.d.ts.map +1 -0
  156. package/dist/database/kysely/json-column-config.js +55 -0
  157. package/dist/database/kysely/json-column-config.js.map +1 -0
  158. package/dist/database/kysely/plugins/json-column-plugin.d.ts +7 -0
  159. package/dist/database/kysely/plugins/json-column-plugin.d.ts.map +1 -0
  160. package/dist/database/kysely/plugins/json-column-plugin.js +216 -0
  161. package/dist/database/kysely/plugins/json-column-plugin.js.map +1 -0
  162. package/dist/database/kysely/plugins/json-column-plugin.test.d.ts +2 -0
  163. package/dist/database/kysely/plugins/json-column-plugin.test.d.ts.map +1 -0
  164. package/dist/database/kysely/plugins/json-column-plugin.test.js +441 -0
  165. package/dist/database/kysely/plugins/json-column-plugin.test.js.map +1 -0
  166. package/dist/database/kysely/plugins/view-insert-returning-error-plugin.d.ts.map +1 -0
  167. package/dist/database/kysely/plugins/view-insert-returning-error-plugin.js.map +1 -0
  168. package/dist/database/kysely/plugins/view-insert-returning-error-plugin.test.d.ts.map +1 -0
  169. package/dist/database/kysely/plugins/view-insert-returning-error-plugin.test.js +51 -0
  170. package/dist/database/kysely/plugins/view-insert-returning-error-plugin.test.js.map +1 -0
  171. package/dist/database/kysely/plugins.d.ts +3 -0
  172. package/dist/database/kysely/plugins.d.ts.map +1 -0
  173. package/dist/database/kysely/plugins.js +15 -0
  174. package/dist/database/kysely/plugins.js.map +1 -0
  175. package/dist/database/nano-id.d.ts +4 -1
  176. package/dist/database/nano-id.d.ts.map +1 -1
  177. package/dist/database/nano-id.js +4 -1
  178. package/dist/database/nano-id.js.map +1 -1
  179. package/dist/database/nano-id.test.js +4 -4
  180. package/dist/database/nano-id.test.js.map +1 -1
  181. package/dist/database/schema-view-map.d.ts +3 -0
  182. package/dist/database/schema-view-map.d.ts.map +1 -0
  183. package/dist/database/schema-view-map.js +35 -0
  184. package/dist/database/schema-view-map.js.map +1 -0
  185. package/dist/database/schema.d.ts +73 -30
  186. package/dist/database/schema.d.ts.map +1 -1
  187. package/dist/database/schema.js +15 -30
  188. package/dist/database/schema.js.map +1 -1
  189. package/dist/database/sqlite/content-from-database.d.ts +10 -0
  190. package/dist/database/sqlite/content-from-database.d.ts.map +1 -0
  191. package/dist/database/sqlite/content-from-database.js +11 -0
  192. package/dist/database/sqlite/content-from-database.js.map +1 -0
  193. package/dist/database/sqlite/create-in-memory-database.d.ts +23 -0
  194. package/dist/database/sqlite/create-in-memory-database.d.ts.map +1 -0
  195. package/dist/database/sqlite/create-in-memory-database.js +44 -0
  196. package/dist/database/sqlite/create-in-memory-database.js.map +1 -0
  197. package/dist/database/sqlite/environment-dialect.d.ts +21 -0
  198. package/dist/database/sqlite/environment-dialect.d.ts.map +1 -0
  199. package/dist/database/sqlite/environment-dialect.js +198 -0
  200. package/dist/database/sqlite/environment-dialect.js.map +1 -0
  201. package/dist/database/sqlite/environment-dialect.test.d.ts +2 -0
  202. package/dist/database/sqlite/environment-dialect.test.d.ts.map +1 -0
  203. package/dist/database/sqlite/environment-dialect.test.js +66 -0
  204. package/dist/database/sqlite/environment-dialect.test.js.map +1 -0
  205. package/dist/database/sqlite/import-database.d.ts +18 -0
  206. package/dist/database/sqlite/import-database.d.ts.map +1 -0
  207. package/dist/database/sqlite/import-database.js +24 -0
  208. package/dist/database/sqlite/import-database.js.map +1 -0
  209. package/dist/database/sqlite/index.d.ts +8 -0
  210. package/dist/database/sqlite/index.d.ts.map +1 -0
  211. package/dist/database/sqlite/index.js +7 -0
  212. package/dist/database/sqlite/index.js.map +1 -0
  213. package/dist/database/sqlite/kysely-driver/connection-mutex.d.ts +6 -0
  214. package/dist/database/sqlite/kysely-driver/connection-mutex.d.ts.map +1 -0
  215. package/dist/database/sqlite/kysely-driver/connection-mutex.js +19 -0
  216. package/dist/database/sqlite/kysely-driver/connection-mutex.js.map +1 -0
  217. package/dist/database/sqlite/kysely-driver/index.d.ts +5 -0
  218. package/dist/database/sqlite/kysely-driver/index.d.ts.map +1 -0
  219. package/dist/database/sqlite/kysely-driver/index.js +4 -0
  220. package/dist/database/sqlite/kysely-driver/index.js.map +1 -0
  221. package/dist/database/sqlite/kysely-driver/sqlite-wasm-connection.d.ts +9 -0
  222. package/dist/database/sqlite/kysely-driver/sqlite-wasm-connection.d.ts.map +1 -0
  223. package/dist/database/sqlite/kysely-driver/sqlite-wasm-connection.js +43 -0
  224. package/dist/database/sqlite/kysely-driver/sqlite-wasm-connection.js.map +1 -0
  225. package/dist/database/sqlite/kysely-driver/sqlite-wasm-dialect-config.d.ts +19 -0
  226. package/dist/database/sqlite/kysely-driver/sqlite-wasm-dialect-config.d.ts.map +1 -0
  227. package/dist/database/sqlite/kysely-driver/sqlite-wasm-dialect-config.js +2 -0
  228. package/dist/database/sqlite/kysely-driver/sqlite-wasm-dialect-config.js.map +1 -0
  229. package/dist/database/sqlite/kysely-driver/sqlite-wasm-driver.d.ts +14 -0
  230. package/dist/database/sqlite/kysely-driver/sqlite-wasm-driver.d.ts.map +1 -0
  231. package/dist/database/sqlite/kysely-driver/sqlite-wasm-driver.js +45 -0
  232. package/dist/database/sqlite/kysely-driver/sqlite-wasm-driver.js.map +1 -0
  233. package/dist/database/sqlite/lix-dialect.d.ts +23 -0
  234. package/dist/database/sqlite/lix-dialect.d.ts.map +1 -0
  235. package/dist/database/sqlite/lix-dialect.js +24 -0
  236. package/dist/database/sqlite/lix-dialect.js.map +1 -0
  237. package/dist/database/sqlite/load-database-in-memory.d.ts +13 -0
  238. package/dist/database/sqlite/load-database-in-memory.d.ts.map +1 -0
  239. package/dist/database/sqlite/load-database-in-memory.js +23 -0
  240. package/dist/database/sqlite/load-database-in-memory.js.map +1 -0
  241. package/dist/database/sqlite/sqlite-wasm-binary.d.ts +2 -0
  242. package/dist/database/sqlite/sqlite-wasm-binary.js +42835 -0
  243. package/dist/dependency/kysely/helpers/sqlite.d.ts +5 -0
  244. package/dist/dependency/kysely/helpers/sqlite.d.ts.map +1 -0
  245. package/dist/dependency/kysely/helpers/sqlite.js +5 -0
  246. package/dist/dependency/kysely/helpers/sqlite.js.map +1 -0
  247. package/dist/dependency/kysely/index.d.ts +9 -0
  248. package/dist/dependency/kysely/index.d.ts.map +1 -0
  249. package/dist/dependency/kysely/index.js +9 -0
  250. package/dist/dependency/kysely/index.js.map +1 -0
  251. package/dist/dependency/zettel-ast/index.d.ts.map +1 -0
  252. package/dist/dependency/zettel-ast/index.js.map +1 -0
  253. package/dist/diff/index.d.ts +3 -0
  254. package/dist/diff/index.d.ts.map +1 -0
  255. package/dist/diff/index.js +3 -0
  256. package/dist/diff/index.js.map +1 -0
  257. package/dist/diff/select-commit-diff.bench.d.ts +2 -0
  258. package/dist/diff/select-commit-diff.bench.d.ts.map +1 -0
  259. package/dist/diff/select-commit-diff.bench.js +136 -0
  260. package/dist/diff/select-commit-diff.bench.js.map +1 -0
  261. package/dist/diff/select-commit-diff.d.ts +56 -0
  262. package/dist/diff/select-commit-diff.d.ts.map +1 -0
  263. package/dist/diff/select-commit-diff.js +212 -0
  264. package/dist/diff/select-commit-diff.js.map +1 -0
  265. package/dist/diff/select-commit-diff.test.d.ts +2 -0
  266. package/dist/diff/select-commit-diff.test.d.ts.map +1 -0
  267. package/dist/diff/select-commit-diff.test.js +52 -0
  268. package/dist/diff/select-commit-diff.test.js.map +1 -0
  269. package/dist/diff/select-working-diff.bench.d.ts +2 -0
  270. package/dist/diff/select-working-diff.bench.d.ts.map +1 -0
  271. package/dist/diff/select-working-diff.bench.js +82 -0
  272. package/dist/diff/select-working-diff.bench.js.map +1 -0
  273. package/dist/diff/select-working-diff.d.ts +105 -0
  274. package/dist/diff/select-working-diff.d.ts.map +1 -0
  275. package/dist/diff/select-working-diff.js +95 -0
  276. package/dist/diff/select-working-diff.js.map +1 -0
  277. package/dist/diff/select-working-diff.test.d.ts +2 -0
  278. package/dist/diff/select-working-diff.test.d.ts.map +1 -0
  279. package/dist/diff/select-working-diff.test.js +231 -0
  280. package/dist/diff/select-working-diff.test.js.map +1 -0
  281. package/dist/engine/boot.d.ts +90 -0
  282. package/dist/engine/boot.d.ts.map +1 -0
  283. package/dist/engine/boot.js +149 -0
  284. package/dist/engine/boot.js.map +1 -0
  285. package/dist/engine/boot.test.d.ts +2 -0
  286. package/dist/engine/boot.test.d.ts.map +1 -0
  287. package/dist/engine/boot.test.js +75 -0
  288. package/dist/engine/boot.test.js.map +1 -0
  289. package/dist/engine/cel-environment/cel-environment.d.ts +17 -0
  290. package/dist/engine/cel-environment/cel-environment.d.ts.map +1 -0
  291. package/dist/engine/cel-environment/cel-environment.js +54 -0
  292. package/dist/engine/cel-environment/cel-environment.js.map +1 -0
  293. package/dist/engine/cel-environment/cel-environment.test.d.ts +2 -0
  294. package/dist/engine/cel-environment/cel-environment.test.d.ts.map +1 -0
  295. package/dist/engine/cel-environment/cel-environment.test.js +19 -0
  296. package/dist/engine/cel-environment/cel-environment.test.js.map +1 -0
  297. package/dist/engine/deterministic-mode/is-deterministic-mode.d.ts +36 -0
  298. package/dist/engine/deterministic-mode/is-deterministic-mode.d.ts.map +1 -0
  299. package/dist/engine/deterministic-mode/is-deterministic-mode.js +80 -0
  300. package/dist/engine/deterministic-mode/is-deterministic-mode.js.map +1 -0
  301. package/dist/engine/deterministic-mode/is-deterministic-mode.test.d.ts +2 -0
  302. package/dist/engine/deterministic-mode/is-deterministic-mode.test.d.ts.map +1 -0
  303. package/dist/engine/deterministic-mode/is-deterministic-mode.test.js +95 -0
  304. package/dist/engine/deterministic-mode/is-deterministic-mode.test.js.map +1 -0
  305. package/dist/engine/deterministic-mode/options.d.ts +48 -0
  306. package/dist/engine/deterministic-mode/options.d.ts.map +1 -0
  307. package/dist/engine/deterministic-mode/options.js +47 -0
  308. package/dist/engine/deterministic-mode/options.js.map +1 -0
  309. package/dist/engine/deterministic-mode/options.test.d.ts +2 -0
  310. package/dist/engine/deterministic-mode/options.test.d.ts.map +1 -0
  311. package/dist/engine/deterministic-mode/options.test.js +111 -0
  312. package/dist/engine/deterministic-mode/options.test.js.map +1 -0
  313. package/dist/engine/entity-views/build-json-object-entries.d.ts +12 -0
  314. package/dist/engine/entity-views/build-json-object-entries.d.ts.map +1 -0
  315. package/dist/engine/entity-views/build-json-object-entries.js +37 -0
  316. package/dist/engine/entity-views/build-json-object-entries.js.map +1 -0
  317. package/dist/engine/entity-views/build-json-object-entries.test.d.ts +2 -0
  318. package/dist/engine/entity-views/build-json-object-entries.test.d.ts.map +1 -0
  319. package/dist/engine/entity-views/build-json-object-entries.test.js +35 -0
  320. package/dist/engine/entity-views/build-json-object-entries.test.js.map +1 -0
  321. package/dist/engine/entity-views/entity-state-by-version.d.ts +238 -0
  322. package/dist/engine/entity-views/entity-state-by-version.d.ts.map +1 -0
  323. package/dist/engine/entity-views/entity-state-by-version.js +2 -0
  324. package/dist/engine/entity-views/entity-state-by-version.js.map +1 -0
  325. package/dist/engine/entity-views/entity-state-history.d.ts +189 -0
  326. package/dist/engine/entity-views/entity-state-history.d.ts.map +1 -0
  327. package/dist/engine/entity-views/entity-state-history.js +2 -0
  328. package/dist/engine/entity-views/entity-state-history.js.map +1 -0
  329. package/dist/engine/entity-views/entity-state.d.ts +218 -0
  330. package/dist/engine/entity-views/entity-state.d.ts.map +1 -0
  331. package/dist/engine/entity-views/entity-state.js +2 -0
  332. package/dist/engine/entity-views/entity-state.js.map +1 -0
  333. package/dist/engine/entity-views/entity-view-builder.d.ts +34 -0
  334. package/dist/engine/entity-views/entity-view-builder.d.ts.map +1 -0
  335. package/dist/engine/entity-views/entity-view-builder.js +4 -0
  336. package/dist/engine/entity-views/entity-view-builder.js.map +1 -0
  337. package/dist/engine/entity-views/index.d.ts.map +1 -0
  338. package/dist/engine/entity-views/index.js.map +1 -0
  339. package/dist/engine/entity-views/types.d.ts +309 -0
  340. package/dist/engine/entity-views/types.d.ts.map +1 -0
  341. package/dist/engine/entity-views/types.js.map +1 -0
  342. package/dist/engine/entity-views/types.test.d.ts.map +1 -0
  343. package/dist/engine/entity-views/types.test.js +62 -0
  344. package/dist/engine/entity-views/types.test.js.map +1 -0
  345. package/dist/engine/execute-sync.d.ts +5 -0
  346. package/dist/engine/execute-sync.d.ts.map +1 -0
  347. package/dist/engine/execute-sync.js +38 -0
  348. package/dist/engine/execute-sync.js.map +1 -0
  349. package/dist/engine/execute-sync.test.d.ts.map +1 -0
  350. package/dist/engine/execute-sync.test.js +64 -0
  351. package/dist/engine/execute-sync.test.js.map +1 -0
  352. package/dist/engine/explain-query.d.ts +15 -0
  353. package/dist/engine/explain-query.d.ts.map +1 -0
  354. package/dist/engine/explain-query.js +66 -0
  355. package/dist/engine/explain-query.js.map +1 -0
  356. package/dist/engine/explain-query.test.d.ts +2 -0
  357. package/dist/engine/explain-query.test.d.ts.map +1 -0
  358. package/dist/engine/explain-query.test.js +17 -0
  359. package/dist/engine/explain-query.test.js.map +1 -0
  360. package/dist/engine/functions/function-registry.d.ts +20 -0
  361. package/dist/engine/functions/function-registry.d.ts.map +1 -0
  362. package/dist/engine/functions/function-registry.js +25 -0
  363. package/dist/engine/functions/function-registry.js.map +1 -0
  364. package/dist/engine/functions/generate-human-id.d.ts +43 -0
  365. package/dist/engine/functions/generate-human-id.d.ts.map +1 -0
  366. package/dist/engine/functions/generate-human-id.js +335 -0
  367. package/dist/engine/functions/generate-human-id.js.map +1 -0
  368. package/dist/engine/functions/generate-human-id.test.d.ts +2 -0
  369. package/dist/engine/functions/generate-human-id.test.d.ts.map +1 -0
  370. package/dist/engine/functions/generate-human-id.test.js +156 -0
  371. package/dist/engine/functions/generate-human-id.test.js.map +1 -0
  372. package/dist/engine/functions/index.d.ts +7 -0
  373. package/dist/engine/functions/index.d.ts.map +1 -0
  374. package/dist/engine/functions/index.js +7 -0
  375. package/dist/engine/functions/index.js.map +1 -0
  376. package/dist/engine/functions/nano-id.bench.d.ts +2 -0
  377. package/dist/engine/functions/nano-id.bench.d.ts.map +1 -0
  378. package/dist/engine/functions/nano-id.bench.js +48 -0
  379. package/dist/engine/functions/nano-id.bench.js.map +1 -0
  380. package/dist/engine/functions/nano-id.d.ts +69 -0
  381. package/dist/engine/functions/nano-id.d.ts.map +1 -0
  382. package/dist/engine/functions/nano-id.js +170 -0
  383. package/dist/engine/functions/nano-id.js.map +1 -0
  384. package/dist/engine/functions/nano-id.test.d.ts +2 -0
  385. package/dist/engine/functions/nano-id.test.d.ts.map +1 -0
  386. package/dist/engine/functions/nano-id.test.js +163 -0
  387. package/dist/engine/functions/nano-id.test.js.map +1 -0
  388. package/dist/engine/functions/random.d.ts +57 -0
  389. package/dist/engine/functions/random.d.ts.map +1 -0
  390. package/dist/engine/functions/random.js +214 -0
  391. package/dist/engine/functions/random.js.map +1 -0
  392. package/dist/engine/functions/random.test.d.ts +2 -0
  393. package/dist/engine/functions/random.test.d.ts.map +1 -0
  394. package/dist/engine/functions/random.test.js +244 -0
  395. package/dist/engine/functions/random.test.js.map +1 -0
  396. package/dist/engine/functions/register-builtins.d.ts +9 -0
  397. package/dist/engine/functions/register-builtins.d.ts.map +1 -0
  398. package/dist/engine/functions/register-builtins.js +110 -0
  399. package/dist/engine/functions/register-builtins.js.map +1 -0
  400. package/dist/engine/functions/sequence.d.ts +77 -0
  401. package/dist/engine/functions/sequence.d.ts.map +1 -0
  402. package/dist/engine/functions/sequence.js +136 -0
  403. package/dist/engine/functions/sequence.js.map +1 -0
  404. package/dist/engine/functions/sequence.test.d.ts +2 -0
  405. package/dist/engine/functions/sequence.test.d.ts.map +1 -0
  406. package/dist/engine/functions/sequence.test.js +77 -0
  407. package/dist/engine/functions/sequence.test.js.map +1 -0
  408. package/dist/engine/functions/timestamp.d.ts +44 -0
  409. package/dist/engine/functions/timestamp.d.ts.map +1 -0
  410. package/dist/engine/functions/timestamp.js +70 -0
  411. package/dist/engine/functions/timestamp.js.map +1 -0
  412. package/dist/engine/functions/timestamp.test.d.ts +2 -0
  413. package/dist/engine/functions/timestamp.test.d.ts.map +1 -0
  414. package/dist/engine/functions/timestamp.test.js +147 -0
  415. package/dist/engine/functions/timestamp.test.js.map +1 -0
  416. package/dist/engine/functions/uuid-v7.d.ts +50 -0
  417. package/dist/engine/functions/uuid-v7.d.ts.map +1 -0
  418. package/dist/engine/functions/uuid-v7.js +75 -0
  419. package/dist/engine/functions/uuid-v7.js.map +1 -0
  420. package/dist/engine/functions/uuid-v7.test.d.ts +2 -0
  421. package/dist/engine/functions/uuid-v7.test.d.ts.map +1 -0
  422. package/dist/engine/functions/uuid-v7.test.js +114 -0
  423. package/dist/engine/functions/uuid-v7.test.js.map +1 -0
  424. package/dist/engine/index.d.ts +2 -0
  425. package/dist/engine/index.d.ts.map +1 -0
  426. package/dist/engine/index.js +2 -0
  427. package/dist/engine/index.js.map +1 -0
  428. package/dist/engine/internal-query-builder.d.ts +26 -0
  429. package/dist/engine/internal-query-builder.d.ts.map +1 -0
  430. package/dist/engine/internal-query-builder.js +34 -0
  431. package/dist/engine/internal-query-builder.js.map +1 -0
  432. package/dist/engine/preprocessor/create-preprocessor.d.ts +18 -0
  433. package/dist/engine/preprocessor/create-preprocessor.d.ts.map +1 -0
  434. package/dist/engine/preprocessor/create-preprocessor.js +217 -0
  435. package/dist/engine/preprocessor/create-preprocessor.js.map +1 -0
  436. package/dist/engine/preprocessor/create-preprocessor.test.d.ts +2 -0
  437. package/dist/engine/preprocessor/create-preprocessor.test.d.ts.map +1 -0
  438. package/dist/engine/preprocessor/create-preprocessor.test.js +216 -0
  439. package/dist/engine/preprocessor/create-preprocessor.test.js.map +1 -0
  440. package/dist/engine/preprocessor/entity-views/delete.d.ts +3 -0
  441. package/dist/engine/preprocessor/entity-views/delete.d.ts.map +1 -0
  442. package/dist/engine/preprocessor/entity-views/delete.js +235 -0
  443. package/dist/engine/preprocessor/entity-views/delete.js.map +1 -0
  444. package/dist/engine/preprocessor/entity-views/delete.test.d.ts +2 -0
  445. package/dist/engine/preprocessor/entity-views/delete.test.d.ts.map +1 -0
  446. package/dist/engine/preprocessor/entity-views/delete.test.js +700 -0
  447. package/dist/engine/preprocessor/entity-views/delete.test.js.map +1 -0
  448. package/dist/engine/preprocessor/entity-views/insert.d.ts +3 -0
  449. package/dist/engine/preprocessor/entity-views/insert.d.ts.map +1 -0
  450. package/dist/engine/preprocessor/entity-views/insert.js +675 -0
  451. package/dist/engine/preprocessor/entity-views/insert.js.map +1 -0
  452. package/dist/engine/preprocessor/entity-views/insert.test.d.ts +2 -0
  453. package/dist/engine/preprocessor/entity-views/insert.test.d.ts.map +1 -0
  454. package/dist/engine/preprocessor/entity-views/insert.test.js +1014 -0
  455. package/dist/engine/preprocessor/entity-views/insert.test.js.map +1 -0
  456. package/dist/engine/preprocessor/entity-views/select.bench.d.ts +2 -0
  457. package/dist/engine/preprocessor/entity-views/select.bench.d.ts.map +1 -0
  458. package/dist/engine/preprocessor/entity-views/select.bench.js +145 -0
  459. package/dist/engine/preprocessor/entity-views/select.bench.js.map +1 -0
  460. package/dist/engine/preprocessor/entity-views/select.d.ts +6 -0
  461. package/dist/engine/preprocessor/entity-views/select.d.ts.map +1 -0
  462. package/dist/engine/preprocessor/entity-views/select.js +1306 -0
  463. package/dist/engine/preprocessor/entity-views/select.js.map +1 -0
  464. package/dist/engine/preprocessor/entity-views/select.test.d.ts +2 -0
  465. package/dist/engine/preprocessor/entity-views/select.test.d.ts.map +1 -0
  466. package/dist/engine/preprocessor/entity-views/select.test.js +320 -0
  467. package/dist/engine/preprocessor/entity-views/select.test.js.map +1 -0
  468. package/dist/engine/preprocessor/entity-views/shared.d.ts +165 -0
  469. package/dist/engine/preprocessor/entity-views/shared.d.ts.map +1 -0
  470. package/dist/engine/preprocessor/entity-views/shared.js +1080 -0
  471. package/dist/engine/preprocessor/entity-views/shared.js.map +1 -0
  472. package/dist/engine/preprocessor/entity-views/update.d.ts +3 -0
  473. package/dist/engine/preprocessor/entity-views/update.d.ts.map +1 -0
  474. package/dist/engine/preprocessor/entity-views/update.js +527 -0
  475. package/dist/engine/preprocessor/entity-views/update.js.map +1 -0
  476. package/dist/engine/preprocessor/entity-views/update.test.d.ts +2 -0
  477. package/dist/engine/preprocessor/entity-views/update.test.d.ts.map +1 -0
  478. package/dist/engine/preprocessor/entity-views/update.test.js +356 -0
  479. package/dist/engine/preprocessor/entity-views/update.test.js.map +1 -0
  480. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.d.ts +38 -0
  481. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.d.ts.map +1 -0
  482. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.js +296 -0
  483. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.js.map +1 -0
  484. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.test.d.ts +2 -0
  485. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.test.d.ts.map +1 -0
  486. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.test.js +80 -0
  487. package/dist/engine/preprocessor/inheritance/version-inheritance-cache.test.js.map +1 -0
  488. package/dist/engine/preprocessor/sql-parser/ast-helpers.d.ts +110 -0
  489. package/dist/engine/preprocessor/sql-parser/ast-helpers.d.ts.map +1 -0
  490. package/dist/engine/preprocessor/sql-parser/ast-helpers.js +196 -0
  491. package/dist/engine/preprocessor/sql-parser/ast-helpers.js.map +1 -0
  492. package/dist/engine/preprocessor/sql-parser/column-usage.d.ts +14 -0
  493. package/dist/engine/preprocessor/sql-parser/column-usage.d.ts.map +1 -0
  494. package/dist/engine/preprocessor/sql-parser/column-usage.js +300 -0
  495. package/dist/engine/preprocessor/sql-parser/column-usage.js.map +1 -0
  496. package/dist/engine/preprocessor/sql-parser/compile.d.ts +30 -0
  497. package/dist/engine/preprocessor/sql-parser/compile.d.ts.map +1 -0
  498. package/dist/engine/preprocessor/sql-parser/compile.js +719 -0
  499. package/dist/engine/preprocessor/sql-parser/compile.js.map +1 -0
  500. package/dist/engine/preprocessor/sql-parser/compile.test.d.ts +2 -0
  501. package/dist/engine/preprocessor/sql-parser/compile.test.d.ts.map +1 -0
  502. package/dist/engine/preprocessor/sql-parser/compile.test.js +100 -0
  503. package/dist/engine/preprocessor/sql-parser/compile.test.js.map +1 -0
  504. package/dist/engine/preprocessor/sql-parser/cst.d.ts +49 -0
  505. package/dist/engine/preprocessor/sql-parser/cst.d.ts.map +1 -0
  506. package/dist/engine/preprocessor/sql-parser/cst.js +768 -0
  507. package/dist/engine/preprocessor/sql-parser/cst.js.map +1 -0
  508. package/dist/engine/preprocessor/sql-parser/lexer.d.ts +93 -0
  509. package/dist/engine/preprocessor/sql-parser/lexer.d.ts.map +1 -0
  510. package/dist/engine/preprocessor/sql-parser/lexer.js +517 -0
  511. package/dist/engine/preprocessor/sql-parser/lexer.js.map +1 -0
  512. package/dist/engine/preprocessor/sql-parser/nodes.d.ts +268 -0
  513. package/dist/engine/preprocessor/sql-parser/nodes.d.ts.map +1 -0
  514. package/dist/engine/preprocessor/sql-parser/nodes.js +20 -0
  515. package/dist/engine/preprocessor/sql-parser/nodes.js.map +1 -0
  516. package/dist/engine/preprocessor/sql-parser/parse.d.ts +15 -0
  517. package/dist/engine/preprocessor/sql-parser/parse.d.ts.map +1 -0
  518. package/dist/engine/preprocessor/sql-parser/parse.js +1503 -0
  519. package/dist/engine/preprocessor/sql-parser/parse.js.map +1 -0
  520. package/dist/engine/preprocessor/sql-parser/parse.test.d.ts +2 -0
  521. package/dist/engine/preprocessor/sql-parser/parse.test.d.ts.map +1 -0
  522. package/dist/engine/preprocessor/sql-parser/parse.test.js +1483 -0
  523. package/dist/engine/preprocessor/sql-parser/parse.test.js.map +1 -0
  524. package/dist/engine/preprocessor/sql-parser/visitor.d.ts +80 -0
  525. package/dist/engine/preprocessor/sql-parser/visitor.d.ts.map +1 -0
  526. package/dist/engine/preprocessor/sql-parser/visitor.js +875 -0
  527. package/dist/engine/preprocessor/sql-parser/visitor.js.map +1 -0
  528. package/dist/engine/preprocessor/sql-parser/visitor.test.d.ts +2 -0
  529. package/dist/engine/preprocessor/sql-parser/visitor.test.d.ts.map +1 -0
  530. package/dist/engine/preprocessor/sql-parser/visitor.test.js +142 -0
  531. package/dist/engine/preprocessor/sql-parser/visitor.test.js.map +1 -0
  532. package/dist/engine/preprocessor/steps/cache-populator.d.ts +12 -0
  533. package/dist/engine/preprocessor/steps/cache-populator.d.ts.map +1 -0
  534. package/dist/engine/preprocessor/steps/cache-populator.js +603 -0
  535. package/dist/engine/preprocessor/steps/cache-populator.js.map +1 -0
  536. package/dist/engine/preprocessor/steps/cache-populator.test.d.ts +2 -0
  537. package/dist/engine/preprocessor/steps/cache-populator.test.d.ts.map +1 -0
  538. package/dist/engine/preprocessor/steps/cache-populator.test.js +95 -0
  539. package/dist/engine/preprocessor/steps/cache-populator.test.js.map +1 -0
  540. package/dist/engine/preprocessor/steps/expand-sql-views.d.ts +13 -0
  541. package/dist/engine/preprocessor/steps/expand-sql-views.d.ts.map +1 -0
  542. package/dist/engine/preprocessor/steps/expand-sql-views.js +894 -0
  543. package/dist/engine/preprocessor/steps/expand-sql-views.js.map +1 -0
  544. package/dist/engine/preprocessor/steps/expand-sql-views.test.d.ts +2 -0
  545. package/dist/engine/preprocessor/steps/expand-sql-views.test.d.ts.map +1 -0
  546. package/dist/engine/preprocessor/steps/expand-sql-views.test.js +1177 -0
  547. package/dist/engine/preprocessor/steps/expand-sql-views.test.js.map +1 -0
  548. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.d.ts +7 -0
  549. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.d.ts.map +1 -0
  550. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.js +190 -0
  551. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.js.map +1 -0
  552. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.test.d.ts +2 -0
  553. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.test.d.ts.map +1 -0
  554. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.test.js +74 -0
  555. package/dist/engine/preprocessor/steps/rewrite-active-version-subquery.test.js.map +1 -0
  556. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.bench.d.ts +2 -0
  557. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.bench.d.ts.map +1 -0
  558. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.bench.js +64 -0
  559. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.bench.js.map +1 -0
  560. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.d.ts +16 -0
  561. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.d.ts.map +1 -0
  562. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.js +2305 -0
  563. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.js.map +1 -0
  564. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.test.d.ts +2 -0
  565. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.test.d.ts.map +1 -0
  566. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.test.js +975 -0
  567. package/dist/engine/preprocessor/steps/rewrite-vtable-selects.test.js.map +1 -0
  568. package/dist/engine/preprocessor/types.d.ts +93 -0
  569. package/dist/engine/preprocessor/types.d.ts.map +1 -0
  570. package/dist/engine/preprocessor/types.js.map +1 -0
  571. package/dist/engine/sql-parser/tokenizer.d.ts +60 -0
  572. package/dist/engine/sql-parser/tokenizer.d.ts.map +1 -0
  573. package/dist/engine/sql-parser/tokenizer.js +188 -0
  574. package/dist/engine/sql-parser/tokenizer.js.map +1 -0
  575. package/dist/engine/sql-parser/tokenizer.test.d.ts +2 -0
  576. package/dist/engine/sql-parser/tokenizer.test.d.ts.map +1 -0
  577. package/dist/engine/sql-parser/tokenizer.test.js +252 -0
  578. package/dist/engine/sql-parser/tokenizer.test.js.map +1 -0
  579. package/dist/engine/with-runtime-cache.d.ts +27 -0
  580. package/dist/engine/with-runtime-cache.d.ts.map +1 -0
  581. package/dist/engine/with-runtime-cache.js +140 -0
  582. package/dist/engine/with-runtime-cache.js.map +1 -0
  583. package/dist/engine/with-runtime-cache.test.d.ts +2 -0
  584. package/dist/engine/with-runtime-cache.test.d.ts.map +1 -0
  585. package/dist/engine/with-runtime-cache.test.js +129 -0
  586. package/dist/engine/with-runtime-cache.test.js.map +1 -0
  587. package/dist/entity/conversation/attach-conversation.d.ts +49 -0
  588. package/dist/entity/conversation/attach-conversation.d.ts.map +1 -0
  589. package/dist/entity/conversation/attach-conversation.js +74 -0
  590. package/dist/entity/conversation/attach-conversation.js.map +1 -0
  591. package/dist/entity/conversation/attach-conversation.test.d.ts +2 -0
  592. package/dist/entity/conversation/attach-conversation.test.d.ts.map +1 -0
  593. package/dist/entity/conversation/attach-conversation.test.js +220 -0
  594. package/dist/entity/conversation/attach-conversation.test.js.map +1 -0
  595. package/dist/entity/conversation/schema-definition.d.ts +43 -0
  596. package/dist/entity/conversation/schema-definition.d.ts.map +1 -0
  597. package/dist/entity/conversation/schema-definition.js +44 -0
  598. package/dist/entity/conversation/schema-definition.js.map +1 -0
  599. package/dist/entity/conversation/schema.test.d.ts.map +1 -0
  600. package/dist/entity/conversation/schema.test.js +91 -0
  601. package/dist/entity/conversation/schema.test.js.map +1 -0
  602. package/dist/entity/eb-entity.d.ts +76 -0
  603. package/dist/entity/eb-entity.d.ts.map +1 -0
  604. package/dist/entity/eb-entity.js +156 -0
  605. package/dist/entity/eb-entity.js.map +1 -0
  606. package/dist/entity/eb-entity.test.d.ts +2 -0
  607. package/dist/entity/eb-entity.test.d.ts.map +1 -0
  608. package/dist/entity/eb-entity.test.js +650 -0
  609. package/dist/entity/eb-entity.test.js.map +1 -0
  610. package/dist/entity/index.d.ts +7 -0
  611. package/dist/entity/index.d.ts.map +1 -0
  612. package/dist/entity/index.js +4 -0
  613. package/dist/entity/index.js.map +1 -0
  614. package/dist/entity/label/attach-label.d.ts +79 -0
  615. package/dist/entity/label/attach-label.d.ts.map +1 -0
  616. package/dist/entity/label/attach-label.js +144 -0
  617. package/dist/entity/label/attach-label.js.map +1 -0
  618. package/dist/entity/label/attach-label.test.d.ts +2 -0
  619. package/dist/entity/label/attach-label.test.d.ts.map +1 -0
  620. package/dist/entity/label/attach-label.test.js +295 -0
  621. package/dist/entity/label/attach-label.test.js.map +1 -0
  622. package/dist/entity/label/schema-definition.d.ts +43 -0
  623. package/dist/entity/label/schema-definition.d.ts.map +1 -0
  624. package/dist/entity/label/schema-definition.js +39 -0
  625. package/dist/entity/label/schema-definition.js.map +1 -0
  626. package/dist/entity/label/schema.test.d.ts +2 -0
  627. package/dist/entity/label/schema.test.d.ts.map +1 -0
  628. package/dist/entity/label/schema.test.js +829 -0
  629. package/dist/entity/label/schema.test.js.map +1 -0
  630. package/dist/entity/types.d.ts +11 -0
  631. package/dist/entity/types.d.ts.map +1 -0
  632. package/dist/entity/types.js +2 -0
  633. package/dist/entity/types.js.map +1 -0
  634. package/dist/environment/api.d.ts +38 -0
  635. package/dist/environment/api.d.ts.map +1 -0
  636. package/dist/environment/api.js +2 -0
  637. package/dist/environment/api.js.map +1 -0
  638. package/dist/environment/api.test.d.ts +2 -0
  639. package/dist/environment/api.test.d.ts.map +1 -0
  640. package/dist/environment/api.test.js +76 -0
  641. package/dist/environment/api.test.js.map +1 -0
  642. package/dist/environment/in-memory.d.ts +22 -0
  643. package/dist/environment/in-memory.d.ts.map +1 -0
  644. package/dist/environment/in-memory.js +55 -0
  645. package/dist/environment/in-memory.js.map +1 -0
  646. package/dist/environment/in-memory.test.d.ts.map +1 -0
  647. package/dist/environment/in-memory.test.js +69 -0
  648. package/dist/environment/in-memory.test.js.map +1 -0
  649. package/dist/environment/index.d.ts +4 -0
  650. package/dist/environment/index.d.ts.map +1 -0
  651. package/dist/environment/index.js +3 -0
  652. package/dist/environment/index.js.map +1 -0
  653. package/dist/environment/kysely/kysely-driver.test.d.ts +2 -0
  654. package/dist/environment/kysely/kysely-driver.test.d.ts.map +1 -0
  655. package/dist/environment/kysely/kysely-driver.test.js +26 -0
  656. package/dist/environment/kysely/kysely-driver.test.js.map +1 -0
  657. package/dist/environment/load-from-string.d.ts +3 -0
  658. package/dist/environment/load-from-string.d.ts.map +1 -0
  659. package/dist/environment/load-from-string.js +64 -0
  660. package/dist/environment/load-from-string.js.map +1 -0
  661. package/dist/environment/load-from-string.test.d.ts +2 -0
  662. package/dist/environment/load-from-string.test.d.ts.map +1 -0
  663. package/dist/environment/load-from-string.test.js +16 -0
  664. package/dist/environment/load-from-string.test.js.map +1 -0
  665. package/dist/environment/opfs-sah.browser.test.d.ts +2 -0
  666. package/dist/environment/opfs-sah.browser.test.d.ts.map +1 -0
  667. package/dist/environment/opfs-sah.browser.test.js +309 -0
  668. package/dist/environment/opfs-sah.browser.test.js.map +1 -0
  669. package/dist/environment/opfs-sah.d.ts +63 -0
  670. package/dist/environment/opfs-sah.d.ts.map +1 -0
  671. package/dist/environment/opfs-sah.js +240 -0
  672. package/dist/environment/opfs-sah.js.map +1 -0
  673. package/dist/environment/opfs-sah.worker.d.ts +2 -0
  674. package/dist/environment/opfs-sah.worker.d.ts.map +1 -0
  675. package/dist/environment/opfs-sah.worker.js +212 -0
  676. package/dist/environment/opfs-sah.worker.js.map +1 -0
  677. package/dist/environment/test-actors/echo.actor.d.ts +2 -0
  678. package/dist/environment/test-actors/echo.actor.d.ts.map +1 -0
  679. package/dist/environment/test-actors/echo.actor.js +7 -0
  680. package/dist/environment/test-actors/echo.actor.js.map +1 -0
  681. package/dist/filesystem/directory/ensure-directories.d.ts +48 -0
  682. package/dist/filesystem/directory/ensure-directories.d.ts.map +1 -0
  683. package/dist/filesystem/directory/ensure-directories.js +223 -0
  684. package/dist/filesystem/directory/ensure-directories.js.map +1 -0
  685. package/dist/filesystem/directory/schema-definition.d.ts +36 -0
  686. package/dist/filesystem/directory/schema-definition.d.ts.map +1 -0
  687. package/dist/filesystem/directory/schema-definition.js +35 -0
  688. package/dist/filesystem/directory/schema-definition.js.map +1 -0
  689. package/dist/filesystem/directory/schema.d.ts +11 -0
  690. package/dist/filesystem/directory/schema.d.ts.map +1 -0
  691. package/dist/filesystem/directory/schema.js +494 -0
  692. package/dist/filesystem/directory/schema.js.map +1 -0
  693. package/dist/filesystem/directory/schema.test.d.ts +2 -0
  694. package/dist/filesystem/directory/schema.test.d.ts.map +1 -0
  695. package/dist/filesystem/directory/schema.test.js +93 -0
  696. package/dist/filesystem/directory/schema.test.js.map +1 -0
  697. package/dist/filesystem/file/cache/clear-file-data-cache.d.ts +17 -0
  698. package/dist/filesystem/file/cache/clear-file-data-cache.d.ts.map +1 -0
  699. package/dist/filesystem/file/cache/clear-file-data-cache.js +54 -0
  700. package/dist/filesystem/file/cache/clear-file-data-cache.js.map +1 -0
  701. package/dist/filesystem/file/cache/lixcol-schema.d.ts +27 -0
  702. package/dist/filesystem/file/cache/lixcol-schema.d.ts.map +1 -0
  703. package/dist/filesystem/file/cache/lixcol-schema.js +31 -0
  704. package/dist/filesystem/file/cache/lixcol-schema.js.map +1 -0
  705. package/dist/filesystem/file/cache/path-cache-schema.d.ts +25 -0
  706. package/dist/filesystem/file/cache/path-cache-schema.d.ts.map +1 -0
  707. package/dist/filesystem/file/cache/path-cache-schema.js +30 -0
  708. package/dist/filesystem/file/cache/path-cache-schema.js.map +1 -0
  709. package/dist/filesystem/file/cache/schema.d.ts +21 -0
  710. package/dist/filesystem/file/cache/schema.d.ts.map +1 -0
  711. package/dist/filesystem/file/cache/schema.js +24 -0
  712. package/dist/filesystem/file/cache/schema.js.map +1 -0
  713. package/dist/filesystem/file/cache/schema.test.d.ts +2 -0
  714. package/dist/filesystem/file/cache/schema.test.d.ts.map +1 -0
  715. package/dist/filesystem/file/cache/schema.test.js +264 -0
  716. package/dist/filesystem/file/cache/schema.test.js.map +1 -0
  717. package/dist/filesystem/file/cache/update-file-data-cache.d.ts +20 -0
  718. package/dist/filesystem/file/cache/update-file-data-cache.d.ts.map +1 -0
  719. package/dist/filesystem/file/cache/update-file-data-cache.js +25 -0
  720. package/dist/filesystem/file/cache/update-file-data-cache.js.map +1 -0
  721. package/dist/filesystem/file/cache/update-file-lixcol-cache.d.ts +21 -0
  722. package/dist/filesystem/file/cache/update-file-lixcol-cache.d.ts.map +1 -0
  723. package/dist/filesystem/file/cache/update-file-lixcol-cache.js +78 -0
  724. package/dist/filesystem/file/cache/update-file-lixcol-cache.js.map +1 -0
  725. package/dist/filesystem/file/cache/update-file-path-cache.d.ts +25 -0
  726. package/dist/filesystem/file/cache/update-file-path-cache.d.ts.map +1 -0
  727. package/dist/filesystem/file/cache/update-file-path-cache.js +38 -0
  728. package/dist/filesystem/file/cache/update-file-path-cache.js.map +1 -0
  729. package/dist/filesystem/file/descriptor-utils.d.ts +70 -0
  730. package/dist/filesystem/file/descriptor-utils.d.ts.map +1 -0
  731. package/dist/filesystem/file/descriptor-utils.js +218 -0
  732. package/dist/filesystem/file/descriptor-utils.js.map +1 -0
  733. package/dist/filesystem/file/file-handlers.d.ts +22 -0
  734. package/dist/filesystem/file/file-handlers.d.ts.map +1 -0
  735. package/dist/filesystem/file/file-handlers.js +540 -0
  736. package/dist/filesystem/file/file-handlers.js.map +1 -0
  737. package/dist/filesystem/file/file-handlers.test.d.ts.map +1 -0
  738. package/dist/filesystem/file/file-handlers.test.js +344 -0
  739. package/dist/filesystem/file/file-handlers.test.js.map +1 -0
  740. package/dist/filesystem/file/materialize-file-data-at-commit.d.ts +9 -0
  741. package/dist/filesystem/file/materialize-file-data-at-commit.d.ts.map +1 -0
  742. package/dist/filesystem/file/materialize-file-data-at-commit.js +156 -0
  743. package/dist/filesystem/file/materialize-file-data-at-commit.js.map +1 -0
  744. package/dist/filesystem/file/materialize-file-data.d.ts +8 -0
  745. package/dist/filesystem/file/materialize-file-data.d.ts.map +1 -0
  746. package/dist/filesystem/file/materialize-file-data.js +111 -0
  747. package/dist/filesystem/file/materialize-file-data.js.map +1 -0
  748. package/dist/filesystem/file/materialize-file-data.test.d.ts.map +1 -0
  749. package/dist/filesystem/file/materialize-file-data.test.js +104 -0
  750. package/dist/filesystem/file/materialize-file-data.test.js.map +1 -0
  751. package/dist/filesystem/file/schema-definition.d.ts +46 -0
  752. package/dist/filesystem/file/schema-definition.d.ts.map +1 -0
  753. package/dist/filesystem/file/schema-definition.js +39 -0
  754. package/dist/filesystem/file/schema-definition.js.map +1 -0
  755. package/dist/filesystem/file/schema.d.ts +47 -0
  756. package/dist/filesystem/file/schema.d.ts.map +1 -0
  757. package/dist/filesystem/file/schema.js +610 -0
  758. package/dist/filesystem/file/schema.js.map +1 -0
  759. package/dist/filesystem/file/schema.test.d.ts +2 -0
  760. package/dist/filesystem/file/schema.test.d.ts.map +1 -0
  761. package/dist/filesystem/file/schema.test.js +1885 -0
  762. package/dist/filesystem/file/schema.test.js.map +1 -0
  763. package/dist/filesystem/file/select-file-data.d.ts +21 -0
  764. package/dist/filesystem/file/select-file-data.d.ts.map +1 -0
  765. package/dist/filesystem/file/select-file-data.js +48 -0
  766. package/dist/filesystem/file/select-file-data.js.map +1 -0
  767. package/dist/filesystem/file/select-file-lixcol.d.ts +27 -0
  768. package/dist/filesystem/file/select-file-lixcol.d.ts.map +1 -0
  769. package/dist/filesystem/file/select-file-lixcol.js +120 -0
  770. package/dist/filesystem/file/select-file-lixcol.js.map +1 -0
  771. package/dist/filesystem/file/store-detected-change-schema.d.ts +8 -0
  772. package/dist/filesystem/file/store-detected-change-schema.d.ts.map +1 -0
  773. package/dist/filesystem/file/store-detected-change-schema.js +38 -0
  774. package/dist/filesystem/file/store-detected-change-schema.js.map +1 -0
  775. package/dist/filesystem/file/store-detected-change-schema.test.d.ts.map +1 -0
  776. package/dist/filesystem/file/store-detected-change-schema.test.js +222 -0
  777. package/dist/filesystem/file/store-detected-change-schema.test.js.map +1 -0
  778. package/dist/filesystem/file/unknown-file-fallback-plugin.d.ts +23 -0
  779. package/dist/filesystem/file/unknown-file-fallback-plugin.d.ts.map +1 -0
  780. package/dist/filesystem/file/unknown-file-fallback-plugin.js +74 -0
  781. package/dist/filesystem/file/unknown-file-fallback-plugin.js.map +1 -0
  782. package/dist/filesystem/file/unknown-file-fallback-plugin.test.d.ts.map +1 -0
  783. package/dist/filesystem/file/unknown-file-fallback-plugin.test.js +319 -0
  784. package/dist/filesystem/file/unknown-file-fallback-plugin.test.js.map +1 -0
  785. package/dist/filesystem/fs.bench.d.ts +2 -0
  786. package/dist/filesystem/fs.bench.d.ts.map +1 -0
  787. package/dist/filesystem/fs.bench.js +534 -0
  788. package/dist/filesystem/fs.bench.js.map +1 -0
  789. package/dist/filesystem/index.d.ts +5 -0
  790. package/dist/filesystem/index.d.ts.map +1 -0
  791. package/dist/filesystem/index.js +4 -0
  792. package/dist/filesystem/index.js.map +1 -0
  793. package/dist/filesystem/path.d.ts +37 -0
  794. package/dist/filesystem/path.d.ts.map +1 -0
  795. package/dist/filesystem/path.js +94 -0
  796. package/dist/filesystem/path.js.map +1 -0
  797. package/dist/filesystem/path.test.d.ts +2 -0
  798. package/dist/filesystem/path.test.d.ts.map +1 -0
  799. package/dist/filesystem/path.test.js +102 -0
  800. package/dist/filesystem/path.test.js.map +1 -0
  801. package/dist/filesystem/schema.d.ts +11 -0
  802. package/dist/filesystem/schema.d.ts.map +1 -0
  803. package/dist/filesystem/schema.js +13 -0
  804. package/dist/filesystem/schema.js.map +1 -0
  805. package/dist/filesystem/schema.test.d.ts +2 -0
  806. package/dist/filesystem/schema.test.d.ts.map +1 -0
  807. package/dist/filesystem/schema.test.js +502 -0
  808. package/dist/filesystem/schema.test.js.map +1 -0
  809. package/dist/filesystem/util/glob.d.ts +18 -0
  810. package/dist/filesystem/util/glob.d.ts.map +1 -0
  811. package/dist/filesystem/util/glob.js +26 -0
  812. package/dist/filesystem/util/glob.js.map +1 -0
  813. package/dist/hooks/create-hooks.d.ts +68 -35
  814. package/dist/hooks/create-hooks.d.ts.map +1 -1
  815. package/dist/hooks/create-hooks.js +18 -7
  816. package/dist/hooks/create-hooks.js.map +1 -1
  817. package/dist/hooks/create-hooks.test.js +114 -17
  818. package/dist/hooks/create-hooks.test.js.map +1 -1
  819. package/dist/index.d.ts +11 -4
  820. package/dist/index.d.ts.map +1 -1
  821. package/dist/index.js +11 -4
  822. package/dist/index.js.map +1 -1
  823. package/dist/key-value/index.d.ts +1 -1
  824. package/dist/key-value/index.d.ts.map +1 -1
  825. package/dist/key-value/index.js +1 -1
  826. package/dist/key-value/index.js.map +1 -1
  827. package/dist/key-value/schema-definition.d.ts +74 -0
  828. package/dist/key-value/schema-definition.d.ts.map +1 -0
  829. package/dist/key-value/schema-definition.js +19 -0
  830. package/dist/key-value/schema-definition.js.map +1 -0
  831. package/dist/key-value/schema.test.js +203 -13
  832. package/dist/key-value/schema.test.js.map +1 -1
  833. package/dist/label/create-label.d.ts +5 -5
  834. package/dist/label/create-label.d.ts.map +1 -1
  835. package/dist/label/create-label.js +7 -4
  836. package/dist/label/create-label.js.map +1 -1
  837. package/dist/label/create-label.test.js +2 -2
  838. package/dist/label/create-label.test.js.map +1 -1
  839. package/dist/label/index.d.ts +1 -1
  840. package/dist/label/index.d.ts.map +1 -1
  841. package/dist/label/index.js +1 -1
  842. package/dist/label/index.js.map +1 -1
  843. package/dist/label/schema-definition.d.ts +24 -0
  844. package/dist/label/schema-definition.d.ts.map +1 -0
  845. package/dist/label/schema-definition.js +21 -0
  846. package/dist/label/schema-definition.js.map +1 -0
  847. package/dist/lix/index.d.ts +0 -3
  848. package/dist/lix/index.d.ts.map +1 -1
  849. package/dist/lix/index.js +0 -3
  850. package/dist/lix/index.js.map +1 -1
  851. package/dist/lix/new-lix.d.ts +5 -3
  852. package/dist/lix/new-lix.d.ts.map +1 -1
  853. package/dist/lix/new-lix.js +403 -94
  854. package/dist/lix/new-lix.js.map +1 -1
  855. package/dist/lix/new-lix.test.js +247 -19
  856. package/dist/lix/new-lix.test.js.map +1 -1
  857. package/dist/lix/open-lix.bench.d.ts +2 -0
  858. package/dist/lix/open-lix.bench.d.ts.map +1 -0
  859. package/dist/lix/open-lix.bench.js +22 -0
  860. package/dist/lix/open-lix.bench.js.map +1 -0
  861. package/dist/lix/open-lix.d.ts +93 -41
  862. package/dist/lix/open-lix.d.ts.map +1 -1
  863. package/dist/lix/open-lix.js +80 -80
  864. package/dist/lix/open-lix.js.map +1 -1
  865. package/dist/lix/open-lix.test.js +320 -6
  866. package/dist/lix/open-lix.test.js.map +1 -1
  867. package/dist/log/create-lix-own-log.d.ts +26 -19
  868. package/dist/log/create-lix-own-log.d.ts.map +1 -1
  869. package/dist/log/create-lix-own-log.js +33 -45
  870. package/dist/log/create-lix-own-log.js.map +1 -1
  871. package/dist/log/create-lix-own-log.test.js +49 -17
  872. package/dist/log/create-lix-own-log.test.js.map +1 -1
  873. package/dist/log/create-log.d.ts +23 -13
  874. package/dist/log/create-log.d.ts.map +1 -1
  875. package/dist/log/create-log.js +20 -11
  876. package/dist/log/create-log.js.map +1 -1
  877. package/dist/log/index.d.ts +1 -1
  878. package/dist/log/index.d.ts.map +1 -1
  879. package/dist/log/index.js +1 -1
  880. package/dist/log/index.js.map +1 -1
  881. package/dist/log/schema-definition.d.ts +36 -0
  882. package/dist/log/schema-definition.d.ts.map +1 -0
  883. package/dist/log/schema-definition.js +39 -0
  884. package/dist/log/schema-definition.js.map +1 -0
  885. package/dist/log/schema.test.js +51 -18
  886. package/dist/log/schema.test.js.map +1 -1
  887. package/dist/observe/create-observe.d.ts.map +1 -1
  888. package/dist/observe/create-observe.js +198 -72
  889. package/dist/observe/create-observe.js.map +1 -1
  890. package/dist/observe/create-observe.test.js +688 -44
  891. package/dist/observe/create-observe.test.js.map +1 -1
  892. package/dist/observe/determine-schema-keys.d.ts +14 -0
  893. package/dist/observe/determine-schema-keys.d.ts.map +1 -0
  894. package/dist/observe/determine-schema-keys.js +387 -0
  895. package/dist/observe/determine-schema-keys.js.map +1 -0
  896. package/dist/observe/determine-schema-keys.test.d.ts +2 -0
  897. package/dist/observe/determine-schema-keys.test.d.ts.map +1 -0
  898. package/dist/observe/determine-schema-keys.test.js +308 -0
  899. package/dist/observe/determine-schema-keys.test.js.map +1 -0
  900. package/dist/plugin/index.d.ts +2 -1
  901. package/dist/plugin/index.d.ts.map +1 -1
  902. package/dist/plugin/index.js +1 -0
  903. package/dist/plugin/index.js.map +1 -1
  904. package/dist/plugin/lix-plugin.d.ts +48 -9
  905. package/dist/plugin/lix-plugin.d.ts.map +1 -1
  906. package/dist/plugin/lix-plugin.test-d.js +1 -0
  907. package/dist/plugin/lix-plugin.test-d.js.map +1 -1
  908. package/dist/plugin/lix-plugin.test.d.ts +2 -0
  909. package/dist/plugin/lix-plugin.test.d.ts.map +1 -0
  910. package/dist/plugin/lix-plugin.test.js +49 -0
  911. package/dist/plugin/lix-plugin.test.js.map +1 -0
  912. package/dist/plugin/mock-json-plugin.d.ts.map +1 -1
  913. package/dist/plugin/mock-json-plugin.js +1 -0
  914. package/dist/plugin/mock-json-plugin.js.map +1 -1
  915. package/dist/plugin/mock-json-plugin.test.js +14 -4
  916. package/dist/plugin/mock-json-plugin.test.js.map +1 -1
  917. package/dist/plugin/query-sync.d.ts +85 -0
  918. package/dist/plugin/query-sync.d.ts.map +1 -0
  919. package/dist/plugin/query-sync.js +110 -0
  920. package/dist/plugin/query-sync.js.map +1 -0
  921. package/dist/plugin/query-sync.test.d.ts +2 -0
  922. package/dist/plugin/query-sync.test.d.ts.map +1 -0
  923. package/dist/plugin/query-sync.test.js +110 -0
  924. package/dist/plugin/query-sync.test.js.map +1 -0
  925. package/dist/query-filter/commit-is-ancestor-of.d.ts +51 -0
  926. package/dist/query-filter/commit-is-ancestor-of.d.ts.map +1 -0
  927. package/dist/query-filter/commit-is-ancestor-of.js +63 -0
  928. package/dist/query-filter/commit-is-ancestor-of.js.map +1 -0
  929. package/dist/query-filter/commit-is-ancestor-of.test.d.ts +2 -0
  930. package/dist/query-filter/commit-is-ancestor-of.test.d.ts.map +1 -0
  931. package/dist/query-filter/commit-is-ancestor-of.test.js +202 -0
  932. package/dist/query-filter/commit-is-ancestor-of.test.js.map +1 -0
  933. package/dist/query-filter/commit-is-descendant-of.d.ts +44 -0
  934. package/dist/query-filter/commit-is-descendant-of.d.ts.map +1 -0
  935. package/dist/query-filter/commit-is-descendant-of.js +56 -0
  936. package/dist/query-filter/commit-is-descendant-of.js.map +1 -0
  937. package/dist/query-filter/commit-is-descendant-of.test.d.ts +2 -0
  938. package/dist/query-filter/commit-is-descendant-of.test.d.ts.map +1 -0
  939. package/dist/query-filter/commit-is-descendant-of.test.js +218 -0
  940. package/dist/query-filter/commit-is-descendant-of.test.js.map +1 -0
  941. package/dist/query-filter/index.d.ts +2 -7
  942. package/dist/query-filter/index.d.ts.map +1 -1
  943. package/dist/query-filter/index.js +2 -7
  944. package/dist/query-filter/index.js.map +1 -1
  945. package/dist/schema-definition/definition.d.ts +200 -51
  946. package/dist/schema-definition/definition.d.ts.map +1 -1
  947. package/dist/schema-definition/definition.js +102 -18
  948. package/dist/schema-definition/definition.js.map +1 -1
  949. package/dist/schema-definition/definition.test-d.js +78 -10
  950. package/dist/schema-definition/definition.test-d.js.map +1 -1
  951. package/dist/schema-definition/definition.test.js +389 -108
  952. package/dist/schema-definition/definition.test.js.map +1 -1
  953. package/dist/schema-definition/json-pointer.d.ts +51 -0
  954. package/dist/schema-definition/json-pointer.d.ts.map +1 -0
  955. package/dist/schema-definition/json-pointer.js +143 -0
  956. package/dist/schema-definition/json-pointer.js.map +1 -0
  957. package/dist/schema-definition/json-pointer.test.d.ts +2 -0
  958. package/dist/schema-definition/json-pointer.test.d.ts.map +1 -0
  959. package/dist/schema-definition/json-pointer.test.js +72 -0
  960. package/dist/schema-definition/json-pointer.test.js.map +1 -0
  961. package/dist/schema-definition/validate-lix-schema.d.ts.map +1 -1
  962. package/dist/schema-definition/validate-lix-schema.js +73 -0
  963. package/dist/schema-definition/validate-lix-schema.js.map +1 -1
  964. package/dist/schema-definition/validate-lix-schema.test.js +78 -1
  965. package/dist/schema-definition/validate-lix-schema.test.js.map +1 -1
  966. package/dist/server-protocol-handler/environment/create-in-memory-environment.js +1 -1
  967. package/dist/server-protocol-handler/environment/create-in-memory-environment.js.map +1 -1
  968. package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js +2 -2
  969. package/dist/server-protocol-handler/environment/create-in-memory-environment.test.js.map +1 -1
  970. package/dist/server-protocol-handler/routes/get-v1.d.ts.map +1 -1
  971. package/dist/server-protocol-handler/routes/get-v1.js +4 -2
  972. package/dist/server-protocol-handler/routes/get-v1.js.map +1 -1
  973. package/dist/server-protocol-handler/routes/push-v1.test.js +2 -2
  974. package/dist/server-protocol-handler/routes/push-v1.test.js.map +1 -1
  975. package/dist/services/env-variables/index.d.ts +1 -1
  976. package/dist/services/env-variables/index.js +2 -2
  977. package/dist/services/env-variables/index.js.map +1 -1
  978. package/dist/services/telemetry/capture.test.js +4 -4
  979. package/dist/services/telemetry/capture.test.js.map +1 -1
  980. package/dist/snapshot/schema.d.ts +1 -1
  981. package/dist/snapshot/schema.d.ts.map +1 -1
  982. package/dist/snapshot/schema.js +16 -4
  983. package/dist/snapshot/schema.js.map +1 -1
  984. package/dist/snapshot/schema.test.js +98 -12
  985. package/dist/snapshot/schema.test.js.map +1 -1
  986. package/dist/state/cache/builtin-schemas.d.ts +3 -0
  987. package/dist/state/cache/builtin-schemas.d.ts.map +1 -0
  988. package/dist/state/cache/builtin-schemas.js +16 -0
  989. package/dist/state/cache/builtin-schemas.js.map +1 -0
  990. package/dist/state/cache/clear-state-cache.d.ts +17 -0
  991. package/dist/state/cache/clear-state-cache.d.ts.map +1 -0
  992. package/dist/state/cache/clear-state-cache.js +43 -0
  993. package/dist/state/cache/clear-state-cache.js.map +1 -0
  994. package/dist/state/cache/clear-state-cache.test.d.ts +2 -0
  995. package/dist/state/cache/clear-state-cache.test.d.ts.map +1 -0
  996. package/dist/state/cache/clear-state-cache.test.js +38 -0
  997. package/dist/state/cache/clear-state-cache.test.js.map +1 -0
  998. package/dist/state/cache/create-schema-cache-table.d.ts +37 -0
  999. package/dist/state/cache/create-schema-cache-table.d.ts.map +1 -0
  1000. package/dist/state/cache/create-schema-cache-table.js +137 -0
  1001. package/dist/state/cache/create-schema-cache-table.js.map +1 -0
  1002. package/dist/state/cache/create-schema-cache-table.test.d.ts +2 -0
  1003. package/dist/state/cache/create-schema-cache-table.test.d.ts.map +1 -0
  1004. package/dist/state/cache/create-schema-cache-table.test.js +49 -0
  1005. package/dist/state/cache/create-schema-cache-table.test.js.map +1 -0
  1006. package/dist/state/cache/is-stale-state-cache.d.ts +27 -0
  1007. package/dist/state/cache/is-stale-state-cache.d.ts.map +1 -0
  1008. package/dist/state/cache/is-stale-state-cache.js +64 -0
  1009. package/dist/state/cache/is-stale-state-cache.js.map +1 -0
  1010. package/dist/state/cache/is-stale-state-cache.test.d.ts +2 -0
  1011. package/dist/state/cache/is-stale-state-cache.test.d.ts.map +1 -0
  1012. package/dist/state/cache/is-stale-state-cache.test.js +30 -0
  1013. package/dist/state/cache/is-stale-state-cache.test.js.map +1 -0
  1014. package/dist/state/cache/mark-state-cache-as-stale.d.ts +10 -0
  1015. package/dist/state/cache/mark-state-cache-as-stale.d.ts.map +1 -0
  1016. package/dist/state/cache/mark-state-cache-as-stale.js +50 -0
  1017. package/dist/state/cache/mark-state-cache-as-stale.js.map +1 -0
  1018. package/dist/state/cache/populate-state-cache.d.ts +19 -0
  1019. package/dist/state/cache/populate-state-cache.d.ts.map +1 -0
  1020. package/dist/state/cache/populate-state-cache.js +196 -0
  1021. package/dist/state/cache/populate-state-cache.js.map +1 -0
  1022. package/dist/state/cache/populate-state-cache.test.d.ts +2 -0
  1023. package/dist/state/cache/populate-state-cache.test.d.ts.map +1 -0
  1024. package/dist/state/cache/populate-state-cache.test.js +526 -0
  1025. package/dist/state/cache/populate-state-cache.test.js.map +1 -0
  1026. package/dist/state/cache/schema-indexes.d.ts +19 -0
  1027. package/dist/state/cache/schema-indexes.d.ts.map +1 -0
  1028. package/dist/state/cache/schema-indexes.js +137 -0
  1029. package/dist/state/cache/schema-indexes.js.map +1 -0
  1030. package/dist/state/cache/schema-indexes.test.d.ts +2 -0
  1031. package/dist/state/cache/schema-indexes.test.d.ts.map +1 -0
  1032. package/dist/state/cache/schema-indexes.test.js +124 -0
  1033. package/dist/state/cache/schema-indexes.test.js.map +1 -0
  1034. package/dist/state/cache/schema-resolver.d.ts +34 -0
  1035. package/dist/state/cache/schema-resolver.d.ts.map +1 -0
  1036. package/dist/state/cache/schema-resolver.js +49 -0
  1037. package/dist/state/cache/schema-resolver.js.map +1 -0
  1038. package/dist/state/cache/schema.bench.d.ts +2 -0
  1039. package/dist/state/cache/schema.bench.d.ts.map +1 -0
  1040. package/dist/state/cache/schema.bench.js +305 -0
  1041. package/dist/state/cache/schema.bench.js.map +1 -0
  1042. package/dist/state/cache/schema.d.ts +23 -0
  1043. package/dist/state/cache/schema.d.ts.map +1 -0
  1044. package/dist/state/cache/schema.js +41 -0
  1045. package/dist/state/cache/schema.js.map +1 -0
  1046. package/dist/state/cache/schema.test.d.ts +2 -0
  1047. package/dist/state/cache/schema.test.d.ts.map +1 -0
  1048. package/dist/state/cache/schema.test.js +126 -0
  1049. package/dist/state/cache/schema.test.js.map +1 -0
  1050. package/dist/state/cache/select-from-state-cache.d.ts +11 -0
  1051. package/dist/state/cache/select-from-state-cache.d.ts.map +1 -0
  1052. package/dist/state/cache/select-from-state-cache.js +50 -0
  1053. package/dist/state/cache/select-from-state-cache.js.map +1 -0
  1054. package/dist/state/cache/select-from-state-cache.test.d.ts +2 -0
  1055. package/dist/state/cache/select-from-state-cache.test.d.ts.map +1 -0
  1056. package/dist/state/cache/select-from-state-cache.test.js +49 -0
  1057. package/dist/state/cache/select-from-state-cache.test.js.map +1 -0
  1058. package/dist/state/cache/update-state-cache.bench.d.ts +2 -0
  1059. package/dist/state/cache/update-state-cache.bench.d.ts.map +1 -0
  1060. package/dist/state/cache/update-state-cache.bench.js +129 -0
  1061. package/dist/state/cache/update-state-cache.bench.js.map +1 -0
  1062. package/dist/state/cache/update-state-cache.d.ts +40 -0
  1063. package/dist/state/cache/update-state-cache.d.ts.map +1 -0
  1064. package/dist/state/cache/update-state-cache.js +378 -0
  1065. package/dist/state/cache/update-state-cache.js.map +1 -0
  1066. package/dist/state/cache/update-state-cache.test.d.ts +2 -0
  1067. package/dist/state/cache/update-state-cache.test.d.ts.map +1 -0
  1068. package/dist/state/cache/update-state-cache.test.js +970 -0
  1069. package/dist/state/cache/update-state-cache.test.js.map +1 -0
  1070. package/dist/state/cache-v2/cache-columns.d.ts +3 -0
  1071. package/dist/state/cache-v2/cache-columns.d.ts.map +1 -0
  1072. package/dist/state/cache-v2/cache-columns.js +20 -0
  1073. package/dist/state/cache-v2/cache-columns.js.map +1 -0
  1074. package/dist/state/cache-v2/clear-state-cache.d.ts +17 -0
  1075. package/dist/state/cache-v2/clear-state-cache.d.ts.map +1 -0
  1076. package/dist/state/cache-v2/clear-state-cache.js +42 -0
  1077. package/dist/state/cache-v2/clear-state-cache.js.map +1 -0
  1078. package/dist/state/cache-v2/clear-state-cache.test.d.ts +2 -0
  1079. package/dist/state/cache-v2/clear-state-cache.test.d.ts.map +1 -0
  1080. package/dist/state/cache-v2/clear-state-cache.test.js +87 -0
  1081. package/dist/state/cache-v2/clear-state-cache.test.js.map +1 -0
  1082. package/dist/state/cache-v2/create-schema-cache-table.d.ts +48 -0
  1083. package/dist/state/cache-v2/create-schema-cache-table.d.ts.map +1 -0
  1084. package/dist/state/cache-v2/create-schema-cache-table.js +152 -0
  1085. package/dist/state/cache-v2/create-schema-cache-table.js.map +1 -0
  1086. package/dist/state/cache-v2/create-schema-cache-table.test.d.ts +2 -0
  1087. package/dist/state/cache-v2/create-schema-cache-table.test.d.ts.map +1 -0
  1088. package/dist/state/cache-v2/create-schema-cache-table.test.js +76 -0
  1089. package/dist/state/cache-v2/create-schema-cache-table.test.js.map +1 -0
  1090. package/dist/state/cache-v2/is-stale-state-cache.d.ts +27 -0
  1091. package/dist/state/cache-v2/is-stale-state-cache.d.ts.map +1 -0
  1092. package/dist/state/cache-v2/is-stale-state-cache.js +64 -0
  1093. package/dist/state/cache-v2/is-stale-state-cache.js.map +1 -0
  1094. package/dist/state/cache-v2/is-stale-state-cache.test.d.ts +2 -0
  1095. package/dist/state/cache-v2/is-stale-state-cache.test.d.ts.map +1 -0
  1096. package/dist/state/cache-v2/is-stale-state-cache.test.js +30 -0
  1097. package/dist/state/cache-v2/is-stale-state-cache.test.js.map +1 -0
  1098. package/dist/state/cache-v2/mark-state-cache-as-stale.d.ts +22 -0
  1099. package/dist/state/cache-v2/mark-state-cache-as-stale.d.ts.map +1 -0
  1100. package/dist/state/cache-v2/mark-state-cache-as-stale.js +62 -0
  1101. package/dist/state/cache-v2/mark-state-cache-as-stale.js.map +1 -0
  1102. package/dist/state/cache-v2/populate-state-cache.d.ts +22 -0
  1103. package/dist/state/cache-v2/populate-state-cache.d.ts.map +1 -0
  1104. package/dist/state/cache-v2/populate-state-cache.js +143 -0
  1105. package/dist/state/cache-v2/populate-state-cache.js.map +1 -0
  1106. package/dist/state/cache-v2/populate-state-cache.test.d.ts +2 -0
  1107. package/dist/state/cache-v2/populate-state-cache.test.d.ts.map +1 -0
  1108. package/dist/state/cache-v2/populate-state-cache.test.js +102 -0
  1109. package/dist/state/cache-v2/populate-state-cache.test.js.map +1 -0
  1110. package/dist/state/cache-v2/schema-metadata.d.ts +20 -0
  1111. package/dist/state/cache-v2/schema-metadata.d.ts.map +1 -0
  1112. package/dist/state/cache-v2/schema-metadata.js +18 -0
  1113. package/dist/state/cache-v2/schema-metadata.js.map +1 -0
  1114. package/dist/state/cache-v2/schema.bench.d.ts +2 -0
  1115. package/dist/state/cache-v2/schema.bench.d.ts.map +1 -0
  1116. package/dist/state/cache-v2/schema.bench.js +194 -0
  1117. package/dist/state/cache-v2/schema.bench.js.map +1 -0
  1118. package/dist/state/cache-v2/schema.d.ts +30 -0
  1119. package/dist/state/cache-v2/schema.d.ts.map +1 -0
  1120. package/dist/state/cache-v2/schema.js +72 -0
  1121. package/dist/state/cache-v2/schema.js.map +1 -0
  1122. package/dist/state/cache-v2/schema.test.d.ts +2 -0
  1123. package/dist/state/cache-v2/schema.test.d.ts.map +1 -0
  1124. package/dist/state/cache-v2/schema.test.js +246 -0
  1125. package/dist/state/cache-v2/schema.test.js.map +1 -0
  1126. package/dist/state/cache-v2/select-from-state-cache.d.ts +19 -0
  1127. package/dist/state/cache-v2/select-from-state-cache.d.ts.map +1 -0
  1128. package/dist/state/cache-v2/select-from-state-cache.js +141 -0
  1129. package/dist/state/cache-v2/select-from-state-cache.js.map +1 -0
  1130. package/dist/state/cache-v2/select-from-state-cache.test.d.ts +2 -0
  1131. package/dist/state/cache-v2/select-from-state-cache.test.d.ts.map +1 -0
  1132. package/dist/state/cache-v2/select-from-state-cache.test.js +72 -0
  1133. package/dist/state/cache-v2/select-from-state-cache.test.js.map +1 -0
  1134. package/dist/state/cache-v2/sqlite-type-mapper.d.ts +6 -0
  1135. package/dist/state/cache-v2/sqlite-type-mapper.d.ts.map +1 -0
  1136. package/dist/state/cache-v2/sqlite-type-mapper.js +50 -0
  1137. package/dist/state/cache-v2/sqlite-type-mapper.js.map +1 -0
  1138. package/dist/state/cache-v2/sqlite-type-mapper.test.d.ts +2 -0
  1139. package/dist/state/cache-v2/sqlite-type-mapper.test.d.ts.map +1 -0
  1140. package/dist/state/cache-v2/sqlite-type-mapper.test.js +41 -0
  1141. package/dist/state/cache-v2/sqlite-type-mapper.test.js.map +1 -0
  1142. package/dist/state/cache-v2/update-state-cache.bench.d.ts +2 -0
  1143. package/dist/state/cache-v2/update-state-cache.bench.d.ts.map +1 -0
  1144. package/dist/state/cache-v2/update-state-cache.bench.js +165 -0
  1145. package/dist/state/cache-v2/update-state-cache.bench.js.map +1 -0
  1146. package/dist/state/cache-v2/update-state-cache.d.ts +23 -0
  1147. package/dist/state/cache-v2/update-state-cache.d.ts.map +1 -0
  1148. package/dist/state/cache-v2/update-state-cache.js +403 -0
  1149. package/dist/state/cache-v2/update-state-cache.js.map +1 -0
  1150. package/dist/state/cache-v2/update-state-cache.test.d.ts +2 -0
  1151. package/dist/state/cache-v2/update-state-cache.test.d.ts.map +1 -0
  1152. package/dist/state/cache-v2/update-state-cache.test.js +281 -0
  1153. package/dist/state/cache-v2/update-state-cache.test.js.map +1 -0
  1154. package/dist/state/create-checkpoint.d.ts +22 -0
  1155. package/dist/state/create-checkpoint.d.ts.map +1 -0
  1156. package/dist/state/create-checkpoint.js +226 -0
  1157. package/dist/state/create-checkpoint.js.map +1 -0
  1158. package/dist/state/create-checkpoint.test.d.ts.map +1 -0
  1159. package/dist/state/create-checkpoint.test.js +649 -0
  1160. package/dist/state/create-checkpoint.test.js.map +1 -0
  1161. package/dist/state/index.d.ts +7 -0
  1162. package/dist/state/index.d.ts.map +1 -0
  1163. package/dist/state/index.js +5 -0
  1164. package/dist/state/index.js.map +1 -0
  1165. package/dist/state/materialize-state.bench.d.ts +2 -0
  1166. package/dist/state/materialize-state.bench.d.ts.map +1 -0
  1167. package/dist/state/materialize-state.bench.js +196 -0
  1168. package/dist/state/materialize-state.bench.js.map +1 -0
  1169. package/dist/state/materialize-state.d.ts +5 -0
  1170. package/dist/state/materialize-state.d.ts.map +1 -0
  1171. package/dist/state/materialize-state.js +561 -0
  1172. package/dist/state/materialize-state.js.map +1 -0
  1173. package/dist/state/materialize-state.test.d.ts +2 -0
  1174. package/dist/state/materialize-state.test.d.ts.map +1 -0
  1175. package/dist/state/materialize-state.test.js +2314 -0
  1176. package/dist/state/materialize-state.test.js.map +1 -0
  1177. package/dist/state/schema.bench.js +100 -28
  1178. package/dist/state/schema.bench.js.map +1 -1
  1179. package/dist/state/schema.d.ts +4 -55
  1180. package/dist/state/schema.d.ts.map +1 -1
  1181. package/dist/state/schema.js +31 -1048
  1182. package/dist/state/schema.js.map +1 -1
  1183. package/dist/state/transaction/insert-transaction-state.d.ts +65 -0
  1184. package/dist/state/transaction/insert-transaction-state.d.ts.map +1 -0
  1185. package/dist/state/transaction/insert-transaction-state.js +116 -0
  1186. package/dist/state/transaction/insert-transaction-state.js.map +1 -0
  1187. package/dist/state/transaction/insert-transaction-state.test.d.ts +2 -0
  1188. package/dist/state/transaction/insert-transaction-state.test.d.ts.map +1 -0
  1189. package/dist/state/transaction/insert-transaction-state.test.js +946 -0
  1190. package/dist/state/transaction/insert-transaction-state.test.js.map +1 -0
  1191. package/dist/state/transaction/schema.d.ts +22 -0
  1192. package/dist/state/transaction/schema.d.ts.map +1 -0
  1193. package/dist/state/transaction/schema.js +25 -0
  1194. package/dist/state/transaction/schema.js.map +1 -0
  1195. package/dist/state/transition.bench.d.ts +2 -0
  1196. package/dist/state/transition.bench.d.ts.map +1 -0
  1197. package/dist/state/transition.bench.js +215 -0
  1198. package/dist/state/transition.bench.js.map +1 -0
  1199. package/dist/state/transition.d.ts +21 -0
  1200. package/dist/state/transition.d.ts.map +1 -0
  1201. package/dist/state/transition.js +336 -0
  1202. package/dist/state/transition.js.map +1 -0
  1203. package/dist/state/transition.test.d.ts +2 -0
  1204. package/dist/state/transition.test.d.ts.map +1 -0
  1205. package/dist/state/transition.test.js +226 -0
  1206. package/dist/state/transition.test.js.map +1 -0
  1207. package/dist/state/untracked/schema.d.ts +25 -0
  1208. package/dist/state/untracked/schema.d.ts.map +1 -0
  1209. package/dist/state/untracked/schema.js +45 -0
  1210. package/dist/state/untracked/schema.js.map +1 -0
  1211. package/dist/state/untracked/schema.test.d.ts +2 -0
  1212. package/dist/state/untracked/schema.test.d.ts.map +1 -0
  1213. package/dist/state/untracked/schema.test.js +275 -0
  1214. package/dist/state/untracked/schema.test.js.map +1 -0
  1215. package/dist/state/untracked/update-untracked-state.d.ts +36 -0
  1216. package/dist/state/untracked/update-untracked-state.d.ts.map +1 -0
  1217. package/dist/state/untracked/update-untracked-state.js +144 -0
  1218. package/dist/state/untracked/update-untracked-state.js.map +1 -0
  1219. package/dist/state/untracked/update-untracked-state.test.d.ts +2 -0
  1220. package/dist/state/untracked/update-untracked-state.test.d.ts.map +1 -0
  1221. package/dist/state/untracked/update-untracked-state.test.js +435 -0
  1222. package/dist/state/untracked/update-untracked-state.test.js.map +1 -0
  1223. package/dist/state/views/state-by-version.d.ts +30 -0
  1224. package/dist/state/views/state-by-version.d.ts.map +1 -0
  1225. package/dist/state/views/state-by-version.js +94 -0
  1226. package/dist/state/views/state-by-version.js.map +1 -0
  1227. package/dist/state/views/state-with-tombstones.d.ts +34 -0
  1228. package/dist/state/views/state-with-tombstones.d.ts.map +1 -0
  1229. package/dist/state/views/state-with-tombstones.js +37 -0
  1230. package/dist/state/views/state-with-tombstones.js.map +1 -0
  1231. package/dist/state/views/state-with-tombstones.test.d.ts +2 -0
  1232. package/dist/state/views/state-with-tombstones.test.d.ts.map +1 -0
  1233. package/dist/state/views/state-with-tombstones.test.js +148 -0
  1234. package/dist/state/views/state-with-tombstones.test.js.map +1 -0
  1235. package/dist/state/views/state.bench.d.ts +2 -0
  1236. package/dist/state/views/state.bench.d.ts.map +1 -0
  1237. package/dist/state/views/state.bench.js +308 -0
  1238. package/dist/state/views/state.bench.js.map +1 -0
  1239. package/dist/state/views/state.d.ts +15 -0
  1240. package/dist/state/views/state.d.ts.map +1 -0
  1241. package/dist/state/views/state.js +85 -0
  1242. package/dist/state/views/state.js.map +1 -0
  1243. package/dist/state/views/state.test.d.ts +2 -0
  1244. package/dist/state/views/state.test.d.ts.map +1 -0
  1245. package/dist/state/views/state.test.js +340 -0
  1246. package/dist/state/views/state.test.js.map +1 -0
  1247. package/dist/state/vtable/commit.bench.d.ts +2 -0
  1248. package/dist/state/vtable/commit.bench.d.ts.map +1 -0
  1249. package/dist/state/vtable/commit.bench.js +287 -0
  1250. package/dist/state/vtable/commit.bench.js.map +1 -0
  1251. package/dist/state/vtable/commit.d.ts +18 -0
  1252. package/dist/state/vtable/commit.d.ts.map +1 -0
  1253. package/dist/state/vtable/commit.js +426 -0
  1254. package/dist/state/vtable/commit.js.map +1 -0
  1255. package/dist/state/vtable/commit.test.d.ts +2 -0
  1256. package/dist/state/vtable/commit.test.d.ts.map +1 -0
  1257. package/dist/state/vtable/commit.test.js +1644 -0
  1258. package/dist/state/vtable/commit.test.js.map +1 -0
  1259. package/dist/state/vtable/generate-commit.d.ts +33 -0
  1260. package/dist/state/vtable/generate-commit.d.ts.map +1 -0
  1261. package/dist/state/vtable/generate-commit.js +277 -0
  1262. package/dist/state/vtable/generate-commit.js.map +1 -0
  1263. package/dist/state/vtable/generate-commit.test.d.ts +2 -0
  1264. package/dist/state/vtable/generate-commit.test.d.ts.map +1 -0
  1265. package/dist/state/vtable/generate-commit.test.js +377 -0
  1266. package/dist/state/vtable/generate-commit.test.js.map +1 -0
  1267. package/dist/state/vtable/index.d.ts +3 -0
  1268. package/dist/state/vtable/index.d.ts.map +1 -0
  1269. package/dist/state/vtable/index.js +3 -0
  1270. package/dist/state/vtable/index.js.map +1 -0
  1271. package/dist/state/vtable/insert-vtable-log.d.ts +18 -0
  1272. package/dist/state/vtable/insert-vtable-log.d.ts.map +1 -0
  1273. package/dist/state/vtable/insert-vtable-log.js +49 -0
  1274. package/dist/state/vtable/insert-vtable-log.js.map +1 -0
  1275. package/dist/state/vtable/primary-key.d.ts +41 -0
  1276. package/dist/state/vtable/primary-key.d.ts.map +1 -0
  1277. package/dist/state/vtable/primary-key.js +64 -0
  1278. package/dist/state/vtable/primary-key.js.map +1 -0
  1279. package/dist/state/vtable/primary-key.test.d.ts +2 -0
  1280. package/dist/state/vtable/primary-key.test.d.ts.map +1 -0
  1281. package/dist/state/vtable/primary-key.test.js +32 -0
  1282. package/dist/state/vtable/primary-key.test.js.map +1 -0
  1283. package/dist/state/vtable/validate-state-mutation.bench.d.ts +2 -0
  1284. package/dist/state/vtable/validate-state-mutation.bench.d.ts.map +1 -0
  1285. package/dist/state/vtable/validate-state-mutation.bench.js +284 -0
  1286. package/dist/state/vtable/validate-state-mutation.bench.js.map +1 -0
  1287. package/dist/state/vtable/validate-state-mutation.d.ts +21 -0
  1288. package/dist/state/vtable/validate-state-mutation.d.ts.map +1 -0
  1289. package/dist/state/vtable/validate-state-mutation.js +886 -0
  1290. package/dist/state/vtable/validate-state-mutation.js.map +1 -0
  1291. package/dist/state/vtable/validate-state-mutation.playground.test.d.ts +2 -0
  1292. package/dist/state/vtable/validate-state-mutation.playground.test.d.ts.map +1 -0
  1293. package/dist/state/vtable/validate-state-mutation.playground.test.js +389 -0
  1294. package/dist/state/vtable/validate-state-mutation.playground.test.js.map +1 -0
  1295. package/dist/state/vtable/validate-state-mutation.test.d.ts.map +1 -0
  1296. package/dist/state/vtable/validate-state-mutation.test.js +3655 -0
  1297. package/dist/state/vtable/validate-state-mutation.test.js.map +1 -0
  1298. package/dist/state/vtable/vtable.d.ts +26 -0
  1299. package/dist/state/vtable/vtable.d.ts.map +1 -0
  1300. package/dist/state/vtable/vtable.insert.bench.d.ts +2 -0
  1301. package/dist/state/vtable/vtable.insert.bench.d.ts.map +1 -0
  1302. package/dist/state/vtable/vtable.insert.bench.js +100 -0
  1303. package/dist/state/vtable/vtable.insert.bench.js.map +1 -0
  1304. package/dist/state/vtable/vtable.js +951 -0
  1305. package/dist/state/vtable/vtable.js.map +1 -0
  1306. package/dist/state/vtable/vtable.select.bench.d.ts +2 -0
  1307. package/dist/state/vtable/vtable.select.bench.d.ts.map +1 -0
  1308. package/dist/state/vtable/vtable.select.bench.js +334 -0
  1309. package/dist/state/vtable/vtable.select.bench.js.map +1 -0
  1310. package/dist/state/vtable/vtable.test.d.ts +2 -0
  1311. package/dist/state/vtable/vtable.test.d.ts.map +1 -0
  1312. package/dist/state/vtable/vtable.test.js +3516 -0
  1313. package/dist/state/vtable/vtable.test.js.map +1 -0
  1314. package/dist/state/working-change-set/refresh-working-change-set.d.ts +21 -0
  1315. package/dist/state/working-change-set/refresh-working-change-set.d.ts.map +1 -0
  1316. package/dist/state/working-change-set/refresh-working-change-set.js +185 -0
  1317. package/dist/state/working-change-set/refresh-working-change-set.js.map +1 -0
  1318. package/dist/state/working-change-set/refresh-working-change-set.test.d.ts +2 -0
  1319. package/dist/state/working-change-set/refresh-working-change-set.test.d.ts.map +1 -0
  1320. package/dist/state/working-change-set/refresh-working-change-set.test.js +89 -0
  1321. package/dist/state/working-change-set/refresh-working-change-set.test.js.map +1 -0
  1322. package/dist/state/writer.d.ts +42 -0
  1323. package/dist/state/writer.d.ts.map +1 -0
  1324. package/dist/state/writer.js +62 -0
  1325. package/dist/state/writer.js.map +1 -0
  1326. package/dist/state-history/schema.d.ts +33 -19
  1327. package/dist/state-history/schema.d.ts.map +1 -1
  1328. package/dist/state-history/schema.js +129 -53
  1329. package/dist/state-history/schema.js.map +1 -1
  1330. package/dist/state-history/schema.test.js +248 -94
  1331. package/dist/state-history/schema.test.js.map +1 -1
  1332. package/dist/stored-schema/get-stored-schema.d.ts +27 -0
  1333. package/dist/stored-schema/get-stored-schema.d.ts.map +1 -0
  1334. package/dist/stored-schema/get-stored-schema.js +129 -0
  1335. package/dist/stored-schema/get-stored-schema.js.map +1 -0
  1336. package/dist/stored-schema/get-stored-schema.test.d.ts +2 -0
  1337. package/dist/stored-schema/get-stored-schema.test.d.ts.map +1 -0
  1338. package/dist/stored-schema/get-stored-schema.test.js +259 -0
  1339. package/dist/stored-schema/get-stored-schema.test.js.map +1 -0
  1340. package/dist/stored-schema/index.d.ts +1 -1
  1341. package/dist/stored-schema/index.d.ts.map +1 -1
  1342. package/dist/stored-schema/index.js +1 -1
  1343. package/dist/stored-schema/index.js.map +1 -1
  1344. package/dist/stored-schema/schema-definition.d.ts +22 -0
  1345. package/dist/stored-schema/schema-definition.d.ts.map +1 -0
  1346. package/dist/stored-schema/schema-definition.js +20 -0
  1347. package/dist/stored-schema/schema-definition.js.map +1 -0
  1348. package/dist/stored-schema/schema.test.js +34 -91
  1349. package/dist/stored-schema/schema.test.js.map +1 -1
  1350. package/dist/sync/pull-from-server.test.js +6 -6
  1351. package/dist/sync/pull-from-server.test.js.map +1 -1
  1352. package/dist/sync/push-to-server.test.js +4 -4
  1353. package/dist/sync/push-to-server.test.js.map +1 -1
  1354. package/dist/sync/sync-process.d.ts +1 -1
  1355. package/dist/sync/sync-process.d.ts.map +1 -1
  1356. package/dist/sync/sync-process.js +18 -9
  1357. package/dist/sync/sync-process.js.map +1 -1
  1358. package/dist/sync/sync-process.test.js +3 -6
  1359. package/dist/sync/sync-process.test.js.map +1 -1
  1360. package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts +8 -0
  1361. package/dist/test-utilities/simulation-test/cache-miss-simulation.d.ts.map +1 -0
  1362. package/dist/test-utilities/simulation-test/cache-miss-simulation.js +79 -0
  1363. package/dist/test-utilities/simulation-test/cache-miss-simulation.js.map +1 -0
  1364. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts +2 -0
  1365. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.d.ts.map +1 -0
  1366. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js +150 -0
  1367. package/dist/test-utilities/simulation-test/cache-miss-simulation.test.js.map +1 -0
  1368. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts +2 -0
  1369. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.d.ts.map +1 -0
  1370. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js +2 -0
  1371. package/dist/test-utilities/simulation-test/chaotic-timestamp-simulation.js.map +1 -0
  1372. package/dist/test-utilities/simulation-test/engine-boundary-simulation.d.ts +3 -0
  1373. package/dist/test-utilities/simulation-test/engine-boundary-simulation.d.ts.map +1 -0
  1374. package/dist/test-utilities/simulation-test/engine-boundary-simulation.js +52 -0
  1375. package/dist/test-utilities/simulation-test/engine-boundary-simulation.js.map +1 -0
  1376. package/dist/test-utilities/simulation-test/engine-boundary-simulation.test.d.ts +2 -0
  1377. package/dist/test-utilities/simulation-test/engine-boundary-simulation.test.d.ts.map +1 -0
  1378. package/dist/test-utilities/simulation-test/engine-boundary-simulation.test.js +10 -0
  1379. package/dist/test-utilities/simulation-test/engine-boundary-simulation.test.js.map +1 -0
  1380. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts +10 -0
  1381. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.d.ts.map +1 -0
  1382. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js +50 -0
  1383. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.js.map +1 -0
  1384. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts +2 -0
  1385. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.d.ts.map +1 -0
  1386. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js +71 -0
  1387. package/dist/test-utilities/simulation-test/out-of-order-sequence-simulation.test.js.map +1 -0
  1388. package/dist/test-utilities/simulation-test/simulation-test.d.ts +87 -0
  1389. package/dist/test-utilities/simulation-test/simulation-test.d.ts.map +1 -0
  1390. package/dist/test-utilities/simulation-test/simulation-test.js +89 -0
  1391. package/dist/test-utilities/simulation-test/simulation-test.js.map +1 -0
  1392. package/dist/test-utilities/simulation-test/simulation-test.test.d.ts +2 -0
  1393. package/dist/test-utilities/simulation-test/simulation-test.test.d.ts.map +1 -0
  1394. package/dist/test-utilities/simulation-test/simulation-test.test.js +308 -0
  1395. package/dist/test-utilities/simulation-test/simulation-test.test.js.map +1 -0
  1396. package/dist/version/create-version-from-commit.d.ts +44 -0
  1397. package/dist/version/create-version-from-commit.d.ts.map +1 -0
  1398. package/dist/version/create-version-from-commit.js +119 -0
  1399. package/dist/version/create-version-from-commit.js.map +1 -0
  1400. package/dist/version/create-version-from-commit.test.d.ts +2 -0
  1401. package/dist/version/create-version-from-commit.test.d.ts.map +1 -0
  1402. package/dist/version/create-version-from-commit.test.js +166 -0
  1403. package/dist/version/create-version-from-commit.test.js.map +1 -0
  1404. package/dist/version/create-version.d.ts +8 -12
  1405. package/dist/version/create-version.d.ts.map +1 -1
  1406. package/dist/version/create-version.js +26 -31
  1407. package/dist/version/create-version.js.map +1 -1
  1408. package/dist/version/create-version.test.js +120 -25
  1409. package/dist/version/create-version.test.js.map +1 -1
  1410. package/dist/version/index.d.ts +4 -1
  1411. package/dist/version/index.d.ts.map +1 -1
  1412. package/dist/version/index.js +4 -1
  1413. package/dist/version/index.js.map +1 -1
  1414. package/dist/version/merge-version.d.ts +3 -3
  1415. package/dist/version/merge-version.d.ts.map +1 -1
  1416. package/dist/version/merge-version.js +472 -54
  1417. package/dist/version/merge-version.js.map +1 -1
  1418. package/dist/version/merge-version.test.js +783 -373
  1419. package/dist/version/merge-version.test.js.map +1 -1
  1420. package/dist/version/schema-definition.d.ts +107 -0
  1421. package/dist/version/schema-definition.d.ts.map +1 -0
  1422. package/dist/version/schema-definition.js +93 -0
  1423. package/dist/version/schema-definition.js.map +1 -0
  1424. package/dist/version/schema.d.ts +5 -72
  1425. package/dist/version/schema.d.ts.map +1 -1
  1426. package/dist/version/schema.js +433 -116
  1427. package/dist/version/schema.js.map +1 -1
  1428. package/dist/version/schema.test.js +561 -151
  1429. package/dist/version/schema.test.js.map +1 -1
  1430. package/dist/version/select-active-version.d.ts +7 -0
  1431. package/dist/version/select-active-version.d.ts.map +1 -0
  1432. package/dist/version/select-active-version.js +7 -0
  1433. package/dist/version/select-active-version.js.map +1 -0
  1434. package/dist/version/select-version-diff.bench.d.ts +2 -0
  1435. package/dist/version/select-version-diff.bench.d.ts.map +1 -0
  1436. package/dist/version/select-version-diff.bench.js +126 -0
  1437. package/dist/version/select-version-diff.bench.js.map +1 -0
  1438. package/dist/version/select-version-diff.d.ts +121 -0
  1439. package/dist/version/select-version-diff.d.ts.map +1 -0
  1440. package/dist/version/select-version-diff.js +179 -0
  1441. package/dist/version/select-version-diff.js.map +1 -0
  1442. package/dist/version/select-version-diff.playground.test.d.ts +2 -0
  1443. package/dist/version/select-version-diff.playground.test.d.ts.map +1 -0
  1444. package/dist/version/select-version-diff.playground.test.js +114 -0
  1445. package/dist/version/select-version-diff.playground.test.js.map +1 -0
  1446. package/dist/version/select-version-diff.test.d.ts +2 -0
  1447. package/dist/version/select-version-diff.test.d.ts.map +1 -0
  1448. package/dist/version/select-version-diff.test.js +689 -0
  1449. package/dist/version/select-version-diff.test.js.map +1 -0
  1450. package/dist/version/switch-version.d.ts +3 -3
  1451. package/dist/version/switch-version.d.ts.map +1 -1
  1452. package/dist/version/switch-version.js +1 -1
  1453. package/dist/version/switch-version.test.js +2 -2
  1454. package/dist/version/switch-version.test.js.map +1 -1
  1455. package/package.json +51 -22
  1456. package/src/account/create-account.test.ts +5 -19
  1457. package/src/account/create-account.ts +14 -17
  1458. package/src/account/index.ts +4 -3
  1459. package/src/account/schema-definition.ts +60 -0
  1460. package/src/account/schema.test.ts +157 -118
  1461. package/src/account/switch-account.test.ts +9 -21
  1462. package/src/account/switch-account.ts +6 -6
  1463. package/src/change/index.ts +4 -1
  1464. package/src/change/schema-definition.ts +84 -0
  1465. package/src/change/schema.bench.ts +411 -0
  1466. package/src/change/schema.test.ts +135 -6
  1467. package/src/change/schema.ts +52 -37
  1468. package/src/change-author/index.ts +4 -1
  1469. package/src/change-author/schema-definition.ts +43 -0
  1470. package/src/change-author/schema.test.ts +246 -36
  1471. package/src/change-proposal/accept-change-proposal.test.ts +64 -0
  1472. package/src/change-proposal/accept-change-proposal.ts +46 -0
  1473. package/src/change-proposal/create-change-proposal.test.ts +64 -89
  1474. package/src/change-proposal/create-change-proposal.ts +33 -58
  1475. package/src/change-proposal/index.ts +7 -2
  1476. package/src/change-proposal/reject-change-proposal.test.ts +34 -0
  1477. package/src/change-proposal/reject-change-proposal.ts +22 -0
  1478. package/src/change-proposal/schema-definition.ts +42 -0
  1479. package/src/change-proposal/schema.test.ts +124 -0
  1480. package/src/change-set/apply-change-set.test.ts +13 -9
  1481. package/src/change-set/apply-change-set.ts +60 -80
  1482. package/src/change-set/create-change-set.test.ts +5 -92
  1483. package/src/change-set/create-change-set.ts +11 -63
  1484. package/src/change-set/index.ts +3 -13
  1485. package/src/change-set/schema-definition.ts +83 -0
  1486. package/src/change-set/schema.test.ts +13 -497
  1487. package/src/commit/index.ts +6 -0
  1488. package/src/commit/schema-definition.ts +103 -0
  1489. package/src/commit/schema.test.ts +353 -0
  1490. package/src/conversation/create-conversation-message.test.ts +118 -0
  1491. package/src/conversation/create-conversation-message.ts +82 -0
  1492. package/src/conversation/create-conversation.test.ts +194 -0
  1493. package/src/conversation/create-conversation.ts +110 -0
  1494. package/src/conversation/index.ts +8 -0
  1495. package/src/conversation/schema-definition.ts +74 -0
  1496. package/src/database/index.ts +0 -3
  1497. package/src/database/init-db.ts +120 -89
  1498. package/src/database/kysely/index.ts +1 -0
  1499. package/src/database/kysely/json-column-config.ts +63 -0
  1500. package/src/database/kysely/plugins/json-column-plugin.test.ts +533 -0
  1501. package/src/database/kysely/plugins/json-column-plugin.ts +286 -0
  1502. package/src/database/kysely/plugins/view-insert-returning-error-plugin.test.ts +62 -0
  1503. package/src/database/kysely/plugins.ts +16 -0
  1504. package/src/database/nano-id.test.ts +4 -4
  1505. package/src/database/nano-id.ts +4 -1
  1506. package/src/database/schema-view-map.ts +48 -0
  1507. package/src/database/schema.ts +125 -66
  1508. package/src/database/sqlite/content-from-database.ts +12 -0
  1509. package/src/database/sqlite/create-in-memory-database.ts +61 -0
  1510. package/src/database/sqlite/environment-dialect.test.ts +84 -0
  1511. package/src/database/sqlite/environment-dialect.ts +227 -0
  1512. package/src/database/sqlite/import-database.ts +43 -0
  1513. package/src/database/sqlite/index.ts +7 -0
  1514. package/src/database/sqlite/kysely-driver/connection-mutex.ts +23 -0
  1515. package/src/database/sqlite/kysely-driver/index.ts +4 -0
  1516. package/src/database/sqlite/kysely-driver/sqlite-wasm-connection.ts +58 -0
  1517. package/src/database/sqlite/kysely-driver/sqlite-wasm-dialect-config.ts +19 -0
  1518. package/src/database/sqlite/kysely-driver/sqlite-wasm-driver.ts +59 -0
  1519. package/src/database/sqlite/lix-dialect.ts +27 -0
  1520. package/src/database/sqlite/load-database-in-memory.ts +28 -0
  1521. package/src/database/sqlite/sqlite-wasm-binary.d.ts +2 -0
  1522. package/src/database/sqlite/sqlite-wasm-binary.js +42835 -0
  1523. package/src/dependency/kysely/helpers/sqlite.ts +4 -0
  1524. package/src/dependency/kysely/index.ts +8 -0
  1525. package/src/diff/index.ts +2 -0
  1526. package/src/diff/select-commit-diff.bench.ts +156 -0
  1527. package/src/diff/select-commit-diff.test.ts +65 -0
  1528. package/src/diff/select-commit-diff.ts +234 -0
  1529. package/src/diff/select-working-diff.bench.ts +99 -0
  1530. package/src/diff/select-working-diff.test.ts +275 -0
  1531. package/src/diff/select-working-diff.ts +233 -0
  1532. package/src/engine/boot.test.ts +88 -0
  1533. package/src/engine/boot.ts +280 -0
  1534. package/src/engine/cel-environment/cel-environment.test.ts +20 -0
  1535. package/src/engine/cel-environment/cel-environment.ts +85 -0
  1536. package/src/engine/deterministic-mode/is-deterministic-mode.test.ts +121 -0
  1537. package/src/engine/deterministic-mode/is-deterministic-mode.ts +105 -0
  1538. package/src/engine/deterministic-mode/options.test.ts +159 -0
  1539. package/src/engine/deterministic-mode/options.ts +57 -0
  1540. package/src/engine/entity-views/README.md +214 -0
  1541. package/src/engine/entity-views/build-json-object-entries.test.ts +42 -0
  1542. package/src/engine/entity-views/build-json-object-entries.ts +43 -0
  1543. package/src/engine/entity-views/entity-state-by-version.ts +263 -0
  1544. package/src/engine/entity-views/entity-state-history.ts +208 -0
  1545. package/src/engine/entity-views/entity-state.ts +239 -0
  1546. package/src/engine/entity-views/entity-view-builder.ts +58 -0
  1547. package/src/engine/entity-views/types.test.ts +99 -0
  1548. package/src/engine/entity-views/types.ts +330 -0
  1549. package/src/engine/execute-sync.test.ts +90 -0
  1550. package/src/engine/execute-sync.ts +47 -0
  1551. package/src/engine/explain-query.test.ts +21 -0
  1552. package/src/engine/explain-query.ts +89 -0
  1553. package/src/engine/functions/function-registry.ts +69 -0
  1554. package/src/engine/functions/generate-human-id.test.ts +199 -0
  1555. package/src/engine/functions/generate-human-id.ts +383 -0
  1556. package/src/engine/functions/index.ts +6 -0
  1557. package/src/engine/functions/nano-id.bench.ts +57 -0
  1558. package/src/engine/functions/nano-id.test.ts +200 -0
  1559. package/src/engine/functions/nano-id.ts +205 -0
  1560. package/src/engine/functions/random.test.ts +293 -0
  1561. package/src/engine/functions/random.ts +267 -0
  1562. package/src/engine/functions/register-builtins.ts +154 -0
  1563. package/src/engine/functions/sequence.test.ts +99 -0
  1564. package/src/engine/functions/sequence.ts +165 -0
  1565. package/src/engine/functions/timestamp.test.ts +172 -0
  1566. package/src/engine/functions/timestamp.ts +86 -0
  1567. package/src/engine/functions/uuid-v7.test.ts +144 -0
  1568. package/src/engine/functions/uuid-v7.ts +88 -0
  1569. package/src/engine/index.ts +1 -0
  1570. package/src/engine/internal-query-builder.ts +42 -0
  1571. package/src/engine/preprocessor/create-preprocessor.test.ts +275 -0
  1572. package/src/engine/preprocessor/create-preprocessor.ts +267 -0
  1573. package/src/engine/preprocessor/entity-views/__bench__/entity-view-select-all-rows.explain.txt +287 -0
  1574. package/src/engine/preprocessor/entity-views/__bench__/entity-view-select-id-filter.explain.txt +290 -0
  1575. package/src/engine/preprocessor/entity-views/delete.test.ts +994 -0
  1576. package/src/engine/preprocessor/entity-views/delete.ts +359 -0
  1577. package/src/engine/preprocessor/entity-views/insert.test.ts +1175 -0
  1578. package/src/engine/preprocessor/entity-views/insert.ts +903 -0
  1579. package/src/engine/preprocessor/entity-views/select.bench.ts +168 -0
  1580. package/src/engine/preprocessor/entity-views/select.test.ts +385 -0
  1581. package/src/engine/preprocessor/entity-views/select.ts +2079 -0
  1582. package/src/engine/preprocessor/entity-views/shared.ts +1560 -0
  1583. package/src/engine/preprocessor/entity-views/update.test.ts +424 -0
  1584. package/src/engine/preprocessor/entity-views/update.ts +753 -0
  1585. package/src/engine/preprocessor/inheritance/version-inheritance-cache.test.ts +128 -0
  1586. package/src/engine/preprocessor/inheritance/version-inheritance-cache.ts +385 -0
  1587. package/src/engine/preprocessor/sql-parser/ast-helpers.ts +235 -0
  1588. package/src/engine/preprocessor/sql-parser/column-usage.ts +504 -0
  1589. package/src/engine/preprocessor/sql-parser/compile.test.ts +147 -0
  1590. package/src/engine/preprocessor/sql-parser/compile.ts +898 -0
  1591. package/src/engine/preprocessor/sql-parser/cst.ts +1012 -0
  1592. package/src/engine/preprocessor/sql-parser/lexer.ts +608 -0
  1593. package/src/engine/preprocessor/sql-parser/nodes.ts +395 -0
  1594. package/src/engine/preprocessor/sql-parser/parse.test.ts +1646 -0
  1595. package/src/engine/preprocessor/sql-parser/parse.ts +1984 -0
  1596. package/src/engine/preprocessor/sql-parser/visitor.test.ts +173 -0
  1597. package/src/engine/preprocessor/sql-parser/visitor.ts +1403 -0
  1598. package/src/engine/preprocessor/steps/cache-populator.test.ts +128 -0
  1599. package/src/engine/preprocessor/steps/cache-populator.ts +797 -0
  1600. package/src/engine/preprocessor/steps/expand-sql-views.test.ts +1353 -0
  1601. package/src/engine/preprocessor/steps/expand-sql-views.ts +1167 -0
  1602. package/src/engine/preprocessor/steps/rewrite-active-version-subquery.test.ts +83 -0
  1603. package/src/engine/preprocessor/steps/rewrite-active-version-subquery.ts +251 -0
  1604. package/src/engine/preprocessor/steps/rewrite-vtable-selects.bench.ts +68 -0
  1605. package/src/engine/preprocessor/steps/rewrite-vtable-selects.test.ts +1326 -0
  1606. package/src/engine/preprocessor/steps/rewrite-vtable-selects.ts +3751 -0
  1607. package/src/engine/preprocessor/types.ts +103 -0
  1608. package/src/engine/sql-parser/tokenizer.test.ts +408 -0
  1609. package/src/engine/sql-parser/tokenizer.ts +205 -0
  1610. package/src/engine/with-runtime-cache.test.ts +173 -0
  1611. package/src/engine/with-runtime-cache.ts +206 -0
  1612. package/src/entity/conversation/attach-conversation.test.ts +251 -0
  1613. package/src/entity/conversation/attach-conversation.ts +98 -0
  1614. package/src/entity/conversation/schema-definition.ts +52 -0
  1615. package/src/entity/conversation/schema.test.ts +105 -0
  1616. package/src/entity/eb-entity.test.ts +769 -0
  1617. package/src/entity/eb-entity.ts +203 -0
  1618. package/src/entity/index.ts +9 -0
  1619. package/src/entity/label/attach-label.test.ts +356 -0
  1620. package/src/entity/label/attach-label.ts +165 -0
  1621. package/src/entity/label/schema-definition.ts +47 -0
  1622. package/src/entity/label/schema.test.ts +945 -0
  1623. package/src/entity/types.ts +13 -0
  1624. package/src/environment/api.test.ts +102 -0
  1625. package/src/environment/api.ts +39 -0
  1626. package/src/environment/in-memory.test.ts +100 -0
  1627. package/src/environment/in-memory.ts +68 -0
  1628. package/src/environment/index.ts +7 -0
  1629. package/src/environment/kysely/kysely-driver.test.ts +29 -0
  1630. package/src/environment/load-from-string.test.ts +17 -0
  1631. package/src/environment/load-from-string.ts +77 -0
  1632. package/src/environment/opfs-sah.browser.test.ts +352 -0
  1633. package/src/environment/opfs-sah.ts +279 -0
  1634. package/src/environment/opfs-sah.worker.ts +271 -0
  1635. package/src/environment/test-actors/echo.actor.ts +6 -0
  1636. package/src/filesystem/__bench__/batch-file-reads-select-multiple-files.explain.txt +523 -0
  1637. package/src/filesystem/__bench__/file-delete-operations-delete.explain.txt +90 -0
  1638. package/src/filesystem/__bench__/file-delete-operations-insert.explain.txt +11 -0
  1639. package/src/filesystem/__bench__/file-insert-operations.explain.txt +11 -0
  1640. package/src/filesystem/__bench__/file-read-by-exact-path.explain.txt +523 -0
  1641. package/src/filesystem/__bench__/file-read-excluding-file-path-via-not-like.explain.txt +458 -0
  1642. package/src/filesystem/__bench__/file-read-with-path-based-like.explain.txt +523 -0
  1643. package/src/filesystem/__bench__/file-reads-with-varying-sizes.explain.txt +523 -0
  1644. package/src/filesystem/__bench__/file-table-full-scan.explain.txt +522 -0
  1645. package/src/filesystem/__bench__/file-update-by-path.explain.txt +90 -0
  1646. package/src/filesystem/__bench__/mixed-file-read-pattern-80-20-distribution.explain.txt +523 -0
  1647. package/src/filesystem/__bench__/repeated-file-reads-same-file-cache-hit-scenario.explain.txt +523 -0
  1648. package/src/filesystem/__bench__/sequential-file-reads-unique-files.explain.txt +523 -0
  1649. package/src/filesystem/directory/ensure-directories.ts +311 -0
  1650. package/src/filesystem/directory/schema-definition.ts +44 -0
  1651. package/src/filesystem/directory/schema.test.ts +119 -0
  1652. package/src/filesystem/directory/schema.ts +577 -0
  1653. package/src/filesystem/file/cache/clear-file-data-cache.ts +56 -0
  1654. package/src/filesystem/file/cache/lixcol-schema.ts +48 -0
  1655. package/src/filesystem/file/cache/path-cache-schema.ts +45 -0
  1656. package/src/filesystem/file/cache/schema.test.ts +326 -0
  1657. package/src/filesystem/file/cache/schema.ts +36 -0
  1658. package/src/filesystem/file/cache/update-file-data-cache.ts +31 -0
  1659. package/src/filesystem/file/cache/update-file-lixcol-cache.ts +88 -0
  1660. package/src/filesystem/file/cache/update-file-path-cache.ts +47 -0
  1661. package/src/filesystem/file/descriptor-utils.ts +356 -0
  1662. package/src/filesystem/file/file-handlers.test.ts +390 -0
  1663. package/src/filesystem/file/file-handlers.ts +670 -0
  1664. package/src/filesystem/file/materialize-file-data-at-commit.ts +203 -0
  1665. package/src/filesystem/file/materialize-file-data.test.ts +123 -0
  1666. package/src/filesystem/file/materialize-file-data.ts +140 -0
  1667. package/src/filesystem/file/schema-definition.ts +49 -0
  1668. package/src/filesystem/file/schema.test.ts +2452 -0
  1669. package/src/filesystem/file/schema.ts +671 -0
  1670. package/src/filesystem/file/select-file-data.ts +59 -0
  1671. package/src/filesystem/file/select-file-lixcol.ts +144 -0
  1672. package/src/filesystem/file/store-detected-change-schema.test.ts +285 -0
  1673. package/src/filesystem/file/store-detected-change-schema.ts +62 -0
  1674. package/src/filesystem/file/unknown-file-fallback-plugin.test.ts +383 -0
  1675. package/src/filesystem/file/unknown-file-fallback-plugin.ts +96 -0
  1676. package/src/filesystem/fs.bench.ts +661 -0
  1677. package/src/filesystem/index.ts +15 -0
  1678. package/src/filesystem/path.test.ts +130 -0
  1679. package/src/filesystem/path.ts +127 -0
  1680. package/src/filesystem/schema.test.ts +656 -0
  1681. package/src/filesystem/schema.ts +14 -0
  1682. package/src/filesystem/util/glob.ts +31 -0
  1683. package/src/hooks/create-hooks.test.ts +135 -20
  1684. package/src/hooks/create-hooks.ts +94 -40
  1685. package/src/index.ts +11 -4
  1686. package/src/key-value/index.ts +1 -1
  1687. package/src/key-value/schema-definition.ts +78 -0
  1688. package/src/key-value/schema.test.ts +240 -14
  1689. package/src/label/create-label.test.ts +2 -2
  1690. package/src/label/create-label.ts +13 -9
  1691. package/src/label/index.ts +1 -1
  1692. package/src/label/schema-definition.ts +27 -0
  1693. package/src/lix/index.ts +0 -3
  1694. package/src/lix/new-lix.test.ts +287 -20
  1695. package/src/lix/new-lix.ts +484 -113
  1696. package/src/lix/open-lix.bench.ts +23 -0
  1697. package/src/lix/open-lix.test.ts +391 -8
  1698. package/src/lix/open-lix.ts +181 -121
  1699. package/src/log/create-lix-own-log.test.ts +51 -23
  1700. package/src/log/create-lix-own-log.ts +54 -66
  1701. package/src/log/create-log.ts +27 -16
  1702. package/src/log/index.ts +1 -1
  1703. package/src/log/schema-definition.ts +45 -0
  1704. package/src/log/schema.test.ts +57 -18
  1705. package/src/observe/create-observe.test.ts +890 -60
  1706. package/src/observe/create-observe.ts +223 -68
  1707. package/src/observe/determine-schema-keys.test.ts +430 -0
  1708. package/src/observe/determine-schema-keys.ts +424 -0
  1709. package/src/plugin/index.ts +2 -1
  1710. package/src/plugin/lix-plugin.test-d.ts +1 -0
  1711. package/src/plugin/lix-plugin.test.ts +57 -0
  1712. package/src/plugin/lix-plugin.ts +48 -9
  1713. package/src/plugin/mock-json-plugin.test.ts +15 -4
  1714. package/src/plugin/mock-json-plugin.ts +1 -0
  1715. package/src/plugin/query-sync.test.ts +132 -0
  1716. package/src/plugin/query-sync.ts +170 -0
  1717. package/src/query-filter/commit-is-ancestor-of.test.ts +234 -0
  1718. package/src/query-filter/commit-is-ancestor-of.ts +77 -0
  1719. package/src/query-filter/commit-is-descendant-of.test.ts +249 -0
  1720. package/src/query-filter/commit-is-descendant-of.ts +70 -0
  1721. package/src/query-filter/index.ts +2 -7
  1722. package/src/schema-definition/definition.test-d.ts +98 -13
  1723. package/src/schema-definition/definition.test.ts +424 -124
  1724. package/src/schema-definition/definition.ts +241 -49
  1725. package/src/schema-definition/index.ts +1 -1
  1726. package/src/schema-definition/json-pointer.test.ts +101 -0
  1727. package/src/schema-definition/json-pointer.ts +168 -0
  1728. package/src/schema-definition/validate-lix-schema.test.ts +113 -5
  1729. package/src/schema-definition/validate-lix-schema.ts +81 -13
  1730. package/src/server-protocol-handler/environment/create-in-memory-environment.test.ts +2 -2
  1731. package/src/server-protocol-handler/environment/create-in-memory-environment.ts +1 -1
  1732. package/src/server-protocol-handler/routes/get-v1.ts +4 -2
  1733. package/src/server-protocol-handler/routes/pull-v1.test.ts +1 -1
  1734. package/src/server-protocol-handler/routes/pull-v1.ts +1 -1
  1735. package/src/server-protocol-handler/routes/push-v1.test.ts +3 -3
  1736. package/src/server-protocol-handler/routes/push-v1.ts +1 -1
  1737. package/src/services/env-variables/index.d.ts +1 -1
  1738. package/src/services/telemetry/capture.test.ts +4 -4
  1739. package/src/snapshot/schema.test.ts +125 -12
  1740. package/src/snapshot/schema.ts +17 -5
  1741. package/src/state/README.md +95 -0
  1742. package/src/state/cache/builtin-schemas.ts +25 -0
  1743. package/src/state/cache/clear-state-cache.test.ts +44 -0
  1744. package/src/state/cache/clear-state-cache.ts +52 -0
  1745. package/src/state/cache/create-schema-cache-table.test.ts +67 -0
  1746. package/src/state/cache/create-schema-cache-table.ts +164 -0
  1747. package/src/state/cache/is-stale-state-cache.test.ts +39 -0
  1748. package/src/state/cache/is-stale-state-cache.ts +86 -0
  1749. package/src/state/cache/mark-state-cache-as-stale.ts +66 -0
  1750. package/src/state/cache/populate-state-cache.test.ts +605 -0
  1751. package/src/state/cache/populate-state-cache.ts +227 -0
  1752. package/src/state/cache/schema-indexes.test.ts +144 -0
  1753. package/src/state/cache/schema-indexes.ts +191 -0
  1754. package/src/state/cache/schema-resolver.ts +59 -0
  1755. package/src/state/cache/schema.bench.ts +361 -0
  1756. package/src/state/cache/schema.test.ts +143 -0
  1757. package/src/state/cache/schema.ts +72 -0
  1758. package/src/state/cache/select-from-state-cache.test.ts +72 -0
  1759. package/src/state/cache/select-from-state-cache.ts +71 -0
  1760. package/src/state/cache/update-state-cache.bench.ts +158 -0
  1761. package/src/state/cache/update-state-cache.test.ts +1110 -0
  1762. package/src/state/cache/update-state-cache.ts +458 -0
  1763. package/src/state/cache-v2/cache-columns.ts +20 -0
  1764. package/src/state/cache-v2/clear-state-cache.test.ts +101 -0
  1765. package/src/state/cache-v2/clear-state-cache.ts +51 -0
  1766. package/src/state/cache-v2/create-schema-cache-table.test.ts +96 -0
  1767. package/src/state/cache-v2/create-schema-cache-table.ts +205 -0
  1768. package/src/state/cache-v2/is-stale-state-cache.test.ts +39 -0
  1769. package/src/state/cache-v2/is-stale-state-cache.ts +86 -0
  1770. package/src/state/cache-v2/mark-state-cache-as-stale.ts +78 -0
  1771. package/src/state/cache-v2/populate-state-cache.test.ts +124 -0
  1772. package/src/state/cache-v2/populate-state-cache.ts +178 -0
  1773. package/src/state/cache-v2/schema-metadata.ts +46 -0
  1774. package/src/state/cache-v2/schema.bench.ts +238 -0
  1775. package/src/state/cache-v2/schema.test.ts +330 -0
  1776. package/src/state/cache-v2/schema.ts +114 -0
  1777. package/src/state/cache-v2/select-from-state-cache.test.ts +109 -0
  1778. package/src/state/cache-v2/select-from-state-cache.ts +201 -0
  1779. package/src/state/cache-v2/sqlite-type-mapper.test.ts +56 -0
  1780. package/src/state/cache-v2/sqlite-type-mapper.ts +64 -0
  1781. package/src/state/cache-v2/update-state-cache.bench.ts +198 -0
  1782. package/src/state/cache-v2/update-state-cache.test.ts +344 -0
  1783. package/src/state/cache-v2/update-state-cache.ts +607 -0
  1784. package/src/state/create-checkpoint.test.ts +848 -0
  1785. package/src/state/create-checkpoint.ts +278 -0
  1786. package/src/state/index.ts +24 -0
  1787. package/src/state/materialize-state.bench.ts +231 -0
  1788. package/src/state/materialize-state.test.ts +2837 -0
  1789. package/src/state/materialize-state.ts +569 -0
  1790. package/src/state/schema.bench.ts +128 -39
  1791. package/src/state/schema.ts +40 -1284
  1792. package/src/state/transaction/insert-transaction-state.test.ts +1119 -0
  1793. package/src/state/transaction/insert-transaction-state.ts +149 -0
  1794. package/src/state/transaction/schema.ts +49 -0
  1795. package/src/state/transition.bench.ts +271 -0
  1796. package/src/state/transition.test.ts +295 -0
  1797. package/src/state/transition.ts +413 -0
  1798. package/src/state/untracked/schema.test.ts +301 -0
  1799. package/src/state/untracked/schema.ts +62 -0
  1800. package/src/state/untracked/update-untracked-state.test.ts +484 -0
  1801. package/src/state/untracked/update-untracked-state.ts +181 -0
  1802. package/src/state/views/__bench__/state-delete-tracked-row.explain.txt +79 -0
  1803. package/src/state/views/__bench__/state-insert-tracked-row.explain.txt +20 -0
  1804. package/src/state/views/__bench__/state-insert-untracked-row.explain.txt +20 -0
  1805. package/src/state/views/__bench__/state-select-recent-file-scan.explain.txt +1133 -0
  1806. package/src/state/views/__bench__/state-select-tracked-entity.explain.txt +296 -0
  1807. package/src/state/views/__bench__/state-select-untracked-filter.explain.txt +301 -0
  1808. package/src/state/views/__bench__/state-update-tracked-row.explain.txt +80 -0
  1809. package/src/state/views/state-by-version.ts +121 -0
  1810. package/src/state/views/state-with-tombstones.test.ts +166 -0
  1811. package/src/state/views/state-with-tombstones.ts +61 -0
  1812. package/src/state/views/state.bench.1_base.json +189 -0
  1813. package/src/state/views/state.bench.2_dml.json +189 -0
  1814. package/src/state/views/state.bench.ts +382 -0
  1815. package/src/state/views/state.test.ts +417 -0
  1816. package/src/state/views/state.ts +97 -0
  1817. package/src/state/vtable/__bench__/cache-entity-version-file-plugin.explain.txt +237 -0
  1818. package/src/state/vtable/__bench__/cache-entity-version-file.explain.txt +236 -0
  1819. package/src/state/vtable/__bench__/cache-entity-version.explain.txt +235 -0
  1820. package/src/state/vtable/__bench__/inherited-cache-entity-version-file-plugin.explain.txt +363 -0
  1821. package/src/state/vtable/__bench__/inherited-cache-entity-version-file.explain.txt +362 -0
  1822. package/src/state/vtable/__bench__/inherited-cache-entity-version.explain.txt +367 -0
  1823. package/src/state/vtable/__bench__/inherited-untracked-entity-version-file-plugin.explain.txt +363 -0
  1824. package/src/state/vtable/__bench__/inherited-untracked-entity-version-file.explain.txt +362 -0
  1825. package/src/state/vtable/__bench__/inherited-untracked-entity-version.explain.txt +367 -0
  1826. package/src/state/vtable/__bench__/transaction-entity-version-file-plugin.explain.txt +237 -0
  1827. package/src/state/vtable/__bench__/transaction-entity-version-file.explain.txt +236 -0
  1828. package/src/state/vtable/__bench__/transaction-entity-version.explain.txt +235 -0
  1829. package/src/state/vtable/__bench__/untracked-entity-version-file-plugin.explain.txt +237 -0
  1830. package/src/state/vtable/__bench__/untracked-entity-version-file.explain.txt +236 -0
  1831. package/src/state/vtable/__bench__/untracked-entity-version.explain.txt +235 -0
  1832. package/src/state/vtable/__playground__/validate-state-mutation.foreign-key.explain.txt +173 -0
  1833. package/src/state/vtable/__playground__/validate-state-mutation.primary-key.explain.txt +173 -0
  1834. package/src/state/vtable/__playground__/validate-state-mutation.unique-nested.explain.txt +173 -0
  1835. package/src/state/vtable/commit.bench.ts +339 -0
  1836. package/src/state/vtable/commit.test.ts +1924 -0
  1837. package/src/state/vtable/commit.ts +508 -0
  1838. package/src/state/vtable/generate-commit.test.ts +417 -0
  1839. package/src/state/vtable/generate-commit.ts +346 -0
  1840. package/src/state/vtable/index.ts +5 -0
  1841. package/src/state/vtable/insert-vtable-log.ts +64 -0
  1842. package/src/state/vtable/primary-key.test.ts +44 -0
  1843. package/src/state/vtable/primary-key.ts +82 -0
  1844. package/src/state/vtable/validate-state-mutation.bench.ts +326 -0
  1845. package/src/state/vtable/validate-state-mutation.playground.test.ts +456 -0
  1846. package/src/state/vtable/validate-state-mutation.test.ts +4265 -0
  1847. package/src/state/vtable/validate-state-mutation.ts +1236 -0
  1848. package/src/state/vtable/vtable.insert.bench.ts +127 -0
  1849. package/src/state/vtable/vtable.select.bench.ts +439 -0
  1850. package/src/state/vtable/vtable.test.ts +4211 -0
  1851. package/src/state/vtable/vtable.ts +1223 -0
  1852. package/src/state/working-change-set/refresh-working-change-set.test.ts +116 -0
  1853. package/src/state/working-change-set/refresh-working-change-set.ts +290 -0
  1854. package/src/state/writer.ts +71 -0
  1855. package/src/state-history/schema.test.ts +273 -98
  1856. package/src/state-history/schema.ts +162 -72
  1857. package/src/stored-schema/get-stored-schema.test.ts +352 -0
  1858. package/src/stored-schema/get-stored-schema.ts +163 -0
  1859. package/src/stored-schema/index.ts +4 -1
  1860. package/src/stored-schema/schema-definition.ts +30 -0
  1861. package/src/stored-schema/schema.test.ts +74 -116
  1862. package/src/sync/pull-from-server.test.ts +6 -6
  1863. package/src/sync/pull-from-server.ts +1 -1
  1864. package/src/sync/push-to-server.test.ts +10 -10
  1865. package/src/sync/push-to-server.ts +1 -1
  1866. package/src/sync/sync-process.test.ts +3 -6
  1867. package/src/sync/sync-process.ts +24 -11
  1868. package/src/test-utilities/simulation-test/cache-miss-simulation.test.ts +198 -0
  1869. package/src/test-utilities/simulation-test/cache-miss-simulation.ts +96 -0
  1870. package/src/test-utilities/simulation-test/chaotic-timestamp-simulation.ts +0 -0
  1871. package/src/test-utilities/simulation-test/engine-boundary-simulation.test.ts +14 -0
  1872. package/src/test-utilities/simulation-test/engine-boundary-simulation.ts +65 -0
  1873. package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.test.ts +88 -0
  1874. package/src/test-utilities/simulation-test/out-of-order-sequence-simulation.ts +61 -0
  1875. package/src/test-utilities/simulation-test/simulation-test.test.ts +404 -0
  1876. package/src/test-utilities/simulation-test/simulation-test.ts +194 -0
  1877. package/src/types/fs.d.ts +11 -0
  1878. package/src/version/create-version-from-commit.test.ts +211 -0
  1879. package/src/version/create-version-from-commit.ts +141 -0
  1880. package/src/version/create-version.test.ts +139 -26
  1881. package/src/version/create-version.ts +32 -43
  1882. package/src/version/index.ts +12 -4
  1883. package/src/version/merge-version.test.ts +1051 -0
  1884. package/src/version/merge-version.ts +583 -0
  1885. package/src/version/schema-definition.ts +111 -0
  1886. package/src/version/schema.test.ts +624 -162
  1887. package/src/version/schema.ts +456 -130
  1888. package/src/version/select-active-version.ts +18 -0
  1889. package/src/version/select-version-diff.bench.ts +145 -0
  1890. package/src/version/select-version-diff.playground-plan.txt +3837 -0
  1891. package/src/version/select-version-diff.playground.test.ts +129 -0
  1892. package/src/version/select-version-diff.test.ts +805 -0
  1893. package/src/version/select-version-diff.ts +201 -0
  1894. package/src/version/switch-version.test.ts +2 -2
  1895. package/src/version/switch-version.ts +3 -3
  1896. package/dist/account/database-schema.d.ts +0 -18
  1897. package/dist/account/database-schema.d.ts.map +0 -1
  1898. package/dist/account/database-schema.js +0 -32
  1899. package/dist/account/database-schema.js.map +0 -1
  1900. package/dist/account/database-schema.test.d.ts +0 -2
  1901. package/dist/account/database-schema.test.d.ts.map +0 -1
  1902. package/dist/account/database-schema.test.js +0 -135
  1903. package/dist/account/database-schema.test.js.map +0 -1
  1904. package/dist/account/schema.d.ts +0 -28
  1905. package/dist/account/schema.d.ts.map +0 -1
  1906. package/dist/account/schema.js +0 -55
  1907. package/dist/account/schema.js.map +0 -1
  1908. package/dist/change/apply-changes.d.ts +0 -25
  1909. package/dist/change/apply-changes.d.ts.map +0 -1
  1910. package/dist/change/apply-changes.js +0 -98
  1911. package/dist/change/apply-changes.js.map +0 -1
  1912. package/dist/change/apply-changes.test.d.ts +0 -2
  1913. package/dist/change/apply-changes.test.d.ts.map +0 -1
  1914. package/dist/change/apply-changes.test.js +0 -222
  1915. package/dist/change/apply-changes.test.js.map +0 -1
  1916. package/dist/change/create-change.d.ts +0 -16
  1917. package/dist/change/create-change.d.ts.map +0 -1
  1918. package/dist/change/create-change.js +0 -43
  1919. package/dist/change/create-change.js.map +0 -1
  1920. package/dist/change/create-change.test.d.ts +0 -2
  1921. package/dist/change/create-change.test.d.ts.map +0 -1
  1922. package/dist/change/create-change.test.js +0 -188
  1923. package/dist/change/create-change.test.js.map +0 -1
  1924. package/dist/change/mock-change.d.ts +0 -10
  1925. package/dist/change/mock-change.d.ts.map +0 -1
  1926. package/dist/change/mock-change.js +0 -21
  1927. package/dist/change/mock-change.js.map +0 -1
  1928. package/dist/change-author/schema.d.ts +0 -31
  1929. package/dist/change-author/schema.d.ts.map +0 -1
  1930. package/dist/change-author/schema.js +0 -35
  1931. package/dist/change-author/schema.js.map +0 -1
  1932. package/dist/change-proposal/database-schema.d.ts +0 -13
  1933. package/dist/change-proposal/database-schema.d.ts.map +0 -1
  1934. package/dist/change-proposal/database-schema.js +0 -17
  1935. package/dist/change-proposal/database-schema.js.map +0 -1
  1936. package/dist/change-proposal/database-schema.test.d.ts +0 -2
  1937. package/dist/change-proposal/database-schema.test.d.ts.map +0 -1
  1938. package/dist/change-proposal/database-schema.test.js +0 -159
  1939. package/dist/change-proposal/database-schema.test.js.map +0 -1
  1940. package/dist/change-schema/index.d.ts +0 -2
  1941. package/dist/change-schema/index.d.ts.map +0 -1
  1942. package/dist/change-schema/index.js +0 -2
  1943. package/dist/change-schema/index.js.map +0 -1
  1944. package/dist/change-schema/types.d.ts +0 -40
  1945. package/dist/change-schema/types.d.ts.map +0 -1
  1946. package/dist/change-schema/types.js.map +0 -1
  1947. package/dist/change-schema/types.test-d.d.ts +0 -2
  1948. package/dist/change-schema/types.test-d.d.ts.map +0 -1
  1949. package/dist/change-schema/types.test-d.js +0 -34
  1950. package/dist/change-schema/types.test-d.js.map +0 -1
  1951. package/dist/change-set/change-set-element-in-symmetric-difference.d.ts +0 -19
  1952. package/dist/change-set/change-set-element-in-symmetric-difference.d.ts.map +0 -1
  1953. package/dist/change-set/change-set-element-in-symmetric-difference.js +0 -36
  1954. package/dist/change-set/change-set-element-in-symmetric-difference.js.map +0 -1
  1955. package/dist/change-set/change-set-element-in-symmetric-difference.test.d.ts +0 -2
  1956. package/dist/change-set/change-set-element-in-symmetric-difference.test.d.ts.map +0 -1
  1957. package/dist/change-set/change-set-element-in-symmetric-difference.test.js +0 -106
  1958. package/dist/change-set/change-set-element-in-symmetric-difference.test.js.map +0 -1
  1959. package/dist/change-set/create-checkpoint.d.ts +0 -19
  1960. package/dist/change-set/create-checkpoint.d.ts.map +0 -1
  1961. package/dist/change-set/create-checkpoint.js +0 -86
  1962. package/dist/change-set/create-checkpoint.js.map +0 -1
  1963. package/dist/change-set/create-checkpoint.test.d.ts.map +0 -1
  1964. package/dist/change-set/create-checkpoint.test.js +0 -294
  1965. package/dist/change-set/create-checkpoint.test.js.map +0 -1
  1966. package/dist/change-set/create-merge-change-set.d.ts +0 -23
  1967. package/dist/change-set/create-merge-change-set.d.ts.map +0 -1
  1968. package/dist/change-set/create-merge-change-set.js +0 -68
  1969. package/dist/change-set/create-merge-change-set.js.map +0 -1
  1970. package/dist/change-set/create-merge-change-set.test.d.ts +0 -2
  1971. package/dist/change-set/create-merge-change-set.test.d.ts.map +0 -1
  1972. package/dist/change-set/create-merge-change-set.test.js +0 -211
  1973. package/dist/change-set/create-merge-change-set.test.js.map +0 -1
  1974. package/dist/change-set/create-transition-change-set.d.ts +0 -18
  1975. package/dist/change-set/create-transition-change-set.d.ts.map +0 -1
  1976. package/dist/change-set/create-transition-change-set.js +0 -102
  1977. package/dist/change-set/create-transition-change-set.js.map +0 -1
  1978. package/dist/change-set/create-transition-change-set.test.d.ts +0 -2
  1979. package/dist/change-set/create-transition-change-set.test.d.ts.map +0 -1
  1980. package/dist/change-set/create-transition-change-set.test.js +0 -211
  1981. package/dist/change-set/create-transition-change-set.test.js.map +0 -1
  1982. package/dist/change-set/create-undo-change-set.d.ts +0 -27
  1983. package/dist/change-set/create-undo-change-set.d.ts.map +0 -1
  1984. package/dist/change-set/create-undo-change-set.js +0 -121
  1985. package/dist/change-set/create-undo-change-set.js.map +0 -1
  1986. package/dist/change-set/create-undo-change-set.test.d.ts +0 -2
  1987. package/dist/change-set/create-undo-change-set.test.d.ts.map +0 -1
  1988. package/dist/change-set/create-undo-change-set.test.js +0 -273
  1989. package/dist/change-set/create-undo-change-set.test.js.map +0 -1
  1990. package/dist/change-set/schema.d.ts +0 -149
  1991. package/dist/change-set/schema.d.ts.map +0 -1
  1992. package/dist/change-set/schema.js +0 -169
  1993. package/dist/change-set/schema.js.map +0 -1
  1994. package/dist/database/apply-schema.d.ts +0 -8
  1995. package/dist/database/apply-schema.d.ts.map +0 -1
  1996. package/dist/database/apply-schema.js +0 -266
  1997. package/dist/database/apply-schema.js.map +0 -1
  1998. package/dist/database/execute-sync.d.ts +0 -24
  1999. package/dist/database/execute-sync.d.ts.map +0 -1
  2000. package/dist/database/execute-sync.js +0 -37
  2001. package/dist/database/execute-sync.js.map +0 -1
  2002. package/dist/database/execute-sync.test.d.ts.map +0 -1
  2003. package/dist/database/execute-sync.test.js +0 -111
  2004. package/dist/database/execute-sync.test.js.map +0 -1
  2005. package/dist/database/init-db.test.d.ts +0 -2
  2006. package/dist/database/init-db.test.d.ts.map +0 -1
  2007. package/dist/database/init-db.test.js +0 -497
  2008. package/dist/database/init-db.test.js.map +0 -1
  2009. package/dist/database/kysely-plugin/json-column-plugin.d.ts +0 -3
  2010. package/dist/database/kysely-plugin/json-column-plugin.d.ts.map +0 -1
  2011. package/dist/database/kysely-plugin/json-column-plugin.js +0 -168
  2012. package/dist/database/kysely-plugin/json-column-plugin.js.map +0 -1
  2013. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.d.ts +0 -3
  2014. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.d.ts.map +0 -1
  2015. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js +0 -39
  2016. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.js.map +0 -1
  2017. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.test.d.ts +0 -2
  2018. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.test.d.ts.map +0 -1
  2019. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.test.js +0 -162
  2020. package/dist/database/kysely-plugin/parse-jsonb-plugin-v1.test.js.map +0 -1
  2021. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.d.ts +0 -12
  2022. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.d.ts.map +0 -1
  2023. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.js +0 -149
  2024. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.js.map +0 -1
  2025. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.no_test.d.ts +0 -2
  2026. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.no_test.d.ts.map +0 -1
  2027. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.no_test.js +0 -162
  2028. package/dist/database/kysely-plugin/parse-jsonb-plugin-v2.no_test.js.map +0 -1
  2029. package/dist/database/kysely-plugin/serialize-jsonb-plugin.d.ts +0 -15
  2030. package/dist/database/kysely-plugin/serialize-jsonb-plugin.d.ts.map +0 -1
  2031. package/dist/database/kysely-plugin/serialize-jsonb-plugin.js +0 -171
  2032. package/dist/database/kysely-plugin/serialize-jsonb-plugin.js.map +0 -1
  2033. package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.d.ts +0 -2
  2034. package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.d.ts.map +0 -1
  2035. package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.js +0 -251
  2036. package/dist/database/kysely-plugin/serialize-jsonb-plugin.test.js.map +0 -1
  2037. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.d.ts.map +0 -1
  2038. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.js.map +0 -1
  2039. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.d.ts.map +0 -1
  2040. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.js +0 -51
  2041. package/dist/database/kysely-plugin/view-insert-returning-error-plugin.test.js.map +0 -1
  2042. package/dist/database/mutation-log/database-schema.d.ts +0 -16
  2043. package/dist/database/mutation-log/database-schema.d.ts.map +0 -1
  2044. package/dist/database/mutation-log/database-schema.js +0 -101
  2045. package/dist/database/mutation-log/database-schema.js.map +0 -1
  2046. package/dist/database/mutation-log/lix-session.d.ts +0 -8
  2047. package/dist/database/mutation-log/lix-session.d.ts.map +0 -1
  2048. package/dist/database/mutation-log/lix-session.js +0 -18
  2049. package/dist/database/mutation-log/lix-session.js.map +0 -1
  2050. package/dist/discussion/create-comment.d.ts +0 -8
  2051. package/dist/discussion/create-comment.d.ts.map +0 -1
  2052. package/dist/discussion/create-comment.js +0 -12
  2053. package/dist/discussion/create-comment.js.map +0 -1
  2054. package/dist/discussion/create-discussion.d.ts +0 -21
  2055. package/dist/discussion/create-discussion.d.ts.map +0 -1
  2056. package/dist/discussion/create-discussion.js +0 -40
  2057. package/dist/discussion/create-discussion.js.map +0 -1
  2058. package/dist/discussion/create-discussion.test.d.ts +0 -2
  2059. package/dist/discussion/create-discussion.test.d.ts.map +0 -1
  2060. package/dist/discussion/create-discussion.test.js +0 -38
  2061. package/dist/discussion/create-discussion.test.js.map +0 -1
  2062. package/dist/discussion/index.d.ts +0 -3
  2063. package/dist/discussion/index.d.ts.map +0 -1
  2064. package/dist/discussion/index.js +0 -3
  2065. package/dist/discussion/index.js.map +0 -1
  2066. package/dist/entity-views/entity-state-all.d.ts +0 -217
  2067. package/dist/entity-views/entity-state-all.d.ts.map +0 -1
  2068. package/dist/entity-views/entity-state-all.js +0 -246
  2069. package/dist/entity-views/entity-state-all.js.map +0 -1
  2070. package/dist/entity-views/entity-state-all.test.d.ts +0 -2
  2071. package/dist/entity-views/entity-state-all.test.d.ts.map +0 -1
  2072. package/dist/entity-views/entity-state-all.test.js +0 -371
  2073. package/dist/entity-views/entity-state-all.test.js.map +0 -1
  2074. package/dist/entity-views/entity-state-history.d.ts +0 -178
  2075. package/dist/entity-views/entity-state-history.d.ts.map +0 -1
  2076. package/dist/entity-views/entity-state-history.js +0 -58
  2077. package/dist/entity-views/entity-state-history.js.map +0 -1
  2078. package/dist/entity-views/entity-state-history.test.d.ts +0 -2
  2079. package/dist/entity-views/entity-state-history.test.d.ts.map +0 -1
  2080. package/dist/entity-views/entity-state-history.test.js +0 -274
  2081. package/dist/entity-views/entity-state-history.test.js.map +0 -1
  2082. package/dist/entity-views/entity-state.d.ts +0 -217
  2083. package/dist/entity-views/entity-state.d.ts.map +0 -1
  2084. package/dist/entity-views/entity-state.js +0 -243
  2085. package/dist/entity-views/entity-state.js.map +0 -1
  2086. package/dist/entity-views/entity-state.test.d.ts +0 -2
  2087. package/dist/entity-views/entity-state.test.d.ts.map +0 -1
  2088. package/dist/entity-views/entity-state.test.js +0 -497
  2089. package/dist/entity-views/entity-state.test.js.map +0 -1
  2090. package/dist/entity-views/entity-state_history.d.ts +0 -67
  2091. package/dist/entity-views/entity-state_history.d.ts.map +0 -1
  2092. package/dist/entity-views/entity-state_history.js +0 -58
  2093. package/dist/entity-views/entity-state_history.js.map +0 -1
  2094. package/dist/entity-views/entity-view-builder.d.ts +0 -92
  2095. package/dist/entity-views/entity-view-builder.d.ts.map +0 -1
  2096. package/dist/entity-views/entity-view-builder.js +0 -63
  2097. package/dist/entity-views/entity-view-builder.js.map +0 -1
  2098. package/dist/entity-views/entity-view-builder.test.d.ts +0 -2
  2099. package/dist/entity-views/entity-view-builder.test.d.ts.map +0 -1
  2100. package/dist/entity-views/entity-view-builder.test.js +0 -247
  2101. package/dist/entity-views/entity-view-builder.test.js.map +0 -1
  2102. package/dist/entity-views/generic-types.d.ts +0 -128
  2103. package/dist/entity-views/generic-types.d.ts.map +0 -1
  2104. package/dist/entity-views/generic-types.js +0 -2
  2105. package/dist/entity-views/generic-types.js.map +0 -1
  2106. package/dist/entity-views/generic-types.test.d.ts +0 -2
  2107. package/dist/entity-views/generic-types.test.d.ts.map +0 -1
  2108. package/dist/entity-views/generic-types.test.js +0 -99
  2109. package/dist/entity-views/generic-types.test.js.map +0 -1
  2110. package/dist/entity-views/index.d.ts.map +0 -1
  2111. package/dist/entity-views/index.js.map +0 -1
  2112. package/dist/entity-views/types.d.ts +0 -309
  2113. package/dist/entity-views/types.d.ts.map +0 -1
  2114. package/dist/entity-views/types.js.map +0 -1
  2115. package/dist/entity-views/types.test.d.ts.map +0 -1
  2116. package/dist/entity-views/types.test.js +0 -62
  2117. package/dist/entity-views/types.test.js.map +0 -1
  2118. package/dist/file/file-handlers.d.ts +0 -15
  2119. package/dist/file/file-handlers.d.ts.map +0 -1
  2120. package/dist/file/file-handlers.js +0 -318
  2121. package/dist/file/file-handlers.js.map +0 -1
  2122. package/dist/file/file-handlers.test.d.ts.map +0 -1
  2123. package/dist/file/file-handlers.test.js +0 -151
  2124. package/dist/file/file-handlers.test.js.map +0 -1
  2125. package/dist/file/index.d.ts +0 -2
  2126. package/dist/file/index.d.ts.map +0 -1
  2127. package/dist/file/index.js +0 -2
  2128. package/dist/file/index.js.map +0 -1
  2129. package/dist/file/materialize-file-data-at-changeset.d.ts +0 -9
  2130. package/dist/file/materialize-file-data-at-changeset.d.ts.map +0 -1
  2131. package/dist/file/materialize-file-data-at-changeset.js +0 -93
  2132. package/dist/file/materialize-file-data-at-changeset.js.map +0 -1
  2133. package/dist/file/materialize-file-data.d.ts +0 -8
  2134. package/dist/file/materialize-file-data.d.ts.map +0 -1
  2135. package/dist/file/materialize-file-data.js +0 -91
  2136. package/dist/file/materialize-file-data.js.map +0 -1
  2137. package/dist/file/materialize-file-data.test.d.ts.map +0 -1
  2138. package/dist/file/materialize-file-data.test.js +0 -90
  2139. package/dist/file/materialize-file-data.test.js.map +0 -1
  2140. package/dist/file/schema.d.ts +0 -46
  2141. package/dist/file/schema.d.ts.map +0 -1
  2142. package/dist/file/schema.js +0 -265
  2143. package/dist/file/schema.js.map +0 -1
  2144. package/dist/file/schema.test.d.ts.map +0 -1
  2145. package/dist/file/schema.test.js +0 -805
  2146. package/dist/file/schema.test.js.map +0 -1
  2147. package/dist/file/store-detected-change-schema.d.ts +0 -8
  2148. package/dist/file/store-detected-change-schema.d.ts.map +0 -1
  2149. package/dist/file/store-detected-change-schema.js +0 -41
  2150. package/dist/file/store-detected-change-schema.js.map +0 -1
  2151. package/dist/file/store-detected-change-schema.test.d.ts.map +0 -1
  2152. package/dist/file/store-detected-change-schema.test.js +0 -211
  2153. package/dist/file/store-detected-change-schema.test.js.map +0 -1
  2154. package/dist/file/unknown-file-fallback-plugin.d.ts +0 -22
  2155. package/dist/file/unknown-file-fallback-plugin.d.ts.map +0 -1
  2156. package/dist/file/unknown-file-fallback-plugin.js +0 -73
  2157. package/dist/file/unknown-file-fallback-plugin.js.map +0 -1
  2158. package/dist/file/unknown-file-fallback-plugin.test.d.ts.map +0 -1
  2159. package/dist/file/unknown-file-fallback-plugin.test.js +0 -305
  2160. package/dist/file/unknown-file-fallback-plugin.test.js.map +0 -1
  2161. package/dist/file/validate-file-path.d.ts +0 -16
  2162. package/dist/file/validate-file-path.d.ts.map +0 -1
  2163. package/dist/file/validate-file-path.js +0 -44
  2164. package/dist/file/validate-file-path.js.map +0 -1
  2165. package/dist/file/validate-file-path.test.d.ts +0 -2
  2166. package/dist/file/validate-file-path.test.d.ts.map +0 -1
  2167. package/dist/file/validate-file-path.test.js +0 -36
  2168. package/dist/file/validate-file-path.test.js.map +0 -1
  2169. package/dist/file-queue/file-handlers.d.ts +0 -24
  2170. package/dist/file-queue/file-handlers.d.ts.map +0 -1
  2171. package/dist/file-queue/file-handlers.js +0 -204
  2172. package/dist/file-queue/file-handlers.js.map +0 -1
  2173. package/dist/file-queue/file-queue-process.d.ts +0 -5
  2174. package/dist/file-queue/file-queue-process.d.ts.map +0 -1
  2175. package/dist/file-queue/file-queue-process.js +0 -91
  2176. package/dist/file-queue/file-queue-process.js.map +0 -1
  2177. package/dist/file-queue/file-queue-process.test.d.ts +0 -2
  2178. package/dist/file-queue/file-queue-process.test.d.ts.map +0 -1
  2179. package/dist/file-queue/file-queue-process.test.js +0 -372
  2180. package/dist/file-queue/file-queue-process.test.js.map +0 -1
  2181. package/dist/file-queue/file-queue-settled.d.ts +0 -13
  2182. package/dist/file-queue/file-queue-settled.d.ts.map +0 -1
  2183. package/dist/file-queue/file-queue-settled.js +0 -25
  2184. package/dist/file-queue/file-queue-settled.js.map +0 -1
  2185. package/dist/file-queue/file-queue-settled.test.d.ts +0 -2
  2186. package/dist/file-queue/file-queue-settled.test.d.ts.map +0 -1
  2187. package/dist/file-queue/file-queue-settled.test.js +0 -47
  2188. package/dist/file-queue/file-queue-settled.test.js.map +0 -1
  2189. package/dist/file-queue/index.d.ts +0 -2
  2190. package/dist/file-queue/index.d.ts.map +0 -1
  2191. package/dist/file-queue/index.js +0 -2
  2192. package/dist/file-queue/index.js.map +0 -1
  2193. package/dist/file-queue/with-skip-file-queue.d.ts +0 -3
  2194. package/dist/file-queue/with-skip-file-queue.d.ts.map +0 -1
  2195. package/dist/file-queue/with-skip-file-queue.js +0 -26
  2196. package/dist/file-queue/with-skip-file-queue.js.map +0 -1
  2197. package/dist/file-queue/with-skip-file-queue.test.d.ts +0 -2
  2198. package/dist/file-queue/with-skip-file-queue.test.d.ts.map +0 -1
  2199. package/dist/file-queue/with-skip-file-queue.test.js +0 -138
  2200. package/dist/file-queue/with-skip-file-queue.test.js.map +0 -1
  2201. package/dist/key-value/database-schema.d.ts +0 -42
  2202. package/dist/key-value/database-schema.d.ts.map +0 -1
  2203. package/dist/key-value/database-schema.js +0 -21
  2204. package/dist/key-value/database-schema.js.map +0 -1
  2205. package/dist/key-value/database-schema.test.d.ts +0 -2
  2206. package/dist/key-value/database-schema.test.d.ts.map +0 -1
  2207. package/dist/key-value/database-schema.test.js +0 -114
  2208. package/dist/key-value/database-schema.test.js.map +0 -1
  2209. package/dist/key-value/schema.d.ts +0 -21
  2210. package/dist/key-value/schema.d.ts.map +0 -1
  2211. package/dist/key-value/schema.js +0 -25
  2212. package/dist/key-value/schema.js.map +0 -1
  2213. package/dist/label/schema.d.ts +0 -22
  2214. package/dist/label/schema.d.ts.map +0 -1
  2215. package/dist/label/schema.js +0 -28
  2216. package/dist/label/schema.js.map +0 -1
  2217. package/dist/lix/close-lix.d.ts +0 -17
  2218. package/dist/lix/close-lix.d.ts.map +0 -1
  2219. package/dist/lix/close-lix.js +0 -16
  2220. package/dist/lix/close-lix.js.map +0 -1
  2221. package/dist/lix/merge.d.ts +0 -9
  2222. package/dist/lix/merge.d.ts.map +0 -1
  2223. package/dist/lix/merge.get-leaf-changes-only-in-source.d.ts +0 -15
  2224. package/dist/lix/merge.get-leaf-changes-only-in-source.d.ts.map +0 -1
  2225. package/dist/lix/merge.get-leaf-changes-only-in-source.js +0 -34
  2226. package/dist/lix/merge.get-leaf-changes-only-in-source.js.map +0 -1
  2227. package/dist/lix/merge.get-leaf-changes-only-in-source.test.d.ts +0 -2
  2228. package/dist/lix/merge.get-leaf-changes-only-in-source.test.d.ts.map +0 -1
  2229. package/dist/lix/merge.get-leaf-changes-only-in-source.test.js +0 -121
  2230. package/dist/lix/merge.get-leaf-changes-only-in-source.test.js.map +0 -1
  2231. package/dist/lix/merge.js +0 -195
  2232. package/dist/lix/merge.js.map +0 -1
  2233. package/dist/lix/merge.test.d.ts +0 -2
  2234. package/dist/lix/merge.test.d.ts.map +0 -1
  2235. package/dist/lix/merge.test.js +0 -689
  2236. package/dist/lix/merge.test.js.map +0 -1
  2237. package/dist/lix/open-lix-in-memory.d.ts +0 -20
  2238. package/dist/lix/open-lix-in-memory.d.ts.map +0 -1
  2239. package/dist/lix/open-lix-in-memory.js +0 -27
  2240. package/dist/lix/open-lix-in-memory.js.map +0 -1
  2241. package/dist/lix/open-lix-in-memory.test.d.ts +0 -2
  2242. package/dist/lix/open-lix-in-memory.test.d.ts.map +0 -1
  2243. package/dist/lix/open-lix-in-memory.test.js +0 -24
  2244. package/dist/lix/open-lix-in-memory.test.js.map +0 -1
  2245. package/dist/lix/storage/in-memory.d.ts +0 -34
  2246. package/dist/lix/storage/in-memory.d.ts.map +0 -1
  2247. package/dist/lix/storage/in-memory.js +0 -57
  2248. package/dist/lix/storage/in-memory.js.map +0 -1
  2249. package/dist/lix/storage/in-memory.test.d.ts.map +0 -1
  2250. package/dist/lix/storage/in-memory.test.js +0 -146
  2251. package/dist/lix/storage/in-memory.test.js.map +0 -1
  2252. package/dist/lix/storage/lix-storage-adapter.d.ts +0 -16
  2253. package/dist/lix/storage/lix-storage-adapter.d.ts.map +0 -1
  2254. package/dist/lix/storage/lix-storage-adapter.js +0 -2
  2255. package/dist/lix/storage/lix-storage-adapter.js.map +0 -1
  2256. package/dist/lix/storage/opfs.d.ts +0 -66
  2257. package/dist/lix/storage/opfs.d.ts.map +0 -1
  2258. package/dist/lix/storage/opfs.js +0 -152
  2259. package/dist/lix/storage/opfs.js.map +0 -1
  2260. package/dist/lix/storage/opfs.test.d.ts +0 -2
  2261. package/dist/lix/storage/opfs.test.d.ts.map +0 -1
  2262. package/dist/lix/storage/opfs.test.js +0 -171
  2263. package/dist/lix/storage/opfs.test.js.map +0 -1
  2264. package/dist/lix/to-blob.d.ts +0 -18
  2265. package/dist/lix/to-blob.d.ts.map +0 -1
  2266. package/dist/lix/to-blob.js +0 -18
  2267. package/dist/lix/to-blob.js.map +0 -1
  2268. package/dist/lix/to-blob.test.d.ts +0 -2
  2269. package/dist/lix/to-blob.test.d.ts.map +0 -1
  2270. package/dist/lix/to-blob.test.js +0 -18
  2271. package/dist/lix/to-blob.test.js.map +0 -1
  2272. package/dist/log/schema.d.ts +0 -32
  2273. package/dist/log/schema.d.ts.map +0 -1
  2274. package/dist/log/schema.js +0 -43
  2275. package/dist/log/schema.js.map +0 -1
  2276. package/dist/own-change-control/apply-own-change.d.ts +0 -10
  2277. package/dist/own-change-control/apply-own-change.d.ts.map +0 -1
  2278. package/dist/own-change-control/apply-own-change.js +0 -69
  2279. package/dist/own-change-control/apply-own-change.js.map +0 -1
  2280. package/dist/own-change-control/apply-own-change.test.d.ts +0 -2
  2281. package/dist/own-change-control/apply-own-change.test.d.ts.map +0 -1
  2282. package/dist/own-change-control/apply-own-change.test.js +0 -297
  2283. package/dist/own-change-control/apply-own-change.test.js.map +0 -1
  2284. package/dist/own-change-control/change-controlled-tables.d.ts +0 -60
  2285. package/dist/own-change-control/change-controlled-tables.d.ts.map +0 -1
  2286. package/dist/own-change-control/change-controlled-tables.js +0 -70
  2287. package/dist/own-change-control/change-controlled-tables.js.map +0 -1
  2288. package/dist/own-change-control/change-controlled-tables.test.d.ts +0 -2
  2289. package/dist/own-change-control/change-controlled-tables.test.d.ts.map +0 -1
  2290. package/dist/own-change-control/change-controlled-tables.test.js +0 -48
  2291. package/dist/own-change-control/change-controlled-tables.test.js.map +0 -1
  2292. package/dist/own-change-control/database-triggers.d.ts +0 -5
  2293. package/dist/own-change-control/database-triggers.d.ts.map +0 -1
  2294. package/dist/own-change-control/database-triggers.js +0 -135
  2295. package/dist/own-change-control/database-triggers.js.map +0 -1
  2296. package/dist/own-change-control/database-triggers.test.d.ts +0 -2
  2297. package/dist/own-change-control/database-triggers.test.d.ts.map +0 -1
  2298. package/dist/own-change-control/database-triggers.test.js +0 -214
  2299. package/dist/own-change-control/database-triggers.test.js.map +0 -1
  2300. package/dist/own-change-control/index.d.ts +0 -2
  2301. package/dist/own-change-control/index.d.ts.map +0 -1
  2302. package/dist/own-change-control/index.js +0 -2
  2303. package/dist/own-change-control/index.js.map +0 -1
  2304. package/dist/own-change-control/with-skip-own-change-control.d.ts +0 -3
  2305. package/dist/own-change-control/with-skip-own-change-control.d.ts.map +0 -1
  2306. package/dist/own-change-control/with-skip-own-change-control.js +0 -28
  2307. package/dist/own-change-control/with-skip-own-change-control.js.map +0 -1
  2308. package/dist/own-change-control/with-skip-own-change-control.test.d.ts +0 -2
  2309. package/dist/own-change-control/with-skip-own-change-control.test.d.ts.map +0 -1
  2310. package/dist/own-change-control/with-skip-own-change-control.test.js +0 -49
  2311. package/dist/own-change-control/with-skip-own-change-control.test.js.map +0 -1
  2312. package/dist/plugin/load-plugin.d.ts +0 -5
  2313. package/dist/plugin/load-plugin.d.ts.map +0 -1
  2314. package/dist/plugin/load-plugin.js +0 -27
  2315. package/dist/plugin/load-plugin.js.map +0 -1
  2316. package/dist/plugin/with-transaction.d.ts +0 -11
  2317. package/dist/plugin/with-transaction.d.ts.map +0 -1
  2318. package/dist/plugin/with-transaction.js +0 -15
  2319. package/dist/plugin/with-transaction.js.map +0 -1
  2320. package/dist/query-filter/change-conflict-in-version.d.ts +0 -15
  2321. package/dist/query-filter/change-conflict-in-version.d.ts.map +0 -1
  2322. package/dist/query-filter/change-conflict-in-version.js +0 -18
  2323. package/dist/query-filter/change-conflict-in-version.js.map +0 -1
  2324. package/dist/query-filter/change-conflict-in-version.test.d.ts +0 -2
  2325. package/dist/query-filter/change-conflict-in-version.test.d.ts.map +0 -1
  2326. package/dist/query-filter/change-conflict-in-version.test.js +0 -55
  2327. package/dist/query-filter/change-conflict-in-version.test.js.map +0 -1
  2328. package/dist/query-filter/change-has-label.d.ts +0 -31
  2329. package/dist/query-filter/change-has-label.d.ts.map +0 -1
  2330. package/dist/query-filter/change-has-label.js +0 -33
  2331. package/dist/query-filter/change-has-label.js.map +0 -1
  2332. package/dist/query-filter/change-has-label.test.d.ts +0 -2
  2333. package/dist/query-filter/change-has-label.test.d.ts.map +0 -1
  2334. package/dist/query-filter/change-has-label.test.js +0 -71
  2335. package/dist/query-filter/change-has-label.test.js.map +0 -1
  2336. package/dist/query-filter/change-in-version.d.ts +0 -16
  2337. package/dist/query-filter/change-in-version.d.ts.map +0 -1
  2338. package/dist/query-filter/change-in-version.js +0 -29
  2339. package/dist/query-filter/change-in-version.js.map +0 -1
  2340. package/dist/query-filter/change-in-version.test.d.ts +0 -2
  2341. package/dist/query-filter/change-in-version.test.d.ts.map +0 -1
  2342. package/dist/query-filter/change-in-version.test.js +0 -75
  2343. package/dist/query-filter/change-in-version.test.js.map +0 -1
  2344. package/dist/query-filter/change-is-leaf-in-version.d.ts +0 -16
  2345. package/dist/query-filter/change-is-leaf-in-version.d.ts.map +0 -1
  2346. package/dist/query-filter/change-is-leaf-in-version.js +0 -35
  2347. package/dist/query-filter/change-is-leaf-in-version.js.map +0 -1
  2348. package/dist/query-filter/change-is-leaf-in-version.test.d.ts +0 -2
  2349. package/dist/query-filter/change-is-leaf-in-version.test.d.ts.map +0 -1
  2350. package/dist/query-filter/change-is-leaf-in-version.test.js +0 -70
  2351. package/dist/query-filter/change-is-leaf-in-version.test.js.map +0 -1
  2352. package/dist/query-filter/change-is-leaf-of.bench.d.ts +0 -2
  2353. package/dist/query-filter/change-is-leaf-of.bench.d.ts.map +0 -1
  2354. package/dist/query-filter/change-is-leaf-of.bench.js +0 -132
  2355. package/dist/query-filter/change-is-leaf-of.bench.js.map +0 -1
  2356. package/dist/query-filter/change-is-leaf-of.d.ts +0 -29
  2357. package/dist/query-filter/change-is-leaf-of.d.ts.map +0 -1
  2358. package/dist/query-filter/change-is-leaf-of.js +0 -44
  2359. package/dist/query-filter/change-is-leaf-of.js.map +0 -1
  2360. package/dist/query-filter/change-is-leaf-of.test.d.ts +0 -2
  2361. package/dist/query-filter/change-is-leaf-of.test.d.ts.map +0 -1
  2362. package/dist/query-filter/change-is-leaf-of.test.js +0 -71
  2363. package/dist/query-filter/change-is-leaf-of.test.js.map +0 -1
  2364. package/dist/query-filter/change-is-leaf.d.ts +0 -18
  2365. package/dist/query-filter/change-is-leaf.d.ts.map +0 -1
  2366. package/dist/query-filter/change-is-leaf.js +0 -18
  2367. package/dist/query-filter/change-is-leaf.js.map +0 -1
  2368. package/dist/query-filter/change-is-leaf.test.d.ts +0 -2
  2369. package/dist/query-filter/change-is-leaf.test.d.ts.map +0 -1
  2370. package/dist/query-filter/change-is-leaf.test.js +0 -122
  2371. package/dist/query-filter/change-is-leaf.test.js.map +0 -1
  2372. package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts +0 -16
  2373. package/dist/query-filter/change-is-lowest-common-ancestor-of.d.ts.map +0 -1
  2374. package/dist/query-filter/change-is-lowest-common-ancestor-of.js +0 -55
  2375. package/dist/query-filter/change-is-lowest-common-ancestor-of.js.map +0 -1
  2376. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.d.ts +0 -2
  2377. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.d.ts.map +0 -1
  2378. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js +0 -155
  2379. package/dist/query-filter/change-is-lowest-common-ancestor-of.test.js.map +0 -1
  2380. package/dist/query-filter/change-set-element-in-ancestry-of.d.ts +0 -30
  2381. package/dist/query-filter/change-set-element-in-ancestry-of.d.ts.map +0 -1
  2382. package/dist/query-filter/change-set-element-in-ancestry-of.js +0 -46
  2383. package/dist/query-filter/change-set-element-in-ancestry-of.js.map +0 -1
  2384. package/dist/query-filter/change-set-element-in-ancestry-of.test.d.ts +0 -2
  2385. package/dist/query-filter/change-set-element-in-ancestry-of.test.d.ts.map +0 -1
  2386. package/dist/query-filter/change-set-element-in-ancestry-of.test.js +0 -323
  2387. package/dist/query-filter/change-set-element-in-ancestry-of.test.js.map +0 -1
  2388. package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts +0 -20
  2389. package/dist/query-filter/change-set-element-in-symmetric-difference.d.ts.map +0 -1
  2390. package/dist/query-filter/change-set-element-in-symmetric-difference.js +0 -36
  2391. package/dist/query-filter/change-set-element-in-symmetric-difference.js.map +0 -1
  2392. package/dist/query-filter/change-set-element-in-symmetric-difference.test.d.ts +0 -2
  2393. package/dist/query-filter/change-set-element-in-symmetric-difference.test.d.ts.map +0 -1
  2394. package/dist/query-filter/change-set-element-in-symmetric-difference.test.js +0 -369
  2395. package/dist/query-filter/change-set-element-in-symmetric-difference.test.js.map +0 -1
  2396. package/dist/query-filter/change-set-element-is-leaf-of.d.ts +0 -29
  2397. package/dist/query-filter/change-set-element-is-leaf-of.d.ts.map +0 -1
  2398. package/dist/query-filter/change-set-element-is-leaf-of.js +0 -91
  2399. package/dist/query-filter/change-set-element-is-leaf-of.js.map +0 -1
  2400. package/dist/query-filter/change-set-element-is-leaf-of.test.d.ts +0 -2
  2401. package/dist/query-filter/change-set-element-is-leaf-of.test.d.ts.map +0 -1
  2402. package/dist/query-filter/change-set-element-is-leaf-of.test.js +0 -515
  2403. package/dist/query-filter/change-set-element-is-leaf-of.test.js.map +0 -1
  2404. package/dist/query-filter/change-set-has-label.d.ts +0 -41
  2405. package/dist/query-filter/change-set-has-label.d.ts.map +0 -1
  2406. package/dist/query-filter/change-set-has-label.js +0 -42
  2407. package/dist/query-filter/change-set-has-label.js.map +0 -1
  2408. package/dist/query-filter/change-set-has-label.test.d.ts +0 -2
  2409. package/dist/query-filter/change-set-has-label.test.d.ts.map +0 -1
  2410. package/dist/query-filter/change-set-has-label.test.js +0 -36
  2411. package/dist/query-filter/change-set-has-label.test.js.map +0 -1
  2412. package/dist/query-filter/change-set-is-ancestor-of.d.ts +0 -51
  2413. package/dist/query-filter/change-set-is-ancestor-of.d.ts.map +0 -1
  2414. package/dist/query-filter/change-set-is-ancestor-of.js +0 -63
  2415. package/dist/query-filter/change-set-is-ancestor-of.js.map +0 -1
  2416. package/dist/query-filter/change-set-is-ancestor-of.test.d.ts +0 -2
  2417. package/dist/query-filter/change-set-is-ancestor-of.test.d.ts.map +0 -1
  2418. package/dist/query-filter/change-set-is-ancestor-of.test.js +0 -153
  2419. package/dist/query-filter/change-set-is-ancestor-of.test.js.map +0 -1
  2420. package/dist/query-filter/change-set-is-descendant-of.d.ts +0 -44
  2421. package/dist/query-filter/change-set-is-descendant-of.d.ts.map +0 -1
  2422. package/dist/query-filter/change-set-is-descendant-of.js +0 -56
  2423. package/dist/query-filter/change-set-is-descendant-of.js.map +0 -1
  2424. package/dist/query-filter/change-set-is-descendant-of.test.d.ts +0 -2
  2425. package/dist/query-filter/change-set-is-descendant-of.test.d.ts.map +0 -1
  2426. package/dist/query-filter/change-set-is-descendant-of.test.js +0 -137
  2427. package/dist/query-filter/change-set-is-descendant-of.test.js.map +0 -1
  2428. package/dist/query-filter/version-change-in-difference.d.ts +0 -18
  2429. package/dist/query-filter/version-change-in-difference.d.ts.map +0 -1
  2430. package/dist/query-filter/version-change-in-difference.js +0 -25
  2431. package/dist/query-filter/version-change-in-difference.js.map +0 -1
  2432. package/dist/query-filter/version-change-in-difference.test.d.ts +0 -2
  2433. package/dist/query-filter/version-change-in-difference.test.d.ts.map +0 -1
  2434. package/dist/query-filter/version-change-in-difference.test.js +0 -85
  2435. package/dist/query-filter/version-change-in-difference.test.js.map +0 -1
  2436. package/dist/query-filter/version-change-in-symmetric-difference.d.ts +0 -19
  2437. package/dist/query-filter/version-change-in-symmetric-difference.d.ts.map +0 -1
  2438. package/dist/query-filter/version-change-in-symmetric-difference.js +0 -36
  2439. package/dist/query-filter/version-change-in-symmetric-difference.js.map +0 -1
  2440. package/dist/query-filter/version-change-in-symmetric-difference.test.d.ts +0 -2
  2441. package/dist/query-filter/version-change-in-symmetric-difference.test.d.ts.map +0 -1
  2442. package/dist/query-filter/version-change-in-symmetric-difference.test.js +0 -84
  2443. package/dist/query-filter/version-change-in-symmetric-difference.test.js.map +0 -1
  2444. package/dist/repository/comparison-example.js +0 -173
  2445. package/dist/repository/comparison-example.js.map +0 -1
  2446. package/dist/repository/entity-repository.d.ts +0 -53
  2447. package/dist/repository/entity-repository.d.ts.map +0 -1
  2448. package/dist/repository/entity-repository.js +0 -187
  2449. package/dist/repository/entity-repository.js.map +0 -1
  2450. package/dist/repository/entity-repository.test.d.ts +0 -2
  2451. package/dist/repository/entity-repository.test.d.ts.map +0 -1
  2452. package/dist/repository/entity-repository.test.js +0 -94
  2453. package/dist/repository/entity-repository.test.js.map +0 -1
  2454. package/dist/repository/example.d.ts +0 -6
  2455. package/dist/repository/example.d.ts.map +0 -1
  2456. package/dist/repository/example.js +0 -87
  2457. package/dist/repository/example.js.map +0 -1
  2458. package/dist/repository/file-repository.d.ts +0 -39
  2459. package/dist/repository/file-repository.d.ts.map +0 -1
  2460. package/dist/repository/file-repository.js +0 -93
  2461. package/dist/repository/file-repository.js.map +0 -1
  2462. package/dist/repository/file-repository.test.d.ts +0 -2
  2463. package/dist/repository/file-repository.test.d.ts.map +0 -1
  2464. package/dist/repository/file-repository.test.js +0 -165
  2465. package/dist/repository/file-repository.test.js.map +0 -1
  2466. package/dist/repository/index.d.ts +0 -6
  2467. package/dist/repository/index.d.ts.map +0 -1
  2468. package/dist/repository/index.js +0 -6
  2469. package/dist/repository/index.js.map +0 -1
  2470. package/dist/repository/integration.test.d.ts +0 -2
  2471. package/dist/repository/integration.test.d.ts.map +0 -1
  2472. package/dist/repository/integration.test.js +0 -136
  2473. package/dist/repository/integration.test.js.map +0 -1
  2474. package/dist/repository/key-value-repository.d.ts +0 -30
  2475. package/dist/repository/key-value-repository.d.ts.map +0 -1
  2476. package/dist/repository/key-value-repository.js +0 -60
  2477. package/dist/repository/key-value-repository.js.map +0 -1
  2478. package/dist/repository/key-value-repository.test.d.ts +0 -2
  2479. package/dist/repository/key-value-repository.test.d.ts.map +0 -1
  2480. package/dist/repository/key-value-repository.test.js +0 -122
  2481. package/dist/repository/key-value-repository.test.js.map +0 -1
  2482. package/dist/repository/markdown-plugin-example.js +0 -118
  2483. package/dist/repository/markdown-plugin-example.js.map +0 -1
  2484. package/dist/repository/query-builder.d.ts +0 -69
  2485. package/dist/repository/query-builder.d.ts.map +0 -1
  2486. package/dist/repository/query-builder.js +0 -155
  2487. package/dist/repository/query-builder.js.map +0 -1
  2488. package/dist/repository/query-builder.test.d.ts +0 -2
  2489. package/dist/repository/query-builder.test.d.ts.map +0 -1
  2490. package/dist/repository/query-builder.test.js +0 -244
  2491. package/dist/repository/query-builder.test.js.map +0 -1
  2492. package/dist/repository/repository-manager.d.ts +0 -27
  2493. package/dist/repository/repository-manager.d.ts.map +0 -1
  2494. package/dist/repository/repository-manager.js +0 -19
  2495. package/dist/repository/repository-manager.js.map +0 -1
  2496. package/dist/repository/repository-manager.test.d.ts +0 -2
  2497. package/dist/repository/repository-manager.test.d.ts.map +0 -1
  2498. package/dist/repository/repository-manager.test.js +0 -65
  2499. package/dist/repository/repository-manager.test.js.map +0 -1
  2500. package/dist/repository/test-helpers.js +0 -402
  2501. package/dist/repository/test-helpers.js.map +0 -1
  2502. package/dist/schema-definition/lix-generated.test.d.ts +0 -2
  2503. package/dist/schema-definition/lix-generated.test.d.ts.map +0 -1
  2504. package/dist/schema-definition/lix-generated.test.js +0 -127
  2505. package/dist/schema-definition/lix-generated.test.js.map +0 -1
  2506. package/dist/snapshot/create-snapshot.d.ts +0 -7
  2507. package/dist/snapshot/create-snapshot.d.ts.map +0 -1
  2508. package/dist/snapshot/create-snapshot.js +0 -28
  2509. package/dist/snapshot/create-snapshot.js.map +0 -1
  2510. package/dist/snapshot/create-snapshot.test.d.ts +0 -2
  2511. package/dist/snapshot/create-snapshot.test.d.ts.map +0 -1
  2512. package/dist/snapshot/create-snapshot.test.js +0 -83
  2513. package/dist/snapshot/create-snapshot.test.js.map +0 -1
  2514. package/dist/snapshot/index.d.ts +0 -4
  2515. package/dist/snapshot/index.d.ts.map +0 -1
  2516. package/dist/snapshot/index.js +0 -4
  2517. package/dist/snapshot/index.js.map +0 -1
  2518. package/dist/snapshot/json-sha-256.d.ts +0 -9
  2519. package/dist/snapshot/json-sha-256.d.ts.map +0 -1
  2520. package/dist/snapshot/json-sha-256.js +0 -27
  2521. package/dist/snapshot/json-sha-256.js.map +0 -1
  2522. package/dist/snapshot/json-sha-256.test.d.ts +0 -2
  2523. package/dist/snapshot/json-sha-256.test.d.ts.map +0 -1
  2524. package/dist/snapshot/json-sha-256.test.js +0 -48
  2525. package/dist/snapshot/json-sha-256.test.js.map +0 -1
  2526. package/dist/snapshot/mock-json-snapshot.d.ts +0 -8
  2527. package/dist/snapshot/mock-json-snapshot.d.ts.map +0 -1
  2528. package/dist/snapshot/mock-json-snapshot.js +0 -13
  2529. package/dist/snapshot/mock-json-snapshot.js.map +0 -1
  2530. package/dist/state/create-changeset-for-transaction.d.ts +0 -15
  2531. package/dist/state/create-changeset-for-transaction.d.ts.map +0 -1
  2532. package/dist/state/create-changeset-for-transaction.js +0 -237
  2533. package/dist/state/create-changeset-for-transaction.js.map +0 -1
  2534. package/dist/state/entity-view-builder.d.ts +0 -145
  2535. package/dist/state/entity-view-builder.d.ts.map +0 -1
  2536. package/dist/state/entity-view-builder.js +0 -280
  2537. package/dist/state/entity-view-builder.js.map +0 -1
  2538. package/dist/state/entity-view-builder.test.d.ts +0 -2
  2539. package/dist/state/entity-view-builder.test.d.ts.map +0 -1
  2540. package/dist/state/entity-view-builder.test.js +0 -523
  2541. package/dist/state/entity-view-builder.test.js.map +0 -1
  2542. package/dist/state/get-version-record-by-id-or-throw.d.ts +0 -6
  2543. package/dist/state/get-version-record-by-id-or-throw.d.ts.map +0 -1
  2544. package/dist/state/get-version-record-by-id-or-throw.js +0 -36
  2545. package/dist/state/get-version-record-by-id-or-throw.js.map +0 -1
  2546. package/dist/state/handle-state-mutation.d.ts +0 -18
  2547. package/dist/state/handle-state-mutation.d.ts.map +0 -1
  2548. package/dist/state/handle-state-mutation.js +0 -352
  2549. package/dist/state/handle-state-mutation.js.map +0 -1
  2550. package/dist/state/handle-state-mutation.test.d.ts +0 -2
  2551. package/dist/state/handle-state-mutation.test.d.ts.map +0 -1
  2552. package/dist/state/handle-state-mutation.test.js +0 -632
  2553. package/dist/state/handle-state-mutation.test.js.map +0 -1
  2554. package/dist/state/schema.test.d.ts.map +0 -1
  2555. package/dist/state/schema.test.js +0 -2030
  2556. package/dist/state/schema.test.js.map +0 -1
  2557. package/dist/state/validate-state-mutation.d.ts +0 -13
  2558. package/dist/state/validate-state-mutation.d.ts.map +0 -1
  2559. package/dist/state/validate-state-mutation.js +0 -485
  2560. package/dist/state/validate-state-mutation.js.map +0 -1
  2561. package/dist/state/validate-state-mutation.test.d.ts.map +0 -1
  2562. package/dist/state/validate-state-mutation.test.js +0 -2024
  2563. package/dist/state/validate-state-mutation.test.js.map +0 -1
  2564. package/dist/stored-schema/schema.d.ts +0 -25
  2565. package/dist/stored-schema/schema.d.ts.map +0 -1
  2566. package/dist/stored-schema/schema.js +0 -48
  2567. package/dist/stored-schema/schema.js.map +0 -1
  2568. package/dist/thread/create-thread-comment.d.ts +0 -18
  2569. package/dist/thread/create-thread-comment.d.ts.map +0 -1
  2570. package/dist/thread/create-thread-comment.js +0 -47
  2571. package/dist/thread/create-thread-comment.js.map +0 -1
  2572. package/dist/thread/create-thread-comment.test.d.ts +0 -2
  2573. package/dist/thread/create-thread-comment.test.d.ts.map +0 -1
  2574. package/dist/thread/create-thread-comment.test.js +0 -51
  2575. package/dist/thread/create-thread-comment.test.js.map +0 -1
  2576. package/dist/thread/create-thread.d.ts +0 -28
  2577. package/dist/thread/create-thread.d.ts.map +0 -1
  2578. package/dist/thread/create-thread.js +0 -58
  2579. package/dist/thread/create-thread.js.map +0 -1
  2580. package/dist/thread/create-thread.test.d.ts +0 -2
  2581. package/dist/thread/create-thread.test.d.ts.map +0 -1
  2582. package/dist/thread/create-thread.test.js +0 -26
  2583. package/dist/thread/create-thread.test.js.map +0 -1
  2584. package/dist/thread/index.d.ts +0 -4
  2585. package/dist/thread/index.d.ts.map +0 -1
  2586. package/dist/thread/index.js +0 -4
  2587. package/dist/thread/index.js.map +0 -1
  2588. package/dist/thread/schema.d.ts +0 -59
  2589. package/dist/thread/schema.d.ts.map +0 -1
  2590. package/dist/thread/schema.js +0 -66
  2591. package/dist/thread/schema.js.map +0 -1
  2592. package/dist/thread/schema.test.d.ts.map +0 -1
  2593. package/dist/thread/schema.test.js +0 -60
  2594. package/dist/thread/schema.test.js.map +0 -1
  2595. package/dist/version/update-changes-in-version.d.ts +0 -13
  2596. package/dist/version/update-changes-in-version.d.ts.map +0 -1
  2597. package/dist/version/update-changes-in-version.js +0 -36
  2598. package/dist/version/update-changes-in-version.js.map +0 -1
  2599. package/dist/version/update-changes-in-version.test.d.ts +0 -2
  2600. package/dist/version/update-changes-in-version.test.d.ts.map +0 -1
  2601. package/dist/version/update-changes-in-version.test.js +0 -323
  2602. package/dist/version/update-changes-in-version.test.js.map +0 -1
  2603. package/dist/zettel-ast/index.d.ts.map +0 -1
  2604. package/dist/zettel-ast/index.js.map +0 -1
  2605. package/src/account/schema.ts +0 -76
  2606. package/src/change-author/schema.ts +0 -48
  2607. package/src/change-proposal/database-schema.test.ts +0 -180
  2608. package/src/change-proposal/database-schema.ts +0 -32
  2609. package/src/change-set/create-checkpoint.test.ts +0 -387
  2610. package/src/change-set/create-checkpoint.ts +0 -101
  2611. package/src/change-set/create-merge-change-set.test.ts +0 -237
  2612. package/src/change-set/create-merge-change-set.ts +0 -99
  2613. package/src/change-set/create-transition-change-set.test.ts +0 -245
  2614. package/src/change-set/create-transition-change-set.ts +0 -149
  2615. package/src/change-set/create-undo-change-set.test.ts +0 -329
  2616. package/src/change-set/create-undo-change-set.ts +0 -147
  2617. package/src/change-set/schema.ts +0 -207
  2618. package/src/database/execute-sync.test.ts +0 -140
  2619. package/src/database/execute-sync.ts +0 -46
  2620. package/src/database/kysely-plugin/json-column-plugin.ts +0 -215
  2621. package/src/database/kysely-plugin/parse-jsonb-plugin-v1.test.ts +0 -204
  2622. package/src/database/kysely-plugin/parse-jsonb-plugin-v1.ts +0 -50
  2623. package/src/database/kysely-plugin/parse-jsonb-plugin-v2.no_test.ts +0 -204
  2624. package/src/database/kysely-plugin/parse-jsonb-plugin-v2.ts +0 -194
  2625. package/src/database/kysely-plugin/serialize-jsonb-plugin.test.ts +0 -307
  2626. package/src/database/kysely-plugin/serialize-jsonb-plugin.ts +0 -221
  2627. package/src/database/kysely-plugin/view-insert-returning-error-plugin.test.ts +0 -62
  2628. package/src/entity-views/entity-state-all.test.ts +0 -445
  2629. package/src/entity-views/entity-state-all.ts +0 -506
  2630. package/src/entity-views/entity-state-history.test.ts +0 -325
  2631. package/src/entity-views/entity-state-history.ts +0 -226
  2632. package/src/entity-views/entity-state.test.ts +0 -592
  2633. package/src/entity-views/entity-state.ts +0 -502
  2634. package/src/entity-views/entity-view-builder.test.ts +0 -293
  2635. package/src/entity-views/entity-view-builder.ts +0 -148
  2636. package/src/entity-views/types.test.ts +0 -99
  2637. package/src/entity-views/types.ts +0 -328
  2638. package/src/file/file-handlers.test.ts +0 -174
  2639. package/src/file/file-handlers.ts +0 -364
  2640. package/src/file/index.ts +0 -5
  2641. package/src/file/materialize-file-data-at-changeset.ts +0 -123
  2642. package/src/file/materialize-file-data.test.ts +0 -107
  2643. package/src/file/materialize-file-data.ts +0 -120
  2644. package/src/file/schema.test.ts +0 -990
  2645. package/src/file/schema.ts +0 -300
  2646. package/src/file/store-detected-change-schema.test.ts +0 -248
  2647. package/src/file/store-detected-change-schema.ts +0 -52
  2648. package/src/file/unknown-file-fallback-plugin.test.ts +0 -368
  2649. package/src/file/unknown-file-fallback-plugin.ts +0 -95
  2650. package/src/key-value/schema.ts +0 -37
  2651. package/src/label/schema.ts +0 -40
  2652. package/src/lix/storage/in-memory.test.ts +0 -180
  2653. package/src/lix/storage/in-memory.ts +0 -69
  2654. package/src/lix/storage/lix-storage-adapter.ts +0 -16
  2655. package/src/lix/storage/opfs.test.ts +0 -215
  2656. package/src/lix/storage/opfs.ts +0 -175
  2657. package/src/log/schema.ts +0 -55
  2658. package/src/query-filter/change-has-label.test.ts +0 -79
  2659. package/src/query-filter/change-has-label.ts +0 -45
  2660. package/src/query-filter/change-set-element-in-ancestry-of.test.ts +0 -354
  2661. package/src/query-filter/change-set-element-in-ancestry-of.ts +0 -64
  2662. package/src/query-filter/change-set-element-in-symmetric-difference.test.ts +0 -410
  2663. package/src/query-filter/change-set-element-in-symmetric-difference.ts +0 -53
  2664. package/src/query-filter/change-set-element-is-leaf-of.test.ts +0 -564
  2665. package/src/query-filter/change-set-element-is-leaf-of.ts +0 -110
  2666. package/src/query-filter/change-set-has-label.test.ts +0 -42
  2667. package/src/query-filter/change-set-has-label.ts +0 -50
  2668. package/src/query-filter/change-set-is-ancestor-of.test.ts +0 -178
  2669. package/src/query-filter/change-set-is-ancestor-of.ts +0 -77
  2670. package/src/query-filter/change-set-is-descendant-of.test.ts +0 -169
  2671. package/src/query-filter/change-set-is-descendant-of.ts +0 -70
  2672. package/src/state/create-changeset-for-transaction.ts +0 -321
  2673. package/src/state/get-version-record-by-id-or-throw.ts +0 -51
  2674. package/src/state/handle-state-mutation.test.ts +0 -761
  2675. package/src/state/handle-state-mutation.ts +0 -418
  2676. package/src/state/schema.test.ts +0 -2416
  2677. package/src/state/validate-state-mutation.test.ts +0 -2353
  2678. package/src/state/validate-state-mutation.ts +0 -664
  2679. package/src/stored-schema/schema.ts +0 -67
  2680. package/src/thread/create-thread-comment.test.ts +0 -63
  2681. package/src/thread/create-thread-comment.ts +0 -56
  2682. package/src/thread/create-thread.test.ts +0 -32
  2683. package/src/thread/create-thread.ts +0 -83
  2684. package/src/thread/index.ts +0 -8
  2685. package/src/thread/schema.test.ts +0 -76
  2686. package/src/thread/schema.ts +0 -85
  2687. /package/dist/{file → change-proposal}/schema.test.d.ts +0 -0
  2688. /package/dist/{state → commit}/schema.test.d.ts +0 -0
  2689. /package/dist/database/{kysely-plugin → kysely/plugins}/view-insert-returning-error-plugin.d.ts +0 -0
  2690. /package/dist/database/{kysely-plugin → kysely/plugins}/view-insert-returning-error-plugin.js +0 -0
  2691. /package/dist/database/{kysely-plugin → kysely/plugins}/view-insert-returning-error-plugin.test.d.ts +0 -0
  2692. /package/dist/{zettel-ast → dependency/zettel-ast}/index.d.ts +0 -0
  2693. /package/dist/{zettel-ast → dependency/zettel-ast}/index.js +0 -0
  2694. /package/dist/{entity-views → engine/entity-views}/index.d.ts +0 -0
  2695. /package/dist/{entity-views → engine/entity-views}/index.js +0 -0
  2696. /package/dist/{change-schema → engine/entity-views}/types.js +0 -0
  2697. /package/dist/{entity-views → engine/entity-views}/types.test.d.ts +0 -0
  2698. /package/dist/{database → engine}/execute-sync.test.d.ts +0 -0
  2699. /package/dist/{entity-views → engine/preprocessor}/types.js +0 -0
  2700. /package/dist/{thread → entity/conversation}/schema.test.d.ts +0 -0
  2701. /package/dist/{lix/storage → environment}/in-memory.test.d.ts +0 -0
  2702. /package/dist/{file → filesystem/file}/file-handlers.test.d.ts +0 -0
  2703. /package/dist/{file → filesystem/file}/materialize-file-data.test.d.ts +0 -0
  2704. /package/dist/{file → filesystem/file}/store-detected-change-schema.test.d.ts +0 -0
  2705. /package/dist/{file → filesystem/file}/unknown-file-fallback-plugin.test.d.ts +0 -0
  2706. /package/dist/{change-set → state}/create-checkpoint.test.d.ts +0 -0
  2707. /package/dist/state/{validate-state-mutation.test.d.ts → vtable/validate-state-mutation.test.d.ts} +0 -0
  2708. /package/src/database/{kysely-plugin → kysely/plugins}/view-insert-returning-error-plugin.ts +0 -0
  2709. /package/src/{zettel-ast → dependency/zettel-ast}/index.ts +0 -0
  2710. /package/src/{entity-views → engine/entity-views}/index.ts +0 -0
@@ -0,0 +1,3751 @@
1
+ import {
2
+ type BetweenExpressionNode,
3
+ type BinaryExpressionNode,
4
+ type CompoundSelectNode,
5
+ type ExpressionNode,
6
+ type IdentifierNode,
7
+ type InListExpressionNode,
8
+ type ObjectNameNode,
9
+ type ParameterExpressionNode,
10
+ type RawFragmentNode,
11
+ type SegmentedStatementNode,
12
+ type SelectItemNode,
13
+ type SelectStatementNode,
14
+ type TableReferenceNode,
15
+ type RelationNode,
16
+ type WithClauseNode,
17
+ } from "../sql-parser/nodes.js";
18
+ import type {
19
+ PreprocessorStep,
20
+ PreprocessorStepContext,
21
+ PreprocessorTraceEntry,
22
+ } from "../types.js";
23
+ import { internalQueryBuilder } from "../../internal-query-builder.js";
24
+ import {
25
+ getColumnName,
26
+ getColumnQualifier,
27
+ getIdentifierValue,
28
+ isSelectAllForTable,
29
+ normalizeIdentifierValue,
30
+ objectNameMatches,
31
+ } from "../sql-parser/ast-helpers.js";
32
+ import {
33
+ visitSelectStatement,
34
+ type AstVisitor,
35
+ } from "../sql-parser/visitor.js";
36
+ import { normalizeSegmentedStatement } from "../sql-parser/parse.js";
37
+ import {
38
+ cacheTableNameToSchemaKey,
39
+ schemaKeyToCacheTableName,
40
+ } from "../../../state/cache/create-schema-cache-table.js";
41
+ import type {
42
+ VersionInheritanceMap,
43
+ VersionInheritanceNode,
44
+ } from "../inheritance/version-inheritance-cache.js";
45
+
46
+ export const INTERNAL_STATE_VTABLE = "lix_internal_state_vtable";
47
+ const DEFAULT_ALIAS_KEY = normalizeIdentifierValue(INTERNAL_STATE_VTABLE);
48
+ const ORIGINAL_TABLE_KEY = DEFAULT_ALIAS_KEY;
49
+ const HIDDEN_SEGMENT_COLUMNS = ["_pk"] as const;
50
+ const HIDDEN_SEGMENT_COLUMN_SET = new Set<string>(HIDDEN_SEGMENT_COLUMNS);
51
+ const SNAPSHOT_JSON_ENTITY_PATHS = new Set<string>(["$.id", "$.entity_id"]);
52
+ // Guarded until we can reliably map JSON paths to concrete entity identifiers.
53
+ const SNAPSHOT_ENTITY_FILTER_PUSH_ENABLED = false;
54
+
55
+ type SelectedProjection = {
56
+ column: string;
57
+ alias: string | null;
58
+ };
59
+
60
+ type ColumnSelectionSummary = {
61
+ selectedColumns: SelectedProjection[] | null;
62
+ requestedHiddenColumns: ReadonlySet<string>;
63
+ supportColumns: ReadonlySet<string>;
64
+ };
65
+
66
+ type SnapshotJsonPredicate = {
67
+ path: string;
68
+ values: readonly string[];
69
+ };
70
+
71
+ type ColumnPredicateSummary = {
72
+ count: number;
73
+ literals: string[];
74
+ };
75
+
76
+ type PredicateVisitContext = {
77
+ tableNames: Set<string>;
78
+ parameters: ReadonlyArray<unknown>;
79
+ allowUnqualified: boolean;
80
+ };
81
+
82
+ type SnapshotPredicateAccumulator = Map<string, Set<string>>;
83
+
84
+ type TableReferenceInfo = {
85
+ relation: TableReferenceNode;
86
+ alias: string | null;
87
+ normalizedAlias: string | null;
88
+ };
89
+
90
+ type InlineRewriteMetadata = {
91
+ schemaKeys: readonly string[];
92
+ fileIds: readonly string[];
93
+ entityIds: readonly string[];
94
+ snapshotFilters: readonly SnapshotJsonPredicate[];
95
+ versionIds: readonly string[];
96
+ selectedColumns: SelectedProjection[] | null;
97
+ hiddenColumns: ReadonlySet<string>;
98
+ supportColumns: ReadonlySet<string>;
99
+ pruneInheritance: boolean;
100
+ pruneTransactionSegment: boolean;
101
+ };
102
+
103
+ type SubqueryPredicateMetadata = {
104
+ schemaKeys: readonly string[];
105
+ fileIds: readonly string[];
106
+ entityIds: readonly string[];
107
+ snapshotFilters: readonly SnapshotJsonPredicate[];
108
+ versionIds: readonly string[];
109
+ pruneInheritance: boolean;
110
+ pruneTransactionSegment: boolean;
111
+ };
112
+
113
+ /**
114
+ * Rewrites internal state vtable references into inline union subqueries.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * const rewritten = rewriteVtableSelects({
119
+ * node: statement,
120
+ * getCacheTables,
121
+ * hasOpenTransaction,
122
+ * });
123
+ * ```
124
+ */
125
+ export const rewriteVtableSelects: PreprocessorStep = (context) => {
126
+ let anyChanges = false;
127
+ const rewrittenStatements = context.statements.map((statement) => {
128
+ const rewritten = rewriteSegmentedStatement(statement, context);
129
+ if (rewritten !== statement) {
130
+ anyChanges = true;
131
+ }
132
+ return rewritten;
133
+ });
134
+
135
+ return anyChanges ? rewrittenStatements : context.statements;
136
+ };
137
+
138
+ function rewriteSegmentedStatement(
139
+ statement: SegmentedStatementNode,
140
+ context: PreprocessorStepContext
141
+ ): SegmentedStatementNode {
142
+ let changed = false;
143
+ const segments = statement.segments.map((segment) => {
144
+ if (segment.node_kind === "select_statement") {
145
+ const rewritten = rewriteSelectStatement(segment, context);
146
+ if (rewritten !== segment) {
147
+ changed = true;
148
+ }
149
+ return rewritten;
150
+ }
151
+ if (segment.node_kind === "compound_select") {
152
+ const rewritten = rewriteCompoundSelect(segment, context);
153
+ if (rewritten !== segment) {
154
+ changed = true;
155
+ }
156
+ return rewritten;
157
+ }
158
+ return segment;
159
+ });
160
+
161
+ if (!changed) {
162
+ return statement;
163
+ }
164
+
165
+ return normalizeSegmentedStatement({
166
+ ...statement,
167
+ segments,
168
+ });
169
+ }
170
+
171
+ function rewriteSelectStatement(
172
+ select: SelectStatementNode,
173
+ context: PreprocessorStepContext,
174
+ pushdownSchemaKeys: readonly string[] = [],
175
+ pushdownPruneInheritance = false,
176
+ pushdownPruneTransactions = false,
177
+ pushdownFileIds: readonly string[] = [],
178
+ pushdownEntityIds: readonly string[] = [],
179
+ pushdownVersionIds: readonly string[] = [],
180
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[] = []
181
+ ): SelectStatementNode {
182
+ const parameters = context.parameters ?? [];
183
+ const ctePredicateMap = collectCtePredicateMap(
184
+ select,
185
+ parameters,
186
+ pushdownSchemaKeys,
187
+ pushdownPruneInheritance,
188
+ pushdownPruneTransactions,
189
+ pushdownFileIds,
190
+ pushdownEntityIds,
191
+ pushdownVersionIds,
192
+ pushdownSnapshotFilters
193
+ );
194
+ const selectWithRewrittenCtes = rewriteSelectWithClause(
195
+ select,
196
+ context,
197
+ ctePredicateMap,
198
+ pushdownSchemaKeys,
199
+ pushdownPruneInheritance,
200
+ pushdownPruneTransactions,
201
+ pushdownFileIds,
202
+ pushdownEntityIds,
203
+ pushdownVersionIds,
204
+ pushdownSnapshotFilters
205
+ );
206
+ const fallbackAliasNames = collectRelationAliasNames(selectWithRewrittenCtes);
207
+ const fallbackSchemaSummary = collectSchemaKeyPredicates(
208
+ selectWithRewrittenCtes.where_clause,
209
+ fallbackAliasNames,
210
+ parameters
211
+ );
212
+ const fallbackSchemaKeys = mergeStringLiterals(
213
+ pushdownSchemaKeys,
214
+ fallbackSchemaSummary.literals
215
+ );
216
+ const fallbackFileSummary = collectFileIdPredicates(
217
+ selectWithRewrittenCtes.where_clause,
218
+ fallbackAliasNames,
219
+ parameters
220
+ );
221
+ const fallbackFileIds = mergeStringLiterals(
222
+ pushdownFileIds,
223
+ fallbackFileSummary.literals
224
+ );
225
+ const fallbackEntitySummary = collectEntityIdPredicates(
226
+ selectWithRewrittenCtes.where_clause,
227
+ fallbackAliasNames,
228
+ parameters
229
+ );
230
+ const fallbackEntityIds = mergeStringLiterals(
231
+ pushdownEntityIds,
232
+ fallbackEntitySummary.literals
233
+ );
234
+ const fallbackVersionSummary = collectVersionIdPredicates(
235
+ selectWithRewrittenCtes.where_clause,
236
+ fallbackAliasNames,
237
+ parameters
238
+ );
239
+ const fallbackVersionIds = mergeStringLiterals(
240
+ pushdownVersionIds,
241
+ fallbackVersionSummary.literals
242
+ );
243
+ const fallbackSnapshotSummary = collectSnapshotJsonPredicates(
244
+ selectWithRewrittenCtes.where_clause,
245
+ fallbackAliasNames,
246
+ parameters
247
+ );
248
+ const fallbackSnapshotFilters = mergeSnapshotFilters(
249
+ pushdownSnapshotFilters,
250
+ fallbackSnapshotSummary
251
+ );
252
+ const fallbackPruneInheritance =
253
+ pushdownPruneInheritance ||
254
+ shouldPruneInheritance(
255
+ selectWithRewrittenCtes.where_clause,
256
+ fallbackAliasNames,
257
+ parameters
258
+ );
259
+ const fallbackPruneTransactions =
260
+ pushdownPruneTransactions ||
261
+ shouldPruneTransactionSegment(
262
+ selectWithRewrittenCtes.where_clause,
263
+ fallbackAliasNames,
264
+ parameters
265
+ );
266
+ const subqueryPredicateMap = collectSubqueryPredicateMap(
267
+ selectWithRewrittenCtes,
268
+ parameters,
269
+ pushdownSchemaKeys,
270
+ pushdownPruneInheritance,
271
+ pushdownPruneTransactions,
272
+ pushdownFileIds,
273
+ pushdownEntityIds,
274
+ pushdownVersionIds,
275
+ pushdownSnapshotFilters
276
+ );
277
+ const withRewrittenSubqueries = visitSelectStatement(
278
+ selectWithRewrittenCtes,
279
+ {
280
+ subquery(node, visitContext) {
281
+ const parentKind = visitContext.parent?.node_kind;
282
+ const aliasValue = getIdentifierValue(node.alias);
283
+ const normalizedAlias = aliasValue
284
+ ? normalizeIdentifierValue(aliasValue)
285
+ : DEFAULT_ALIAS_KEY;
286
+ const predicateMetadata =
287
+ parentKind === "from_clause" || parentKind === "join_clause"
288
+ ? subqueryPredicateMap.get(normalizedAlias)
289
+ : undefined;
290
+ const nextSchemaKeys =
291
+ predicateMetadata?.schemaKeys ?? fallbackSchemaKeys;
292
+ const nextPrune =
293
+ predicateMetadata?.pruneInheritance ?? fallbackPruneInheritance;
294
+ const nextPruneTransactions =
295
+ predicateMetadata?.pruneTransactionSegment ??
296
+ fallbackPruneTransactions;
297
+ const nextFileIds = predicateMetadata?.fileIds ?? fallbackFileIds;
298
+ const nextEntityIds = predicateMetadata?.entityIds ?? fallbackEntityIds;
299
+ const nextVersionIds =
300
+ predicateMetadata?.versionIds ?? fallbackVersionIds;
301
+ const nextSnapshotFilters =
302
+ predicateMetadata?.snapshotFilters ?? fallbackSnapshotFilters;
303
+ const rewrittenStatement =
304
+ node.statement.node_kind === "compound_select"
305
+ ? rewriteCompoundSelect(
306
+ node.statement,
307
+ context,
308
+ nextSchemaKeys,
309
+ nextPrune,
310
+ nextPruneTransactions,
311
+ nextFileIds,
312
+ nextEntityIds,
313
+ nextVersionIds,
314
+ nextSnapshotFilters
315
+ )
316
+ : rewriteSelectStatement(
317
+ node.statement,
318
+ context,
319
+ nextSchemaKeys,
320
+ nextPrune,
321
+ nextPruneTransactions,
322
+ nextFileIds,
323
+ nextEntityIds,
324
+ nextVersionIds,
325
+ nextSnapshotFilters
326
+ );
327
+ if (rewrittenStatement !== node.statement) {
328
+ return {
329
+ ...node,
330
+ statement: rewrittenStatement,
331
+ };
332
+ }
333
+ return node;
334
+ },
335
+ }
336
+ );
337
+
338
+ const references = collectInternalStateReferences(withRewrittenSubqueries);
339
+ if (references.length === 0) {
340
+ return withRewrittenSubqueries;
341
+ }
342
+
343
+ const aliasList = references
344
+ .map((reference) => reference.alias)
345
+ .filter((alias): alias is string => alias !== null);
346
+
347
+ const tableNamesForTrace = new Set<string>([
348
+ DEFAULT_ALIAS_KEY,
349
+ ORIGINAL_TABLE_KEY,
350
+ ...references
351
+ .map((reference) => reference.normalizedAlias)
352
+ .filter((alias): alias is string => alias !== null),
353
+ ]);
354
+
355
+ const schemaSummary = collectSchemaKeyPredicates(
356
+ withRewrittenSubqueries.where_clause,
357
+ tableNamesForTrace,
358
+ parameters
359
+ );
360
+ const mergedSchemaKeys = mergeStringLiterals(
361
+ pushdownSchemaKeys,
362
+ schemaSummary.literals
363
+ );
364
+ const schemaSummaryForTrace: ColumnPredicateSummary = {
365
+ count: schemaSummary.count,
366
+ literals: mergedSchemaKeys,
367
+ };
368
+
369
+ const projectionKind = determineProjectionKind(
370
+ withRewrittenSubqueries.projection,
371
+ tableNamesForTrace
372
+ );
373
+ const selectedColumnsSummaryForTrace = collectSelectedColumns(
374
+ withRewrittenSubqueries,
375
+ tableNamesForTrace
376
+ );
377
+
378
+ const metadata = buildInlineMetadata(
379
+ withRewrittenSubqueries,
380
+ references,
381
+ parameters,
382
+ pushdownSchemaKeys,
383
+ pushdownPruneInheritance,
384
+ pushdownPruneTransactions,
385
+ pushdownFileIds,
386
+ pushdownEntityIds,
387
+ pushdownVersionIds,
388
+ pushdownSnapshotFilters
389
+ );
390
+
391
+ const rewritten = visitSelectStatement(
392
+ withRewrittenSubqueries,
393
+ createInlineVisitor(metadata, context)
394
+ );
395
+
396
+ if (context.trace) {
397
+ const entry = buildTraceEntry({
398
+ aliasList,
399
+ projectionKind,
400
+ schemaSummary: schemaSummaryForTrace,
401
+ selectedColumns: selectedColumnsSummaryForTrace.selectedColumns,
402
+ });
403
+ context.trace.push(entry);
404
+ }
405
+
406
+ return rewritten;
407
+ }
408
+
409
+ function rewriteCompoundSelect(
410
+ compound: CompoundSelectNode,
411
+ context: PreprocessorStepContext,
412
+ pushdownSchemaKeys: readonly string[] = [],
413
+ pushdownPruneInheritance = false,
414
+ pushdownPruneTransactions = false,
415
+ pushdownFileIds: readonly string[] = [],
416
+ pushdownEntityIds: readonly string[] = [],
417
+ pushdownVersionIds: readonly string[] = [],
418
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[] = []
419
+ ): CompoundSelectNode {
420
+ const rewrittenWithClause = compound.with_clause
421
+ ? rewriteWithClauseNode(
422
+ compound.with_clause,
423
+ context,
424
+ new Map(),
425
+ pushdownSchemaKeys,
426
+ pushdownPruneInheritance,
427
+ pushdownPruneTransactions,
428
+ pushdownFileIds,
429
+ pushdownEntityIds,
430
+ pushdownVersionIds,
431
+ pushdownSnapshotFilters
432
+ )
433
+ : null;
434
+ let changed = false;
435
+ const first = rewriteSelectStatement(
436
+ compound.first,
437
+ context,
438
+ pushdownSchemaKeys,
439
+ pushdownPruneInheritance,
440
+ pushdownPruneTransactions,
441
+ pushdownFileIds,
442
+ pushdownEntityIds,
443
+ pushdownVersionIds,
444
+ pushdownSnapshotFilters
445
+ );
446
+ if (first !== compound.first) {
447
+ changed = true;
448
+ }
449
+
450
+ const branches = compound.compounds.map((branch) => {
451
+ const rewritten = rewriteSelectStatement(
452
+ branch.select,
453
+ context,
454
+ pushdownSchemaKeys,
455
+ pushdownPruneInheritance,
456
+ pushdownPruneTransactions,
457
+ pushdownFileIds,
458
+ pushdownEntityIds,
459
+ pushdownVersionIds,
460
+ pushdownSnapshotFilters
461
+ );
462
+ if (rewritten !== branch.select) {
463
+ changed = true;
464
+ return {
465
+ ...branch,
466
+ select: rewritten,
467
+ };
468
+ }
469
+ return branch;
470
+ });
471
+
472
+ if (!changed) {
473
+ return rewrittenWithClause === compound.with_clause
474
+ ? compound
475
+ : {
476
+ ...compound,
477
+ with_clause: rewrittenWithClause,
478
+ };
479
+ }
480
+
481
+ return {
482
+ ...compound,
483
+ first,
484
+ compounds: branches,
485
+ with_clause: rewrittenWithClause ?? compound.with_clause,
486
+ };
487
+ }
488
+
489
+ function collectInternalStateReferences(
490
+ select: SelectStatementNode
491
+ ): TableReferenceInfo[] {
492
+ const references: TableReferenceInfo[] = [];
493
+ for (const clause of select.from_clauses) {
494
+ const relation = clause.relation;
495
+ if (relation.node_kind === "table_reference") {
496
+ if (isInternalStateTable(relation)) {
497
+ references.push({
498
+ relation,
499
+ alias: getIdentifierValue(relation.alias),
500
+ normalizedAlias: normalizeAlias(relation.alias),
501
+ });
502
+ }
503
+ }
504
+ for (const join of clause.joins) {
505
+ const joinRelation = join.relation;
506
+ if (
507
+ joinRelation.node_kind === "table_reference" &&
508
+ isInternalStateTable(joinRelation)
509
+ ) {
510
+ references.push({
511
+ relation: joinRelation,
512
+ alias: getIdentifierValue(joinRelation.alias),
513
+ normalizedAlias: normalizeAlias(joinRelation.alias),
514
+ });
515
+ }
516
+ }
517
+ }
518
+ return references;
519
+ }
520
+
521
+ function isInternalStateTable(table: TableReferenceNode): boolean {
522
+ return objectNameMatches(table.name, INTERNAL_STATE_VTABLE);
523
+ }
524
+
525
+ function normalizeAlias(alias: IdentifierNode | null): string | null {
526
+ const value = getIdentifierValue(alias);
527
+ return value ? normalizeIdentifierValue(value) : null;
528
+ }
529
+
530
+ function collectSubqueryPredicateMap(
531
+ select: SelectStatementNode,
532
+ parameters: ReadonlyArray<unknown>,
533
+ pushdownSchemaKeys: readonly string[],
534
+ pushdownPruneInheritance: boolean,
535
+ pushdownPruneTransactions: boolean,
536
+ pushdownFileIds: readonly string[],
537
+ pushdownEntityIds: readonly string[],
538
+ pushdownVersionIds: readonly string[],
539
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[]
540
+ ): Map<string, SubqueryPredicateMetadata> {
541
+ const map = new Map<string, SubqueryPredicateMetadata>();
542
+ const register = (
543
+ relation: RelationNode,
544
+ joinFilter: ExpressionNode | RawFragmentNode | null
545
+ ) => {
546
+ if (relation.node_kind !== "subquery") {
547
+ return;
548
+ }
549
+ const aliasValue = getIdentifierValue(relation.alias);
550
+ if (!aliasValue) {
551
+ return;
552
+ }
553
+ const normalizedAlias = normalizeIdentifierValue(aliasValue);
554
+ const tableNames = new Set<string>([
555
+ normalizedAlias,
556
+ DEFAULT_ALIAS_KEY,
557
+ ORIGINAL_TABLE_KEY,
558
+ ]);
559
+ const whereSummary = collectSchemaKeyPredicates(
560
+ select.where_clause,
561
+ tableNames,
562
+ parameters
563
+ );
564
+ const joinSummary = collectSchemaKeyPredicatesFromExpression(
565
+ joinFilter,
566
+ tableNames,
567
+ parameters,
568
+ false
569
+ );
570
+ const localKeys = mergeStringLiterals(
571
+ whereSummary.literals,
572
+ joinSummary.literals
573
+ );
574
+ const fileWhereSummary = collectFileIdPredicates(
575
+ select.where_clause,
576
+ tableNames,
577
+ parameters
578
+ );
579
+ const fileJoinSummary = collectFileIdPredicatesFromExpression(
580
+ joinFilter,
581
+ tableNames,
582
+ parameters,
583
+ false
584
+ );
585
+ const localFileIds = mergeStringLiterals(
586
+ fileWhereSummary.literals,
587
+ fileJoinSummary.literals
588
+ );
589
+ const entityWhereSummary = collectEntityIdPredicates(
590
+ select.where_clause,
591
+ tableNames,
592
+ parameters
593
+ );
594
+ const entityJoinSummary = collectEntityIdPredicatesFromExpression(
595
+ joinFilter,
596
+ tableNames,
597
+ parameters,
598
+ false
599
+ );
600
+ const localEntityIds = mergeStringLiterals(
601
+ entityWhereSummary.literals,
602
+ entityJoinSummary.literals
603
+ );
604
+ const snapshotWhereSummary = collectSnapshotJsonPredicates(
605
+ select.where_clause,
606
+ tableNames,
607
+ parameters
608
+ );
609
+ const snapshotJoinSummary = collectSnapshotJsonPredicatesFromExpression(
610
+ joinFilter,
611
+ tableNames,
612
+ parameters,
613
+ false
614
+ );
615
+ const localSnapshotFilters = mergeSnapshotFilters(
616
+ snapshotWhereSummary,
617
+ snapshotJoinSummary
618
+ );
619
+
620
+ const versionWhereSummary = collectVersionIdPredicates(
621
+ select.where_clause,
622
+ tableNames,
623
+ parameters
624
+ );
625
+ const versionJoinSummary = collectVersionIdPredicatesFromExpression(
626
+ joinFilter,
627
+ tableNames,
628
+ parameters,
629
+ false
630
+ );
631
+ const localVersionIds = mergeStringLiterals(
632
+ versionWhereSummary.literals,
633
+ versionJoinSummary.literals
634
+ );
635
+
636
+ const existing = map.get(normalizedAlias);
637
+ const merged = mergeStringLiterals(
638
+ existing?.schemaKeys ?? [],
639
+ pushdownSchemaKeys,
640
+ localKeys
641
+ );
642
+ const mergedFileIds = mergeStringLiterals(
643
+ existing?.fileIds ?? [],
644
+ pushdownFileIds,
645
+ localFileIds
646
+ );
647
+ const mergedEntityIds = mergeStringLiterals(
648
+ existing?.entityIds ?? [],
649
+ pushdownEntityIds,
650
+ localEntityIds
651
+ );
652
+ const mergedSnapshotFilters = mergeSnapshotFilters(
653
+ existing?.snapshotFilters ?? [],
654
+ pushdownSnapshotFilters,
655
+ localSnapshotFilters
656
+ );
657
+ const mergedVersionIds = mergeStringLiterals(
658
+ existing?.versionIds ?? [],
659
+ pushdownVersionIds,
660
+ localVersionIds
661
+ );
662
+ const pruneFromWhere = requiresNullPredicateForColumn(
663
+ select.where_clause,
664
+ tableNames,
665
+ parameters,
666
+ true
667
+ );
668
+ const pruneFromJoin = requiresNullPredicateForColumn(
669
+ joinFilter,
670
+ tableNames,
671
+ parameters,
672
+ false
673
+ );
674
+ const combinedPrune =
675
+ (existing?.pruneInheritance ?? false) ||
676
+ pushdownPruneInheritance ||
677
+ pruneFromWhere ||
678
+ pruneFromJoin;
679
+ const pruneTxnFromWhere = excludesColumnLiteralFromExpression(
680
+ select.where_clause,
681
+ tableNames,
682
+ parameters,
683
+ "source_tag",
684
+ "T",
685
+ true
686
+ );
687
+ const pruneTxnFromJoin = excludesColumnLiteralFromExpression(
688
+ joinFilter,
689
+ tableNames,
690
+ parameters,
691
+ "source_tag",
692
+ "T",
693
+ false
694
+ );
695
+ const combinedTxnPrune =
696
+ (existing?.pruneTransactionSegment ?? false) ||
697
+ pushdownPruneTransactions ||
698
+ pruneTxnFromWhere ||
699
+ pruneTxnFromJoin;
700
+ const finalFileIds = shouldPushFileFilter(merged, mergedFileIds)
701
+ ? mergedFileIds
702
+ : [];
703
+ const finalEntityIds = shouldPushEntityFilter(merged, mergedEntityIds)
704
+ ? mergedEntityIds
705
+ : [];
706
+ const finalSnapshotFilters = shouldPushSnapshotFilters(
707
+ merged,
708
+ mergedSnapshotFilters
709
+ )
710
+ ? mergedSnapshotFilters
711
+ : [];
712
+ if (
713
+ merged.length > 0 ||
714
+ finalFileIds.length > 0 ||
715
+ finalEntityIds.length > 0 ||
716
+ finalSnapshotFilters.length > 0 ||
717
+ mergedVersionIds.length > 0 ||
718
+ combinedPrune ||
719
+ combinedTxnPrune
720
+ ) {
721
+ map.set(normalizedAlias, {
722
+ schemaKeys: merged,
723
+ fileIds: finalFileIds,
724
+ entityIds: finalEntityIds,
725
+ snapshotFilters: finalSnapshotFilters,
726
+ versionIds: mergedVersionIds,
727
+ pruneInheritance: combinedPrune,
728
+ pruneTransactionSegment: combinedTxnPrune,
729
+ });
730
+ }
731
+ };
732
+
733
+ for (const clause of select.from_clauses) {
734
+ register(clause.relation, null);
735
+ for (const join of clause.joins) {
736
+ register(join.relation, join.on_expression);
737
+ }
738
+ }
739
+
740
+ return map;
741
+ }
742
+
743
+ function collectRelationAliasNames(select: SelectStatementNode): Set<string> {
744
+ const aliases = new Set<string>([DEFAULT_ALIAS_KEY, ORIGINAL_TABLE_KEY]);
745
+ const addAlias = (alias: IdentifierNode | null) => {
746
+ const value = getIdentifierValue(alias);
747
+ if (value) {
748
+ aliases.add(normalizeIdentifierValue(value));
749
+ }
750
+ };
751
+ for (const clause of select.from_clauses) {
752
+ addAlias(extractRelationAlias(clause.relation));
753
+ for (const join of clause.joins) {
754
+ addAlias(extractRelationAlias(join.relation));
755
+ }
756
+ }
757
+ return aliases;
758
+ }
759
+
760
+ function extractRelationAlias(relation: RelationNode): IdentifierNode | null {
761
+ if ("alias" in relation) {
762
+ const alias = (
763
+ relation as Extract<RelationNode, { alias?: IdentifierNode | null }>
764
+ ).alias;
765
+ return alias ?? null;
766
+ }
767
+ return null;
768
+ }
769
+
770
+ function collectCtePredicateMap(
771
+ select: SelectStatementNode,
772
+ parameters: ReadonlyArray<unknown>,
773
+ pushdownSchemaKeys: readonly string[],
774
+ pushdownPruneInheritance: boolean,
775
+ pushdownPruneTransactions: boolean,
776
+ pushdownFileIds: readonly string[],
777
+ pushdownEntityIds: readonly string[],
778
+ pushdownVersionIds: readonly string[],
779
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[]
780
+ ): Map<string, SubqueryPredicateMetadata> {
781
+ const withClause = select.with_clause;
782
+ if (!withClause || withClause.ctes.length === 0) {
783
+ return new Map();
784
+ }
785
+ const cteNames = new Set(
786
+ withClause.ctes
787
+ .map((cte) => normalizeIdentifierValue(cte.name.value))
788
+ .filter((name): name is string => !!name)
789
+ );
790
+ if (cteNames.size === 0) {
791
+ return new Map();
792
+ }
793
+ const map = new Map<string, SubqueryPredicateMetadata>();
794
+ const register = (
795
+ table: TableReferenceNode,
796
+ joinFilter: ExpressionNode | RawFragmentNode | null
797
+ ) => {
798
+ const normalizedName = normalizeObjectName(table.name);
799
+ if (!normalizedName || !cteNames.has(normalizedName)) {
800
+ return;
801
+ }
802
+ const aliasValue = getIdentifierValue(table.alias);
803
+ const tableNames = new Set<string>([
804
+ normalizedName,
805
+ DEFAULT_ALIAS_KEY,
806
+ ORIGINAL_TABLE_KEY,
807
+ ]);
808
+ if (aliasValue) {
809
+ tableNames.add(normalizeIdentifierValue(aliasValue));
810
+ }
811
+ const whereSummary = collectSchemaKeyPredicates(
812
+ select.where_clause,
813
+ tableNames,
814
+ parameters
815
+ );
816
+ const joinSummary = collectSchemaKeyPredicatesFromExpression(
817
+ joinFilter,
818
+ tableNames,
819
+ parameters,
820
+ false
821
+ );
822
+ const localKeys = mergeStringLiterals(
823
+ whereSummary.literals,
824
+ joinSummary.literals
825
+ );
826
+ const fileWhereSummary = collectFileIdPredicates(
827
+ select.where_clause,
828
+ tableNames,
829
+ parameters
830
+ );
831
+ const fileJoinSummary = collectFileIdPredicatesFromExpression(
832
+ joinFilter,
833
+ tableNames,
834
+ parameters,
835
+ false
836
+ );
837
+ const localFileIds = mergeStringLiterals(
838
+ fileWhereSummary.literals,
839
+ fileJoinSummary.literals
840
+ );
841
+ const entityWhereSummary = collectEntityIdPredicates(
842
+ select.where_clause,
843
+ tableNames,
844
+ parameters
845
+ );
846
+ const entityJoinSummary = collectEntityIdPredicatesFromExpression(
847
+ joinFilter,
848
+ tableNames,
849
+ parameters,
850
+ false
851
+ );
852
+ const localEntityIds = mergeStringLiterals(
853
+ entityWhereSummary.literals,
854
+ entityJoinSummary.literals
855
+ );
856
+ const snapshotWhereSummary = collectSnapshotJsonPredicates(
857
+ select.where_clause,
858
+ tableNames,
859
+ parameters
860
+ );
861
+ const snapshotJoinSummary = collectSnapshotJsonPredicatesFromExpression(
862
+ joinFilter,
863
+ tableNames,
864
+ parameters,
865
+ false
866
+ );
867
+ const localSnapshotFilters = mergeSnapshotFilters(
868
+ snapshotWhereSummary,
869
+ snapshotJoinSummary
870
+ );
871
+ const versionWhereSummary = collectVersionIdPredicates(
872
+ select.where_clause,
873
+ tableNames,
874
+ parameters
875
+ );
876
+ const versionJoinSummary = collectVersionIdPredicatesFromExpression(
877
+ joinFilter,
878
+ tableNames,
879
+ parameters,
880
+ false
881
+ );
882
+ const localVersionIds = mergeStringLiterals(
883
+ versionWhereSummary.literals,
884
+ versionJoinSummary.literals
885
+ );
886
+ const existing = map.get(normalizedName);
887
+ const mergedSchemaKeys = mergeStringLiterals(
888
+ existing?.schemaKeys ?? [],
889
+ pushdownSchemaKeys,
890
+ localKeys
891
+ );
892
+ const mergedFileIds = mergeStringLiterals(
893
+ existing?.fileIds ?? [],
894
+ pushdownFileIds,
895
+ localFileIds
896
+ );
897
+ const mergedEntityIds = mergeStringLiterals(
898
+ existing?.entityIds ?? [],
899
+ pushdownEntityIds,
900
+ localEntityIds
901
+ );
902
+ const mergedSnapshotFilters = mergeSnapshotFilters(
903
+ existing?.snapshotFilters ?? [],
904
+ pushdownSnapshotFilters,
905
+ localSnapshotFilters
906
+ );
907
+ const mergedVersionIds = mergeStringLiterals(
908
+ existing?.versionIds ?? [],
909
+ pushdownVersionIds,
910
+ localVersionIds
911
+ );
912
+ const pruneFromWhere = requiresNullPredicateForColumn(
913
+ select.where_clause,
914
+ tableNames,
915
+ parameters,
916
+ true
917
+ );
918
+ const pruneFromJoin = requiresNullPredicateForColumn(
919
+ joinFilter,
920
+ tableNames,
921
+ parameters,
922
+ false
923
+ );
924
+ const combinedPrune =
925
+ (existing?.pruneInheritance ?? false) ||
926
+ pushdownPruneInheritance ||
927
+ pruneFromWhere ||
928
+ pruneFromJoin;
929
+ const pruneTxnFromWhere = excludesColumnLiteralFromExpression(
930
+ select.where_clause,
931
+ tableNames,
932
+ parameters,
933
+ "source_tag",
934
+ "T",
935
+ true
936
+ );
937
+ const pruneTxnFromJoin = excludesColumnLiteralFromExpression(
938
+ joinFilter,
939
+ tableNames,
940
+ parameters,
941
+ "source_tag",
942
+ "T",
943
+ false
944
+ );
945
+ const combinedTxnPrune =
946
+ (existing?.pruneTransactionSegment ?? false) ||
947
+ pushdownPruneTransactions ||
948
+ pruneTxnFromWhere ||
949
+ pruneTxnFromJoin;
950
+ const finalFileIds = shouldPushFileFilter(mergedSchemaKeys, mergedFileIds)
951
+ ? mergedFileIds
952
+ : [];
953
+ const finalEntityIds = shouldPushEntityFilter(
954
+ mergedSchemaKeys,
955
+ mergedEntityIds
956
+ )
957
+ ? mergedEntityIds
958
+ : [];
959
+ const finalSnapshotFilters = shouldPushSnapshotFilters(
960
+ mergedSchemaKeys,
961
+ mergedSnapshotFilters
962
+ )
963
+ ? mergedSnapshotFilters
964
+ : [];
965
+ const entry = {
966
+ schemaKeys: mergedSchemaKeys,
967
+ fileIds: finalFileIds,
968
+ entityIds: finalEntityIds,
969
+ snapshotFilters: finalSnapshotFilters,
970
+ versionIds: mergedVersionIds,
971
+ pruneInheritance: combinedPrune,
972
+ pruneTransactionSegment: combinedTxnPrune,
973
+ };
974
+ map.set(normalizedName, entry);
975
+ };
976
+
977
+ for (const clause of select.from_clauses) {
978
+ if (clause.relation.node_kind === "table_reference") {
979
+ register(clause.relation, null);
980
+ }
981
+ for (const join of clause.joins) {
982
+ if (join.relation.node_kind === "table_reference") {
983
+ register(join.relation, join.on_expression);
984
+ }
985
+ }
986
+ }
987
+
988
+ return map;
989
+ }
990
+
991
+ function rewriteSelectWithClause(
992
+ select: SelectStatementNode,
993
+ context: PreprocessorStepContext,
994
+ predicateMap: Map<string, SubqueryPredicateMetadata>,
995
+ pushdownSchemaKeys: readonly string[],
996
+ pushdownPruneInheritance: boolean,
997
+ pushdownPruneTransactions: boolean,
998
+ pushdownFileIds: readonly string[],
999
+ pushdownEntityIds: readonly string[],
1000
+ pushdownVersionIds: readonly string[],
1001
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[]
1002
+ ): SelectStatementNode {
1003
+ if (!select.with_clause) {
1004
+ return select;
1005
+ }
1006
+ const rewritten = rewriteWithClauseNode(
1007
+ select.with_clause,
1008
+ context,
1009
+ predicateMap,
1010
+ pushdownSchemaKeys,
1011
+ pushdownPruneInheritance,
1012
+ pushdownPruneTransactions,
1013
+ pushdownFileIds,
1014
+ pushdownEntityIds,
1015
+ pushdownVersionIds,
1016
+ pushdownSnapshotFilters
1017
+ );
1018
+ if (rewritten === select.with_clause) {
1019
+ return select;
1020
+ }
1021
+ return {
1022
+ ...select,
1023
+ with_clause: rewritten,
1024
+ };
1025
+ }
1026
+
1027
+ function rewriteWithClauseNode(
1028
+ withClause: WithClauseNode,
1029
+ context: PreprocessorStepContext,
1030
+ predicateMap: Map<string, SubqueryPredicateMetadata>,
1031
+ pushdownSchemaKeys: readonly string[],
1032
+ pushdownPruneInheritance: boolean,
1033
+ pushdownPruneTransactions: boolean,
1034
+ pushdownFileIds: readonly string[],
1035
+ pushdownEntityIds: readonly string[],
1036
+ pushdownVersionIds: readonly string[],
1037
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[]
1038
+ ): WithClauseNode {
1039
+ let changed = false;
1040
+ const rewrittenCtes = withClause.ctes.map((cte) => {
1041
+ const cteName = normalizeIdentifierValue(cte.name.value);
1042
+ const metadata = cteName ? predicateMap.get(cteName) : undefined;
1043
+ const nextSchemaKeys = metadata?.schemaKeys ?? pushdownSchemaKeys;
1044
+ const nextPrune = metadata?.pruneInheritance ?? pushdownPruneInheritance;
1045
+ const nextPruneTransactions =
1046
+ metadata?.pruneTransactionSegment ?? pushdownPruneTransactions;
1047
+ const nextFileIds = metadata?.fileIds ?? pushdownFileIds;
1048
+ const nextEntityIds = metadata?.entityIds ?? pushdownEntityIds;
1049
+ const nextVersionIds = metadata?.versionIds ?? pushdownVersionIds;
1050
+ const nextSnapshotFilters =
1051
+ metadata?.snapshotFilters ?? pushdownSnapshotFilters;
1052
+ const statement =
1053
+ cte.statement.node_kind === "compound_select"
1054
+ ? rewriteCompoundSelect(
1055
+ cte.statement,
1056
+ context,
1057
+ nextSchemaKeys,
1058
+ nextPrune,
1059
+ nextPruneTransactions,
1060
+ nextFileIds,
1061
+ nextEntityIds,
1062
+ nextVersionIds,
1063
+ nextSnapshotFilters
1064
+ )
1065
+ : rewriteSelectStatement(
1066
+ cte.statement,
1067
+ context,
1068
+ nextSchemaKeys,
1069
+ nextPrune,
1070
+ nextPruneTransactions,
1071
+ nextFileIds,
1072
+ nextEntityIds,
1073
+ nextVersionIds,
1074
+ nextSnapshotFilters
1075
+ );
1076
+ if (statement !== cte.statement) {
1077
+ changed = true;
1078
+ return {
1079
+ ...cte,
1080
+ statement,
1081
+ };
1082
+ }
1083
+ return cte;
1084
+ });
1085
+ if (!changed) {
1086
+ return withClause;
1087
+ }
1088
+ return {
1089
+ ...withClause,
1090
+ ctes: rewrittenCtes,
1091
+ };
1092
+ }
1093
+
1094
+ function buildInlineMetadata(
1095
+ select: SelectStatementNode,
1096
+ references: readonly TableReferenceInfo[],
1097
+ parameters: ReadonlyArray<unknown>,
1098
+ pushdownSchemaKeys: readonly string[],
1099
+ pushdownPruneInheritance: boolean,
1100
+ pushdownPruneTransactions: boolean,
1101
+ pushdownFileIds: readonly string[],
1102
+ pushdownEntityIds: readonly string[],
1103
+ pushdownVersionIds: readonly string[],
1104
+ pushdownSnapshotFilters: readonly SnapshotJsonPredicate[]
1105
+ ): Map<string, InlineRewriteMetadata> {
1106
+ const metadata = new Map<string, InlineRewriteMetadata>();
1107
+ for (const reference of references) {
1108
+ const aliasKey = reference.normalizedAlias ?? DEFAULT_ALIAS_KEY;
1109
+ if (metadata.has(aliasKey)) {
1110
+ continue;
1111
+ }
1112
+ const tableNames = new Set<string>([
1113
+ aliasKey,
1114
+ DEFAULT_ALIAS_KEY,
1115
+ ORIGINAL_TABLE_KEY,
1116
+ ]);
1117
+ const summary = collectSchemaKeyPredicates(
1118
+ select.where_clause,
1119
+ tableNames,
1120
+ parameters
1121
+ );
1122
+ const schemaKeys = mergeStringLiterals(
1123
+ pushdownSchemaKeys,
1124
+ summary.literals
1125
+ );
1126
+ const fileSummary = collectFileIdPredicates(
1127
+ select.where_clause,
1128
+ tableNames,
1129
+ parameters
1130
+ );
1131
+ const mergedFileIds = mergeStringLiterals(
1132
+ pushdownFileIds,
1133
+ fileSummary.literals
1134
+ );
1135
+ const entitySummary = collectEntityIdPredicates(
1136
+ select.where_clause,
1137
+ tableNames,
1138
+ parameters
1139
+ );
1140
+ const mergedEntityIds = mergeStringLiterals(
1141
+ pushdownEntityIds,
1142
+ entitySummary.literals
1143
+ );
1144
+ const versionSummary = collectVersionIdPredicates(
1145
+ select.where_clause,
1146
+ tableNames,
1147
+ parameters
1148
+ );
1149
+ const mergedVersionIds = mergeStringLiterals(
1150
+ pushdownVersionIds,
1151
+ versionSummary.literals
1152
+ );
1153
+ const snapshotSummary = collectSnapshotJsonPredicates(
1154
+ select.where_clause,
1155
+ tableNames,
1156
+ parameters
1157
+ );
1158
+ const mergedSnapshotFilters = mergeSnapshotFilters(
1159
+ pushdownSnapshotFilters,
1160
+ snapshotSummary
1161
+ );
1162
+ const fileIds = shouldPushFileFilter(schemaKeys, mergedFileIds)
1163
+ ? mergedFileIds
1164
+ : [];
1165
+ const entityIds = shouldPushEntityFilter(schemaKeys, mergedEntityIds)
1166
+ ? mergedEntityIds
1167
+ : [];
1168
+ const columnSummary = collectSelectedColumns(select, tableNames);
1169
+ const snapshotFilters = shouldPushSnapshotFilters(
1170
+ schemaKeys,
1171
+ mergedSnapshotFilters
1172
+ )
1173
+ ? mergedSnapshotFilters
1174
+ : [];
1175
+ const pruneInheritance =
1176
+ pushdownPruneInheritance ||
1177
+ shouldPruneInheritance(select.where_clause, tableNames, parameters);
1178
+ const pruneTransactionSegment =
1179
+ pushdownPruneTransactions ||
1180
+ shouldPruneTransactionSegment(
1181
+ select.where_clause,
1182
+ tableNames,
1183
+ parameters
1184
+ );
1185
+ metadata.set(aliasKey, {
1186
+ schemaKeys,
1187
+ fileIds,
1188
+ entityIds,
1189
+ snapshotFilters,
1190
+ versionIds: mergedVersionIds,
1191
+ selectedColumns: columnSummary.selectedColumns,
1192
+ hiddenColumns: new Set(columnSummary.requestedHiddenColumns),
1193
+ supportColumns: new Set(columnSummary.supportColumns),
1194
+ pruneInheritance,
1195
+ pruneTransactionSegment,
1196
+ });
1197
+ }
1198
+ return metadata;
1199
+ }
1200
+
1201
+ function shouldPruneInheritance(
1202
+ whereClause: SelectStatementNode["where_clause"],
1203
+ tableNames: Set<string>,
1204
+ parameters: ReadonlyArray<unknown>
1205
+ ): boolean {
1206
+ return requiresNullPredicateForColumn(
1207
+ whereClause,
1208
+ tableNames,
1209
+ parameters,
1210
+ true
1211
+ );
1212
+ }
1213
+
1214
+ function shouldPruneTransactionSegment(
1215
+ whereClause: SelectStatementNode["where_clause"],
1216
+ tableNames: Set<string>,
1217
+ parameters: ReadonlyArray<unknown>
1218
+ ): boolean {
1219
+ return excludesColumnLiteralFromExpression(
1220
+ whereClause,
1221
+ tableNames,
1222
+ parameters,
1223
+ "source_tag",
1224
+ "T",
1225
+ true
1226
+ );
1227
+ }
1228
+
1229
+ function requiresNullPredicateForColumn(
1230
+ expression: ExpressionNode | RawFragmentNode | null,
1231
+ tableNames: Set<string>,
1232
+ parameters: ReadonlyArray<unknown>,
1233
+ allowUnqualified: boolean
1234
+ ): boolean {
1235
+ if (!expression) {
1236
+ return false;
1237
+ }
1238
+ const context: PredicateVisitContext = {
1239
+ tableNames,
1240
+ parameters,
1241
+ allowUnqualified,
1242
+ };
1243
+ return expressionRequiresNullForColumn(
1244
+ expression,
1245
+ "inherited_from_version_id",
1246
+ context
1247
+ );
1248
+ }
1249
+
1250
+ function excludesColumnLiteralFromExpression(
1251
+ expression: ExpressionNode | RawFragmentNode | null,
1252
+ tableNames: Set<string>,
1253
+ parameters: ReadonlyArray<unknown>,
1254
+ columnName: string,
1255
+ literal: string,
1256
+ allowUnqualified: boolean
1257
+ ): boolean {
1258
+ if (!expression) {
1259
+ return false;
1260
+ }
1261
+ const context: PredicateVisitContext = {
1262
+ tableNames,
1263
+ parameters,
1264
+ allowUnqualified,
1265
+ };
1266
+ return expressionExcludesColumnLiteral(
1267
+ expression,
1268
+ columnName,
1269
+ literal,
1270
+ context
1271
+ );
1272
+ }
1273
+
1274
+ function expressionExcludesColumnLiteral(
1275
+ expression: ExpressionNode | RawFragmentNode,
1276
+ columnName: string,
1277
+ literal: string,
1278
+ context: PredicateVisitContext
1279
+ ): boolean {
1280
+ if ("sql_text" in expression) {
1281
+ return false;
1282
+ }
1283
+ switch (expression.node_kind) {
1284
+ case "grouped_expression":
1285
+ return expressionExcludesColumnLiteral(
1286
+ expression.expression,
1287
+ columnName,
1288
+ literal,
1289
+ context
1290
+ );
1291
+ case "binary_expression":
1292
+ if (expression.operator === "and") {
1293
+ return (
1294
+ expressionExcludesColumnLiteral(
1295
+ expression.left,
1296
+ columnName,
1297
+ literal,
1298
+ context
1299
+ ) ||
1300
+ expressionExcludesColumnLiteral(
1301
+ expression.right,
1302
+ columnName,
1303
+ literal,
1304
+ context
1305
+ )
1306
+ );
1307
+ }
1308
+ if (expression.operator === "or") {
1309
+ return (
1310
+ expressionExcludesColumnLiteral(
1311
+ expression.left,
1312
+ columnName,
1313
+ literal,
1314
+ context
1315
+ ) &&
1316
+ expressionExcludesColumnLiteral(
1317
+ expression.right,
1318
+ columnName,
1319
+ literal,
1320
+ context
1321
+ )
1322
+ );
1323
+ }
1324
+ return (
1325
+ columnComparisonExcludes(
1326
+ expression,
1327
+ expression.left,
1328
+ expression.right,
1329
+ columnName,
1330
+ literal,
1331
+ context
1332
+ ) ||
1333
+ columnComparisonExcludes(
1334
+ expression,
1335
+ expression.right,
1336
+ expression.left,
1337
+ columnName,
1338
+ literal,
1339
+ context
1340
+ )
1341
+ );
1342
+ case "in_list_expression": {
1343
+ if (!isColumnReference(expression.operand, context, columnName)) {
1344
+ return false;
1345
+ }
1346
+ const values = expression.items
1347
+ .map((item) => extractStringLiteral(item, context))
1348
+ .filter((value): value is string => typeof value === "string");
1349
+ if (values.length === 0) {
1350
+ return false;
1351
+ }
1352
+ if (expression.negated) {
1353
+ return values.includes(literal);
1354
+ }
1355
+ return !values.includes(literal);
1356
+ }
1357
+ default:
1358
+ return false;
1359
+ }
1360
+ }
1361
+
1362
+ function columnComparisonExcludes(
1363
+ expression: BinaryExpressionNode,
1364
+ columnSide: ExpressionNode | RawFragmentNode,
1365
+ valueSide: ExpressionNode | RawFragmentNode,
1366
+ columnName: string,
1367
+ literal: string,
1368
+ context: PredicateVisitContext
1369
+ ): boolean {
1370
+ if (!isColumnReference(columnSide, context, columnName)) {
1371
+ return false;
1372
+ }
1373
+ const value = extractStringLiteral(valueSide, context);
1374
+ if (typeof value !== "string") {
1375
+ return false;
1376
+ }
1377
+ switch (expression.operator) {
1378
+ case "=":
1379
+ case "is":
1380
+ return value !== literal;
1381
+ case "!=":
1382
+ case "<>":
1383
+ case "is_not":
1384
+ return value === literal;
1385
+ default:
1386
+ return false;
1387
+ }
1388
+ }
1389
+
1390
+ function extractStringLiteral(
1391
+ expression: ExpressionNode | RawFragmentNode,
1392
+ context: PredicateVisitContext
1393
+ ): string | null {
1394
+ const node = unwrapExpression(expression);
1395
+ if ("sql_text" in node) {
1396
+ return null;
1397
+ }
1398
+ if (node.node_kind === "literal") {
1399
+ return typeof node.value === "string" ? node.value : null;
1400
+ }
1401
+ if (node.node_kind === "parameter") {
1402
+ return resolveParameterSchemaLiteral(node, context.parameters);
1403
+ }
1404
+ return null;
1405
+ }
1406
+
1407
+ function createInlineVisitor(
1408
+ metadata: Map<string, InlineRewriteMetadata>,
1409
+ context: PreprocessorStepContext
1410
+ ): AstVisitor {
1411
+ return {
1412
+ table_reference(node: TableReferenceNode) {
1413
+ if (!isInternalStateTable(node)) {
1414
+ return;
1415
+ }
1416
+ const aliasValue = getIdentifierValue(node.alias);
1417
+ const aliasKey = aliasValue
1418
+ ? normalizeIdentifierValue(aliasValue)
1419
+ : DEFAULT_ALIAS_KEY;
1420
+ const metadataEntry = metadata.get(aliasKey);
1421
+ if (!metadataEntry) {
1422
+ return;
1423
+ }
1424
+ const aliasForSql =
1425
+ aliasValue ??
1426
+ getIdentifierValue(node.name.parts.at(-1) ?? null) ??
1427
+ INTERNAL_STATE_VTABLE;
1428
+ const inlineSql = buildVtableSelectRewrite({
1429
+ schemaKeys: metadataEntry.schemaKeys,
1430
+ fileIds: metadataEntry.fileIds,
1431
+ entityIds: metadataEntry.entityIds,
1432
+ snapshotFilters: metadataEntry.snapshotFilters,
1433
+ versionIds: metadataEntry.versionIds,
1434
+ cacheTables: context.getCacheTables!(),
1435
+ selectedColumns: metadataEntry.selectedColumns,
1436
+ hiddenColumns: metadataEntry.hiddenColumns,
1437
+ supportColumns: metadataEntry.supportColumns,
1438
+ hasOpenTransaction: context.hasOpenTransaction!(),
1439
+ pruneInheritance: metadataEntry.pruneInheritance,
1440
+ pruneTransactionSegment: metadataEntry.pruneTransactionSegment,
1441
+ versionInheritance: context.getVersionInheritance
1442
+ ? context.getVersionInheritance()
1443
+ : undefined,
1444
+ }).trimEnd();
1445
+ const fragment: RawFragmentNode = {
1446
+ node_kind: "raw_fragment",
1447
+ sql_text: `${inlineSql} AS ${quoteIdentifier(aliasForSql)}`,
1448
+ };
1449
+ return fragment;
1450
+ },
1451
+ };
1452
+ }
1453
+
1454
+ function collectSchemaKeyPredicates(
1455
+ whereClause: SelectStatementNode["where_clause"],
1456
+ tableNames: Set<string>,
1457
+ parameters: ReadonlyArray<unknown>,
1458
+ allowUnqualified = true
1459
+ ): ColumnPredicateSummary {
1460
+ return collectColumnPredicates(
1461
+ whereClause,
1462
+ tableNames,
1463
+ parameters,
1464
+ "schema_key",
1465
+ allowUnqualified
1466
+ );
1467
+ }
1468
+
1469
+ function collectSchemaKeyPredicatesFromExpression(
1470
+ expression: ExpressionNode | RawFragmentNode | null,
1471
+ tableNames: Set<string>,
1472
+ parameters: ReadonlyArray<unknown>,
1473
+ allowUnqualified: boolean
1474
+ ): ColumnPredicateSummary {
1475
+ return collectColumnPredicatesFromExpression(
1476
+ expression,
1477
+ tableNames,
1478
+ parameters,
1479
+ "schema_key",
1480
+ allowUnqualified
1481
+ );
1482
+ }
1483
+
1484
+ function collectFileIdPredicates(
1485
+ whereClause: SelectStatementNode["where_clause"],
1486
+ tableNames: Set<string>,
1487
+ parameters: ReadonlyArray<unknown>,
1488
+ allowUnqualified = true
1489
+ ): ColumnPredicateSummary {
1490
+ return collectColumnPredicates(
1491
+ whereClause,
1492
+ tableNames,
1493
+ parameters,
1494
+ "file_id",
1495
+ allowUnqualified
1496
+ );
1497
+ }
1498
+
1499
+ function collectFileIdPredicatesFromExpression(
1500
+ expression: ExpressionNode | RawFragmentNode | null,
1501
+ tableNames: Set<string>,
1502
+ parameters: ReadonlyArray<unknown>,
1503
+ allowUnqualified: boolean
1504
+ ): ColumnPredicateSummary {
1505
+ return collectColumnPredicatesFromExpression(
1506
+ expression,
1507
+ tableNames,
1508
+ parameters,
1509
+ "file_id",
1510
+ allowUnqualified
1511
+ );
1512
+ }
1513
+
1514
+ function collectEntityIdPredicates(
1515
+ whereClause: SelectStatementNode["where_clause"],
1516
+ tableNames: Set<string>,
1517
+ parameters: ReadonlyArray<unknown>,
1518
+ allowUnqualified = true
1519
+ ): ColumnPredicateSummary {
1520
+ return collectColumnPredicates(
1521
+ whereClause,
1522
+ tableNames,
1523
+ parameters,
1524
+ "entity_id",
1525
+ allowUnqualified
1526
+ );
1527
+ }
1528
+
1529
+ function collectEntityIdPredicatesFromExpression(
1530
+ expression: ExpressionNode | RawFragmentNode | null,
1531
+ tableNames: Set<string>,
1532
+ parameters: ReadonlyArray<unknown>,
1533
+ allowUnqualified: boolean
1534
+ ): ColumnPredicateSummary {
1535
+ return collectColumnPredicatesFromExpression(
1536
+ expression,
1537
+ tableNames,
1538
+ parameters,
1539
+ "entity_id",
1540
+ allowUnqualified
1541
+ );
1542
+ }
1543
+
1544
+ function collectVersionIdPredicates(
1545
+ whereClause: SelectStatementNode["where_clause"],
1546
+ tableNames: Set<string>,
1547
+ parameters: ReadonlyArray<unknown>,
1548
+ allowUnqualified = true
1549
+ ): ColumnPredicateSummary {
1550
+ return collectColumnPredicates(
1551
+ whereClause,
1552
+ tableNames,
1553
+ parameters,
1554
+ "version_id",
1555
+ allowUnqualified
1556
+ );
1557
+ }
1558
+
1559
+ function collectVersionIdPredicatesFromExpression(
1560
+ expression: ExpressionNode | RawFragmentNode | null,
1561
+ tableNames: Set<string>,
1562
+ parameters: ReadonlyArray<unknown>,
1563
+ allowUnqualified: boolean
1564
+ ): ColumnPredicateSummary {
1565
+ return collectColumnPredicatesFromExpression(
1566
+ expression,
1567
+ tableNames,
1568
+ parameters,
1569
+ "version_id",
1570
+ allowUnqualified
1571
+ );
1572
+ }
1573
+
1574
+ function collectSnapshotJsonPredicates(
1575
+ whereClause: SelectStatementNode["where_clause"],
1576
+ tableNames: Set<string>,
1577
+ parameters: ReadonlyArray<unknown>,
1578
+ allowUnqualified = true
1579
+ ): SnapshotJsonPredicate[] {
1580
+ if (!whereClause) {
1581
+ return [];
1582
+ }
1583
+ const context: PredicateVisitContext = {
1584
+ tableNames,
1585
+ parameters,
1586
+ allowUnqualified,
1587
+ };
1588
+ const summary: SnapshotPredicateAccumulator = new Map();
1589
+ collectSnapshotPredicatesFromExpression(whereClause, context, summary);
1590
+ return snapshotSummaryToPredicates(summary);
1591
+ }
1592
+
1593
+ function collectSnapshotJsonPredicatesFromExpression(
1594
+ expression: ExpressionNode | RawFragmentNode | null,
1595
+ tableNames: Set<string>,
1596
+ parameters: ReadonlyArray<unknown>,
1597
+ allowUnqualified: boolean
1598
+ ): SnapshotJsonPredicate[] {
1599
+ if (!expression) {
1600
+ return [];
1601
+ }
1602
+ const context: PredicateVisitContext = {
1603
+ tableNames,
1604
+ parameters,
1605
+ allowUnqualified,
1606
+ };
1607
+ const summary: SnapshotPredicateAccumulator = new Map();
1608
+ collectSnapshotPredicatesFromExpression(expression, context, summary);
1609
+ return snapshotSummaryToPredicates(summary);
1610
+ }
1611
+
1612
+ function collectSnapshotPredicatesFromExpression(
1613
+ expression: ExpressionNode | RawFragmentNode,
1614
+ context: PredicateVisitContext,
1615
+ summary: SnapshotPredicateAccumulator
1616
+ ): void {
1617
+ if ("sql_text" in expression) {
1618
+ return;
1619
+ }
1620
+ switch (expression.node_kind) {
1621
+ case "grouped_expression":
1622
+ collectSnapshotPredicatesFromExpression(
1623
+ expression.expression,
1624
+ context,
1625
+ summary
1626
+ );
1627
+ return;
1628
+ case "binary_expression": {
1629
+ if (isLogicalOperator(expression.operator)) {
1630
+ collectSnapshotPredicatesFromExpression(
1631
+ expression.left,
1632
+ context,
1633
+ summary
1634
+ );
1635
+ collectSnapshotPredicatesFromExpression(
1636
+ expression.right,
1637
+ context,
1638
+ summary
1639
+ );
1640
+ return;
1641
+ }
1642
+ if (!isEqualityOperator(expression.operator)) {
1643
+ return;
1644
+ }
1645
+ const leftPath = extractSnapshotJsonPath(expression.left, context);
1646
+ if (leftPath) {
1647
+ incrementSnapshotSummaryWithOperand(
1648
+ summary,
1649
+ leftPath,
1650
+ expression.right,
1651
+ context
1652
+ );
1653
+ }
1654
+ const rightPath = extractSnapshotJsonPath(expression.right, context);
1655
+ if (rightPath) {
1656
+ incrementSnapshotSummaryWithOperand(
1657
+ summary,
1658
+ rightPath,
1659
+ expression.left,
1660
+ context
1661
+ );
1662
+ }
1663
+ return;
1664
+ }
1665
+ case "in_list_expression": {
1666
+ if (expression.negated) {
1667
+ return;
1668
+ }
1669
+ const path = extractSnapshotJsonPath(expression.operand, context);
1670
+ if (!path) {
1671
+ return;
1672
+ }
1673
+ for (const item of expression.items) {
1674
+ incrementSnapshotSummaryWithOperand(summary, path, item, context);
1675
+ }
1676
+ return;
1677
+ }
1678
+ case "unary_expression":
1679
+ collectSnapshotPredicatesFromExpression(
1680
+ expression.operand,
1681
+ context,
1682
+ summary
1683
+ );
1684
+ return;
1685
+ default:
1686
+ return;
1687
+ }
1688
+ }
1689
+
1690
+ function incrementSnapshotSummaryWithOperand(
1691
+ summary: SnapshotPredicateAccumulator,
1692
+ path: string,
1693
+ operand: ExpressionNode | RawFragmentNode,
1694
+ context: PredicateVisitContext
1695
+ ): void {
1696
+ const value = extractStringLiteral(operand, context);
1697
+ if (typeof value !== "string") {
1698
+ return;
1699
+ }
1700
+ const existing = summary.get(path) ?? new Set<string>();
1701
+ existing.add(value);
1702
+ summary.set(path, existing);
1703
+ }
1704
+
1705
+ function snapshotSummaryToPredicates(
1706
+ summary: SnapshotPredicateAccumulator
1707
+ ): SnapshotJsonPredicate[] {
1708
+ return Array.from(summary.entries()).map(([path, values]) => ({
1709
+ path,
1710
+ values: Array.from(values),
1711
+ }));
1712
+ }
1713
+
1714
+ function extractSnapshotJsonPath(
1715
+ expression: ExpressionNode | RawFragmentNode,
1716
+ context: PredicateVisitContext
1717
+ ): string | null {
1718
+ const node = unwrapExpression(expression);
1719
+ if ("sql_text" in node) {
1720
+ return null;
1721
+ }
1722
+ switch (node.node_kind) {
1723
+ case "grouped_expression":
1724
+ return extractSnapshotJsonPath(node.expression, context);
1725
+ case "function_call": {
1726
+ const functionName = node.name.value.toLowerCase();
1727
+ if (functionName !== "json_extract") {
1728
+ return null;
1729
+ }
1730
+ const [targetArg, pathArg] = node.arguments;
1731
+ if (
1732
+ !targetArg ||
1733
+ !pathArg ||
1734
+ targetArg.node_kind === "all_columns" ||
1735
+ pathArg.node_kind === "all_columns"
1736
+ ) {
1737
+ return null;
1738
+ }
1739
+ const referencedColumn = resolveReferencedColumn(
1740
+ targetArg as ExpressionNode | RawFragmentNode,
1741
+ context
1742
+ );
1743
+ if (referencedColumn !== "snapshot_content") {
1744
+ return null;
1745
+ }
1746
+ return extractLiteralString(
1747
+ pathArg as ExpressionNode | RawFragmentNode,
1748
+ context.parameters
1749
+ );
1750
+ }
1751
+ default:
1752
+ return null;
1753
+ }
1754
+ }
1755
+
1756
+ function collectColumnPredicates(
1757
+ whereClause: SelectStatementNode["where_clause"],
1758
+ tableNames: Set<string>,
1759
+ parameters: ReadonlyArray<unknown>,
1760
+ columnName: string,
1761
+ allowUnqualified = true
1762
+ ): ColumnPredicateSummary {
1763
+ if (!whereClause) {
1764
+ return { count: 0, literals: [] };
1765
+ }
1766
+ const context: PredicateVisitContext = {
1767
+ tableNames,
1768
+ parameters,
1769
+ allowUnqualified,
1770
+ };
1771
+ return visitExpression(whereClause, context, columnName);
1772
+ }
1773
+
1774
+ function collectColumnPredicatesFromExpression(
1775
+ expression: ExpressionNode | RawFragmentNode | null,
1776
+ tableNames: Set<string>,
1777
+ parameters: ReadonlyArray<unknown>,
1778
+ columnName: string,
1779
+ allowUnqualified: boolean
1780
+ ): ColumnPredicateSummary {
1781
+ if (!expression) {
1782
+ return { count: 0, literals: [] };
1783
+ }
1784
+ const context: PredicateVisitContext = {
1785
+ tableNames,
1786
+ parameters,
1787
+ allowUnqualified,
1788
+ };
1789
+ return visitExpression(expression, context, columnName);
1790
+ }
1791
+
1792
+ function expressionRequiresNullForColumn(
1793
+ expression: ExpressionNode | RawFragmentNode,
1794
+ columnName: string,
1795
+ context: PredicateVisitContext
1796
+ ): boolean {
1797
+ if ("sql_text" in expression) {
1798
+ return false;
1799
+ }
1800
+ switch (expression.node_kind) {
1801
+ case "grouped_expression":
1802
+ return expressionRequiresNullForColumn(
1803
+ expression.expression,
1804
+ columnName,
1805
+ context
1806
+ );
1807
+ case "binary_expression":
1808
+ if (expression.operator === "and") {
1809
+ return (
1810
+ expressionRequiresNullForColumn(
1811
+ expression.left,
1812
+ columnName,
1813
+ context
1814
+ ) ||
1815
+ expressionRequiresNullForColumn(expression.right, columnName, context)
1816
+ );
1817
+ }
1818
+ if (expression.operator === "or") {
1819
+ return (
1820
+ expressionRequiresNullForColumn(
1821
+ expression.left,
1822
+ columnName,
1823
+ context
1824
+ ) &&
1825
+ expressionRequiresNullForColumn(expression.right, columnName, context)
1826
+ );
1827
+ }
1828
+ if (expression.operator === "is") {
1829
+ const leftMatches = isColumnReference(
1830
+ expression.left,
1831
+ context,
1832
+ columnName
1833
+ );
1834
+ const rightMatches = isColumnReference(
1835
+ expression.right,
1836
+ context,
1837
+ columnName
1838
+ );
1839
+ if (
1840
+ (leftMatches &&
1841
+ isNullLiteralExpression(expression.right, context.parameters)) ||
1842
+ (rightMatches &&
1843
+ isNullLiteralExpression(expression.left, context.parameters))
1844
+ ) {
1845
+ return true;
1846
+ }
1847
+ }
1848
+ return false;
1849
+ default:
1850
+ return false;
1851
+ }
1852
+ }
1853
+
1854
+ function visitExpression(
1855
+ expression: ExpressionNode | RawFragmentNode,
1856
+ context: PredicateVisitContext,
1857
+ columnName: string
1858
+ ): ColumnPredicateSummary {
1859
+ if ("sql_text" in expression) {
1860
+ return { count: 0, literals: [] };
1861
+ }
1862
+
1863
+ switch (expression.node_kind) {
1864
+ case "grouped_expression":
1865
+ return visitExpression(expression.expression, context, columnName);
1866
+ case "binary_expression":
1867
+ return visitBinaryExpression(expression, context, columnName);
1868
+ case "unary_expression":
1869
+ return visitExpression(expression.operand, context, columnName);
1870
+ case "in_list_expression":
1871
+ return visitInListExpression(expression, context, columnName);
1872
+ case "between_expression":
1873
+ return visitBetweenExpression(expression, context, columnName);
1874
+ case "column_reference":
1875
+ case "literal":
1876
+ case "parameter":
1877
+ default:
1878
+ return { count: 0, literals: [] };
1879
+ }
1880
+ }
1881
+
1882
+ function visitBinaryExpression(
1883
+ expression: BinaryExpressionNode,
1884
+ context: PredicateVisitContext,
1885
+ columnName: string
1886
+ ): ColumnPredicateSummary {
1887
+ if (isLogicalOperator(expression.operator)) {
1888
+ return mergeSummaries(
1889
+ visitExpression(expression.left, context, columnName),
1890
+ visitExpression(expression.right, context, columnName)
1891
+ );
1892
+ }
1893
+
1894
+ if (!isEqualityOperator(expression.operator)) {
1895
+ return { count: 0, literals: [] };
1896
+ }
1897
+
1898
+ let summary: ColumnPredicateSummary = {
1899
+ count: 0,
1900
+ literals: [],
1901
+ };
1902
+
1903
+ const leftMatches = isColumnReference(expression.left, context, columnName);
1904
+ const rightMatches = isColumnReference(expression.right, context, columnName);
1905
+
1906
+ if (leftMatches) {
1907
+ summary = incrementSummaryWithOperand(summary, expression.right, context);
1908
+ }
1909
+ if (rightMatches) {
1910
+ summary = incrementSummaryWithOperand(summary, expression.left, context);
1911
+ }
1912
+
1913
+ return summary;
1914
+ }
1915
+
1916
+ function visitInListExpression(
1917
+ expression: InListExpressionNode,
1918
+ context: PredicateVisitContext,
1919
+ columnName: string
1920
+ ): ColumnPredicateSummary {
1921
+ if (!isColumnReference(expression.operand, context, columnName)) {
1922
+ return { count: 0, literals: [] };
1923
+ }
1924
+ let summary: ColumnPredicateSummary = {
1925
+ count: 1,
1926
+ literals: [],
1927
+ };
1928
+ for (const item of expression.items) {
1929
+ summary = incrementSummaryWithOperand(summary, item, context);
1930
+ }
1931
+ return summary;
1932
+ }
1933
+
1934
+ function visitBetweenExpression(
1935
+ expression: BetweenExpressionNode,
1936
+ context: PredicateVisitContext,
1937
+ columnName: string
1938
+ ): ColumnPredicateSummary {
1939
+ if (!isColumnReference(expression.operand, context, columnName)) {
1940
+ return { count: 0, literals: [] };
1941
+ }
1942
+ let summary: ColumnPredicateSummary = {
1943
+ count: 1,
1944
+ literals: [],
1945
+ };
1946
+ summary = incrementSummaryWithOperand(summary, expression.start, context);
1947
+ summary = incrementSummaryWithOperand(summary, expression.end, context);
1948
+ return summary;
1949
+ }
1950
+
1951
+ function incrementSummaryWithOperand(
1952
+ summary: ColumnPredicateSummary,
1953
+ operand: ExpressionNode | RawFragmentNode,
1954
+ context: PredicateVisitContext
1955
+ ): ColumnPredicateSummary {
1956
+ const next = { ...summary };
1957
+ const node = unwrapExpression(operand);
1958
+ switch (node.node_kind) {
1959
+ case "literal":
1960
+ if (typeof node.value === "string") {
1961
+ next.literals.push(node.value);
1962
+ }
1963
+ break;
1964
+ case "parameter": {
1965
+ const resolved = resolveParameterSchemaLiteral(node, context.parameters);
1966
+ if (typeof resolved === "string") {
1967
+ next.literals.push(resolved);
1968
+ }
1969
+ break;
1970
+ }
1971
+ default:
1972
+ break;
1973
+ }
1974
+ next.count += 1;
1975
+ return next;
1976
+ }
1977
+
1978
+ function isNullLiteralExpression(
1979
+ expression: ExpressionNode | RawFragmentNode,
1980
+ parameters: ReadonlyArray<unknown>
1981
+ ): boolean {
1982
+ const node = unwrapExpression(expression);
1983
+ if ("sql_text" in node) {
1984
+ return false;
1985
+ }
1986
+ if (node.node_kind === "literal") {
1987
+ return node.value === null;
1988
+ }
1989
+ if (node.node_kind === "parameter") {
1990
+ return resolveParameterValue(node, parameters) === null;
1991
+ }
1992
+ return false;
1993
+ }
1994
+
1995
+ function resolveParameterSchemaLiteral(
1996
+ parameter: ParameterExpressionNode,
1997
+ parameters: ReadonlyArray<unknown>
1998
+ ): string | null {
1999
+ const value = resolveParameterValue(parameter, parameters);
2000
+ return typeof value === "string" ? value : null;
2001
+ }
2002
+
2003
+ function resolveParameterValue(
2004
+ parameter: ParameterExpressionNode,
2005
+ parameters: ReadonlyArray<unknown>
2006
+ ): unknown {
2007
+ const index = parameter.position;
2008
+ if (typeof index === "number" && index >= 0 && index < parameters.length) {
2009
+ return parameters[index];
2010
+ }
2011
+ return undefined;
2012
+ }
2013
+
2014
+ function unwrapExpression(
2015
+ expression: ExpressionNode | RawFragmentNode
2016
+ ): ExpressionNode | RawFragmentNode {
2017
+ if ("sql_text" in expression) {
2018
+ return expression;
2019
+ }
2020
+ if (expression.node_kind === "grouped_expression") {
2021
+ return unwrapExpression(expression.expression);
2022
+ }
2023
+ return expression;
2024
+ }
2025
+
2026
+ function isColumnReference(
2027
+ expression: ExpressionNode | RawFragmentNode,
2028
+ context: PredicateVisitContext,
2029
+ expectedColumn: string
2030
+ ): boolean {
2031
+ const column = resolveReferencedColumn(expression, context);
2032
+ return column === expectedColumn;
2033
+ }
2034
+
2035
+ function resolveReferencedColumn(
2036
+ expression: ExpressionNode | RawFragmentNode,
2037
+ context: PredicateVisitContext
2038
+ ): string | null {
2039
+ if ("sql_text" in expression) {
2040
+ return null;
2041
+ }
2042
+ switch (expression.node_kind) {
2043
+ case "column_reference": {
2044
+ const qualifier = getColumnQualifier(expression);
2045
+ const columnName = getColumnName(expression);
2046
+ if (qualifier && context.tableNames.has(qualifier)) {
2047
+ return columnName;
2048
+ }
2049
+ if (!qualifier && context.allowUnqualified) {
2050
+ return columnName;
2051
+ }
2052
+ return null;
2053
+ }
2054
+ case "grouped_expression":
2055
+ return resolveReferencedColumn(expression.expression, context);
2056
+ case "function_call":
2057
+ return resolveColumnFromFunctionCall(expression, context);
2058
+ default:
2059
+ return null;
2060
+ }
2061
+ }
2062
+
2063
+ function resolveColumnFromFunctionCall(
2064
+ expression: Extract<ExpressionNode, { node_kind: "function_call" }>,
2065
+ context: PredicateVisitContext
2066
+ ): string | null {
2067
+ const functionName = expression.name.value.toLowerCase();
2068
+ if (functionName !== "json_extract") {
2069
+ return null;
2070
+ }
2071
+ const [target, pathArg] = expression.arguments;
2072
+ if (
2073
+ !target ||
2074
+ !pathArg ||
2075
+ target.node_kind === "all_columns" ||
2076
+ pathArg.node_kind === "all_columns"
2077
+ ) {
2078
+ return null;
2079
+ }
2080
+ const targetExpr = target as ExpressionNode | RawFragmentNode;
2081
+ const referencedColumn = resolveReferencedColumn(targetExpr, context);
2082
+ if (referencedColumn !== "snapshot_content") {
2083
+ return null;
2084
+ }
2085
+ if (!SNAPSHOT_ENTITY_FILTER_PUSH_ENABLED) {
2086
+ return null;
2087
+ }
2088
+ const pathExpression = pathArg as ExpressionNode | RawFragmentNode;
2089
+ const literalPath = extractLiteralString(pathExpression, context.parameters);
2090
+ if (!literalPath) {
2091
+ return null;
2092
+ }
2093
+ return mapSnapshotJsonColumnFromPath(literalPath);
2094
+ }
2095
+
2096
+ function extractLiteralString(
2097
+ expression: ExpressionNode | RawFragmentNode,
2098
+ parameters: ReadonlyArray<unknown>
2099
+ ): string | null {
2100
+ const node = unwrapExpression(expression);
2101
+ if ("sql_text" in node) {
2102
+ return null;
2103
+ }
2104
+ if (node.node_kind === "literal" && typeof node.value === "string") {
2105
+ return node.value;
2106
+ }
2107
+ if (node.node_kind === "parameter") {
2108
+ const value = resolveParameterValue(node, parameters);
2109
+ return typeof value === "string" ? value : null;
2110
+ }
2111
+ return null;
2112
+ }
2113
+
2114
+ /**
2115
+ * Maps recognized json_extract paths to their corresponding physical columns.
2116
+ *
2117
+ * @param path - JSON path literal extracted from a json_extract() call.
2118
+ * @returns The name of the backing column or null when the path is unsupported.
2119
+ *
2120
+ * @example
2121
+ * ```ts
2122
+ * mapSnapshotJsonColumnFromPath("$.id");
2123
+ * // => "entity_id"
2124
+ * ```
2125
+ */
2126
+ function mapSnapshotJsonColumnFromPath(path: string): string | null {
2127
+ const trimmed = path.trim();
2128
+ const candidates = new Set<string>([trimmed]);
2129
+ const unquoted = trimmed.replace(
2130
+ /\."([^"]+)"(?=\.|$)/g,
2131
+ (_, segment: string) => `.${segment}`
2132
+ );
2133
+ candidates.add(unquoted);
2134
+ for (const candidate of candidates) {
2135
+ if (SNAPSHOT_JSON_ENTITY_PATHS.has(candidate)) {
2136
+ return "entity_id";
2137
+ }
2138
+ }
2139
+ return null;
2140
+ }
2141
+
2142
+ function isLogicalOperator(
2143
+ operator: BinaryExpressionNode["operator"]
2144
+ ): boolean {
2145
+ return operator === "and" || operator === "or";
2146
+ }
2147
+
2148
+ function isEqualityOperator(
2149
+ operator: BinaryExpressionNode["operator"]
2150
+ ): boolean {
2151
+ return operator === "=" || operator === "is";
2152
+ }
2153
+
2154
+ function mergeSummaries(
2155
+ ...summaries: ColumnPredicateSummary[]
2156
+ ): ColumnPredicateSummary {
2157
+ return summaries.reduce<ColumnPredicateSummary>(
2158
+ (accumulator, current) => {
2159
+ accumulator.count += current.count;
2160
+ accumulator.literals.push(...current.literals);
2161
+ return accumulator;
2162
+ },
2163
+ { count: 0, literals: [] }
2164
+ );
2165
+ }
2166
+
2167
+ function mergeStringLiterals(
2168
+ ...lists: readonly (readonly string[])[]
2169
+ ): string[] {
2170
+ const seen = new Set<string>();
2171
+ const merged: string[] = [];
2172
+ for (const list of lists) {
2173
+ for (const item of list) {
2174
+ if (typeof item !== "string") {
2175
+ continue;
2176
+ }
2177
+ if (!seen.has(item)) {
2178
+ seen.add(item);
2179
+ merged.push(item);
2180
+ }
2181
+ }
2182
+ }
2183
+ return merged;
2184
+ }
2185
+
2186
+ function mergeSnapshotFilters(
2187
+ ...lists: readonly (readonly SnapshotJsonPredicate[] | undefined)[]
2188
+ ): SnapshotJsonPredicate[] {
2189
+ const merged = new Map<string, Set<string>>();
2190
+ for (const list of lists) {
2191
+ if (!list) {
2192
+ continue;
2193
+ }
2194
+ for (const entry of list) {
2195
+ if (!entry || typeof entry.path !== "string") {
2196
+ continue;
2197
+ }
2198
+ const valueSet = merged.get(entry.path) ?? new Set<string>();
2199
+ for (const value of entry.values ?? []) {
2200
+ if (typeof value === "string") {
2201
+ valueSet.add(value);
2202
+ }
2203
+ }
2204
+ if (valueSet.size > 0) {
2205
+ merged.set(entry.path, valueSet);
2206
+ }
2207
+ }
2208
+ }
2209
+ return Array.from(merged.entries()).map(([path, values]) => ({
2210
+ path,
2211
+ values: Array.from(values),
2212
+ }));
2213
+ }
2214
+
2215
+ function collectSelectedColumns(
2216
+ select: SelectStatementNode,
2217
+ tableNames: Set<string>
2218
+ ): ColumnSelectionSummary {
2219
+ const hiddenSelections = new Set<string>();
2220
+ const supportColumns = new Set<string>();
2221
+
2222
+ if (select.projection.length === 0) {
2223
+ return {
2224
+ selectedColumns: null,
2225
+ requestedHiddenColumns: hiddenSelections,
2226
+ supportColumns,
2227
+ };
2228
+ }
2229
+
2230
+ const order: string[] = [];
2231
+ const entries = new Map<string, SelectedProjection>();
2232
+ let hasUnresolvedProjection = false;
2233
+ let selectsAll = false;
2234
+
2235
+ for (const item of select.projection) {
2236
+ if (isSelectAllForTable(item, tableNames)) {
2237
+ selectsAll = true;
2238
+ continue;
2239
+ }
2240
+ if (item.node_kind !== "select_expression") {
2241
+ hasUnresolvedProjection = true;
2242
+ continue;
2243
+ }
2244
+ const columnName = extractColumnFromExpression(item.expression, tableNames);
2245
+ if (!columnName) {
2246
+ hasUnresolvedProjection = true;
2247
+ continue;
2248
+ }
2249
+ if (HIDDEN_SEGMENT_COLUMN_SET.has(columnName)) {
2250
+ hiddenSelections.add(columnName);
2251
+ }
2252
+ const alias = getIdentifierValue(item.alias);
2253
+ if (!entries.has(columnName)) {
2254
+ order.push(columnName);
2255
+ entries.set(columnName, {
2256
+ column: columnName,
2257
+ alias: alias ?? null,
2258
+ });
2259
+ } else if (alias) {
2260
+ const existing = entries.get(columnName)!;
2261
+ if (existing.alias === null) {
2262
+ entries.set(columnName, {
2263
+ column: columnName,
2264
+ alias,
2265
+ });
2266
+ }
2267
+ }
2268
+ }
2269
+
2270
+ const referenced = collectReferencedColumnSummary(select, tableNames);
2271
+ if (referenced.hasUnknownReferences) {
2272
+ hasUnresolvedProjection = true;
2273
+ }
2274
+
2275
+ for (const column of referenced.columns) {
2276
+ if (HIDDEN_SEGMENT_COLUMN_SET.has(column)) {
2277
+ hiddenSelections.add(column);
2278
+ }
2279
+ if (!entries.has(column)) {
2280
+ supportColumns.add(column);
2281
+ }
2282
+ }
2283
+
2284
+ if (hasUnresolvedProjection || selectsAll) {
2285
+ return {
2286
+ selectedColumns: null,
2287
+ requestedHiddenColumns: hiddenSelections,
2288
+ supportColumns,
2289
+ };
2290
+ }
2291
+
2292
+ return {
2293
+ selectedColumns: order.map((column) => entries.get(column)!),
2294
+ requestedHiddenColumns: hiddenSelections,
2295
+ supportColumns,
2296
+ };
2297
+ }
2298
+
2299
+ function collectReferencedColumnSummary(
2300
+ select: SelectStatementNode,
2301
+ tableNames: Set<string>
2302
+ ): {
2303
+ columns: Set<string>;
2304
+ hasUnknownReferences: boolean;
2305
+ } {
2306
+ const columns = new Set<string>();
2307
+ let hasUnknownReferences = false;
2308
+
2309
+ const visit = (expression: ExpressionNode | RawFragmentNode | null) => {
2310
+ if (hasUnknownReferences || !expression) {
2311
+ return;
2312
+ }
2313
+ if ("sql_text" in expression) {
2314
+ hasUnknownReferences = true;
2315
+ return;
2316
+ }
2317
+ switch (expression.node_kind) {
2318
+ case "column_reference": {
2319
+ const qualifier = getColumnQualifier(expression);
2320
+ if (qualifier && !tableNames.has(qualifier)) {
2321
+ return;
2322
+ }
2323
+ const columnName = getColumnName(expression);
2324
+ if (columnName) {
2325
+ columns.add(columnName);
2326
+ }
2327
+ return;
2328
+ }
2329
+ case "binary_expression":
2330
+ visit(expression.left);
2331
+ visit(expression.right);
2332
+ return;
2333
+ case "unary_expression":
2334
+ visit(expression.operand);
2335
+ return;
2336
+ case "grouped_expression":
2337
+ visit(expression.expression);
2338
+ return;
2339
+ case "function_call":
2340
+ for (const argument of expression.arguments) {
2341
+ if (argument.node_kind === "all_columns") {
2342
+ continue;
2343
+ }
2344
+ visit(argument);
2345
+ }
2346
+ return;
2347
+ case "in_list_expression":
2348
+ visit(expression.operand);
2349
+ for (const item of expression.items) {
2350
+ visit(item);
2351
+ }
2352
+ return;
2353
+ case "between_expression":
2354
+ visit(expression.operand);
2355
+ visit(expression.start);
2356
+ visit(expression.end);
2357
+ return;
2358
+ case "subquery_expression":
2359
+ hasUnknownReferences = true;
2360
+ return;
2361
+ case "literal":
2362
+ case "parameter":
2363
+ return;
2364
+ default:
2365
+ return;
2366
+ }
2367
+ };
2368
+
2369
+ visit(select.where_clause);
2370
+ for (const clause of select.from_clauses) {
2371
+ for (const join of clause.joins) {
2372
+ visit(join.on_expression);
2373
+ }
2374
+ }
2375
+ for (const order of select.order_by) {
2376
+ visit(order.expression);
2377
+ }
2378
+
2379
+ return { columns, hasUnknownReferences };
2380
+ }
2381
+
2382
+ function extractColumnFromExpression(
2383
+ expression: ExpressionNode | RawFragmentNode,
2384
+ tableNames: Set<string>
2385
+ ): string | null {
2386
+ if ("sql_text" in expression) {
2387
+ return null;
2388
+ }
2389
+ switch (expression.node_kind) {
2390
+ case "column_reference": {
2391
+ const qualifier = getColumnQualifier(expression);
2392
+ if (qualifier && !tableNames.has(qualifier)) {
2393
+ return null;
2394
+ }
2395
+ return getColumnName(expression);
2396
+ }
2397
+ case "grouped_expression":
2398
+ return extractColumnFromExpression(expression.expression, tableNames);
2399
+ case "function_call":
2400
+ return extractColumnFromFunctionCall(expression, tableNames);
2401
+ default:
2402
+ return null;
2403
+ }
2404
+ }
2405
+
2406
+ function extractColumnFromFunctionCall(
2407
+ expression: Extract<ExpressionNode, { node_kind: "function_call" }>,
2408
+ tableNames: Set<string>
2409
+ ): string | null {
2410
+ let referencedColumn: string | null = null;
2411
+ for (const argument of expression.arguments) {
2412
+ if (argument.node_kind === "all_columns") {
2413
+ return null;
2414
+ }
2415
+ const extracted = extractColumnFromExpression(argument, tableNames);
2416
+ if (extracted) {
2417
+ if (referencedColumn && referencedColumn !== extracted) {
2418
+ return null;
2419
+ }
2420
+ referencedColumn = extracted;
2421
+ continue;
2422
+ }
2423
+ if (!isLiteralOrParameter(argument)) {
2424
+ return null;
2425
+ }
2426
+ }
2427
+ return referencedColumn;
2428
+ }
2429
+
2430
+ function isLiteralOrParameter(
2431
+ expression: ExpressionNode | RawFragmentNode
2432
+ ): boolean {
2433
+ if ("sql_text" in expression) {
2434
+ return false;
2435
+ }
2436
+ switch (expression.node_kind) {
2437
+ case "literal":
2438
+ case "parameter":
2439
+ return true;
2440
+ case "grouped_expression":
2441
+ return isLiteralOrParameter(expression.expression);
2442
+ default:
2443
+ return false;
2444
+ }
2445
+ }
2446
+
2447
+ function determineProjectionKind(
2448
+ projection: readonly SelectItemNode[],
2449
+ tableNames: Set<string>
2450
+ ): "selectAll" | "partial" {
2451
+ for (const item of projection) {
2452
+ if (isSelectAllForTable(item, tableNames)) {
2453
+ return "selectAll";
2454
+ }
2455
+ }
2456
+ return "partial";
2457
+ }
2458
+
2459
+ function buildTraceEntry(args: {
2460
+ aliasList: readonly string[];
2461
+ projectionKind: "selectAll" | "partial";
2462
+ schemaSummary: ColumnPredicateSummary;
2463
+ selectedColumns: SelectedProjection[] | null;
2464
+ }): PreprocessorTraceEntry {
2465
+ const { aliasList, schemaSummary, projectionKind, selectedColumns } = args;
2466
+ const referenceCount = aliasList.length === 0 ? 1 : aliasList.length;
2467
+ return {
2468
+ step: "rewrite_vtable_selects",
2469
+ payload: {
2470
+ reference_count: referenceCount,
2471
+ aliases: aliasList,
2472
+ projection: projectionKind,
2473
+ schema_key_predicates: schemaSummary.count,
2474
+ schema_key_literals: schemaSummary.literals,
2475
+ selected_columns: selectedColumns
2476
+ ? selectedColumns.map((entry) => entry.column)
2477
+ : null,
2478
+ },
2479
+ };
2480
+ }
2481
+
2482
+ function buildVtableSelectRewrite(options: {
2483
+ schemaKeys: readonly string[];
2484
+ fileIds: readonly string[];
2485
+ entityIds: readonly string[];
2486
+ snapshotFilters: readonly SnapshotJsonPredicate[];
2487
+ versionIds: readonly string[];
2488
+ cacheTables: Map<string, unknown>;
2489
+ selectedColumns: SelectedProjection[] | null;
2490
+ hiddenColumns: ReadonlySet<string>;
2491
+ supportColumns: ReadonlySet<string>;
2492
+ hasOpenTransaction: boolean;
2493
+ pruneInheritance: boolean;
2494
+ pruneTransactionSegment: boolean;
2495
+ versionInheritance?: VersionInheritanceMap;
2496
+ }): string {
2497
+ const schemaFilterList = options.schemaKeys ?? [];
2498
+ const requestedVersionIds = Array.from(new Set(options.versionIds ?? []));
2499
+ const wantedVersionsCteName =
2500
+ requestedVersionIds.length > 0 ? "wanted_versions" : null;
2501
+ const { candidateColumns, rankedColumns } = buildProjectionColumnSet(
2502
+ options.selectedColumns,
2503
+ options.hiddenColumns,
2504
+ options.supportColumns
2505
+ );
2506
+ candidateColumns.add("priority");
2507
+ rankedColumns.add("priority");
2508
+ const inheritancePlan = determineInheritancePlan({
2509
+ requestedVersionIds: options.versionIds,
2510
+ versionInheritance: options.versionInheritance,
2511
+ forcedPrune: options.pruneInheritance,
2512
+ });
2513
+ const schemaFilter = buildSchemaFilter(schemaFilterList);
2514
+ const fileFilter =
2515
+ options.fileIds && options.fileIds.length > 0
2516
+ ? buildFileFilter(options.fileIds)
2517
+ : null;
2518
+ const entityFilter =
2519
+ options.entityIds && options.entityIds.length > 0
2520
+ ? buildEntityFilter(options.entityIds)
2521
+ : null;
2522
+ const snapshotFilter = buildSnapshotContentFilter(options.snapshotFilters);
2523
+ const txnFilter = combineFilters(
2524
+ schemaFilter,
2525
+ fileFilter,
2526
+ entityFilter,
2527
+ snapshotFilter
2528
+ );
2529
+ const inheritedFilter = combineFilters(
2530
+ schemaFilter,
2531
+ fileFilter,
2532
+ entityFilter,
2533
+ snapshotFilter
2534
+ );
2535
+ const buildVersionJoin = (alias: string, joinAlias: string) =>
2536
+ buildWantedVersionJoinClause(wantedVersionsCteName, alias, joinAlias);
2537
+ const txnVersionJoin = buildVersionJoin("txn", "wv_txn");
2538
+ const untrackedVersionJoin = buildVersionJoin("unt", "wv_unt");
2539
+ const cacheVersionJoin = buildVersionJoin("cache", "wv_cache");
2540
+ const inheritanceVersionJoin = buildVersionJoin("vi", "wv_vi");
2541
+ const parentVersionJoin = buildVersionJoin("vi", "wv_parent");
2542
+ const needsWriterJoin = candidateColumns.has("writer_key");
2543
+ if (needsWriterJoin) {
2544
+ candidateColumns.add("inherited_from_version_id");
2545
+ rankedColumns.add("inherited_from_version_id");
2546
+ }
2547
+ const needsChangeJoin = candidateColumns.has("metadata");
2548
+ const projectionSql = buildRewriteProjectionSql(options.selectedColumns, {
2549
+ supportColumns: options.supportColumns,
2550
+ needsWriterJoin,
2551
+ candidateColumns,
2552
+ });
2553
+ const cacheSource = buildCacheSource(
2554
+ schemaFilterList,
2555
+ options.cacheTables,
2556
+ candidateColumns
2557
+ );
2558
+ const rankingOrder = [
2559
+ "c.priority",
2560
+ "c.created_at DESC",
2561
+ "c.file_id",
2562
+ "c.schema_key",
2563
+ "c.entity_id",
2564
+ "c.version_id",
2565
+ "c.change_id",
2566
+ ];
2567
+ const segments: string[] = [];
2568
+ if (
2569
+ options.hasOpenTransaction !== false &&
2570
+ !options.pruneTransactionSegment
2571
+ ) {
2572
+ segments.push(
2573
+ buildTransactionSegment(txnFilter, candidateColumns, txnVersionJoin)
2574
+ );
2575
+ }
2576
+ segments.push(
2577
+ buildUntrackedSegment(txnFilter, candidateColumns, untrackedVersionJoin)
2578
+ );
2579
+ const cacheSegment = buildCacheSegment(
2580
+ cacheSource,
2581
+ txnFilter,
2582
+ candidateColumns,
2583
+ cacheVersionJoin
2584
+ );
2585
+ if (cacheSegment) {
2586
+ segments.push(cacheSegment);
2587
+ }
2588
+ const shouldPruneInheritance = inheritancePlan.mode === "pruned";
2589
+ let inheritanceJoinSource = "version_inheritance vi";
2590
+ let parentJoinSource = "version_parent vi";
2591
+ if (inheritancePlan.mode === "inline") {
2592
+ inheritanceJoinSource = buildInlineInheritanceSource(
2593
+ inheritancePlan.versionAncestorPairs
2594
+ );
2595
+ parentJoinSource = buildInlineParentSource(inheritancePlan.parentPairs);
2596
+ }
2597
+ let allSegments = segments;
2598
+ if (!shouldPruneInheritance) {
2599
+ const inheritedSegments: string[] = [];
2600
+ if (cacheSegment) {
2601
+ const inheritedCache = buildInheritedCacheSegment(
2602
+ cacheSource,
2603
+ inheritedFilter,
2604
+ candidateColumns,
2605
+ inheritanceJoinSource,
2606
+ inheritanceVersionJoin
2607
+ );
2608
+ if (inheritedCache) {
2609
+ inheritedSegments.push(inheritedCache);
2610
+ }
2611
+ }
2612
+ inheritedSegments.push(
2613
+ buildInheritedUntrackedSegment(
2614
+ inheritedFilter,
2615
+ candidateColumns,
2616
+ inheritanceJoinSource,
2617
+ inheritanceVersionJoin
2618
+ )
2619
+ );
2620
+ if (options.hasOpenTransaction !== false) {
2621
+ inheritedSegments.push(
2622
+ buildInheritedTransactionSegment(
2623
+ inheritedFilter,
2624
+ candidateColumns,
2625
+ parentJoinSource,
2626
+ parentVersionJoin
2627
+ )
2628
+ );
2629
+ }
2630
+ allSegments = segments.concat(inheritedSegments);
2631
+ }
2632
+ const candidates = allSegments.join(`\n\n UNION ALL\n\n`);
2633
+
2634
+ const writerJoinSql = needsWriterJoin
2635
+ ? `
2636
+ LEFT JOIN lix_internal_state_writer ws_dst ON
2637
+ ws_dst.file_id = w.file_id AND
2638
+ ws_dst.entity_id = w.entity_id AND
2639
+ ws_dst.schema_key = w.schema_key AND
2640
+ ws_dst.version_id = w.version_id
2641
+ LEFT JOIN lix_internal_state_writer ws_src ON
2642
+ ws_src.file_id = w.file_id AND
2643
+ ws_src.entity_id = w.entity_id AND
2644
+ ws_src.schema_key = w.schema_key AND
2645
+ ws_src.version_id = w.inherited_from_version_id`
2646
+ : "";
2647
+ const changeJoinSql = needsChangeJoin
2648
+ ? `
2649
+ LEFT JOIN lix_internal_change chc ON chc.id = w.change_id`
2650
+ : "";
2651
+ const transactionJoinSql =
2652
+ options.hasOpenTransaction !== false
2653
+ ? `
2654
+ LEFT JOIN lix_internal_transaction_state itx ON itx.id = w.change_id`
2655
+ : "";
2656
+ const rankedSql = buildRankedSegment({
2657
+ projectionColumns: rankedColumns,
2658
+ rankingOrder,
2659
+ candidatesSql: candidates,
2660
+ });
2661
+ const withClauses: string[] = [];
2662
+ if (wantedVersionsCteName) {
2663
+ withClauses.push(
2664
+ buildWantedVersionsCte(wantedVersionsCteName, requestedVersionIds)
2665
+ );
2666
+ }
2667
+ if (inheritancePlan.mode === "recursive") {
2668
+ withClauses.push(buildVersionDescriptorCte());
2669
+ withClauses.push(buildVersionInheritanceCte(wantedVersionsCteName));
2670
+ withClauses.push(buildVersionParentCte(wantedVersionsCteName));
2671
+ }
2672
+ const withPrefix =
2673
+ withClauses.length > 0
2674
+ ? `WITH
2675
+ ${withClauses.map((clause) => indent(clause, 2)).join(",\n")}
2676
+ `
2677
+ : "";
2678
+
2679
+ const body = `${withPrefix}SELECT
2680
+ ${indent(projectionSql, 2)}
2681
+ FROM (
2682
+ ${indent(rankedSql, 2)}
2683
+ ) AS w
2684
+ ${writerJoinSql}
2685
+ ${changeJoinSql}
2686
+ ${transactionJoinSql}
2687
+ WHERE w.rn = 1`;
2688
+
2689
+ return `(\n${body}\n)\n`;
2690
+ }
2691
+
2692
+ function buildRewriteProjectionSql(
2693
+ selectedColumns: SelectedProjection[] | null,
2694
+ options: {
2695
+ needsWriterJoin: boolean;
2696
+ supportColumns: ReadonlySet<string>;
2697
+ candidateColumns: ReadonlySet<string>;
2698
+ }
2699
+ ): string {
2700
+ const builder = internalQueryBuilder as unknown as {
2701
+ selectFrom: (table: string) => {
2702
+ selectAll: (table: string) => { compile: () => { sql: string } };
2703
+ select: (
2704
+ callback: (eb: {
2705
+ ref: (reference: string) => {
2706
+ as: (alias: string) => unknown;
2707
+ };
2708
+ fn: any;
2709
+ }) => unknown[]
2710
+ ) => { compile: () => { sql: string } };
2711
+ };
2712
+ };
2713
+
2714
+ const baseQuery = builder.selectFrom(`${INTERNAL_STATE_VTABLE} as w`);
2715
+ const supportEntries =
2716
+ selectedColumns === null
2717
+ ? []
2718
+ : Array.from(options.supportColumns)
2719
+ .filter(
2720
+ (column) =>
2721
+ !selectedColumns.some((entry) => entry.column === column) &&
2722
+ !INTERNAL_ONLY_COLUMN_SET.has(column)
2723
+ )
2724
+ .map<SelectedProjection>((column) => ({
2725
+ column,
2726
+ alias: null,
2727
+ }));
2728
+ const combinedEntries =
2729
+ selectedColumns === null ? null : [...selectedColumns, ...supportEntries];
2730
+ const query =
2731
+ combinedEntries === null || combinedEntries.length === 0
2732
+ ? undefined
2733
+ : baseQuery.select((eb) =>
2734
+ combinedEntries.map((entry) => {
2735
+ if (options.needsWriterJoin && entry.column === "writer_key") {
2736
+ return eb.fn
2737
+ .coalesce(
2738
+ eb.ref("ws_dst.writer_key"),
2739
+ eb.ref("ws_src.writer_key"),
2740
+ eb.ref("w.writer_key")
2741
+ )
2742
+ .as(entry.column) as unknown as any;
2743
+ }
2744
+ return eb.ref(`w.${entry.column}`).as(entry.column);
2745
+ })
2746
+ );
2747
+
2748
+ if (!query) {
2749
+ const defaultColumns = buildDefaultProjectionColumns(
2750
+ options.candidateColumns
2751
+ );
2752
+ return defaultColumns
2753
+ .map((column) =>
2754
+ options.needsWriterJoin && column === "writer_key"
2755
+ ? `COALESCE(ws_dst.writer_key, ws_src.writer_key, w.writer_key) AS ${quoteIdentifier(
2756
+ column
2757
+ )}`
2758
+ : `w.${quoteIdentifier(column)} AS ${quoteIdentifier(column)}`
2759
+ )
2760
+ .join(",\n");
2761
+ }
2762
+
2763
+ const { sql } = query.compile();
2764
+ const match = sql.match(/^select\s+(?<projection>[\s\S]+?)\s+from\s+/i);
2765
+ return match?.groups?.projection?.trim() ?? sql;
2766
+ }
2767
+
2768
+ function buildDefaultProjectionColumns(
2769
+ candidateColumns: ReadonlySet<string>
2770
+ ): string[] {
2771
+ const ordered = PROJECTION_COLUMN_ORDER.filter(
2772
+ (column) =>
2773
+ !INTERNAL_ONLY_COLUMN_SET.has(column) && candidateColumns.has(column)
2774
+ ) as string[];
2775
+ const additional = Array.from(candidateColumns).filter(
2776
+ (column) =>
2777
+ !INTERNAL_ONLY_COLUMN_SET.has(column) && !ordered.includes(column)
2778
+ );
2779
+ return ordered.concat(additional.sort());
2780
+ }
2781
+
2782
+ function buildProjectionColumnSet(
2783
+ selectedColumns: SelectedProjection[] | null,
2784
+ hiddenColumns: ReadonlySet<string>,
2785
+ supportColumns: ReadonlySet<string>
2786
+ ): {
2787
+ candidateColumns: Set<string>;
2788
+ rankedColumns: Set<string>;
2789
+ } {
2790
+ const requestedHiddenColumns = new Set(hiddenColumns);
2791
+ const seedColumns =
2792
+ selectedColumns === null
2793
+ ? ALL_SEGMENT_COLUMNS
2794
+ : Array.from(BASE_SEGMENT_COLUMNS);
2795
+ const candidateColumns = new Set<string>();
2796
+ const rankedColumns = new Set<string>();
2797
+
2798
+ for (const column of seedColumns) {
2799
+ if (
2800
+ HIDDEN_SEGMENT_COLUMN_SET.has(column) &&
2801
+ !requestedHiddenColumns.has(column)
2802
+ ) {
2803
+ continue;
2804
+ }
2805
+ candidateColumns.add(column);
2806
+ rankedColumns.add(column);
2807
+ }
2808
+
2809
+ if (selectedColumns && selectedColumns.length > 0) {
2810
+ for (const entry of selectedColumns) {
2811
+ candidateColumns.add(entry.column);
2812
+ rankedColumns.add(entry.column);
2813
+ }
2814
+ }
2815
+
2816
+ for (const column of supportColumns) {
2817
+ candidateColumns.add(column);
2818
+ rankedColumns.add(column);
2819
+ }
2820
+
2821
+ for (const hiddenColumn of requestedHiddenColumns) {
2822
+ candidateColumns.add(hiddenColumn);
2823
+ rankedColumns.add(hiddenColumn);
2824
+ }
2825
+
2826
+ for (const hiddenColumn of HIDDEN_SEGMENT_COLUMN_SET) {
2827
+ if (!requestedHiddenColumns.has(hiddenColumn)) {
2828
+ candidateColumns.delete(hiddenColumn);
2829
+ rankedColumns.delete(hiddenColumn);
2830
+ }
2831
+ }
2832
+
2833
+ // Internal rewrites rely on snapshot_content for JSON decoding and cache filtering.
2834
+ candidateColumns.add("snapshot_content");
2835
+ rankedColumns.add("snapshot_content");
2836
+
2837
+ return { candidateColumns, rankedColumns };
2838
+ }
2839
+
2840
+ const NEWLINE = "\n";
2841
+
2842
+ const ALL_SEGMENT_COLUMNS = [
2843
+ "_pk",
2844
+ "source_tag",
2845
+ "entity_id",
2846
+ "schema_key",
2847
+ "file_id",
2848
+ "plugin_key",
2849
+ "snapshot_content",
2850
+ "schema_version",
2851
+ "version_id",
2852
+ "created_at",
2853
+ "updated_at",
2854
+ "inherited_from_version_id",
2855
+ "change_id",
2856
+ "untracked",
2857
+ "commit_id",
2858
+ "metadata",
2859
+ "writer_key",
2860
+ "priority",
2861
+ ] as const;
2862
+
2863
+ const BASE_SEGMENT_COLUMNS = new Set<string>([
2864
+ "entity_id",
2865
+ "schema_key",
2866
+ "file_id",
2867
+ "version_id",
2868
+ "created_at",
2869
+ "change_id",
2870
+ "priority",
2871
+ ]);
2872
+
2873
+ const CACHE_COLUMNS = [
2874
+ "entity_id",
2875
+ "schema_key",
2876
+ "file_id",
2877
+ "plugin_key",
2878
+ "snapshot_content",
2879
+ "schema_version",
2880
+ "version_id",
2881
+ "created_at",
2882
+ "updated_at",
2883
+ "inherited_from_version_id",
2884
+ "change_id",
2885
+ "commit_id",
2886
+ "is_tombstone",
2887
+ ] as const;
2888
+
2889
+ const PROJECTION_COLUMN_ORDER = ALL_SEGMENT_COLUMNS.filter(
2890
+ (column) => column !== "priority"
2891
+ );
2892
+
2893
+ const INTERNAL_ONLY_COLUMN_SET = new Set<string>(["priority", "rn"]);
2894
+
2895
+ function buildTransactionSegment(
2896
+ segmentFilter: string | null,
2897
+ projectionColumns: Set<string>,
2898
+ versionJoinClause: string
2899
+ ): string {
2900
+ const rewrittenFilter = rewriteFilterForAlias(segmentFilter, "txn");
2901
+ const filterClause = rewrittenFilter ? `WHERE ${rewrittenFilter}` : "";
2902
+ const columns: Array<[string, string]> = [
2903
+ [
2904
+ "_pk",
2905
+ `'T' || '~' || lix_encode_pk_part(txn.file_id) || '~' || lix_encode_pk_part(txn.entity_id) || '~' || lix_encode_pk_part(txn.version_id) AS _pk`,
2906
+ ],
2907
+ ["source_tag", "'T' AS source_tag"],
2908
+ ["entity_id", "txn.entity_id AS entity_id"],
2909
+ ["schema_key", "txn.schema_key AS schema_key"],
2910
+ ["file_id", "txn.file_id AS file_id"],
2911
+ ["plugin_key", "txn.plugin_key AS plugin_key"],
2912
+ ["snapshot_content", "json(txn.snapshot_content) AS snapshot_content"],
2913
+ ["schema_version", "txn.schema_version AS schema_version"],
2914
+ ["version_id", "txn.version_id AS version_id"],
2915
+ ["created_at", "txn.created_at AS created_at"],
2916
+ ["updated_at", "txn.created_at AS updated_at"],
2917
+ ["inherited_from_version_id", "NULL AS inherited_from_version_id"],
2918
+ ["change_id", "txn.id AS change_id"],
2919
+ ["untracked", "txn.untracked AS untracked"],
2920
+ ["commit_id", "'pending' AS commit_id"],
2921
+ ["metadata", "json(txn.metadata) AS metadata"],
2922
+ ["writer_key", "txn.writer_key AS writer_key"],
2923
+ ["priority", "1 AS priority"],
2924
+ ];
2925
+ const columnSql = columns
2926
+ .filter(([column]) => projectionColumns.has(column))
2927
+ .map(([, sql]) => sql)
2928
+ .join(",\n");
2929
+ const joinClause = versionJoinClause ? `\n\t\t${versionJoinClause}` : "";
2930
+ return stripIndent(`
2931
+ SELECT
2932
+ ${indent(columnSql, 4)}
2933
+ FROM lix_internal_transaction_state txn${joinClause}
2934
+ ${filterClause}
2935
+ `).trimEnd();
2936
+ }
2937
+
2938
+ function buildUntrackedSegment(
2939
+ segmentFilter: string | null,
2940
+ projectionColumns: Set<string>,
2941
+ versionJoinClause: string
2942
+ ): string {
2943
+ const rewrittenFilter = rewriteFilterForAlias(segmentFilter, "unt");
2944
+ const columns: Array<[string, string]> = [
2945
+ [
2946
+ "_pk",
2947
+ `'U' || '~' || lix_encode_pk_part(unt.file_id) || '~' || lix_encode_pk_part(unt.entity_id) || '~' || lix_encode_pk_part(unt.version_id) AS _pk`,
2948
+ ],
2949
+ ["source_tag", "'U' AS source_tag"],
2950
+ ["entity_id", "unt.entity_id AS entity_id"],
2951
+ ["schema_key", "unt.schema_key AS schema_key"],
2952
+ ["file_id", "unt.file_id AS file_id"],
2953
+ ["plugin_key", "unt.plugin_key AS plugin_key"],
2954
+ ["snapshot_content", "json(unt.snapshot_content) AS snapshot_content"],
2955
+ ["schema_version", "unt.schema_version AS schema_version"],
2956
+ ["version_id", "unt.version_id AS version_id"],
2957
+ ["created_at", "unt.created_at AS created_at"],
2958
+ ["updated_at", "unt.updated_at AS updated_at"],
2959
+ ["inherited_from_version_id", "NULL AS inherited_from_version_id"],
2960
+ ["change_id", "'untracked' AS change_id"],
2961
+ ["untracked", "1 AS untracked"],
2962
+ ["commit_id", "'untracked' AS commit_id"],
2963
+ ["metadata", "NULL AS metadata"],
2964
+ ["writer_key", "NULL AS writer_key"],
2965
+ ["priority", "2 AS priority"],
2966
+ ];
2967
+ const columnSql = columns
2968
+ .filter(([column]) => projectionColumns.has(column))
2969
+ .map(([, sql]) => sql)
2970
+ .join(",\n");
2971
+ const joinClause = versionJoinClause ? `\n\t\t${versionJoinClause}` : "";
2972
+ return stripIndent(`
2973
+ SELECT
2974
+ ${indent(columnSql, 4)}
2975
+ FROM lix_internal_state_all_untracked unt${joinClause}
2976
+ ${rewrittenFilter ? `WHERE ${rewrittenFilter}` : ""}
2977
+ `).trimEnd();
2978
+ }
2979
+
2980
+ function buildCacheSegment(
2981
+ cacheSource: string | null,
2982
+ segmentFilter: string | null,
2983
+ projectionColumns: Set<string>,
2984
+ versionJoinClause: string
2985
+ ): string | null {
2986
+ if (!cacheSource) {
2987
+ return null;
2988
+ }
2989
+ const rewrittenFilter = rewriteFilterForAlias(segmentFilter, "cache");
2990
+ const sourceKeyword = cacheSource.trim().toLowerCase();
2991
+ const sourceSql = sourceKeyword.startsWith("select")
2992
+ ? `(${cacheSource})`
2993
+ : cacheSource;
2994
+ const columns: Array<[string, string]> = [
2995
+ [
2996
+ "_pk",
2997
+ `'C' || '~' || lix_encode_pk_part(cache.file_id) || '~' || lix_encode_pk_part(cache.entity_id) || '~' || lix_encode_pk_part(cache.version_id) AS _pk`,
2998
+ ],
2999
+ ["source_tag", "'C' AS source_tag"],
3000
+ ["entity_id", "cache.entity_id AS entity_id"],
3001
+ ["schema_key", "cache.schema_key AS schema_key"],
3002
+ ["file_id", "cache.file_id AS file_id"],
3003
+ ["plugin_key", "cache.plugin_key AS plugin_key"],
3004
+ ["snapshot_content", "json(cache.snapshot_content) AS snapshot_content"],
3005
+ ["schema_version", "cache.schema_version AS schema_version"],
3006
+ ["version_id", "cache.version_id AS version_id"],
3007
+ ["created_at", "cache.created_at AS created_at"],
3008
+ ["updated_at", "cache.updated_at AS updated_at"],
3009
+ [
3010
+ "inherited_from_version_id",
3011
+ "cache.inherited_from_version_id AS inherited_from_version_id",
3012
+ ],
3013
+ ["change_id", "cache.change_id AS change_id"],
3014
+ ["untracked", "0 AS untracked"],
3015
+ ["commit_id", "cache.commit_id AS commit_id"],
3016
+ ["metadata", "NULL AS metadata"],
3017
+ ["writer_key", "NULL AS writer_key"],
3018
+ ["priority", "3 AS priority"],
3019
+ ];
3020
+ const columnSql = columns
3021
+ .filter(([column]) => projectionColumns.has(column))
3022
+ .map(([, sql]) => sql)
3023
+ .join(",\n");
3024
+ const whereClause = rewrittenFilter ? `\n\t\tWHERE ${rewrittenFilter}` : "";
3025
+ const joinClause = versionJoinClause ? `\n\t\t${versionJoinClause}` : "";
3026
+ return stripIndent(`
3027
+ SELECT
3028
+ ${indent(columnSql, 4)}
3029
+ FROM ${sourceSql} cache${joinClause}${whereClause}
3030
+ `).trimEnd();
3031
+ }
3032
+
3033
+ /**
3034
+ * Builds the base CTE extracting version descriptors for inheritance lookups.
3035
+ *
3036
+ * @returns SQL fragment for the version descriptor base CTE.
3037
+ *
3038
+ * @example
3039
+ * ```ts
3040
+ * const sql = buildVersionDescriptorCte();
3041
+ * ```
3042
+ */
3043
+ function buildVersionDescriptorCte(): string {
3044
+ return stripIndent(`
3045
+ version_descriptor_base AS (
3046
+ SELECT
3047
+ json_extract(desc.snapshot_content, '$.id') AS version_id,
3048
+ json_extract(desc.snapshot_content, '$.inherits_from_version_id') AS inherits_from_version_id
3049
+ FROM "lix_internal_state_cache_v1_lix_version_descriptor" desc
3050
+ WHERE desc.is_tombstone = 0
3051
+ AND desc.snapshot_content IS NOT NULL
3052
+ )`).trim();
3053
+ }
3054
+
3055
+ /**
3056
+ * Builds the recursive CTE that unfolds the full inheritance chain.
3057
+ *
3058
+ * @param seedCteName - Optional wanted version CTE that limits recursion seeds.
3059
+ * @returns SQL fragment for the version inheritance CTE.
3060
+ *
3061
+ * @example
3062
+ * ```ts
3063
+ * const sql = buildVersionInheritanceCte("wanted_versions");
3064
+ * ```
3065
+ */
3066
+ function buildVersionInheritanceCte(seedCteName: string | null): string {
3067
+ const seedJoin = seedCteName
3068
+ ? `
3069
+ JOIN ${seedCteName} wv ON wv.version_id = vdb.version_id`
3070
+ : "";
3071
+ return stripIndent(`
3072
+ version_inheritance(version_id, ancestor_version_id) AS (
3073
+ SELECT
3074
+ vdb.version_id,
3075
+ vdb.inherits_from_version_id
3076
+ FROM version_descriptor_base vdb${seedJoin}
3077
+ WHERE vdb.inherits_from_version_id IS NOT NULL
3078
+
3079
+ UNION ALL
3080
+
3081
+ SELECT
3082
+ vi.version_id,
3083
+ vdb.inherits_from_version_id
3084
+ FROM version_inheritance vi
3085
+ JOIN version_descriptor_base vdb ON vdb.version_id = vi.ancestor_version_id
3086
+ WHERE vdb.inherits_from_version_id IS NOT NULL
3087
+ )`).trim();
3088
+ }
3089
+
3090
+ /**
3091
+ * Builds the CTE mapping each version to its direct parent version.
3092
+ *
3093
+ * @param seedCteName - Optional wanted version CTE limiting descriptors.
3094
+ * @returns SQL fragment for the version parent CTE.
3095
+ *
3096
+ * @example
3097
+ * ```ts
3098
+ * const sql = buildVersionParentCte("wanted_versions");
3099
+ * ```
3100
+ */
3101
+ function buildVersionParentCte(seedCteName: string | null): string {
3102
+ const seedJoin = seedCteName
3103
+ ? `
3104
+ JOIN ${seedCteName} wv ON wv.version_id = vdb.version_id`
3105
+ : "";
3106
+ return stripIndent(`
3107
+ version_parent AS (
3108
+ SELECT
3109
+ vdb.version_id,
3110
+ vdb.inherits_from_version_id AS parent_version_id
3111
+ FROM version_descriptor_base vdb${seedJoin}
3112
+ WHERE vdb.inherits_from_version_id IS NOT NULL
3113
+ )`).trim();
3114
+ }
3115
+
3116
+ /**
3117
+ * Builds a CTE enumerating the requested versions for join-based filters.
3118
+ *
3119
+ * @param cteName - The identifier assigned to the CTE.
3120
+ * @param versionIds - Ordered list of version identifiers to include.
3121
+ * @returns SQL fragment for the wanted versions CTE.
3122
+ *
3123
+ * @example
3124
+ * ```ts
3125
+ * const sql = buildWantedVersionsCte("wanted_versions", ["v1", "v2"]);
3126
+ * ```
3127
+ */
3128
+ function buildWantedVersionsCte(
3129
+ cteName: string,
3130
+ versionIds: readonly string[]
3131
+ ): string {
3132
+ const selects = versionIds
3133
+ .map((versionId) => `SELECT '${escapeSqlLiteral(versionId)}' AS version_id`)
3134
+ .join("\nUNION ALL\n");
3135
+ return stripIndent(`
3136
+ ${cteName} AS (
3137
+ ${indent(selects, 2)}
3138
+ )`).trim();
3139
+ }
3140
+
3141
+ /**
3142
+ * Builds the inherited cache candidate segment that maps ancestor versions onto
3143
+ * the target schema version.
3144
+ *
3145
+ * @param cacheSource - The SQL producing the cache rows.
3146
+ * @param segmentFilter - Optional predicate scoped to the cache alias.
3147
+ * @param projectionColumns - Columns required for the projection.
3148
+ * @param versionJoinClause - SQL equi-join tying descendants to wanted versions.
3149
+ * @returns SQL fragment or null when no cache source exists.
3150
+ *
3151
+ * @example
3152
+ * ```ts
3153
+ * const sql = buildInheritedCacheSegment(
3154
+ * '"cache_table"',
3155
+ * "txn.schema_key = 'demo'",
3156
+ * new Set(),
3157
+ * "version_inheritance vi",
3158
+ * "JOIN wanted_versions wv ON wv.version_id = vi.version_id"
3159
+ * );
3160
+ * ```
3161
+ */
3162
+ function buildInheritedCacheSegment(
3163
+ cacheSource: string | null,
3164
+ segmentFilter: string | null,
3165
+ projectionColumns: Set<string>,
3166
+ inheritanceJoin: string,
3167
+ versionJoinClause: string
3168
+ ): string | null {
3169
+ if (!cacheSource) {
3170
+ return null;
3171
+ }
3172
+ const rewrittenFilter = rewriteFilterForAlias(segmentFilter, "cache");
3173
+ const sourceKeyword = cacheSource.trim().toLowerCase();
3174
+ const sourceSql = sourceKeyword.startsWith("select")
3175
+ ? `(${cacheSource})`
3176
+ : cacheSource;
3177
+ const columns: Array<[string, string]> = [
3178
+ [
3179
+ "_pk",
3180
+ `'CI' || '~' || lix_encode_pk_part(cache.file_id) || '~' || lix_encode_pk_part(cache.entity_id) || '~' || lix_encode_pk_part(vi.version_id) AS _pk`,
3181
+ ],
3182
+ ["source_tag", "'CI' AS source_tag"],
3183
+ ["entity_id", "cache.entity_id AS entity_id"],
3184
+ ["schema_key", "cache.schema_key AS schema_key"],
3185
+ ["file_id", "cache.file_id AS file_id"],
3186
+ ["plugin_key", "cache.plugin_key AS plugin_key"],
3187
+ ["snapshot_content", "json(cache.snapshot_content) AS snapshot_content"],
3188
+ ["schema_version", "cache.schema_version AS schema_version"],
3189
+ ["version_id", "vi.version_id AS version_id"],
3190
+ ["created_at", "cache.created_at AS created_at"],
3191
+ ["updated_at", "cache.updated_at AS updated_at"],
3192
+ [
3193
+ "inherited_from_version_id",
3194
+ "cache.version_id AS inherited_from_version_id",
3195
+ ],
3196
+ ["change_id", "cache.change_id AS change_id"],
3197
+ ["untracked", "0 AS untracked"],
3198
+ ["commit_id", "cache.commit_id AS commit_id"],
3199
+ ["metadata", "NULL AS metadata"],
3200
+ ["writer_key", "NULL AS writer_key"],
3201
+ ["priority", "4 AS priority"],
3202
+ ];
3203
+ const columnSql = columns
3204
+ .filter(([column]) => projectionColumns.has(column))
3205
+ .map(([, sql]) => sql)
3206
+ .join(",\n");
3207
+ const joinClause = versionJoinClause ? `\n\t\t${versionJoinClause}` : "";
3208
+ return stripIndent(`
3209
+ SELECT
3210
+ ${indent(columnSql, 4)}
3211
+ FROM ${inheritanceJoin}${joinClause}
3212
+ JOIN ${sourceSql} cache ON cache.version_id = vi.ancestor_version_id
3213
+ WHERE cache.is_tombstone = 0
3214
+ AND cache.snapshot_content IS NOT NULL${
3215
+ rewrittenFilter ? ` AND ${rewrittenFilter}` : ""
3216
+ }
3217
+ `).trimEnd();
3218
+ }
3219
+
3220
+ /**
3221
+ * Builds the inherited segment sourcing data from `lix_internal_state_all_untracked`.
3222
+ *
3223
+ * @param segmentFilter - Optional predicate scoped to the untracked alias.
3224
+ * @param projectionColumns - Columns required for the projection.
3225
+ * @param versionJoinClause - SQL equi-join tying descendants to wanted versions.
3226
+ * @returns SQL fragment selecting inherited untracked rows.
3227
+ *
3228
+ * @example
3229
+ * ```ts
3230
+ * const sql = buildInheritedUntrackedSegment(
3231
+ * null,
3232
+ * new Set(["entity_id"]),
3233
+ * "version_inheritance vi",
3234
+ * "JOIN wanted_versions wv ON wv.version_id = vi.version_id"
3235
+ * );
3236
+ * ```
3237
+ */
3238
+ function buildInheritedUntrackedSegment(
3239
+ segmentFilter: string | null,
3240
+ projectionColumns: Set<string>,
3241
+ inheritanceJoin: string,
3242
+ versionJoinClause: string
3243
+ ): string {
3244
+ const rewrittenFilter = rewriteFilterForAlias(segmentFilter, "unt");
3245
+ const columns: Array<[string, string]> = [
3246
+ [
3247
+ "_pk",
3248
+ `'UI' || '~' || lix_encode_pk_part(unt.file_id) || '~' || lix_encode_pk_part(unt.entity_id) || '~' || lix_encode_pk_part(vi.version_id) AS _pk`,
3249
+ ],
3250
+ ["source_tag", "'UI' AS source_tag"],
3251
+ ["entity_id", "unt.entity_id AS entity_id"],
3252
+ ["schema_key", "unt.schema_key AS schema_key"],
3253
+ ["file_id", "unt.file_id AS file_id"],
3254
+ ["plugin_key", "unt.plugin_key AS plugin_key"],
3255
+ ["snapshot_content", "json(unt.snapshot_content) AS snapshot_content"],
3256
+ ["schema_version", "unt.schema_version AS schema_version"],
3257
+ ["version_id", "vi.version_id AS version_id"],
3258
+ ["created_at", "unt.created_at AS created_at"],
3259
+ ["updated_at", "unt.updated_at AS updated_at"],
3260
+ [
3261
+ "inherited_from_version_id",
3262
+ "unt.version_id AS inherited_from_version_id",
3263
+ ],
3264
+ ["change_id", "'untracked' AS change_id"],
3265
+ ["untracked", "1 AS untracked"],
3266
+ ["commit_id", "'untracked' AS commit_id"],
3267
+ ["metadata", "NULL AS metadata"],
3268
+ ["writer_key", "NULL AS writer_key"],
3269
+ ["priority", "5 AS priority"],
3270
+ ];
3271
+ const columnSql = columns
3272
+ .filter(([column]) => projectionColumns.has(column))
3273
+ .map(([, sql]) => sql)
3274
+ .join(",\n");
3275
+ const joinClause = versionJoinClause ? `\n\t\t${versionJoinClause}` : "";
3276
+ return stripIndent(`
3277
+ SELECT
3278
+ ${indent(columnSql, 4)}
3279
+ FROM ${inheritanceJoin}${joinClause}
3280
+ JOIN lix_internal_state_all_untracked unt ON unt.version_id = vi.ancestor_version_id
3281
+ WHERE unt.is_tombstone = 0
3282
+ AND unt.snapshot_content IS NOT NULL${
3283
+ rewrittenFilter ? ` AND ${rewrittenFilter}` : ""
3284
+ }
3285
+ `).trimEnd();
3286
+ }
3287
+
3288
+ /**
3289
+ * Builds the inherited segment that projects transaction rows onto descendant
3290
+ * versions.
3291
+ *
3292
+ * @param segmentFilter - Optional predicate scoped to the transaction alias.
3293
+ * @param projectionColumns - Columns required for the projection.
3294
+ * @param versionJoinClause - SQL equi-join tying descendants to wanted versions.
3295
+ * @returns SQL fragment selecting inherited transaction rows.
3296
+ *
3297
+ * @example
3298
+ * ```ts
3299
+ * const sql = buildInheritedTransactionSegment(
3300
+ * "txn.schema_key = 'demo'",
3301
+ * new Set(["change_id"]),
3302
+ * "version_parent vi",
3303
+ * "JOIN wanted_versions wv ON wv.version_id = vi.version_id"
3304
+ * );
3305
+ * ```
3306
+ */
3307
+ function buildInheritedTransactionSegment(
3308
+ segmentFilter: string | null,
3309
+ projectionColumns: Set<string>,
3310
+ parentJoinSource: string,
3311
+ versionJoinClause: string
3312
+ ): string {
3313
+ const columns: Array<[string, string]> = [
3314
+ [
3315
+ "_pk",
3316
+ `'TI' || '~' || lix_encode_pk_part(txn.file_id) || '~' || lix_encode_pk_part(txn.entity_id) || '~' || lix_encode_pk_part(vi.version_id) AS _pk`,
3317
+ ],
3318
+ ["source_tag", "'TI' AS source_tag"],
3319
+ ["entity_id", "txn.entity_id AS entity_id"],
3320
+ ["schema_key", "txn.schema_key AS schema_key"],
3321
+ ["file_id", "txn.file_id AS file_id"],
3322
+ ["plugin_key", "txn.plugin_key AS plugin_key"],
3323
+ ["snapshot_content", "json(txn.snapshot_content) AS snapshot_content"],
3324
+ ["schema_version", "txn.schema_version AS schema_version"],
3325
+ ["version_id", "vi.version_id AS version_id"],
3326
+ ["created_at", "txn.created_at AS created_at"],
3327
+ ["updated_at", "txn.created_at AS updated_at"],
3328
+ [
3329
+ "inherited_from_version_id",
3330
+ "vi.parent_version_id AS inherited_from_version_id",
3331
+ ],
3332
+ ["change_id", "txn.id AS change_id"],
3333
+ ["untracked", "txn.untracked AS untracked"],
3334
+ ["commit_id", "'pending' AS commit_id"],
3335
+ ["metadata", "json(txn.metadata) AS metadata"],
3336
+ ["writer_key", "txn.writer_key AS writer_key"],
3337
+ ["priority", "6 AS priority"],
3338
+ ];
3339
+ const columnSql = columns
3340
+ .filter(([column]) => projectionColumns.has(column))
3341
+ .map(([, sql]) => sql)
3342
+ .join(",\n");
3343
+ const rewrittenFilter = rewriteFilterForAlias(segmentFilter, "txn");
3344
+ const joinClause = versionJoinClause ? `\n\t\t${versionJoinClause}` : "";
3345
+ return stripIndent(`
3346
+ SELECT
3347
+ ${indent(columnSql, 4)}
3348
+ FROM ${parentJoinSource}${joinClause}
3349
+ JOIN lix_internal_transaction_state txn ON txn.version_id = vi.parent_version_id
3350
+ WHERE vi.parent_version_id IS NOT NULL
3351
+ AND txn.snapshot_content IS NOT NULL${
3352
+ rewrittenFilter ? ` AND ${rewrittenFilter}` : ""
3353
+ }
3354
+ `).trimEnd();
3355
+ }
3356
+
3357
+ function buildRankedSegment(options: {
3358
+ projectionColumns: Set<string>;
3359
+ rankingOrder: string[];
3360
+ candidatesSql: string;
3361
+ }): string {
3362
+ const columns = ALL_SEGMENT_COLUMNS.filter((column) =>
3363
+ options.projectionColumns.has(column)
3364
+ ).map((column) => `c.${column} AS ${column}`);
3365
+ const orderClause = options.rankingOrder.join(", ");
3366
+ const selectEntries = [
3367
+ ...columns,
3368
+ `ROW_NUMBER() OVER (
3369
+ PARTITION BY c.file_id, c.schema_key, c.entity_id, c.version_id
3370
+ ORDER BY ${orderClause}
3371
+ ) AS rn`,
3372
+ ];
3373
+ return stripIndent(`
3374
+ SELECT
3375
+ ${indent(selectEntries.join(",\n"), 4)}
3376
+ FROM (
3377
+ ${indent(options.candidatesSql, 6)}
3378
+ ) AS c
3379
+ `).trimEnd();
3380
+ }
3381
+
3382
+ function buildSchemaFilter(schemaKeys: readonly string[]): string | null {
3383
+ if (!schemaKeys || schemaKeys.length === 0) {
3384
+ return null;
3385
+ }
3386
+ const values = schemaKeys.map((key) => `'${key}'`).join(", ");
3387
+ return `txn.schema_key IN (${values})`;
3388
+ }
3389
+
3390
+ function buildFileFilter(fileIds: readonly string[]): string | null {
3391
+ if (!fileIds || fileIds.length === 0) {
3392
+ return null;
3393
+ }
3394
+ const values = fileIds
3395
+ .map((fileId) => `'${escapeSqlLiteral(fileId)}'`)
3396
+ .join(", ");
3397
+ return `txn.file_id IN (${values})`;
3398
+ }
3399
+
3400
+ function buildEntityFilter(entityIds: readonly string[]): string | null {
3401
+ if (!entityIds || entityIds.length === 0) {
3402
+ return null;
3403
+ }
3404
+ const values = entityIds
3405
+ .map((entityId) => `'${escapeSqlLiteral(entityId)}'`)
3406
+ .join(", ");
3407
+ return `txn.entity_id IN (${values})`;
3408
+ }
3409
+
3410
+ function buildSnapshotContentFilter(
3411
+ filters: readonly SnapshotJsonPredicate[]
3412
+ ): string | null {
3413
+ if (!filters || filters.length === 0) {
3414
+ return null;
3415
+ }
3416
+ const clauses = filters
3417
+ .map((filter) => buildSnapshotPredicateClause(filter))
3418
+ .filter((clause): clause is string => typeof clause === "string");
3419
+ if (clauses.length === 0) {
3420
+ return null;
3421
+ }
3422
+ return clauses.map((clause) => `(${clause})`).join(" AND ");
3423
+ }
3424
+
3425
+ function buildSnapshotPredicateClause(
3426
+ filter: SnapshotJsonPredicate
3427
+ ): string | null {
3428
+ const uniqueValues = Array.from(new Set(filter.values));
3429
+ if (uniqueValues.length === 0) {
3430
+ return null;
3431
+ }
3432
+ const pathLiteral = `'${escapeSqlLiteral(filter.path)}'`;
3433
+ if (uniqueValues.length === 1) {
3434
+ const value = escapeSqlLiteral(uniqueValues[0]!);
3435
+ return `json_extract(txn.snapshot_content, ${pathLiteral}) = '${value}'`;
3436
+ }
3437
+ const valueList = uniqueValues
3438
+ .map((value) => `'${escapeSqlLiteral(value)}'`)
3439
+ .join(", ");
3440
+ return `json_extract(txn.snapshot_content, ${pathLiteral}) IN (${valueList})`;
3441
+ }
3442
+
3443
+ /**
3444
+ * Builds an equi-join clause tying a table alias to the wanted versions CTE.
3445
+ *
3446
+ * @param cteName - Name of the wanted versions CTE.
3447
+ * @param targetAlias - Table alias exposing a `version_id` column.
3448
+ * @param joinAlias - Alias assigned to the join for readability.
3449
+ * @returns SQL JOIN clause or an empty string when no CTE is provided.
3450
+ *
3451
+ * @example
3452
+ * ```ts
3453
+ * const joinSql = buildWantedVersionJoinClause("wanted_versions", "txn", "wv_txn");
3454
+ * ```
3455
+ */
3456
+ function buildWantedVersionJoinClause(
3457
+ cteName: string | null,
3458
+ targetAlias: string,
3459
+ joinAlias: string
3460
+ ): string {
3461
+ if (!cteName) {
3462
+ return "";
3463
+ }
3464
+ return `JOIN ${cteName} ${joinAlias} ON ${joinAlias}.version_id = ${targetAlias}.version_id`;
3465
+ }
3466
+
3467
+ function buildCacheSource(
3468
+ schemaKeys: readonly string[],
3469
+ cacheTables: Map<string, unknown>,
3470
+ projectionColumns: Set<string>
3471
+ ): string | null {
3472
+ const requiredColumns = new Set(projectionColumns);
3473
+ // Always keep structural columns that power tombstone filtering and ranking.
3474
+ requiredColumns.add("snapshot_content");
3475
+ requiredColumns.add("is_tombstone");
3476
+ requiredColumns.add("file_id");
3477
+ requiredColumns.add("entity_id");
3478
+ requiredColumns.add("schema_key");
3479
+ requiredColumns.add("version_id");
3480
+ requiredColumns.add("change_id");
3481
+ requiredColumns.add("created_at");
3482
+ const uniqueKeys =
3483
+ schemaKeys && schemaKeys.length > 0
3484
+ ? Array.from(new Set(schemaKeys))
3485
+ : Array.from(cacheTables.keys());
3486
+ const seenTables = new Set<string>();
3487
+ const entries = uniqueKeys
3488
+ .map((key) => {
3489
+ const lookupKeys = new Set<string>([key]);
3490
+ const sanitizedKey = cacheTableNameToSchemaKey(
3491
+ schemaKeyToCacheTableName(key)
3492
+ );
3493
+ if (sanitizedKey !== key) {
3494
+ lookupKeys.add(sanitizedKey);
3495
+ }
3496
+ for (const lookupKey of lookupKeys) {
3497
+ const tableName = cacheTables.get(lookupKey);
3498
+ if (
3499
+ typeof tableName === "string" &&
3500
+ tableName.length > 0 &&
3501
+ !seenTables.has(tableName)
3502
+ ) {
3503
+ seenTables.add(tableName);
3504
+ return {
3505
+ tableName,
3506
+ sql: buildPhysicalCacheSelect(tableName, requiredColumns),
3507
+ };
3508
+ }
3509
+ }
3510
+ return null;
3511
+ })
3512
+ .filter(
3513
+ (value): value is { tableName: string; sql: string } => value !== null
3514
+ );
3515
+
3516
+ if (entries.length === 0) {
3517
+ return null;
3518
+ }
3519
+ if (entries.length === 1) {
3520
+ return quoteIdentifier(entries[0]!.tableName);
3521
+ }
3522
+ return entries.map((entry) => entry.sql).join(`\nUNION ALL\n`);
3523
+ }
3524
+
3525
+ function buildPhysicalCacheSelect(
3526
+ tableName: string,
3527
+ requiredColumns: Set<string>
3528
+ ): string {
3529
+ const projection = CACHE_COLUMNS.filter((column) =>
3530
+ requiredColumns.has(column)
3531
+ )
3532
+ .map((column) => quoteIdentifier(column))
3533
+ .join(",\n ");
3534
+ return `SELECT
3535
+ ${projection}
3536
+ FROM ${quoteIdentifier(tableName)}`;
3537
+ }
3538
+
3539
+ /**
3540
+ * Resolves the cache table name for the provided schema key, falling back to its sanitized form.
3541
+ *
3542
+ * @example
3543
+ * ```ts
3544
+ * resolveCacheTableName(new Map([["delete_cache_schema", "cache_table"]]), "delete_cache_schema");
3545
+ * // "cache_table"
3546
+ * ```
3547
+ */
3548
+ function stripIndent(value: string): string {
3549
+ const trimmed = value.replace(/^\n+/, "").replace(/\n+$/, "");
3550
+ const lines = trimmed.split(NEWLINE);
3551
+ const indents = lines
3552
+ .filter((line) => line.trim().length > 0)
3553
+ .map((line) => line.match(/^\s*/)?.[0]?.length ?? 0);
3554
+ const minIndent = indents.length > 0 ? Math.min(...indents) : 0;
3555
+ return lines.map((line) => line.slice(minIndent)).join(NEWLINE);
3556
+ }
3557
+
3558
+ function indent(value: string, spaces: number): string {
3559
+ const pad = " ".repeat(spaces);
3560
+ return value
3561
+ .split(NEWLINE)
3562
+ .map((line) => (line.length > 0 ? pad + line : line))
3563
+ .join(NEWLINE);
3564
+ }
3565
+
3566
+ function quoteIdentifier(identifier: string): string {
3567
+ return `"${identifier.replace(/"/g, '""')}"`;
3568
+ }
3569
+
3570
+ function shouldPushFileFilter(
3571
+ schemaKeys: readonly string[],
3572
+ fileIds: readonly string[]
3573
+ ): boolean {
3574
+ if (!schemaKeys || schemaKeys.length === 0) return false;
3575
+ if (!fileIds || fileIds.length === 0) return false;
3576
+ return schemaKeys.every(
3577
+ (key) => typeof key === "string" && !key.startsWith("lix_")
3578
+ );
3579
+ }
3580
+
3581
+ function shouldPushEntityFilter(
3582
+ schemaKeys: readonly string[],
3583
+ entityIds: readonly string[]
3584
+ ): boolean {
3585
+ if (!schemaKeys || schemaKeys.length === 0) return false;
3586
+ if (!entityIds || entityIds.length === 0) return false;
3587
+ return schemaKeys.every(
3588
+ (key) => typeof key === "string" && !key.startsWith("lix_")
3589
+ );
3590
+ }
3591
+
3592
+ function shouldPushSnapshotFilters(
3593
+ schemaKeys: readonly string[],
3594
+ filters: readonly SnapshotJsonPredicate[]
3595
+ ): boolean {
3596
+ if (!schemaKeys || schemaKeys.length === 0) return false;
3597
+ if (!filters || filters.length === 0) return false;
3598
+ return schemaKeys.every(
3599
+ (key) => typeof key === "string" && !key.startsWith("lix_")
3600
+ );
3601
+ }
3602
+
3603
+ function combineFilters(
3604
+ ...filters: Array<string | null | undefined>
3605
+ ): string | null {
3606
+ const active = filters.filter(
3607
+ (filter): filter is string =>
3608
+ typeof filter === "string" && filter.length > 0
3609
+ );
3610
+ if (active.length === 0) {
3611
+ return null;
3612
+ }
3613
+ if (active.length === 1) {
3614
+ return active[0]!;
3615
+ }
3616
+ return active.map((filter) => `(${filter})`).join(" AND ");
3617
+ }
3618
+
3619
+ function rewriteFilterForAlias(
3620
+ filter: string | null,
3621
+ alias: string
3622
+ ): string | null {
3623
+ if (!filter) {
3624
+ return null;
3625
+ }
3626
+ return filter.replace(/txn\./g, `${alias}.`);
3627
+ }
3628
+
3629
+ function normalizeObjectName(objectName: ObjectNameNode): string | null {
3630
+ if (objectName.parts.length === 0) {
3631
+ return null;
3632
+ }
3633
+ const last = objectName.parts[objectName.parts.length - 1]!;
3634
+ return normalizeIdentifierValue(last.value);
3635
+ }
3636
+
3637
+ function escapeSqlLiteral(value: string): string {
3638
+ return value.replace(/'/g, "''");
3639
+ }
3640
+
3641
+ type InheritancePlan =
3642
+ | { mode: "pruned" }
3643
+ | { mode: "recursive" }
3644
+ | {
3645
+ mode: "inline";
3646
+ versionAncestorPairs: Array<{ versionId: string; ancestorId: string }>;
3647
+ parentPairs: Array<{ versionId: string; parentId: string }>;
3648
+ };
3649
+
3650
+ function determineInheritancePlan(args: {
3651
+ requestedVersionIds: readonly string[];
3652
+ versionInheritance?: VersionInheritanceMap;
3653
+ forcedPrune: boolean;
3654
+ }): InheritancePlan {
3655
+ const requested = Array.from(new Set(args.requestedVersionIds ?? []));
3656
+
3657
+ if (args.forcedPrune) {
3658
+ return { mode: "pruned" };
3659
+ }
3660
+
3661
+ if (requested.length === 0) {
3662
+ return args.versionInheritance ? { mode: "recursive" } : { mode: "pruned" };
3663
+ }
3664
+
3665
+ if (!args.versionInheritance || args.versionInheritance.size === 0) {
3666
+ return { mode: "pruned" };
3667
+ }
3668
+
3669
+ const ancestorPairs: Array<{ versionId: string; ancestorId: string }> = [];
3670
+ const parentPairs: Array<{ versionId: string; parentId: string }> = [];
3671
+ const ancestorSeen = new Set<string>();
3672
+ const parentSeen = new Set<string>();
3673
+
3674
+ for (const versionId of requested) {
3675
+ let current = versionId;
3676
+ const chainVisited = new Set<string>([current]);
3677
+ while (true) {
3678
+ const node = args.versionInheritance.get(current);
3679
+ if (!node) {
3680
+ return {
3681
+ mode: "recursive",
3682
+ };
3683
+ }
3684
+ const parentId = node.inheritsFromVersionId;
3685
+ if (!parentId) {
3686
+ break;
3687
+ }
3688
+ if (chainVisited.has(parentId)) {
3689
+ return {
3690
+ mode: "recursive",
3691
+ };
3692
+ }
3693
+ chainVisited.add(parentId);
3694
+
3695
+ const ancestorKey = `${versionId}::${parentId}`;
3696
+ if (!ancestorSeen.has(ancestorKey)) {
3697
+ ancestorSeen.add(ancestorKey);
3698
+ ancestorPairs.push({ versionId, ancestorId: parentId });
3699
+ }
3700
+
3701
+ const parentKey = `${current}::${parentId}`;
3702
+ if (!parentSeen.has(parentKey)) {
3703
+ parentSeen.add(parentKey);
3704
+ parentPairs.push({ versionId: current, parentId });
3705
+ }
3706
+
3707
+ current = parentId;
3708
+ }
3709
+ }
3710
+
3711
+ if (ancestorPairs.length === 0) {
3712
+ return { mode: "pruned" };
3713
+ }
3714
+
3715
+ return {
3716
+ mode: "inline",
3717
+ versionAncestorPairs: ancestorPairs,
3718
+ parentPairs,
3719
+ };
3720
+ }
3721
+
3722
+ function buildInlineInheritanceSource(
3723
+ pairs: Array<{ versionId: string; ancestorId: string }>
3724
+ ): string {
3725
+ return buildInlineValueSource(
3726
+ pairs.map(({ versionId, ancestorId }) => [versionId, ancestorId]),
3727
+ ["version_id", "ancestor_version_id"]
3728
+ );
3729
+ }
3730
+
3731
+ function buildInlineParentSource(
3732
+ pairs: Array<{ versionId: string; parentId: string }>
3733
+ ): string {
3734
+ return buildInlineValueSource(
3735
+ pairs.map(({ versionId, parentId }) => [versionId, parentId]),
3736
+ ["version_id", "parent_version_id"]
3737
+ );
3738
+ }
3739
+
3740
+ function buildInlineValueSource(
3741
+ rows: Array<[string, string]>,
3742
+ columns: [string, string]
3743
+ ): string {
3744
+ const selects = rows
3745
+ .map(
3746
+ ([left, right]) =>
3747
+ `SELECT '${escapeSqlLiteral(left)}' AS ${columns[0]}, '${escapeSqlLiteral(right)}' AS ${columns[1]}`
3748
+ )
3749
+ .join("\nUNION ALL\n");
3750
+ return `(\n${selects}\n) AS vi`;
3751
+ }