equipped 5.2.9 → 5.3.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 (781) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +362 -34
  3. package/dist/cjs/cache/adapters/in-memory/index.cjs +824 -0
  4. package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -0
  5. package/dist/cjs/cache/adapters/in-memory/index.min.cjs +4 -0
  6. package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -0
  7. package/dist/cjs/cache/adapters/redis/index.cjs +844 -0
  8. package/dist/cjs/cache/adapters/redis/index.cjs.map +1 -0
  9. package/dist/cjs/cache/adapters/redis/index.min.cjs +4 -0
  10. package/dist/cjs/cache/adapters/redis/index.min.cjs.map +1 -0
  11. package/dist/cjs/cache/index.cjs +602 -4
  12. package/dist/cjs/cache/index.cjs.map +1 -1
  13. package/dist/cjs/cache/index.min.cjs +3 -1
  14. package/dist/cjs/cache/index.min.cjs.map +1 -1
  15. package/dist/cjs/dbs/adapters/mongodb/index.cjs +1314 -0
  16. package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -0
  17. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +4 -0
  18. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -0
  19. package/dist/cjs/dbs/index.cjs +965 -6
  20. package/dist/cjs/dbs/index.cjs.map +1 -1
  21. package/dist/cjs/dbs/index.min.cjs +3 -1
  22. package/dist/cjs/dbs/index.min.cjs.map +1 -1
  23. package/dist/cjs/errors/index.cjs +127 -8
  24. package/dist/cjs/errors/index.cjs.map +1 -1
  25. package/dist/cjs/errors/index.min.cjs +1 -1
  26. package/dist/cjs/errors/index.min.cjs.map +1 -1
  27. package/dist/cjs/events/adapters/kafka/index.cjs +845 -0
  28. package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -0
  29. package/dist/cjs/events/adapters/kafka/index.min.cjs +4 -0
  30. package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -0
  31. package/dist/cjs/events/adapters/rabbitmq/index.cjs +836 -0
  32. package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -0
  33. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +4 -0
  34. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -0
  35. package/dist/cjs/events/index.cjs +33 -4
  36. package/dist/cjs/events/index.cjs.map +1 -1
  37. package/dist/cjs/events/index.min.cjs +1 -1
  38. package/dist/cjs/events/index.min.cjs.map +1 -1
  39. package/dist/cjs/index.cjs +588 -1
  40. package/dist/cjs/index.cjs.map +1 -1
  41. package/dist/cjs/index.min.cjs +3 -1
  42. package/dist/cjs/index.min.cjs.map +1 -1
  43. package/dist/cjs/instance/index.cjs +514 -64
  44. package/dist/cjs/instance/index.cjs.map +1 -1
  45. package/dist/cjs/instance/index.min.cjs +3 -3
  46. package/dist/cjs/instance/index.min.cjs.map +1 -1
  47. package/dist/cjs/jobs/adapters/redis/index.cjs +979 -0
  48. package/dist/cjs/jobs/adapters/redis/index.cjs.map +1 -0
  49. package/dist/cjs/jobs/adapters/redis/index.min.cjs +4 -0
  50. package/dist/cjs/jobs/adapters/redis/index.min.cjs.map +1 -0
  51. package/dist/cjs/jobs/index.cjs +55 -2
  52. package/dist/cjs/jobs/index.cjs.map +1 -1
  53. package/dist/cjs/jobs/index.min.cjs +1 -1
  54. package/dist/cjs/jobs/index.min.cjs.map +1 -1
  55. package/dist/cjs/orm/adapters/in-memory/index.cjs +2551 -0
  56. package/dist/cjs/orm/adapters/in-memory/index.cjs.map +1 -0
  57. package/dist/cjs/orm/adapters/in-memory/index.min.cjs +4 -0
  58. package/dist/cjs/orm/adapters/in-memory/index.min.cjs.map +1 -0
  59. package/dist/cjs/orm/adapters/json/index.cjs +3518 -0
  60. package/dist/cjs/orm/adapters/json/index.cjs.map +1 -0
  61. package/dist/cjs/orm/adapters/json/index.min.cjs +4 -0
  62. package/dist/cjs/orm/adapters/json/index.min.cjs.map +1 -0
  63. package/dist/cjs/orm/adapters/mongodb/index.cjs +3299 -0
  64. package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -0
  65. package/dist/cjs/orm/adapters/mongodb/index.min.cjs +4 -0
  66. package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -0
  67. package/dist/cjs/orm/adapters/postgresql/index.cjs +4114 -0
  68. package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -0
  69. package/dist/cjs/orm/adapters/postgresql/index.min.cjs +49 -0
  70. package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -0
  71. package/dist/cjs/orm/index.cjs +9216 -0
  72. package/dist/cjs/orm/index.cjs.map +1 -0
  73. package/dist/cjs/orm/index.min.cjs +4 -0
  74. package/dist/cjs/orm/index.min.cjs.map +1 -0
  75. package/dist/cjs/server/adapters/express/index.cjs +1967 -0
  76. package/dist/cjs/server/adapters/express/index.cjs.map +1 -0
  77. package/dist/cjs/server/adapters/express/index.min.cjs +32 -0
  78. package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -0
  79. package/dist/cjs/server/adapters/fastify/index.cjs +1974 -0
  80. package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -0
  81. package/dist/cjs/server/adapters/fastify/index.min.cjs +32 -0
  82. package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -0
  83. package/dist/cjs/server/index.cjs +1811 -9
  84. package/dist/cjs/server/index.cjs.map +1 -1
  85. package/dist/cjs/server/index.min.cjs +31 -1
  86. package/dist/cjs/server/index.min.cjs.map +1 -1
  87. package/dist/cjs/types/index.cjs +18 -1
  88. package/dist/cjs/types/index.cjs.map +1 -1
  89. package/dist/cjs/types/index.min.cjs +1 -1
  90. package/dist/cjs/types/index.min.cjs.map +1 -1
  91. package/dist/cjs/utilities/index.cjs +862 -7
  92. package/dist/cjs/utilities/index.cjs.map +1 -1
  93. package/dist/cjs/utilities/index.min.cjs +3 -1
  94. package/dist/cjs/utilities/index.min.cjs.map +1 -1
  95. package/dist/cjs/validations/index.cjs +679 -10
  96. package/dist/cjs/validations/index.cjs.map +1 -1
  97. package/dist/cjs/validations/index.min.cjs +3 -1
  98. package/dist/cjs/validations/index.min.cjs.map +1 -1
  99. package/dist/esm/cache/adapters/in-memory/index.min.mjs +2 -0
  100. package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -0
  101. package/dist/esm/cache/adapters/in-memory/index.mjs +93 -0
  102. package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -0
  103. package/dist/esm/cache/adapters/redis/index.min.mjs +2 -0
  104. package/dist/esm/cache/adapters/redis/index.mjs +13 -0
  105. package/dist/esm/cache/index.min.mjs +1 -1
  106. package/dist/esm/cache/index.min.mjs.map +1 -1
  107. package/dist/esm/cache/index.mjs +9 -4
  108. package/dist/esm/cache/index.mjs.map +1 -1
  109. package/dist/esm/chunk-4JLDXF7T.min.mjs +2 -0
  110. package/dist/esm/chunk-4JLDXF7T.min.mjs.map +1 -0
  111. package/dist/{types/events/types/kafka.js → esm/chunk-4MXYZS5R.mjs} +60 -37
  112. package/dist/esm/chunk-4MXYZS5R.mjs.map +1 -0
  113. package/dist/esm/chunk-5VW3JAFR.min.mjs +2 -0
  114. package/dist/esm/chunk-5VW3JAFR.min.mjs.map +1 -0
  115. package/dist/esm/chunk-AKQBDYUO.mjs +126 -0
  116. package/dist/esm/chunk-AKQBDYUO.mjs.map +1 -0
  117. package/dist/esm/chunk-AQY7QVYI.min.mjs +2 -0
  118. package/dist/esm/chunk-B5QQ32YY.min.mjs +2 -0
  119. package/dist/esm/chunk-B5QQ32YY.min.mjs.map +1 -0
  120. package/dist/esm/chunk-BJNIUCPT.min.mjs +2 -0
  121. package/dist/esm/chunk-BJNIUCPT.min.mjs.map +1 -0
  122. package/dist/esm/chunk-DKPZJIIR.mjs +29 -0
  123. package/dist/esm/chunk-DKPZJIIR.mjs.map +1 -0
  124. package/dist/esm/chunk-DSUJ5FUL.min.mjs +2 -0
  125. package/dist/esm/chunk-DSUJ5FUL.min.mjs.map +1 -0
  126. package/dist/esm/chunk-FLAPYQUT.min.mjs +32 -0
  127. package/dist/esm/chunk-FLAPYQUT.min.mjs.map +1 -0
  128. package/dist/esm/chunk-J5LGTIGS.mjs +10 -0
  129. package/dist/esm/chunk-JH6EBXY4.mjs +53 -0
  130. package/dist/esm/chunk-JH6EBXY4.mjs.map +1 -0
  131. package/dist/esm/chunk-MDQKODYQ.mjs +2035 -0
  132. package/dist/esm/chunk-MDQKODYQ.mjs.map +1 -0
  133. package/dist/esm/chunk-PCAUXBAG.min.mjs +2 -0
  134. package/dist/esm/chunk-PCAUXBAG.min.mjs.map +1 -0
  135. package/dist/esm/chunk-PNZNNUMN.mjs +113 -0
  136. package/dist/esm/chunk-PNZNNUMN.mjs.map +1 -0
  137. package/dist/esm/chunk-PQCBVQL6.mjs +1280 -0
  138. package/dist/esm/chunk-PQCBVQL6.mjs.map +1 -0
  139. package/dist/esm/chunk-QHLKB47N.min.mjs +2 -0
  140. package/dist/esm/chunk-QHLKB47N.min.mjs.map +1 -0
  141. package/dist/esm/chunk-SGZNOYC3.min.mjs +2 -0
  142. package/dist/esm/chunk-SGZNOYC3.min.mjs.map +1 -0
  143. package/dist/esm/chunk-TVTYDU2D.mjs +795 -0
  144. package/dist/esm/chunk-TVTYDU2D.mjs.map +1 -0
  145. package/dist/esm/chunk-VCCS7CAI.mjs +8 -0
  146. package/dist/esm/chunk-VCCS7CAI.mjs.map +1 -0
  147. package/dist/esm/chunk-Z2TZ3KR7.mjs +22 -0
  148. package/dist/esm/chunk-Z2TZ3KR7.mjs.map +1 -0
  149. package/dist/esm/chunk-ZGMFFK6Y.min.mjs +2 -0
  150. package/dist/esm/chunk-ZGMFFK6Y.min.mjs.map +1 -0
  151. package/dist/esm/dbs/adapters/mongodb/index.min.mjs +2 -0
  152. package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -0
  153. package/dist/esm/dbs/adapters/mongodb/index.mjs +419 -0
  154. package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -0
  155. package/dist/esm/dbs/index.min.mjs +1 -1
  156. package/dist/esm/dbs/index.min.mjs.map +1 -1
  157. package/dist/esm/dbs/index.mjs +22 -6
  158. package/dist/esm/dbs/index.mjs.map +1 -1
  159. package/dist/esm/errors/index.min.mjs +1 -1
  160. package/dist/esm/errors/index.min.mjs.map +1 -1
  161. package/dist/esm/errors/index.mjs +22 -8
  162. package/dist/esm/errors/index.mjs.map +1 -1
  163. package/dist/esm/events/adapters/kafka/index.min.mjs +2 -0
  164. package/dist/esm/events/adapters/kafka/index.min.mjs.map +1 -0
  165. package/dist/esm/events/adapters/kafka/index.mjs +12 -0
  166. package/dist/esm/events/adapters/kafka/index.mjs.map +1 -0
  167. package/dist/esm/events/adapters/rabbitmq/index.min.mjs +2 -0
  168. package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -0
  169. package/dist/esm/events/adapters/rabbitmq/index.mjs +92 -0
  170. package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -0
  171. package/dist/esm/events/index.min.mjs +1 -1
  172. package/dist/esm/events/index.min.mjs.map +1 -1
  173. package/dist/esm/events/index.mjs +7 -4
  174. package/dist/esm/events/index.mjs.map +1 -1
  175. package/dist/esm/index.min.mjs +1 -1
  176. package/dist/esm/index.min.mjs.map +1 -1
  177. package/dist/esm/index.mjs +8 -1
  178. package/dist/esm/index.mjs.map +1 -1
  179. package/dist/esm/instance/index.min.mjs +1 -3
  180. package/dist/esm/instance/index.min.mjs.map +1 -1
  181. package/dist/esm/instance/index.mjs +4 -132
  182. package/dist/esm/instance/index.mjs.map +1 -1
  183. package/dist/esm/introspection-32BRYKYY.mjs +10 -0
  184. package/dist/esm/introspection-32BRYKYY.mjs.map +1 -0
  185. package/dist/esm/introspection-A72WMWE3.min.mjs +2 -0
  186. package/dist/esm/introspection-A72WMWE3.min.mjs.map +1 -0
  187. package/dist/esm/jobs/adapters/redis/index.min.mjs +2 -0
  188. package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -0
  189. package/dist/esm/jobs/{types/redis.mjs → adapters/redis/index.mjs} +71 -56
  190. package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -0
  191. package/dist/esm/jobs/index.min.mjs +1 -1
  192. package/dist/esm/jobs/index.min.mjs.map +1 -1
  193. package/dist/esm/jobs/index.mjs +9 -2
  194. package/dist/esm/jobs/index.mjs.map +1 -1
  195. package/dist/esm/orm/adapters/in-memory/index.min.mjs +2 -0
  196. package/dist/esm/orm/adapters/in-memory/index.min.mjs.map +1 -0
  197. package/dist/esm/orm/adapters/in-memory/index.mjs +11 -0
  198. package/dist/esm/orm/adapters/in-memory/index.mjs.map +1 -0
  199. package/dist/esm/orm/adapters/json/index.min.mjs +2 -0
  200. package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -0
  201. package/dist/esm/orm/adapters/json/index.mjs +980 -0
  202. package/dist/esm/orm/adapters/json/index.mjs.map +1 -0
  203. package/dist/esm/orm/adapters/mongodb/index.min.mjs +2 -0
  204. package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -0
  205. package/dist/esm/orm/adapters/mongodb/index.mjs +1539 -0
  206. package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -0
  207. package/dist/esm/orm/adapters/postgresql/index.min.mjs +47 -0
  208. package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -0
  209. package/dist/esm/orm/adapters/postgresql/index.mjs +2070 -0
  210. package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -0
  211. package/dist/esm/orm/index.min.mjs +2 -0
  212. package/dist/esm/orm/index.min.mjs.map +1 -0
  213. package/dist/esm/orm/index.mjs +7326 -0
  214. package/dist/esm/orm/index.mjs.map +1 -0
  215. package/dist/esm/server/adapters/express/index.min.mjs +2 -0
  216. package/dist/esm/server/adapters/express/index.min.mjs.map +1 -0
  217. package/dist/esm/server/adapters/express/index.mjs +177 -0
  218. package/dist/esm/server/adapters/express/index.mjs.map +1 -0
  219. package/dist/esm/server/adapters/fastify/index.min.mjs +2 -0
  220. package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -0
  221. package/dist/esm/server/adapters/fastify/index.mjs +185 -0
  222. package/dist/esm/server/adapters/fastify/index.mjs.map +1 -0
  223. package/dist/esm/server/index.min.mjs +1 -1
  224. package/dist/esm/server/index.min.mjs.map +1 -1
  225. package/dist/esm/server/index.mjs +38 -9
  226. package/dist/esm/server/index.mjs.map +1 -1
  227. package/dist/esm/types/index.min.mjs +0 -1
  228. package/dist/esm/types/index.min.mjs.map +1 -1
  229. package/dist/esm/types/index.mjs +0 -1
  230. package/dist/esm/types/index.mjs.map +1 -1
  231. package/dist/esm/utilities/index.min.mjs +1 -1
  232. package/dist/esm/utilities/index.min.mjs.map +1 -1
  233. package/dist/esm/utilities/index.mjs +22 -9
  234. package/dist/esm/utilities/index.mjs.map +1 -1
  235. package/dist/esm/validations/index.min.mjs +1 -1
  236. package/dist/esm/validations/index.min.mjs.map +1 -1
  237. package/dist/esm/validations/index.mjs +8 -18
  238. package/dist/esm/validations/index.mjs.map +1 -1
  239. package/dist/types/adapter-Coap9ISX.d.ts +1435 -0
  240. package/dist/types/{fastify-DLPUK3vD.d.ts → base-DVr0fHil.d.ts} +76 -143
  241. package/dist/types/cache/adapters/in-memory/index.d.ts +21 -0
  242. package/dist/types/cache/adapters/in-memory/index.js +92 -0
  243. package/dist/types/cache/adapters/redis/index.d.ts +73 -0
  244. package/dist/types/cache/adapters/redis/index.js +12 -0
  245. package/dist/types/cache/index.d.ts +2 -42
  246. package/dist/types/cache/index.js +9 -4
  247. package/dist/types/chunk-3M4PBZAQ.js +125 -0
  248. package/dist/types/chunk-3TKJGSCZ.js +21 -0
  249. package/dist/types/chunk-65EHKCDZ.js +112 -0
  250. package/dist/types/chunk-JQ2FWX4W.js +1279 -0
  251. package/dist/types/chunk-KZKFYO4V.js +7 -0
  252. package/dist/types/chunk-LN3A6R4Y.js +28 -0
  253. package/dist/types/chunk-MLKGABMK.js +9 -0
  254. package/dist/types/chunk-NJ2FHI3U.js +794 -0
  255. package/dist/types/chunk-OHFTQGQG.js +52 -0
  256. package/dist/{esm/events/types/kafka.mjs → types/chunk-XGGGAEET.js} +59 -38
  257. package/dist/types/chunk-YTY3EFNB.js +2034 -0
  258. package/dist/types/{core-BrkNSwvc.d.ts → core-tNlIMH9Y.d.ts} +48 -38
  259. package/dist/types/dbs/adapters/mongodb/index.d.ts +43 -0
  260. package/dist/types/dbs/adapters/mongodb/index.js +418 -0
  261. package/dist/types/dbs/index.d.ts +14 -12
  262. package/dist/types/dbs/index.js +22 -6
  263. package/dist/types/equippedError-Cmo60Kn-.d.ts +8 -0
  264. package/dist/types/errors/index.d.ts +3 -3
  265. package/dist/types/errors/index.js +22 -8
  266. package/dist/types/events/adapters/kafka/index.d.ts +83 -0
  267. package/dist/types/events/adapters/kafka/index.js +11 -0
  268. package/dist/types/events/adapters/rabbitmq/index.d.ts +41 -0
  269. package/dist/types/events/adapters/rabbitmq/index.js +91 -0
  270. package/dist/types/events/index.d.ts +11 -11
  271. package/dist/types/events/index.js +7 -4
  272. package/dist/types/index.d.ts +2 -25
  273. package/dist/types/index.js +8 -1
  274. package/dist/types/instance/index.d.ts +12 -179
  275. package/dist/types/instance/index.js +4 -132
  276. package/dist/types/introspection-VOIU3XE6.js +9 -0
  277. package/dist/types/jobs/adapters/redis/index.d.ts +93 -0
  278. package/dist/types/jobs/{types/redis.js → adapters/redis/index.js} +70 -55
  279. package/dist/types/jobs/index.d.ts +19 -35
  280. package/dist/types/jobs/index.js +9 -2
  281. package/dist/types/orm/adapters/in-memory/index.d.ts +92 -0
  282. package/dist/types/orm/adapters/in-memory/index.js +10 -0
  283. package/dist/types/orm/adapters/json/index.d.ts +72 -0
  284. package/dist/types/orm/adapters/json/index.js +979 -0
  285. package/dist/types/orm/adapters/mongodb/index.d.ts +74 -0
  286. package/dist/types/orm/adapters/mongodb/index.js +1538 -0
  287. package/dist/types/orm/adapters/postgresql/index.d.ts +112 -0
  288. package/dist/types/orm/adapters/postgresql/index.js +2069 -0
  289. package/dist/types/orm/index.d.ts +160 -0
  290. package/dist/types/orm/index.js +7325 -0
  291. package/dist/types/{requestError-C2PNWUrt.d.ts → requestError-DdaL8hc3.d.ts} +2 -8
  292. package/dist/types/server/adapters/express/index.d.ts +196 -0
  293. package/dist/types/server/adapters/express/index.js +176 -0
  294. package/dist/types/server/adapters/fastify/index.d.ts +221 -0
  295. package/dist/types/server/adapters/fastify/index.js +184 -0
  296. package/dist/types/server/index.d.ts +10 -11
  297. package/dist/types/server/index.js +38 -9
  298. package/dist/types/types/index.js +0 -1
  299. package/dist/types/utilities/index.d.ts +22 -9
  300. package/dist/types/utilities/index.js +22 -9
  301. package/dist/types/{validationError-Bw8OYv5s.d.ts → validationError-oigtHqBi.d.ts} +1 -1
  302. package/dist/types/validations/index.d.ts +3 -2
  303. package/dist/types/validations/index.js +8 -18
  304. package/package.json +155 -18
  305. package/dist/cjs/audit/events.cjs +0 -101
  306. package/dist/cjs/audit/events.cjs.map +0 -1
  307. package/dist/cjs/audit/events.min.cjs +0 -2
  308. package/dist/cjs/audit/events.min.cjs.map +0 -1
  309. package/dist/cjs/audit/index.cjs +0 -2
  310. package/dist/cjs/audit/index.cjs.map +0 -1
  311. package/dist/cjs/audit/index.min.cjs +0 -2
  312. package/dist/cjs/audit/index.min.cjs.map +0 -1
  313. package/dist/cjs/cache/base.cjs +0 -6
  314. package/dist/cjs/cache/base.cjs.map +0 -1
  315. package/dist/cjs/cache/base.min.cjs +0 -2
  316. package/dist/cjs/cache/base.min.cjs.map +0 -1
  317. package/dist/cjs/cache/pipes.cjs +0 -16
  318. package/dist/cjs/cache/pipes.cjs.map +0 -1
  319. package/dist/cjs/cache/pipes.min.cjs +0 -2
  320. package/dist/cjs/cache/pipes.min.cjs.map +0 -1
  321. package/dist/cjs/cache/types/in-memory.cjs +0 -47
  322. package/dist/cjs/cache/types/in-memory.cjs.map +0 -1
  323. package/dist/cjs/cache/types/in-memory.min.cjs +0 -2
  324. package/dist/cjs/cache/types/in-memory.min.cjs.map +0 -1
  325. package/dist/cjs/cache/types/redis.cjs +0 -55
  326. package/dist/cjs/cache/types/redis.cjs.map +0 -1
  327. package/dist/cjs/cache/types/redis.min.cjs +0 -2
  328. package/dist/cjs/cache/types/redis.min.cjs.map +0 -1
  329. package/dist/cjs/dbs/base/changes.cjs +0 -36
  330. package/dist/cjs/dbs/base/changes.cjs.map +0 -1
  331. package/dist/cjs/dbs/base/changes.min.cjs +0 -2
  332. package/dist/cjs/dbs/base/changes.min.cjs.map +0 -1
  333. package/dist/cjs/dbs/base/core.cjs +0 -1
  334. package/dist/cjs/dbs/base/core.cjs.map +0 -1
  335. package/dist/cjs/dbs/base/core.min.cjs +0 -1
  336. package/dist/cjs/dbs/base/core.min.cjs.map +0 -1
  337. package/dist/cjs/dbs/base/db.cjs +0 -14
  338. package/dist/cjs/dbs/base/db.cjs.map +0 -1
  339. package/dist/cjs/dbs/base/db.min.cjs +0 -2
  340. package/dist/cjs/dbs/base/db.min.cjs.map +0 -1
  341. package/dist/cjs/dbs/base/types.cjs +0 -2
  342. package/dist/cjs/dbs/base/types.cjs.map +0 -1
  343. package/dist/cjs/dbs/base/types.min.cjs +0 -2
  344. package/dist/cjs/dbs/base/types.min.cjs.map +0 -1
  345. package/dist/cjs/dbs/mongo/changes.cjs +0 -81
  346. package/dist/cjs/dbs/mongo/changes.cjs.map +0 -1
  347. package/dist/cjs/dbs/mongo/changes.min.cjs +0 -2
  348. package/dist/cjs/dbs/mongo/changes.min.cjs.map +0 -1
  349. package/dist/cjs/dbs/mongo/db.cjs +0 -225
  350. package/dist/cjs/dbs/mongo/db.cjs.map +0 -1
  351. package/dist/cjs/dbs/mongo/db.min.cjs +0 -2
  352. package/dist/cjs/dbs/mongo/db.min.cjs.map +0 -1
  353. package/dist/cjs/dbs/mongo/query.cjs +0 -66
  354. package/dist/cjs/dbs/mongo/query.cjs.map +0 -1
  355. package/dist/cjs/dbs/mongo/query.min.cjs +0 -2
  356. package/dist/cjs/dbs/mongo/query.min.cjs.map +0 -1
  357. package/dist/cjs/dbs/pipes.cjs +0 -104
  358. package/dist/cjs/dbs/pipes.cjs.map +0 -1
  359. package/dist/cjs/dbs/pipes.min.cjs +0 -2
  360. package/dist/cjs/dbs/pipes.min.cjs.map +0 -1
  361. package/dist/cjs/errors/equippedError.cjs +0 -12
  362. package/dist/cjs/errors/equippedError.cjs.map +0 -1
  363. package/dist/cjs/errors/equippedError.min.cjs +0 -2
  364. package/dist/cjs/errors/equippedError.min.cjs.map +0 -1
  365. package/dist/cjs/errors/requestError.cjs +0 -12
  366. package/dist/cjs/errors/requestError.cjs.map +0 -1
  367. package/dist/cjs/errors/requestError.min.cjs +0 -2
  368. package/dist/cjs/errors/requestError.min.cjs.map +0 -1
  369. package/dist/cjs/errors/types/badRequestError.cjs +0 -12
  370. package/dist/cjs/errors/types/badRequestError.cjs.map +0 -1
  371. package/dist/cjs/errors/types/badRequestError.min.cjs +0 -2
  372. package/dist/cjs/errors/types/badRequestError.min.cjs.map +0 -1
  373. package/dist/cjs/errors/types/notAuthenticatedError.cjs +0 -12
  374. package/dist/cjs/errors/types/notAuthenticatedError.cjs.map +0 -1
  375. package/dist/cjs/errors/types/notAuthenticatedError.min.cjs +0 -2
  376. package/dist/cjs/errors/types/notAuthenticatedError.min.cjs.map +0 -1
  377. package/dist/cjs/errors/types/notAuthorizedError.cjs +0 -12
  378. package/dist/cjs/errors/types/notAuthorizedError.cjs.map +0 -1
  379. package/dist/cjs/errors/types/notAuthorizedError.min.cjs +0 -2
  380. package/dist/cjs/errors/types/notAuthorizedError.min.cjs.map +0 -1
  381. package/dist/cjs/errors/types/notFoundError.cjs +0 -12
  382. package/dist/cjs/errors/types/notFoundError.cjs.map +0 -1
  383. package/dist/cjs/errors/types/notFoundError.min.cjs +0 -2
  384. package/dist/cjs/errors/types/notFoundError.min.cjs.map +0 -1
  385. package/dist/cjs/errors/types/tokenExpired.cjs +0 -12
  386. package/dist/cjs/errors/types/tokenExpired.cjs.map +0 -1
  387. package/dist/cjs/errors/types/tokenExpired.min.cjs +0 -2
  388. package/dist/cjs/errors/types/tokenExpired.min.cjs.map +0 -1
  389. package/dist/cjs/errors/types/validationError.cjs +0 -16
  390. package/dist/cjs/errors/types/validationError.cjs.map +0 -1
  391. package/dist/cjs/errors/types/validationError.min.cjs +0 -2
  392. package/dist/cjs/errors/types/validationError.min.cjs.map +0 -1
  393. package/dist/cjs/events/base.cjs +0 -6
  394. package/dist/cjs/events/base.cjs.map +0 -1
  395. package/dist/cjs/events/base.min.cjs +0 -2
  396. package/dist/cjs/events/base.min.cjs.map +0 -1
  397. package/dist/cjs/events/pipes.cjs +0 -28
  398. package/dist/cjs/events/pipes.cjs.map +0 -1
  399. package/dist/cjs/events/pipes.min.cjs +0 -2
  400. package/dist/cjs/events/pipes.min.cjs.map +0 -1
  401. package/dist/cjs/events/types/kafka.cjs +0 -80
  402. package/dist/cjs/events/types/kafka.cjs.map +0 -1
  403. package/dist/cjs/events/types/kafka.min.cjs +0 -2
  404. package/dist/cjs/events/types/kafka.min.cjs.map +0 -1
  405. package/dist/cjs/events/types/rabbitmq.cjs +0 -54
  406. package/dist/cjs/events/types/rabbitmq.cjs.map +0 -1
  407. package/dist/cjs/events/types/rabbitmq.min.cjs +0 -2
  408. package/dist/cjs/events/types/rabbitmq.min.cjs.map +0 -1
  409. package/dist/cjs/instance/hooks.cjs +0 -26
  410. package/dist/cjs/instance/hooks.cjs.map +0 -1
  411. package/dist/cjs/instance/hooks.min.cjs +0 -2
  412. package/dist/cjs/instance/hooks.min.cjs.map +0 -1
  413. package/dist/cjs/instance/settings.cjs +0 -57
  414. package/dist/cjs/instance/settings.cjs.map +0 -1
  415. package/dist/cjs/instance/settings.min.cjs +0 -2
  416. package/dist/cjs/instance/settings.min.cjs.map +0 -1
  417. package/dist/cjs/jobs/pipes.cjs +0 -13
  418. package/dist/cjs/jobs/pipes.cjs.map +0 -1
  419. package/dist/cjs/jobs/pipes.min.cjs +0 -2
  420. package/dist/cjs/jobs/pipes.min.cjs.map +0 -1
  421. package/dist/cjs/jobs/types/redis.cjs +0 -106
  422. package/dist/cjs/jobs/types/redis.cjs.map +0 -1
  423. package/dist/cjs/jobs/types/redis.min.cjs +0 -2
  424. package/dist/cjs/jobs/types/redis.min.cjs.map +0 -1
  425. package/dist/cjs/server/impls/base.cjs +0 -211
  426. package/dist/cjs/server/impls/base.cjs.map +0 -1
  427. package/dist/cjs/server/impls/base.min.cjs +0 -2
  428. package/dist/cjs/server/impls/base.min.cjs.map +0 -1
  429. package/dist/cjs/server/impls/express.cjs +0 -111
  430. package/dist/cjs/server/impls/express.cjs.map +0 -1
  431. package/dist/cjs/server/impls/express.min.cjs +0 -2
  432. package/dist/cjs/server/impls/express.min.cjs.map +0 -1
  433. package/dist/cjs/server/impls/fastify.cjs +0 -121
  434. package/dist/cjs/server/impls/fastify.cjs.map +0 -1
  435. package/dist/cjs/server/impls/fastify.min.cjs +0 -2
  436. package/dist/cjs/server/impls/fastify.min.cjs.map +0 -1
  437. package/dist/cjs/server/middlewares/index.cjs +0 -2
  438. package/dist/cjs/server/middlewares/index.cjs.map +0 -1
  439. package/dist/cjs/server/middlewares/index.min.cjs +0 -2
  440. package/dist/cjs/server/middlewares/index.min.cjs.map +0 -1
  441. package/dist/cjs/server/middlewares/requireAuthUser.cjs +0 -22
  442. package/dist/cjs/server/middlewares/requireAuthUser.cjs.map +0 -1
  443. package/dist/cjs/server/middlewares/requireAuthUser.min.cjs +0 -2
  444. package/dist/cjs/server/middlewares/requireAuthUser.min.cjs.map +0 -1
  445. package/dist/cjs/server/openapi.cjs +0 -191
  446. package/dist/cjs/server/openapi.cjs.map +0 -1
  447. package/dist/cjs/server/openapi.min.cjs +0 -30
  448. package/dist/cjs/server/openapi.min.cjs.map +0 -1
  449. package/dist/cjs/server/pipes.cjs +0 -67
  450. package/dist/cjs/server/pipes.cjs.map +0 -1
  451. package/dist/cjs/server/pipes.min.cjs +0 -2
  452. package/dist/cjs/server/pipes.min.cjs.map +0 -1
  453. package/dist/cjs/server/requests-auth-methods/apiKeys.cjs +0 -21
  454. package/dist/cjs/server/requests-auth-methods/apiKeys.cjs.map +0 -1
  455. package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs +0 -2
  456. package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs.map +0 -1
  457. package/dist/cjs/server/requests-auth-methods/base.cjs +0 -20
  458. package/dist/cjs/server/requests-auth-methods/base.cjs.map +0 -1
  459. package/dist/cjs/server/requests-auth-methods/base.min.cjs +0 -2
  460. package/dist/cjs/server/requests-auth-methods/base.min.cjs.map +0 -1
  461. package/dist/cjs/server/requests-auth-methods/index.cjs +0 -4
  462. package/dist/cjs/server/requests-auth-methods/index.cjs.map +0 -1
  463. package/dist/cjs/server/requests-auth-methods/index.min.cjs +0 -2
  464. package/dist/cjs/server/requests-auth-methods/index.min.cjs.map +0 -1
  465. package/dist/cjs/server/requests-auth-methods/jwt.cjs +0 -78
  466. package/dist/cjs/server/requests-auth-methods/jwt.cjs.map +0 -1
  467. package/dist/cjs/server/requests-auth-methods/jwt.min.cjs +0 -2
  468. package/dist/cjs/server/requests-auth-methods/jwt.min.cjs.map +0 -1
  469. package/dist/cjs/server/requests.cjs +0 -80
  470. package/dist/cjs/server/requests.cjs.map +0 -1
  471. package/dist/cjs/server/requests.min.cjs +0 -2
  472. package/dist/cjs/server/requests.min.cjs.map +0 -1
  473. package/dist/cjs/server/routes.cjs +0 -74
  474. package/dist/cjs/server/routes.cjs.map +0 -1
  475. package/dist/cjs/server/routes.min.cjs +0 -2
  476. package/dist/cjs/server/routes.min.cjs.map +0 -1
  477. package/dist/cjs/server/sockets.cjs +0 -126
  478. package/dist/cjs/server/sockets.cjs.map +0 -1
  479. package/dist/cjs/server/sockets.min.cjs +0 -2
  480. package/dist/cjs/server/sockets.min.cjs.map +0 -1
  481. package/dist/cjs/server/types.cjs +0 -34
  482. package/dist/cjs/server/types.cjs.map +0 -1
  483. package/dist/cjs/server/types.min.cjs +0 -2
  484. package/dist/cjs/server/types.min.cjs.map +0 -1
  485. package/dist/cjs/types/overrides.cjs +0 -1
  486. package/dist/cjs/types/overrides.cjs.map +0 -1
  487. package/dist/cjs/types/overrides.min.cjs +0 -1
  488. package/dist/cjs/types/overrides.min.cjs.map +0 -1
  489. package/dist/cjs/utilities/authProviders.cjs +0 -53
  490. package/dist/cjs/utilities/authProviders.cjs.map +0 -1
  491. package/dist/cjs/utilities/authProviders.min.cjs +0 -2
  492. package/dist/cjs/utilities/authProviders.min.cjs.map +0 -1
  493. package/dist/cjs/utilities/hash.cjs +0 -17
  494. package/dist/cjs/utilities/hash.cjs.map +0 -1
  495. package/dist/cjs/utilities/hash.min.cjs +0 -2
  496. package/dist/cjs/utilities/hash.min.cjs.map +0 -1
  497. package/dist/cjs/utilities/json.cjs +0 -16
  498. package/dist/cjs/utilities/json.cjs.map +0 -1
  499. package/dist/cjs/utilities/json.min.cjs +0 -2
  500. package/dist/cjs/utilities/json.min.cjs.map +0 -1
  501. package/dist/cjs/utilities/media.cjs +0 -13
  502. package/dist/cjs/utilities/media.cjs.map +0 -1
  503. package/dist/cjs/utilities/media.min.cjs +0 -2
  504. package/dist/cjs/utilities/media.min.cjs.map +0 -1
  505. package/dist/cjs/utilities/random.cjs +0 -12
  506. package/dist/cjs/utilities/random.cjs.map +0 -1
  507. package/dist/cjs/utilities/random.min.cjs +0 -2
  508. package/dist/cjs/utilities/random.min.cjs.map +0 -1
  509. package/dist/cjs/utilities/retry.cjs +0 -14
  510. package/dist/cjs/utilities/retry.cjs.map +0 -1
  511. package/dist/cjs/utilities/retry.min.cjs +0 -2
  512. package/dist/cjs/utilities/retry.min.cjs.map +0 -1
  513. package/dist/cjs/validations/valleyed.cjs +0 -43
  514. package/dist/cjs/validations/valleyed.cjs.map +0 -1
  515. package/dist/cjs/validations/valleyed.min.cjs +0 -2
  516. package/dist/cjs/validations/valleyed.min.cjs.map +0 -1
  517. package/dist/esm/audit/events.min.mjs +0 -2
  518. package/dist/esm/audit/events.min.mjs.map +0 -1
  519. package/dist/esm/audit/events.mjs +0 -101
  520. package/dist/esm/audit/events.mjs.map +0 -1
  521. package/dist/esm/audit/index.min.mjs +0 -2
  522. package/dist/esm/audit/index.min.mjs.map +0 -1
  523. package/dist/esm/audit/index.mjs +0 -2
  524. package/dist/esm/audit/index.mjs.map +0 -1
  525. package/dist/esm/cache/base.min.mjs +0 -2
  526. package/dist/esm/cache/base.min.mjs.map +0 -1
  527. package/dist/esm/cache/base.mjs +0 -6
  528. package/dist/esm/cache/base.mjs.map +0 -1
  529. package/dist/esm/cache/pipes.min.mjs +0 -2
  530. package/dist/esm/cache/pipes.min.mjs.map +0 -1
  531. package/dist/esm/cache/pipes.mjs +0 -16
  532. package/dist/esm/cache/pipes.mjs.map +0 -1
  533. package/dist/esm/cache/types/in-memory.min.mjs +0 -2
  534. package/dist/esm/cache/types/in-memory.min.mjs.map +0 -1
  535. package/dist/esm/cache/types/in-memory.mjs +0 -47
  536. package/dist/esm/cache/types/in-memory.mjs.map +0 -1
  537. package/dist/esm/cache/types/redis.min.mjs +0 -2
  538. package/dist/esm/cache/types/redis.min.mjs.map +0 -1
  539. package/dist/esm/cache/types/redis.mjs +0 -55
  540. package/dist/esm/cache/types/redis.mjs.map +0 -1
  541. package/dist/esm/dbs/base/changes.min.mjs +0 -2
  542. package/dist/esm/dbs/base/changes.min.mjs.map +0 -1
  543. package/dist/esm/dbs/base/changes.mjs +0 -36
  544. package/dist/esm/dbs/base/changes.mjs.map +0 -1
  545. package/dist/esm/dbs/base/core.min.mjs +0 -1
  546. package/dist/esm/dbs/base/core.mjs +0 -1
  547. package/dist/esm/dbs/base/db.min.mjs +0 -2
  548. package/dist/esm/dbs/base/db.min.mjs.map +0 -1
  549. package/dist/esm/dbs/base/db.mjs +0 -14
  550. package/dist/esm/dbs/base/db.mjs.map +0 -1
  551. package/dist/esm/dbs/base/types.min.mjs +0 -2
  552. package/dist/esm/dbs/base/types.min.mjs.map +0 -1
  553. package/dist/esm/dbs/base/types.mjs +0 -2
  554. package/dist/esm/dbs/base/types.mjs.map +0 -1
  555. package/dist/esm/dbs/mongo/changes.min.mjs +0 -2
  556. package/dist/esm/dbs/mongo/changes.min.mjs.map +0 -1
  557. package/dist/esm/dbs/mongo/changes.mjs +0 -81
  558. package/dist/esm/dbs/mongo/changes.mjs.map +0 -1
  559. package/dist/esm/dbs/mongo/db.min.mjs +0 -2
  560. package/dist/esm/dbs/mongo/db.min.mjs.map +0 -1
  561. package/dist/esm/dbs/mongo/db.mjs +0 -225
  562. package/dist/esm/dbs/mongo/db.mjs.map +0 -1
  563. package/dist/esm/dbs/mongo/query.min.mjs +0 -2
  564. package/dist/esm/dbs/mongo/query.min.mjs.map +0 -1
  565. package/dist/esm/dbs/mongo/query.mjs +0 -66
  566. package/dist/esm/dbs/mongo/query.mjs.map +0 -1
  567. package/dist/esm/dbs/pipes.min.mjs +0 -2
  568. package/dist/esm/dbs/pipes.min.mjs.map +0 -1
  569. package/dist/esm/dbs/pipes.mjs +0 -104
  570. package/dist/esm/dbs/pipes.mjs.map +0 -1
  571. package/dist/esm/errors/equippedError.min.mjs +0 -2
  572. package/dist/esm/errors/equippedError.min.mjs.map +0 -1
  573. package/dist/esm/errors/equippedError.mjs +0 -12
  574. package/dist/esm/errors/equippedError.mjs.map +0 -1
  575. package/dist/esm/errors/requestError.min.mjs +0 -2
  576. package/dist/esm/errors/requestError.min.mjs.map +0 -1
  577. package/dist/esm/errors/requestError.mjs +0 -12
  578. package/dist/esm/errors/requestError.mjs.map +0 -1
  579. package/dist/esm/errors/types/badRequestError.min.mjs +0 -2
  580. package/dist/esm/errors/types/badRequestError.min.mjs.map +0 -1
  581. package/dist/esm/errors/types/badRequestError.mjs +0 -12
  582. package/dist/esm/errors/types/badRequestError.mjs.map +0 -1
  583. package/dist/esm/errors/types/notAuthenticatedError.min.mjs +0 -2
  584. package/dist/esm/errors/types/notAuthenticatedError.min.mjs.map +0 -1
  585. package/dist/esm/errors/types/notAuthenticatedError.mjs +0 -12
  586. package/dist/esm/errors/types/notAuthenticatedError.mjs.map +0 -1
  587. package/dist/esm/errors/types/notAuthorizedError.min.mjs +0 -2
  588. package/dist/esm/errors/types/notAuthorizedError.min.mjs.map +0 -1
  589. package/dist/esm/errors/types/notAuthorizedError.mjs +0 -12
  590. package/dist/esm/errors/types/notAuthorizedError.mjs.map +0 -1
  591. package/dist/esm/errors/types/notFoundError.min.mjs +0 -2
  592. package/dist/esm/errors/types/notFoundError.min.mjs.map +0 -1
  593. package/dist/esm/errors/types/notFoundError.mjs +0 -12
  594. package/dist/esm/errors/types/notFoundError.mjs.map +0 -1
  595. package/dist/esm/errors/types/tokenExpired.min.mjs +0 -2
  596. package/dist/esm/errors/types/tokenExpired.min.mjs.map +0 -1
  597. package/dist/esm/errors/types/tokenExpired.mjs +0 -12
  598. package/dist/esm/errors/types/tokenExpired.mjs.map +0 -1
  599. package/dist/esm/errors/types/validationError.min.mjs +0 -2
  600. package/dist/esm/errors/types/validationError.min.mjs.map +0 -1
  601. package/dist/esm/errors/types/validationError.mjs +0 -16
  602. package/dist/esm/errors/types/validationError.mjs.map +0 -1
  603. package/dist/esm/events/base.min.mjs +0 -2
  604. package/dist/esm/events/base.min.mjs.map +0 -1
  605. package/dist/esm/events/base.mjs +0 -6
  606. package/dist/esm/events/base.mjs.map +0 -1
  607. package/dist/esm/events/pipes.min.mjs +0 -2
  608. package/dist/esm/events/pipes.min.mjs.map +0 -1
  609. package/dist/esm/events/pipes.mjs +0 -28
  610. package/dist/esm/events/pipes.mjs.map +0 -1
  611. package/dist/esm/events/types/kafka.min.mjs +0 -2
  612. package/dist/esm/events/types/kafka.min.mjs.map +0 -1
  613. package/dist/esm/events/types/kafka.mjs.map +0 -1
  614. package/dist/esm/events/types/rabbitmq.min.mjs +0 -2
  615. package/dist/esm/events/types/rabbitmq.min.mjs.map +0 -1
  616. package/dist/esm/events/types/rabbitmq.mjs +0 -54
  617. package/dist/esm/events/types/rabbitmq.mjs.map +0 -1
  618. package/dist/esm/instance/hooks.min.mjs +0 -2
  619. package/dist/esm/instance/hooks.min.mjs.map +0 -1
  620. package/dist/esm/instance/hooks.mjs +0 -26
  621. package/dist/esm/instance/hooks.mjs.map +0 -1
  622. package/dist/esm/instance/settings.min.mjs +0 -2
  623. package/dist/esm/instance/settings.min.mjs.map +0 -1
  624. package/dist/esm/instance/settings.mjs +0 -57
  625. package/dist/esm/instance/settings.mjs.map +0 -1
  626. package/dist/esm/jobs/pipes.min.mjs +0 -2
  627. package/dist/esm/jobs/pipes.min.mjs.map +0 -1
  628. package/dist/esm/jobs/pipes.mjs +0 -13
  629. package/dist/esm/jobs/pipes.mjs.map +0 -1
  630. package/dist/esm/jobs/types/redis.min.mjs +0 -2
  631. package/dist/esm/jobs/types/redis.min.mjs.map +0 -1
  632. package/dist/esm/jobs/types/redis.mjs.map +0 -1
  633. package/dist/esm/server/impls/base.min.mjs +0 -2
  634. package/dist/esm/server/impls/base.min.mjs.map +0 -1
  635. package/dist/esm/server/impls/base.mjs +0 -211
  636. package/dist/esm/server/impls/base.mjs.map +0 -1
  637. package/dist/esm/server/impls/express.min.mjs +0 -2
  638. package/dist/esm/server/impls/express.min.mjs.map +0 -1
  639. package/dist/esm/server/impls/express.mjs +0 -111
  640. package/dist/esm/server/impls/express.mjs.map +0 -1
  641. package/dist/esm/server/impls/fastify.min.mjs +0 -2
  642. package/dist/esm/server/impls/fastify.min.mjs.map +0 -1
  643. package/dist/esm/server/impls/fastify.mjs +0 -121
  644. package/dist/esm/server/impls/fastify.mjs.map +0 -1
  645. package/dist/esm/server/middlewares/index.min.mjs +0 -2
  646. package/dist/esm/server/middlewares/index.min.mjs.map +0 -1
  647. package/dist/esm/server/middlewares/index.mjs +0 -2
  648. package/dist/esm/server/middlewares/index.mjs.map +0 -1
  649. package/dist/esm/server/middlewares/requireAuthUser.min.mjs +0 -2
  650. package/dist/esm/server/middlewares/requireAuthUser.min.mjs.map +0 -1
  651. package/dist/esm/server/middlewares/requireAuthUser.mjs +0 -22
  652. package/dist/esm/server/middlewares/requireAuthUser.mjs.map +0 -1
  653. package/dist/esm/server/openapi.min.mjs +0 -30
  654. package/dist/esm/server/openapi.min.mjs.map +0 -1
  655. package/dist/esm/server/openapi.mjs +0 -191
  656. package/dist/esm/server/openapi.mjs.map +0 -1
  657. package/dist/esm/server/pipes.min.mjs +0 -2
  658. package/dist/esm/server/pipes.min.mjs.map +0 -1
  659. package/dist/esm/server/pipes.mjs +0 -67
  660. package/dist/esm/server/pipes.mjs.map +0 -1
  661. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs +0 -2
  662. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs.map +0 -1
  663. package/dist/esm/server/requests-auth-methods/apiKeys.mjs +0 -21
  664. package/dist/esm/server/requests-auth-methods/apiKeys.mjs.map +0 -1
  665. package/dist/esm/server/requests-auth-methods/base.min.mjs +0 -2
  666. package/dist/esm/server/requests-auth-methods/base.min.mjs.map +0 -1
  667. package/dist/esm/server/requests-auth-methods/base.mjs +0 -20
  668. package/dist/esm/server/requests-auth-methods/base.mjs.map +0 -1
  669. package/dist/esm/server/requests-auth-methods/index.min.mjs +0 -2
  670. package/dist/esm/server/requests-auth-methods/index.min.mjs.map +0 -1
  671. package/dist/esm/server/requests-auth-methods/index.mjs +0 -4
  672. package/dist/esm/server/requests-auth-methods/index.mjs.map +0 -1
  673. package/dist/esm/server/requests-auth-methods/jwt.min.mjs +0 -2
  674. package/dist/esm/server/requests-auth-methods/jwt.min.mjs.map +0 -1
  675. package/dist/esm/server/requests-auth-methods/jwt.mjs +0 -78
  676. package/dist/esm/server/requests-auth-methods/jwt.mjs.map +0 -1
  677. package/dist/esm/server/requests.min.mjs +0 -2
  678. package/dist/esm/server/requests.min.mjs.map +0 -1
  679. package/dist/esm/server/requests.mjs +0 -80
  680. package/dist/esm/server/requests.mjs.map +0 -1
  681. package/dist/esm/server/routes.min.mjs +0 -2
  682. package/dist/esm/server/routes.min.mjs.map +0 -1
  683. package/dist/esm/server/routes.mjs +0 -74
  684. package/dist/esm/server/routes.mjs.map +0 -1
  685. package/dist/esm/server/sockets.min.mjs +0 -2
  686. package/dist/esm/server/sockets.min.mjs.map +0 -1
  687. package/dist/esm/server/sockets.mjs +0 -126
  688. package/dist/esm/server/sockets.mjs.map +0 -1
  689. package/dist/esm/server/types.min.mjs +0 -2
  690. package/dist/esm/server/types.min.mjs.map +0 -1
  691. package/dist/esm/server/types.mjs +0 -34
  692. package/dist/esm/server/types.mjs.map +0 -1
  693. package/dist/esm/types/overrides.min.mjs +0 -1
  694. package/dist/esm/types/overrides.mjs +0 -1
  695. package/dist/esm/utilities/authProviders.min.mjs +0 -2
  696. package/dist/esm/utilities/authProviders.min.mjs.map +0 -1
  697. package/dist/esm/utilities/authProviders.mjs +0 -53
  698. package/dist/esm/utilities/authProviders.mjs.map +0 -1
  699. package/dist/esm/utilities/hash.min.mjs +0 -2
  700. package/dist/esm/utilities/hash.min.mjs.map +0 -1
  701. package/dist/esm/utilities/hash.mjs +0 -17
  702. package/dist/esm/utilities/hash.mjs.map +0 -1
  703. package/dist/esm/utilities/json.min.mjs +0 -2
  704. package/dist/esm/utilities/json.min.mjs.map +0 -1
  705. package/dist/esm/utilities/json.mjs +0 -16
  706. package/dist/esm/utilities/json.mjs.map +0 -1
  707. package/dist/esm/utilities/media.min.mjs +0 -2
  708. package/dist/esm/utilities/media.min.mjs.map +0 -1
  709. package/dist/esm/utilities/media.mjs +0 -13
  710. package/dist/esm/utilities/media.mjs.map +0 -1
  711. package/dist/esm/utilities/random.min.mjs +0 -2
  712. package/dist/esm/utilities/random.min.mjs.map +0 -1
  713. package/dist/esm/utilities/random.mjs +0 -12
  714. package/dist/esm/utilities/random.mjs.map +0 -1
  715. package/dist/esm/utilities/retry.min.mjs +0 -2
  716. package/dist/esm/utilities/retry.min.mjs.map +0 -1
  717. package/dist/esm/utilities/retry.mjs +0 -14
  718. package/dist/esm/utilities/retry.mjs.map +0 -1
  719. package/dist/esm/validations/valleyed.min.mjs +0 -2
  720. package/dist/esm/validations/valleyed.min.mjs.map +0 -1
  721. package/dist/esm/validations/valleyed.mjs +0 -43
  722. package/dist/esm/validations/valleyed.mjs.map +0 -1
  723. package/dist/types/audit/events.js +0 -100
  724. package/dist/types/audit/index.d.ts +0 -44
  725. package/dist/types/audit/index.js +0 -1
  726. package/dist/types/cache/base.js +0 -5
  727. package/dist/types/cache/pipes.js +0 -15
  728. package/dist/types/cache/types/in-memory.js +0 -46
  729. package/dist/types/cache/types/redis.js +0 -54
  730. package/dist/types/db-C8YY1yTO.d.ts +0 -14
  731. package/dist/types/db-Dj1SGto0.d.ts +0 -24
  732. package/dist/types/dbs/base/changes.js +0 -35
  733. package/dist/types/dbs/base/core.js +0 -0
  734. package/dist/types/dbs/base/db.js +0 -13
  735. package/dist/types/dbs/base/types.js +0 -1
  736. package/dist/types/dbs/mongo/changes.js +0 -80
  737. package/dist/types/dbs/mongo/db.js +0 -224
  738. package/dist/types/dbs/mongo/query.js +0 -65
  739. package/dist/types/dbs/pipes.js +0 -103
  740. package/dist/types/errors/equippedError.js +0 -11
  741. package/dist/types/errors/requestError.js +0 -11
  742. package/dist/types/errors/types/badRequestError.js +0 -11
  743. package/dist/types/errors/types/notAuthenticatedError.js +0 -11
  744. package/dist/types/errors/types/notAuthorizedError.js +0 -11
  745. package/dist/types/errors/types/notFoundError.js +0 -11
  746. package/dist/types/errors/types/tokenExpired.js +0 -11
  747. package/dist/types/errors/types/validationError.js +0 -15
  748. package/dist/types/events/base.js +0 -5
  749. package/dist/types/events/pipes.js +0 -27
  750. package/dist/types/events/types/rabbitmq.js +0 -53
  751. package/dist/types/instance/hooks.js +0 -25
  752. package/dist/types/instance/settings.js +0 -56
  753. package/dist/types/jobs/pipes.js +0 -12
  754. package/dist/types/kafka-Cf-TUJgv.d.ts +0 -54
  755. package/dist/types/server/impls/base.js +0 -210
  756. package/dist/types/server/impls/express.js +0 -110
  757. package/dist/types/server/impls/fastify.js +0 -120
  758. package/dist/types/server/middlewares/index.js +0 -1
  759. package/dist/types/server/middlewares/requireAuthUser.js +0 -21
  760. package/dist/types/server/openapi.js +0 -190
  761. package/dist/types/server/pipes.js +0 -66
  762. package/dist/types/server/requests-auth-methods/apiKeys.js +0 -20
  763. package/dist/types/server/requests-auth-methods/base.js +0 -19
  764. package/dist/types/server/requests-auth-methods/index.js +0 -3
  765. package/dist/types/server/requests-auth-methods/jwt.js +0 -77
  766. package/dist/types/server/requests.js +0 -79
  767. package/dist/types/server/routes.js +0 -73
  768. package/dist/types/server/sockets.js +0 -125
  769. package/dist/types/server/types.js +0 -33
  770. package/dist/types/types/overrides.js +0 -0
  771. package/dist/types/utilities/authProviders.js +0 -52
  772. package/dist/types/utilities/hash.js +0 -16
  773. package/dist/types/utilities/json.js +0 -15
  774. package/dist/types/utilities/media.js +0 -12
  775. package/dist/types/utilities/random.js +0 -11
  776. package/dist/types/utilities/retry.js +0 -13
  777. package/dist/types/validations/valleyed.js +0 -42
  778. /package/dist/esm/{dbs/base/core.min.mjs.map → cache/adapters/redis/index.min.mjs.map} +0 -0
  779. /package/dist/esm/{dbs/base/core.mjs.map → cache/adapters/redis/index.mjs.map} +0 -0
  780. /package/dist/esm/{types/overrides.min.mjs.map → chunk-AQY7QVYI.min.mjs.map} +0 -0
  781. /package/dist/esm/{types/overrides.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/orm/errors/migration.ts","../../../src/orm/errors/not-found.ts","../../../src/orm/errors/replay.ts","../../../src/orm/event-log/executor.ts","../../../src/orm/event-log/schema.ts","../../../src/orm/schema.ts","../../../src/orm/event-log/registry.ts","../../../src/orm/event-log/walker.ts","../../../src/orm/event-log/event-log.ts","../../../src/orm/migrations/diff.ts","../../../src/orm/migrations/codegen.ts","../../../src/orm/migrations/apply.ts","../../../src/orm/migrations/pending.ts","../../../src/orm/migrations/validate.ts","../../../src/orm/migrations/migrator.ts","../../../src/orm/query-options.ts","../../../src/orm/relations.ts","../../../src/orm/repo/internals/computeds.ts","../../../src/orm/repo/internals/query-shape.ts","../../../src/orm/schema-validations.ts","../../../src/orm/repo/internals/executors.ts","../../../src/orm/repo/internals/preloads.ts","../../../src/orm/repo/builders.ts","../../../src/orm/repo/als.ts","../../../src/orm/repo/repo.ts"],"sourcesContent":["import { EquippedError } from '../../errors'\n\nexport type OrmMigrationPhase = 'lock' | 'load' | 'session' | 'user' | 'record'\n\nexport class OrmMigrationError extends EquippedError {\n\treadonly id: string\n\treadonly phase: OrmMigrationPhase\n\n\tconstructor(opts: { id: string; phase: OrmMigrationPhase; cause: unknown }) {\n\t\tsuper(`Migration failed at phase '${opts.phase}' for migration '${opts.id}'`, { id: opts.id, phase: opts.phase }, opts.cause)\n\t\tthis.id = opts.id\n\t\tthis.phase = opts.phase\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { EquippedError } = await import('../../errors')\n\n\tdescribe('OrmMigrationError', () => {\n\t\ttest('stores id, phase, and cause on the instance', () => {\n\t\t\tconst cause = new Error('connection lost')\n\t\t\tconst err = new OrmMigrationError({ id: '0001-add-users', phase: 'user', cause })\n\t\t\texpect(err.id).toBe('0001-add-users')\n\t\t\texpect(err.phase).toBe('user')\n\t\t\texpect(err.cause).toBe(cause)\n\t\t})\n\n\t\ttest('message includes phase and migration id', () => {\n\t\t\tconst err = new OrmMigrationError({ id: '0002-add-index', phase: 'session', cause: 'boom' })\n\t\t\texpect(err.message).toBe(\"Migration failed at phase 'session' for migration '0002-add-index'\")\n\t\t})\n\n\t\ttest('instanceof EquippedError is true', () => {\n\t\t\tconst err = new OrmMigrationError({ id: 'x', phase: 'lock', cause: null })\n\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('discriminates from sibling error classes', async () => {\n\t\t\tconst { OrmValidationError } = await import('./validation')\n\t\t\tconst { OrmNotFoundError } = await import('./not-found')\n\t\t\tconst { OrmReplayError } = await import('./replay')\n\t\t\tconst err = new OrmMigrationError({ id: 'x', phase: 'load', cause: null })\n\t\t\texpect(err).not.toBeInstanceOf(OrmValidationError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmNotFoundError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmReplayError)\n\t\t})\n\n\t\ttest('context carries id and phase', () => {\n\t\t\tconst err = new OrmMigrationError({ id: '0003-drop-table', phase: 'record', cause: 'fail' })\n\t\t\texpect((err.context as any).id).toBe('0003-drop-table')\n\t\t\texpect((err.context as any).phase).toBe('record')\n\t\t})\n\n\t\ttest.each(['lock', 'load', 'session', 'user', 'record'] as const)('phase %s works', (phase) => {\n\t\t\tconst err = new OrmMigrationError({ id: 'test', phase, cause: null })\n\t\t\texpect(err.phase).toBe(phase)\n\t\t})\n\t})\n}\n","import { EquippedError } from '../../errors'\nimport { Filter, FilterGroup } from '../filter'\n\nexport type OrmNotFoundOperation = 'findOne' | 'updateOne' | 'deleteOne'\n\nfunction renderFilter(group: FilterGroup): string {\n\tif (\n\t\tgroup.op === 'and'\n\t\t&& group.children.length === 1\n\t\t&& group.children[0] instanceof Filter\n\t\t&& group.children[0].op === 'eq'\n\t) {\n\t\tconst f = group.children[0]\n\t\treturn `${f.field}=${f.value}`\n\t}\n\treturn renderFilterTree(group)\n}\n\nfunction renderFilterTree(node: FilterGroup | Filter): string {\n\tif (node instanceof Filter) {\n\t\treturn `${node.field} ${node.op} ${JSON.stringify(node.value)}`\n\t}\n\tconst parts = node.children.map((c) => renderFilterTree(c))\n\tif (parts.length === 1) return parts[0]\n\treturn `(${parts.join(` ${node.op} `)})`\n}\n\nexport class OrmNotFoundError extends EquippedError {\n\treadonly schema: string\n\treadonly operation: OrmNotFoundOperation\n\treadonly where: FilterGroup\n\n\tconstructor(opts: {\n\t\tschema: string\n\t\toperation: OrmNotFoundOperation\n\t\twhere: FilterGroup\n\t\tmessage?: string\n\t}) {\n\t\tconst msg = opts.message ?? `${opts.schema}.${opts.operation}: no row matched ${renderFilter(opts.where)}`\n\t\tsuper(msg, {\n\t\t\tschema: opts.schema,\n\t\t\toperation: opts.operation,\n\t\t\twhere: opts.where,\n\t\t})\n\t\tthis.schema = opts.schema\n\t\tthis.operation = opts.operation\n\t\tthis.where = opts.where\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { OrmValidationError } = await import('./validation')\n\n\tdescribe('OrmNotFoundError', () => {\n\t\tdescribe('carrier construction', () => {\n\t\t\ttest('stores schema, operation, and where on the instance', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\texpect(err.operation).toBe('findOne')\n\t\t\t\texpect(err.where).toBe(where)\n\t\t\t})\n\n\t\t\ttest('accepts all three operation literals', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tfor (const op of ['findOne', 'updateOne', 'deleteOne'] as const) {\n\t\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: op, where })\n\t\t\t\t\texpect(err.operation).toBe(op)\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('default message generation', () => {\n\t\t\ttest('PK-keyed filter renders as id=<pk>', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'abc-123')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err.message).toBe('users.findOne: no row matched id=abc-123')\n\t\t\t})\n\n\t\t\ttest('filter-based rendering shows the filter tree', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('email', 'a@b.com').gt('age', 18)\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'updateOne', where })\n\t\t\t\texpect(err.message).toBe('users.updateOne: no row matched (email eq \"a@b.com\" and age gt 18)')\n\t\t\t})\n\n\t\t\ttest('single non-eq filter renders without parens', () => {\n\t\t\t\tconst where = FilterGroup.create().gt('age', 18)\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'deleteOne', where })\n\t\t\t\texpect(err.message).toBe('users.deleteOne: no row matched age gt 18')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('custom message override', () => {\n\t\t\ttest('custom message replaces the default', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({\n\t\t\t\t\tschema: 'users',\n\t\t\t\t\toperation: 'findOne',\n\t\t\t\t\twhere,\n\t\t\t\t\tmessage: 'user must exist',\n\t\t\t\t})\n\t\t\t\texpect(err.message).toBe('user must exist')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('instanceof discrimination', () => {\n\t\t\ttest('instanceof OrmNotFoundError is true', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err).toBeInstanceOf(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('instanceof EquippedError is true', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst err = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t\t})\n\n\t\t\ttest('instanceof OrmNotFoundError discriminates from OrmValidationError', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst notFound = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\tconst validation = new OrmValidationError('validation', 'users', 'createOne', [])\n\t\t\t\texpect(notFound).not.toBeInstanceOf(OrmValidationError)\n\t\t\t\texpect(validation).not.toBeInstanceOf(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('both are instanceof EquippedError', () => {\n\t\t\t\tconst where = FilterGroup.create().eq('id', 'u1')\n\t\t\t\tconst notFound = new OrmNotFoundError({ schema: 'users', operation: 'findOne', where })\n\t\t\t\tconst validation = new OrmValidationError('validation', 'users', 'createOne', [])\n\t\t\t\texpect(notFound).toBeInstanceOf(EquippedError)\n\t\t\t\texpect(validation).toBeInstanceOf(EquippedError)\n\t\t\t})\n\t\t})\n\t})\n}\n","import { EquippedError } from '../../errors'\n\nexport class OrmReplayError extends EquippedError {\n\treadonly key: string\n\treadonly eventName: string\n\n\tconstructor(opts: { key: string; name: string; cause: unknown }) {\n\t\tsuper(`EventLog replay failed on event ${opts.name} (key=${opts.key})`, { key: opts.key, name: opts.name }, opts.cause)\n\t\tthis.key = opts.key\n\t\tthis.eventName = opts.name\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { EquippedError } = await import('../../errors')\n\tconst { OrmValidationError } = await import('./validation')\n\tconst { OrmNotFoundError } = await import('./not-found')\n\n\tdescribe('OrmReplayError', () => {\n\t\ttest('stores key, eventName, and cause on the instance', () => {\n\t\t\tconst cause = new Error('handler blew up')\n\t\t\tconst err = new OrmReplayError({ key: 'evt-123', name: 'user.signup', cause })\n\t\t\texpect(err.key).toBe('evt-123')\n\t\t\texpect(err.eventName).toBe('user.signup')\n\t\t\texpect(err.cause).toBe(cause)\n\t\t})\n\n\t\ttest('message includes handler name and key', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'evt-456', name: 'order.placed', cause: 'boom' })\n\t\t\texpect(err.message).toBe('EventLog replay failed on event order.placed (key=evt-456)')\n\t\t})\n\n\t\ttest('instanceof EquippedError is true', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'k', name: 'n', cause: null })\n\t\t\texpect(err).toBeInstanceOf(OrmReplayError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('discriminates from OrmValidationError and OrmNotFoundError', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'k', name: 'n', cause: null })\n\t\t\texpect(err).not.toBeInstanceOf(OrmValidationError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmNotFoundError)\n\t\t})\n\n\t\ttest('context carries key and name', () => {\n\t\t\tconst err = new OrmReplayError({ key: 'evt-789', name: 'payment.charged', cause: 'fail' })\n\t\t\texpect((err.context as any).key).toBe('evt-789')\n\t\t\texpect((err.context as any).name).toBe('payment.charged')\n\t\t})\n\t})\n}\n","import { ulid } from 'ulid'\nimport { v } from 'valleyed'\n\nimport { OrmValidationError } from '../errors'\nimport type { EventContext, HandlerDef } from './registry'\nimport { EventLogSchema } from './schema'\nimport type { Repo } from '../repo/repo'\n\nexport async function fire<R>(\n\trepo: Repo<any>,\n\tname: string,\n\tdef: HandlerDef,\n\tpayload: unknown,\n\tctx?: { by?: string; at?: Date },\n): Promise<R> {\n\tconst validated = v.validate(def.pipe, payload)\n\tif (!validated.valid) {\n\t\tthrow new OrmValidationError('validation', 'event_log', 'fire', [\n\t\t\t{ cause: validated.error },\n\t\t])\n\t}\n\n\treturn repo.session(async () => {\n\t\tconst at = ctx?.at ?? new Date()\n\t\tconst ts = at.getTime()\n\t\tconst key = ulid(ts)\n\t\tconst by = ctx?.by ?? null\n\n\t\tawait repo.on(EventLogSchema).one().create({\n\t\t\tkey,\n\t\t\tname,\n\t\t\tts,\n\t\t\tbody: validated.value,\n\t\t\tby,\n\t\t})\n\n\t\tconst evCtx: EventContext = {\n\t\t\tkey,\n\t\t\tname,\n\t\t\tts,\n\t\t\tbody: validated.value,\n\t\t\tby,\n\t\t\tat,\n\t\t\tfirstRun: true,\n\t\t}\n\n\t\treturn await def.handle(validated.value, evCtx) as R\n\t})\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmValidationError } = await import('../errors')\n\ttype EventContext = import('./registry').EventContext\n\tconst { EventLogSchema } = await import('./schema')\n\n\tfunction makeRepo() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\treturn new Repo({\n\t\t\tadapter,\n\t\t\tresolve: (s) => {\n\t\t\t\tif (s === EventLogSchema) return { table: 'events' }\n\t\t\t\treturn { table: s.name }\n\t\t\t},\n\t\t})\n\t}\n\n\tdescribe('FireExecutor', () => {\n\t\ttest('payload validation rejects → throws OrmValidationError, no row persisted', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async () => 'ok',\n\t\t\t}\n\t\t\tawait expect(fire(repo, 'test', def, { email: 123 })).rejects.toThrow(OrmValidationError)\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(0)\n\t\t})\n\n\t\ttest('happy path persists row and runs handler', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tlet called = false\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload: { email: string }) => {\n\t\t\t\t\tcalled = true\n\t\t\t\t\treturn `created-${payload.email}`\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tconst result = await fire(repo, 'user.signup', def, { email: 'a@b.com' }, { by: 'admin' })\n\n\t\t\texpect(result).toBe('created-a@b.com')\n\t\t\texpect(called).toBe(true)\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('user.signup')\n\t\t\texpect(rows[0].body).toEqual({ email: 'a@b.com' })\n\t\t\texpect(rows[0].by).toBe('admin')\n\t\t\texpect(typeof rows[0].ts).toBe('number')\n\t\t\texpect(typeof rows[0].key).toBe('string')\n\t\t})\n\n\t\ttest('handler receives EventContext with firstRun: true', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tlet captured: EventContext | undefined\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async (_payload: unknown, ctx: EventContext) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst at = new Date('2025-01-15T12:00:00Z')\n\n\t\t\tawait fire(repo, 'test.event', def, { x: 42 }, { by: 'user-1', at })\n\n\t\t\texpect(captured).toBeDefined()\n\t\t\texpect(captured!.firstRun).toBe(true)\n\t\t\texpect(captured!.name).toBe('test.event')\n\t\t\texpect(captured!.by).toBe('user-1')\n\t\t\texpect(captured!.at).toEqual(at)\n\t\t\texpect(captured!.ts).toBe(at.getTime())\n\t\t\texpect(captured!.body).toEqual({ x: 42 })\n\t\t\texpect(typeof captured!.key).toBe('string')\n\t\t})\n\n\t\ttest('handler throws → no EventLogSchema row remains', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ val: v.string() }),\n\t\t\t\thandle: async () => {\n\t\t\t\t\tthrow new Error('handler blew up')\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tawait expect(fire(repo, 'boom', def, { val: 'x' })).rejects.toThrow('handler blew up')\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(0)\n\t\t})\n\n\t\ttest('by defaults to null when not provided', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst def = {\n\t\t\t\tpipe: v.string(),\n\t\t\t\thandle: async () => {},\n\t\t\t}\n\n\t\t\tawait fire(repo, 'test', def, 'hello')\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].by).toBeNull()\n\t\t})\n\t})\n}\n","import { ulid } from 'ulid'\nimport { v } from 'valleyed'\n\nimport { Schema } from '../schema'\n\nexport const EventLogSchema = Schema.from('event_log')\n\t.pk('key', v.string(), () => ulid())\n\t.field('name', v.string())\n\t.field('ts', v.number())\n\t.field('body', v.any())\n\t.field('by', v.nullable(v.string()))\n\t.build()\n","import { v, type Pipe, type PipeOutput } from 'valleyed'\n\nimport { ComputedField, SchemaField, type AnyComputedField, type AnySchemaField } from './fields'\nimport type { Prettify } from './utils'\n\ntype AnyPrimaryKeyField = SchemaField<string, Pipe<any, any>, true>\n\nexport type AnySchema = Schema<string, AnyPrimaryKeyField, Record<string, AnySchemaField>, Record<string, AnyComputedField>>\n\nexport type SchemaComputedDefs<S extends AnySchema> = S extends Schema<any, any, any, infer C> ? C : Record<string, AnyComputedField>\n\nexport type SchemaPersistedOutput<S extends AnySchema> = Prettify<{\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any> ? PipeOutput<P> : never\n}>\n\nexport type SchemaComputedOutput<S extends AnySchema> = Prettify<{\n\t[K in keyof SchemaComputedDefs<S>]: SchemaComputedDefs<S>[K] extends ComputedField<any, infer P, any> ? PipeOutput<P> : never\n}>\n\nexport type SchemaOutput<S extends AnySchema> = Prettify<{\n\t[K in keyof SchemaPersistedOutput<S> | keyof SchemaComputedOutput<S>]: K extends keyof SchemaPersistedOutput<S>\n\t\t? SchemaPersistedOutput<S>[K]\n\t\t: K extends keyof SchemaComputedOutput<S>\n\t\t\t? SchemaComputedOutput<S>[K]\n\t\t\t: never\n}>\n\nexport type SchemaFields<S extends AnySchema> =\n\tS extends Schema<any, infer PKField, infer F, any>\n\t\t? PKField extends AnySchemaField\n\t\t\t? Prettify<Record<PKField['name'], PKField> & F>\n\t\t\t: F\n\t\t: never\n\nexport type SchemaTaggedFields<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] & { readonly __schema?: S }\n}\n\nexport class SchemaBuilder<\n\tN extends string,\n\tPKField extends AnyPrimaryKeyField | never = never,\n\tF extends Record<string, AnySchemaField> = {},\n\tC extends Record<string, AnyComputedField> = {},\n> {\n\t#name: N\n\t#pkField: PKField | null\n\t#fieldDefs: F\n\t#computedDefs: C\n\n\tconstructor(name: N, pkField?: PKField | null, fieldDefs?: F, computedDefs?: C) {\n\t\tthis.#name = name\n\t\tthis.#pkField = pkField ?? null\n\t\tthis.#fieldDefs = fieldDefs ?? ({} as F)\n\t\tthis.#computedDefs = computedDefs ?? ({} as C)\n\t}\n\n\tget name() {\n\t\treturn this.#name\n\t}\n\n\tpk<K extends string, P extends Pipe<any, any>>(\n\t\tname: [PKField] extends [never] ? K : never,\n\t\tpipe: P,\n\t\tgenerate: () => PipeOutput<P>,\n\t): SchemaBuilder<N, SchemaField<K, P, true>, F> {\n\t\treturn new SchemaBuilder<N, SchemaField<K, P, true>, F>(\n\t\t\tthis.#name,\n\t\t\tnew SchemaField(name, pipe, { onCreate: generate }),\n\t\t\t{ ...this.#fieldDefs } as F,\n\t\t\tundefined,\n\t\t)\n\t}\n\n\tfield<\n\t\tK extends string,\n\t\tP extends Pipe<any, any>,\n\t\tO extends { onCreate?: () => PipeOutput<P>; onUpdate?: () => PipeOutput<P> } | undefined = undefined,\n\t>(\n\t\tname: K extends keyof F ? never : K,\n\t\tpipe: P,\n\t\topts?: O,\n\t): SchemaBuilder<\n\t\tN,\n\t\tPKField,\n\t\t{\n\t\t\t[Key in keyof F | K]: Key extends K\n\t\t\t\t? SchemaField<K, P, [O] extends [{ onCreate: () => any }] ? true : false>\n\t\t\t\t: Key extends keyof F\n\t\t\t\t\t? F[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst nextFields = { ...this.#fieldDefs, [name]: new SchemaField(name, pipe, opts) }\n\t\treturn new SchemaBuilder(this.#name, this.#pkField, nextFields, { ...this.#computedDefs }) as any\n\t}\n\n\tcomputed<\n\t\tK extends string,\n\t\tDeps extends readonly (keyof SchemaPersistedOutput<Schema<N, PKField, F, C>> & string)[],\n\t\tP extends Pipe<any, any>,\n\t>(\n\t\tname: K extends keyof SchemaPersistedOutput<Schema<N, PKField, F, C>> | keyof C ? never : K,\n\t\tdeps: Deps,\n\t\tpipe: P,\n\t\tcompute: (data: Pick<SchemaPersistedOutput<Schema<N, PKField, F, C>>, Deps[number]>) => PipeOutput<P>,\n\t): SchemaBuilder<\n\t\tN,\n\t\tPKField,\n\t\tF,\n\t\t{\n\t\t\t[Key in keyof C | K]: Key extends K ? ComputedField<K, P, Deps> : Key extends keyof C ? C[Key] : never\n\t\t}\n\t> {\n\t\tconst nextComputed = { ...this.#computedDefs, [name]: new ComputedField(name as K, pipe, deps, compute as any) }\n\t\treturn new SchemaBuilder(this.#name, this.#pkField, { ...this.#fieldDefs }, nextComputed) as any\n\t}\n\n\tbuild(this: [PKField] extends [never] ? never : SchemaBuilder<N, PKField, F, C>): Schema<N, PKField, F, C> {\n\t\tconst self = this as unknown as SchemaBuilder<N, PKField, F, C>\n\t\treturn new Schema<N, PKField, F, C>(self.#name, self.#pkField, self.#fieldDefs, self.#computedDefs)\n\t}\n}\n\nexport class Schema<\n\tN extends string,\n\tPKField extends AnyPrimaryKeyField | never = never,\n\tF extends Record<string, AnySchemaField> = {},\n\tC extends Record<string, AnyComputedField> = {},\n> {\n\t#name: N\n\t#pkField: PKField | null\n\t#fieldDefs: F\n\t#computedDefs: C\n\n\tconstructor(name: N, pkField: PKField | null, fieldDefs: F, computedDefs: C) {\n\t\tthis.#name = name\n\t\tthis.#pkField = pkField\n\t\tthis.#fieldDefs = fieldDefs\n\t\tthis.#computedDefs = computedDefs\n\t\tif (this.#pkField) {\n\t\t\tObject.defineProperty(this.#pkField, '__schema', { value: this, enumerable: false, configurable: true })\n\t\t}\n\t\tfor (const field of Object.values(this.#fieldDefs)) {\n\t\t\tObject.defineProperty(field, '__schema', { value: this, enumerable: false, configurable: true })\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this.#name\n\t}\n\n\tget pkField() {\n\t\tif (!this.#pkField) throw new Error(`Schema \"${this.#name}\" does not have a primary key defined`)\n\t\treturn this.#pkField\n\t}\n\n\tget fieldDefs(): F {\n\t\treturn this.#fieldDefs\n\t}\n\n\tget computedDefs(): C {\n\t\treturn this.#computedDefs\n\t}\n\n\tget fields() {\n\t\treturn {\n\t\t\t...(this.#pkField ? { [this.#pkField.name]: this.#pkField } : {}),\n\t\t\t...this.#fieldDefs,\n\t\t} as unknown as SchemaTaggedFields<this>\n\t}\n\n\tstatic from<N extends string>(name: N): SchemaBuilder<N> {\n\t\treturn new SchemaBuilder(name)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('SchemaBuilder', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'generated-id')\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.optional(v.number()))\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t\t.build()\n\n\t\tdescribe('Schema.from()', () => {\n\t\t\ttest('returns a SchemaBuilder instance', () => {\n\t\t\t\texpect(Schema.from('test')).toBeInstanceOf(SchemaBuilder)\n\t\t\t})\n\n\t\t\ttest('returns a Schema instance after build', () => {\n\t\t\t\tconst s = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(s).toBeInstanceOf(Schema)\n\t\t\t})\n\n\t\t\ttest('Schema has no builder methods', () => {\n\t\t\t\tconst s = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(s).not.toHaveProperty('pk')\n\t\t\t\texpect(s).not.toHaveProperty('field')\n\t\t\t\texpect(s).not.toHaveProperty('computed')\n\t\t\t\texpect(s).not.toHaveProperty('build')\n\t\t\t})\n\n\t\t\ttest('stores the schema name on builder', () => {\n\t\t\t\texpect(Schema.from('orders').name).toBe('orders')\n\t\t\t})\n\n\t\t\ttest('stores the schema name after build', () => {\n\t\t\t\texpect(Schema.from('orders').pk('id', v.string(), () => 'x').build().name).toBe('orders')\n\t\t\t})\n\n\t\t\ttest('full builder chain works', () => {\n\t\t\t\tconst s = Schema.from('users')\n\t\t\t\t\t.pk('id', v.string(), () => 'gen')\n\t\t\t\t\t.field('email', v.string())\n\t\t\t\t\t.field('age', v.number())\n\t\t\t\t\t.build()\n\t\t\t\texpect(s.name).toBe('users')\n\t\t\t\texpect(s.pkField.name).toBe('id')\n\t\t\t\texpect(Object.keys(s.fields)).toEqual(['id', 'email', 'age'])\n\t\t\t})\n\n\t\t\ttest('.build() is unavailable without .pk() at the type level', () => {\n\t\t\t\t// @ts-expect-error — .build() requires .pk() to have been called\n\t\t\t\tSchema.from('test').field('name', v.string()).build()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.name', () => {\n\t\t\ttest('returns the schema name', () => {\n\t\t\t\texpect(UserSchema.name).toBe('users')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.pk()', () => {\n\t\t\ttest('pkField returns the pk field', () => {\n\t\t\t\texpect(UserSchema.pkField.name).toBe('id')\n\t\t\t})\n\n\t\t\ttest('pk entry is a SchemaField instance', () => {\n\t\t\t\texpect(UserSchema.fields.id).toBeInstanceOf(SchemaField)\n\t\t\t})\n\n\t\t\ttest('pk entry has correct pipe', () => {\n\t\t\t\texpect(UserSchema.fields.id.pipe).toBeDefined()\n\t\t\t})\n\n\t\t\ttest('pk entry has correct name and path', () => {\n\t\t\t\texpect(UserSchema.fields.id.name).toBe('id')\n\t\t\t\texpect(UserSchema.fields.id.path).toEqual(['id'])\n\t\t\t})\n\n\t\t\ttest('pk onCreate generates the value', () => {\n\t\t\t\texpect(UserSchema.fields.id.onCreate?.()).toBe('generated-id')\n\t\t\t})\n\n\t\t\ttest('pkField throws when no pk defined', () => {\n\t\t\t\tconst schema = new Schema('nopk', null, { name: new SchemaField('name', v.string()) }, {})\n\t\t\t\texpect(() => schema.pkField).toThrow()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.field()', () => {\n\t\t\ttest('all field entries are SchemaField instances', () => {\n\t\t\t\tfor (const entry of Object.values(UserSchema.fieldDefs)) {\n\t\t\t\t\texpect(entry).toBeInstanceOf(SchemaField)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('field has correct name and path', () => {\n\t\t\t\texpect(UserSchema.fields.email.name).toBe('email')\n\t\t\t\texpect(UserSchema.fields.email.path).toEqual(['email'])\n\t\t\t})\n\n\t\t\ttest('field has correct pipe', () => {\n\t\t\t\texpect(UserSchema.fields.email.pipe).toBeDefined()\n\t\t\t\texpect(UserSchema.fieldDefs.email.pipe).toBe(UserSchema.fields.email.pipe)\n\t\t\t})\n\n\t\t\ttest('field with onCreate stores the function', () => {\n\t\t\t\texpect(UserSchema.fields.createdAt.onCreate?.()).toBe(1000)\n\t\t\t})\n\n\t\t\ttest('field with onUpdate stores the function', () => {\n\t\t\t\texpect(UserSchema.fields.updatedAt.onUpdate?.()).toBe(2000)\n\t\t\t})\n\n\t\t\ttest('field with both hooks stores both', () => {\n\t\t\t\texpect(UserSchema.fields.updatedAt.onCreate?.()).toBe(1000)\n\t\t\t\texpect(UserSchema.fields.updatedAt.onUpdate?.()).toBe(2000)\n\t\t\t})\n\n\t\t\ttest('field with no lifecycle has undefined hooks', () => {\n\t\t\t\texpect(UserSchema.fields.email.onCreate).toBeUndefined()\n\t\t\t\texpect(UserSchema.fields.email.onUpdate).toBeUndefined()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.computed()', () => {\n\t\t\ttest('registers computed fields and dependencies', () => {\n\t\t\t\tconst WithComputed = Schema.from('users')\n\t\t\t\t\t.pk('id', v.string(), () => 'u1')\n\t\t\t\t\t.field('name', v.string())\n\t\t\t\t\t.field('email', v.string())\n\t\t\t\t\t.computed('display', ['name', 'email'], v.string(), ({ name, email }) => `${name} <${email}>`)\n\t\t\t\t\t.build()\n\n\t\t\t\texpect(Object.keys(WithComputed.computedDefs)).toEqual(['display'])\n\t\t\t\texpect(WithComputed.computedDefs.display.deps).toEqual(['name', 'email'])\n\t\t\t\texpect(WithComputed.computedDefs.display.compute({ name: 'Alice', email: 'a@b.com' })).toBe('Alice <a@b.com>')\n\t\t\t})\n\n\t\t\ttest('computed field names are included in schema output type', () => {\n\t\t\t\tconst WithComputed = Schema.from('users')\n\t\t\t\t\t.pk('id', v.string(), () => 'u1')\n\t\t\t\t\t.field('name', v.string())\n\t\t\t\t\t.computed('nameUpper', ['name'], v.string(), ({ name }) => name.toUpperCase())\n\t\t\t\t\t.build()\n\n\t\t\t\ttype Out = SchemaOutput<typeof WithComputed>\n\t\t\t\tconst value: Out = { id: 'u1', name: 'Alice', nameUpper: 'ALICE' }\n\t\t\t\texpect(Object.keys(WithComputed.computedDefs)).toEqual(['nameUpper'])\n\t\t\t\texpect(value.nameUpper).toBe('ALICE')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.fields', () => {\n\t\t\ttest('includes all keys including pk', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fields)).toEqual(['id', 'email', 'name', 'age', 'createdAt', 'updatedAt'])\n\t\t\t})\n\n\t\t\ttest('pk entry appears first', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fields)[0]).toBe('id')\n\t\t\t})\n\n\t\t\ttest('schema with no fields has only pk in fields', () => {\n\t\t\t\tconst PkOnly = Schema.from('minimal').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(Object.keys(PkOnly.fields)).toEqual(['id'])\n\t\t\t})\n\t\t})\n\n\t\tdescribe('.fieldDefs', () => {\n\t\t\ttest('excludes the pk field', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fieldDefs)).not.toContain('id')\n\t\t\t})\n\n\t\t\ttest('contains all non-pk fields in order', () => {\n\t\t\t\texpect(Object.keys(UserSchema.fieldDefs)).toEqual(['email', 'name', 'age', 'createdAt', 'updatedAt'])\n\t\t\t})\n\n\t\t\ttest('schema with no fields has empty fieldDefs', () => {\n\t\t\t\tconst PkOnly = Schema.from('minimal').pk('id', v.string(), () => 'x').build()\n\t\t\t\texpect(Object.keys(PkOnly.fieldDefs)).toHaveLength(0)\n\t\t\t})\n\t\t})\n\t})\n\n\tdescribe('type-level: Schema.from uniqueness guard', () => {\n\t\ttest('duplicate .field() name is a TS error', () => {\n\t\t\t// @ts-expect-error — duplicate field name 'email' should fail\n\t\t\tSchema.from('test').pk('id', v.string(), () => 'x').field('email', v.string()).field('email', v.string()).build()\n\t\t})\n\t})\n\n\tdescribe('clone-on-step: fan-out independence', () => {\n\t\ttest('.field() returns a new builder, not the same instance', () => {\n\t\t\tconst base = Schema.from('test').pk('id', v.string(), () => 'x')\n\t\t\tconst a = base.field('email', v.string())\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('.pk() returns a new builder, not the same instance', () => {\n\t\t\tconst base = Schema.from('test')\n\t\t\tconst a = base.pk('id', v.string(), () => 'x')\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('.computed() returns a new builder, not the same instance', () => {\n\t\t\tconst base = Schema.from('test').pk('id', v.string(), () => 'x').field('name', v.string())\n\t\t\tconst a = base.computed('upper', ['name'], v.string(), ({ name }) => name.toUpperCase())\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('fan-out from shared base does not pollute either branch', () => {\n\t\t\tconst base = Schema.from('test').pk('id', v.string(), () => 'x')\n\t\t\tconst branchA = base.field('email', v.string()).build()\n\t\t\tconst branchB = base.field('age', v.number()).build()\n\n\t\t\texpect(Object.keys(branchA.fieldDefs)).toEqual(['email'])\n\t\t\texpect(Object.keys(branchB.fieldDefs)).toEqual(['age'])\n\t\t})\n\n\t\ttest('fan-out with computed does not pollute base', () => {\n\t\t\tconst base = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\tconst withComputed = base.computed('upper', ['name'], v.string(), ({ name }) => name.toUpperCase()).build()\n\t\t\tconst withoutComputed = base.build()\n\n\t\t\texpect(Object.keys(withComputed.computedDefs)).toEqual(['upper'])\n\t\t\texpect(Object.keys(withoutComputed.computedDefs)).toEqual([])\n\t\t})\n\t})\n\n\tdescribe('type-level: schema-tagged Fields', () => {\n\t\ttest('fields accessor returns schema-tagged Field instances', () => {\n\t\t\tconst _TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').field('email', v.string()).build()\n\t\t\ttype FieldS = NonNullable<(typeof _TestSchema.fields.id)['__schema']>\n\t\t\texpectTypeOf<FieldS>().toEqualTypeOf<typeof _TestSchema>()\n\n\t\t\ttype FieldS2 = NonNullable<(typeof _TestSchema.fields.email)['__schema']>\n\t\t\texpectTypeOf<FieldS2>().toEqualTypeOf<typeof _TestSchema>()\n\t\t})\n\n\t\ttest('fields carry runtime __schema reference to parent schema', () => {\n\t\t\tconst TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').field('email', v.string()).build()\n\t\t\texpect((TestSchema.fields.id as any).__schema).toBe(TestSchema)\n\t\t\texpect((TestSchema.fields.email as any).__schema).toBe(TestSchema)\n\t\t})\n\t})\n}\n","import type { Pipe, PipeInput, PipeOutput } from 'valleyed'\n\nimport { EquippedError } from '../../errors'\n\nexport type EventContext = {\n\tkey: string\n\tname: string\n\tts: number\n\tbody: unknown\n\tby: string | null\n\tat: Date\n\tfirstRun: boolean\n}\n\nexport type HandlerDef<P extends Pipe<any, any> = Pipe<any, any>, R = unknown> = {\n\tpipe: P\n\thandle: (payload: PipeOutput<P>, ctx: EventContext) => R | Promise<R>\n}\n\nexport type FireFn<P extends Pipe<any, any>, R> = (\n\tpayload: PipeInput<P>,\n\tctx?: { by?: string; at?: Date },\n) => Promise<R>\n\nexport class HandlerRegistry {\n\treadonly #handlers = new Map<string, HandlerDef>()\n\treadonly #order: string[] = []\n\n\tregister(name: string, def: HandlerDef): void {\n\t\tif (this.#handlers.has(name)) {\n\t\t\tthrow new EquippedError(`EventLog handler \"${name}\" is already registered`, { name })\n\t\t}\n\t\tthis.#handlers.set(name, def)\n\t\tthis.#order.push(name)\n\t}\n\n\tget(name: string): HandlerDef {\n\t\tconst def = this.#handlers.get(name)\n\t\tif (!def) {\n\t\t\tthrow new EquippedError(`EventLog handler \"${name}\" is not registered`, { name })\n\t\t}\n\t\treturn def\n\t}\n\n\tlist(): string[] {\n\t\treturn [...this.#order]\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { EquippedError } = await import('../../errors')\n\n\tdescribe('HandlerRegistry', () => {\n\t\ttest('register and get a handler', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst def: HandlerDef = { pipe: v.string(), handle: () => {} }\n\t\t\tregistry.register('user.signup', def)\n\t\t\texpect(registry.get('user.signup')).toBe(def)\n\t\t})\n\n\t\ttest('register duplicate name throws', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst def: HandlerDef = { pipe: v.string(), handle: () => {} }\n\t\t\tregistry.register('user.signup', def)\n\t\t\texpect(() => registry.register('user.signup', def)).toThrow(EquippedError)\n\t\t\texpect(() => registry.register('user.signup', def)).toThrow('already registered')\n\t\t})\n\n\t\ttest('get missing name throws', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\texpect(() => registry.get('nonexistent')).toThrow(EquippedError)\n\t\t\texpect(() => registry.get('nonexistent')).toThrow('not registered')\n\t\t})\n\n\t\ttest('list returns names in registration order', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tregistry.register('c', { pipe: v.string(), handle: () => {} })\n\t\t\tregistry.register('a', { pipe: v.string(), handle: () => {} })\n\t\t\tregistry.register('b', { pipe: v.string(), handle: () => {} })\n\t\t\texpect(registry.list()).toEqual(['c', 'a', 'b'])\n\t\t})\n\n\t\ttest('list returns a copy, not a reference', () => {\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tregistry.register('x', { pipe: v.string(), handle: () => {} })\n\t\t\tconst list = registry.list()\n\t\t\tlist.push('y')\n\t\t\texpect(registry.list()).toEqual(['x'])\n\t\t})\n\t})\n}\n","import type { EventContext, HandlerDef, HandlerRegistry } from './registry'\nimport { EventLogSchema } from './schema'\nimport { OrmReplayError } from '../errors/replay'\nimport type { Repo } from '../repo/repo'\n\nconst executeReplay = async (\n\trepo: Repo<any>,\n\tdef: HandlerDef,\n\trow: { key: string; name: string; ts: number; body: unknown; by: string | null },\n): Promise<void> => {\n\tconst evCtx: EventContext = {\n\t\tkey: row.key,\n\t\tname: row.name,\n\t\tts: row.ts,\n\t\tbody: row.body,\n\t\tby: row.by,\n\t\tat: new Date(row.ts),\n\t\tfirstRun: false,\n\t}\n\ttry {\n\t\tawait repo.session(async () => {\n\t\t\tawait def.handle(row.body, evCtx)\n\t\t})\n\t} catch (cause) {\n\t\tthrow new OrmReplayError({ key: row.key, name: row.name, cause })\n\t}\n}\n\nexport async function replay(\n\trepo: Repo<any>,\n\tregistry: HandlerRegistry,\n\topts?: { from?: Date },\n): Promise<void> {\n\tlet query = repo.on(EventLogSchema).all().orderBy('ts', 'asc')\n\tif (opts?.from) {\n\t\tquery = query.where((q) => q.gte('ts', opts.from!.getTime()))\n\t}\n\tconst rows = await query.find()\n\n\tfor (const row of rows) {\n\t\tawait executeReplay(repo, registry.get(row.name), row)\n\t}\n}\n\nexport async function rerun(\n\trepo: Repo<any>,\n\tregistry: HandlerRegistry,\n\tkey: string,\n): Promise<void> {\n\tconst row = await repo.on(EventLogSchema).one().id(key).find()\n\tif (!row) {\n\t\tthrow new OrmReplayError({ key, name: 'unknown', cause: new Error(`Event with key \"${key}\" not found`) })\n\t}\n\tawait executeReplay(repo, registry.get(row.name), row)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmReplayError } = await import('../errors/replay')\n\tconst { HandlerRegistry } = await import('./registry')\n\tconst { EventLogSchema } = await import('./schema')\n\tconst { fire } = await import('./executor')\n\ttype EventContext = import('./registry').EventContext\n\n\tconst CounterSchema = Schema.from('counters')\n\t\t.pk('id', v.string(), () => `c-${Math.random()}`)\n\t\t.field('name', v.string())\n\t\t.field('count', v.number())\n\t\t.build()\n\n\tfunction makeRepo() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\treturn new Repo({\n\t\t\tadapter,\n\t\t\tresolve: (s) => {\n\t\t\t\tif (s === EventLogSchema) return { table: 'events' }\n\t\t\t\tif (s === CounterSchema) return { table: 'counters' }\n\t\t\t\treturn { table: s.name }\n\t\t\t},\n\t\t})\n\t}\n\n\tdescribe('ReplayWalker', () => {\n\t\ttest('replay walks rows in ts-ascending order', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst order: string[] = []\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ label: v.string() }),\n\t\t\t\thandle: async (payload: { label: string }) => {\n\t\t\t\t\torder.push(payload.label)\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { label: 'second' }, { at: new Date('2025-01-02') })\n\t\t\tawait fire(repo, 'test', def, { label: 'first' }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { label: 'third' }, { at: new Date('2025-01-03') })\n\n\t\t\torder.length = 0\n\t\t\tawait replay(repo, registry)\n\n\t\t\texpect(order).toEqual(['first', 'second', 'third'])\n\t\t})\n\n\t\ttest('replay({ from }) skips rows with ts < from', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst order: string[] = []\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ label: v.string() }),\n\t\t\t\thandle: async (payload: { label: string }) => {\n\t\t\t\t\torder.push(payload.label)\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { label: 'old' }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { label: 'new' }, { at: new Date('2025-01-03') })\n\n\t\t\torder.length = 0\n\t\t\tawait replay(repo, registry, { from: new Date('2025-01-02') })\n\n\t\t\texpect(order).toEqual(['new'])\n\t\t})\n\n\t\ttest('replay passes firstRun: false in EventContext', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tlet captured: EventContext | undefined\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async (_payload: unknown, ctx: EventContext) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { x: 1 })\n\n\t\t\tawait replay(repo, registry)\n\n\t\t\texpect(captured).toBeDefined()\n\t\t\texpect(captured!.firstRun).toBe(false)\n\t\t})\n\n\t\ttest('replay throws OrmReplayError on first failure with key/name/cause', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\n\t\t\tconst boom = new Error('handler exploded')\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ fail: v.boolean() }),\n\t\t\t\thandle: async (payload: { fail: boolean }, ctx: EventContext) => {\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw boom\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('evt', def)\n\n\t\t\tawait fire(repo, 'evt', def, { fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'evt', def, { fail: true }, { at: new Date('2025-01-02') })\n\t\t\tawait fire(repo, 'evt', def, { fail: false }, { at: new Date('2025-01-03') })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().orderBy('ts', 'asc').find()\n\t\t\tconst failKey = rows[1].key\n\n\t\t\tawait expect(replay(repo, registry)).rejects.toThrow(OrmReplayError)\n\t\t\ttry {\n\t\t\t\tawait replay(repo, registry)\n\t\t\t} catch (e: any) {\n\t\t\t\texpect(e.key).toBe(failKey)\n\t\t\t\texpect(e.eventName).toBe('evt')\n\t\t\t\texpect(e.cause).toBe(boom)\n\t\t\t}\n\t\t})\n\n\t\ttest('replay stops on first failure — events after failure not attempted', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tconst executed: string[] = []\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ label: v.string(), fail: v.boolean() }),\n\t\t\t\thandle: async (payload: { label: string; fail: boolean }, ctx: EventContext) => {\n\t\t\t\t\texecuted.push(payload.label)\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw new Error('boom')\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { label: 'A', fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { label: 'B', fail: true }, { at: new Date('2025-01-02') })\n\t\t\tawait fire(repo, 'test', def, { label: 'C', fail: false }, { at: new Date('2025-01-03') })\n\n\t\t\texecuted.length = 0\n\t\t\tawait expect(replay(repo, registry)).rejects.toThrow(OrmReplayError)\n\n\t\t\texpect(executed).toEqual(['A', 'B'])\n\t\t})\n\n\t\ttest('per-event session isolation: failure on event N does not roll back events 1..N−1', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ name: v.string(), fail: v.boolean() }),\n\t\t\t\thandle: async (payload: { name: string; fail: boolean }, ctx: EventContext) => {\n\t\t\t\t\tawait repo.on(CounterSchema).one().create({ name: payload.name, count: 1 })\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw new Error('boom')\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { name: 'alpha', fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fire(repo, 'test', def, { name: 'beta', fail: true }, { at: new Date('2025-01-02') })\n\n\t\t\tconst countersBefore = await repo.on(CounterSchema).all().find()\n\t\t\texpect(countersBefore).toHaveLength(2)\n\n\t\t\tawait expect(replay(repo, registry)).rejects.toThrow(OrmReplayError)\n\n\t\t\tconst countersAfter = await repo.on(CounterSchema).all().find()\n\t\t\texpect(countersAfter).toHaveLength(3)\n\t\t\texpect(countersAfter.filter((c) => c.name === 'alpha')).toHaveLength(2)\n\t\t})\n\n\t\ttest('rerun re-executes a single event with firstRun: false', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\t\t\tlet captured: EventContext | undefined\n\n\t\t\tconst def = {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async (_payload: unknown, ctx: EventContext) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t}\n\t\t\tregistry.register('test', def)\n\n\t\t\tawait fire(repo, 'test', def, { x: 42 })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\tconst key = rows[0].key\n\n\t\t\tawait rerun(repo, registry, key)\n\n\t\t\texpect(captured).toBeDefined()\n\t\t\texpect(captured!.firstRun).toBe(false)\n\t\t\texpect(captured!.key).toBe(key)\n\t\t\texpect(captured!.body).toEqual({ x: 42 })\n\t\t})\n\n\t\ttest('rerun throws OrmReplayError for missing key', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst registry = new HandlerRegistry()\n\n\t\t\tawait expect(rerun(repo, registry, 'nonexistent')).rejects.toThrow(OrmReplayError)\n\t\t})\n\t})\n}\n","import type { Pipe, PipeInput } from 'valleyed'\n\nimport { fire } from './executor'\nimport { HandlerRegistry, type FireFn, type HandlerDef } from './registry'\nimport { replay, rerun } from './walker'\nimport type { OrmAdapterLike } from '../adapters/base'\nimport type { Repo } from '../repo/repo'\n\nexport { type EventContext } from './registry'\n\nexport class EventLog<A extends OrmAdapterLike<any>> {\n\treadonly #repo: Repo<A>\n\treadonly #registry: HandlerRegistry\n\n\tconstructor(repo: Repo<A>, registry: HandlerRegistry) {\n\t\tthis.#repo = repo\n\t\tthis.#registry = registry\n\t}\n\n\thandler<P extends Pipe<any, any>, R>(\n\t\tname: string,\n\t\tdef: HandlerDef<P, R>,\n\t): FireFn<P, R> {\n\t\tthis.#registry.register(name, def)\n\t\treturn (payload: PipeInput<P>, ctx?: { by?: string; at?: Date }) =>\n\t\t\tfire<R>(this.#repo as Repo<any>, name, def, payload, ctx)\n\t}\n\n\treplay(opts?: { from?: Date }): Promise<void> {\n\t\treturn replay(this.#repo as Repo<any>, this.#registry, opts)\n\t}\n\n\trerun(key: string): Promise<void> {\n\t\treturn rerun(this.#repo as Repo<any>, this.#registry, key)\n\t}\n\n\tstatic from<A extends OrmAdapterLike<any>>(repo: Repo<A>) {\n\t\treturn { build: () => new EventLog(repo, new HandlerRegistry()) }\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmValidationError } = await import('../errors')\n\tconst { EventLogSchema } = await import('./schema')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => `u-${Math.random()}`)\n\t\t.field('email', v.string())\n\t\t.field('createdAt', v.number(), { onCreate: () => Date.now() })\n\t\t.build()\n\n\tfunction makeRepo() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\treturn new Repo({\n\t\t\tadapter,\n\t\t\tresolve: (s) => {\n\t\t\t\tif (s === EventLogSchema) return { table: 'events' }\n\t\t\t\tif (s === UserSchema) return { table: 'users' }\n\t\t\t\treturn { table: s.name }\n\t\t\t},\n\t\t})\n\t}\n\n\tdescribe('EventLog', () => {\n\t\ttest('EventLog.from(repo).build() constructs a working instance', () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\texpect(log).toBeInstanceOf(EventLog)\n\t\t})\n\n\t\ttest('handler returns a typed fire function', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireSignup = log.handler('user.signup', {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload) => `created-${payload.email}`,\n\t\t\t})\n\n\t\t\tconst result = await fireSignup({ email: 'a@b.com' }, { by: 'admin' })\n\t\t\texpect(result).toBe('created-a@b.com')\n\t\t})\n\n\t\ttest('duplicate handler name throws', () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tconst def = { pipe: v.string(), handle: async () => {} }\n\n\t\t\tlog.handler('test', def)\n\t\t\texpect(() => log.handler('test', def)).toThrow('already registered')\n\t\t})\n\n\t\ttest('fire persists EventLogSchema row', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('order.placed', {\n\t\t\t\tpipe: v.object({ item: v.string(), qty: v.number() }),\n\t\t\t\thandle: async () => {},\n\t\t\t})\n\n\t\t\tawait fireEvent({ item: 'widget', qty: 3 }, { by: 'user-42' })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('order.placed')\n\t\t\texpect(rows[0].body).toEqual({ item: 'widget', qty: 3 })\n\t\t\texpect(rows[0].by).toBe('user-42')\n\t\t})\n\n\t\ttest('invalid payload throws OrmValidationError, no row persisted', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('test', {\n\t\t\t\tpipe: v.object({ x: v.number() }),\n\t\t\t\thandle: async () => {},\n\t\t\t})\n\n\t\t\tawait expect(fireEvent({ x: 'not-a-number' } as any)).rejects.toThrow(OrmValidationError)\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(rows).toHaveLength(0)\n\t\t})\n\n\t\ttest('handler throw rolls back session — no row persisted, no side writes', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('user.create', {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload) => {\n\t\t\t\t\tawait repo.on(UserSchema).one().create({ email: payload.email })\n\t\t\t\t\tthrow new Error('oops')\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait expect(fireEvent({ email: 'a@b.com' })).rejects.toThrow('oops')\n\n\t\t\tconst eventRows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(eventRows).toHaveLength(0)\n\n\t\t\tconst userRows = await repo.on(UserSchema).all().find()\n\t\t\texpect(userRows).toHaveLength(0)\n\t\t})\n\n\t\ttest('handler receives firstRun: true and correct EventContext', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tlet captured: any\n\n\t\t\tconst fireEvent = log.handler('test', {\n\t\t\t\tpipe: v.object({ val: v.number() }),\n\t\t\t\thandle: async (_payload, ctx) => {\n\t\t\t\t\tcaptured = ctx\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst at = new Date('2025-06-01T00:00:00Z')\n\t\t\tawait fireEvent({ val: 99 }, { by: 'admin', at })\n\n\t\t\texpect(captured.firstRun).toBe(true)\n\t\t\texpect(captured.name).toBe('test')\n\t\t\texpect(captured.by).toBe('admin')\n\t\t\texpect(captured.at).toEqual(at)\n\t\t\texpect(captured.ts).toBe(at.getTime())\n\t\t\texpect(captured.body).toEqual({ val: 99 })\n\t\t})\n\n\t\ttest('end-to-end: register → fire → replay flow', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tconst replayedPayloads: unknown[] = []\n\n\t\t\tconst fireEvent = log.handler('order.placed', {\n\t\t\t\tpipe: v.object({ item: v.string() }),\n\t\t\t\thandle: async (payload, ctx) => {\n\t\t\t\t\tif (!ctx.firstRun) replayedPayloads.push(payload)\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait fireEvent({ item: 'A' }, { at: new Date('2025-01-02') })\n\t\t\tawait fireEvent({ item: 'B' }, { at: new Date('2025-01-01') })\n\n\t\t\tawait log.replay()\n\n\t\t\texpect(replayedPayloads).toEqual([{ item: 'B' }, { item: 'A' }])\n\t\t})\n\n\t\ttest('rerun re-executes a single event with firstRun: false', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\t\t\tlet rerunCtx: any\n\n\t\t\tconst fireEvent = log.handler('test', {\n\t\t\t\tpipe: v.object({ val: v.number() }),\n\t\t\t\thandle: async (_payload, ctx) => {\n\t\t\t\t\tif (!ctx.firstRun) rerunCtx = ctx\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait fireEvent({ val: 7 }, { by: 'admin' })\n\n\t\t\tconst rows = await repo.on(EventLogSchema).all().find()\n\t\t\tawait log.rerun(rows[0].key)\n\n\t\t\texpect(rerunCtx).toBeDefined()\n\t\t\texpect(rerunCtx.firstRun).toBe(false)\n\t\t\texpect(rerunCtx.body).toEqual({ val: 7 })\n\t\t\texpect(rerunCtx.by).toBe('admin')\n\t\t})\n\n\t\ttest('repo.session(() => log.replay()) makes replay atomic — failure rolls back all', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireEvent = log.handler('user.create', {\n\t\t\t\tpipe: v.object({ email: v.string(), fail: v.boolean() }),\n\t\t\t\thandle: async (payload, ctx) => {\n\t\t\t\t\tawait repo.on(UserSchema).one().create({ email: payload.email })\n\t\t\t\t\tif (!ctx.firstRun && payload.fail) throw new Error('replay boom')\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tawait fireEvent({ email: 'alice@test.com', fail: false }, { at: new Date('2025-01-01') })\n\t\t\tawait fireEvent({ email: 'bob@test.com', fail: true }, { at: new Date('2025-01-02') })\n\n\t\t\tconst usersBefore = await repo.on(UserSchema).all().find()\n\t\t\texpect(usersBefore).toHaveLength(2)\n\n\t\t\tawait expect(\n\t\t\t\trepo.session(() => log.replay()),\n\t\t\t).rejects.toThrow()\n\n\t\t\tconst usersAfter = await repo.on(UserSchema).all().find()\n\t\t\texpect(usersAfter).toHaveLength(2)\n\t\t})\n\n\t\ttest('end-to-end: fire persists row + handler-side writes atomically', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst log = EventLog.from(repo).build()\n\n\t\t\tconst fireSignup = log.handler('user.signup', {\n\t\t\t\tpipe: v.object({ email: v.string() }),\n\t\t\t\thandle: async (payload, evCtx) => {\n\t\t\t\t\tconst user = await repo.on(UserSchema).one().create({\n\t\t\t\t\t\temail: payload.email,\n\t\t\t\t\t\tcreatedAt: evCtx.at.getTime(),\n\t\t\t\t\t})\n\t\t\t\t\treturn user\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst user = await fireSignup({ email: 'alice@test.com' }, { by: 'system' })\n\t\t\texpect(user.email).toBe('alice@test.com')\n\n\t\t\tconst eventRows = await repo.on(EventLogSchema).all().find()\n\t\t\texpect(eventRows).toHaveLength(1)\n\n\t\t\tconst userRows = await repo.on(UserSchema).all().find()\n\t\t\texpect(userRows).toHaveLength(1)\n\t\t})\n\t})\n}\n","import type { FieldTypeName } from '../adapter'\nimport type { OrmAdapter } from '../orm-adapter'\nimport type { AnySchema } from '../schema'\nimport type { DiscoveredField, DiscoveredSchema } from './introspection-types'\nimport type { AnyChange } from './types'\n\nconst EMISSION_ORDER: AnyChange['kind'][] = [\n\t'dropForeignKey',\n\t'dropIndex',\n\t'dropField',\n\t'dropTable',\n\t'renameTable',\n\t'renameField',\n\t'createTable',\n\t'addField',\n\t'modifyField',\n\t'addIndex',\n\t'addForeignKey',\n]\n\ntype SchemaFieldInfo = {\n\tname: string\n\ttype: FieldTypeName\n\tnullable?: boolean\n\tdefault?: string | number | boolean | null\n\tunique?: boolean\n}\n\nfunction adapterSupports(adapter: OrmAdapter, kind: AnyChange['kind']): boolean {\n\tif (kind === 'execute') return true\n\tconst method = `apply${kind[0].toUpperCase()}${kind.slice(1)}` as keyof OrmAdapter\n\treturn typeof (adapter as any)[method] === 'function'\n}\n\nfunction fieldsEqual(target: SchemaFieldInfo, discovered: DiscoveredField): boolean {\n\tif (target.type !== discovered.type) return false\n\tif ((target.nullable ?? false) !== discovered.nullable) return false\n\tif (target.default !== discovered.default) return false\n\tif ((target.unique ?? false) !== (discovered.unique ?? false)) return false\n\treturn true\n}\n\nconst toFieldPayload = (f: SchemaFieldInfo) => ({\n\tname: f.name,\n\ttype: f.type,\n\t...(f.nullable ? { nullable: true as const } : {}),\n})\n\nfunction extractSchemaInfo(schema: AnySchema): {\n\tname: string\n\tpk: { name: string; type: FieldTypeName }\n\tfields: SchemaFieldInfo[]\n} {\n\tconst pkField = schema.pkField\n\tconst pkType = inferFieldType(pkField.pipe)\n\tconst fields: SchemaFieldInfo[] = []\n\tfor (const field of Object.values(schema.fieldDefs)) {\n\t\tconst f = field as any\n\t\tfields.push({\n\t\t\tname: f.name,\n\t\t\ttype: inferFieldType(f.pipe),\n\t\t\tnullable: isNullable(f.pipe),\n\t\t})\n\t}\n\treturn { name: schema.name, pk: { name: pkField.name, type: pkType }, fields }\n}\n\nconst KNOWN_FIELD_TYPES: ReadonlySet<string> = new Set<FieldTypeName>(['string', 'number', 'boolean', 'array', 'object', 'date'])\n\nfunction inferFieldType(pipe: any): FieldTypeName {\n\tif (!pipe) return 'string'\n\tconst schema = typeof pipe.schema === 'function' ? pipe.schema() : undefined\n\tif (schema?.type) {\n\t\tif (KNOWN_FIELD_TYPES.has(schema.type)) return schema.type as FieldTypeName\n\t\treturn 'string'\n\t}\n\tconst std = pipe['~standard']\n\tif (std?.validate) {\n\t\tif (!std.validate(0).issues) return 'number'\n\t\tif (!std.validate('').issues) return 'string'\n\t\tif (!std.validate(true).issues) return 'boolean'\n\t\tif (!std.validate([]).issues) return 'array'\n\t\tif (!std.validate({}).issues) return 'object'\n\t}\n\treturn 'string'\n}\n\nfunction isNullable(pipe: any): boolean {\n\tif (!pipe) return false\n\tconst ctx = typeof pipe.context === 'function' ? pipe.context() : undefined\n\tif (ctx?.optional) return true\n\tconst std = pipe['~standard']\n\tif (std?.validate && !std.validate(undefined).issues) return true\n\treturn false\n}\n\nexport function diffSchemas(\n\tadapter: OrmAdapter,\n\ttarget: ReadonlyArray<AnySchema>,\n\tcurrent: ReadonlyArray<DiscoveredSchema>,\n): ReadonlyArray<AnyChange> {\n\tconst changes: AnyChange[] = []\n\tconst currentByName = new Map(current.map((s) => [s.name, s]))\n\tconst targetByName = new Map(target.map((s) => [s.name, s]))\n\n\tfor (const disc of current) {\n\t\tif (!targetByName.has(disc.name)) {\n\t\t\tfor (const fk of disc.foreignKeys) {\n\t\t\t\tchanges.push({ kind: 'dropForeignKey', table: disc.name, name: fk.name })\n\t\t\t}\n\t\t\tfor (const idx of disc.indexes) {\n\t\t\t\tchanges.push({ kind: 'dropIndex', name: idx.name })\n\t\t\t}\n\t\t\tchanges.push({ kind: 'dropTable', name: disc.name })\n\t\t}\n\t}\n\n\tfor (const schema of target) {\n\t\tconst info = extractSchemaInfo(schema)\n\t\tconst disc = currentByName.get(info.name)\n\n\t\tif (!disc) {\n\t\t\tchanges.push({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: info.name,\n\t\t\t\tpk: info.pk,\n\t\t\t\tfields: info.fields.map(toFieldPayload),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tconst discFieldsByName = new Map(disc.fields.map((f) => [f.name, f]))\n\t\tconst targetFieldsByName = new Map(info.fields.map((f) => [f.name, f]))\n\n\t\tfor (const discField of disc.fields) {\n\t\t\tif (!targetFieldsByName.has(discField.name)) {\n\t\t\t\tchanges.push({ kind: 'dropField', table: info.name, name: discField.name })\n\t\t\t}\n\t\t}\n\n\t\tfor (const tField of info.fields) {\n\t\t\tconst existing = discFieldsByName.get(tField.name)\n\t\t\tif (!existing) {\n\t\t\t\tchanges.push({ kind: 'addField', table: info.name, field: toFieldPayload(tField) })\n\t\t\t} else if (!fieldsEqual(tField, existing)) {\n\t\t\t\tchanges.push({ kind: 'modifyField', table: info.name, name: tField.name, to: toFieldPayload(tField) })\n\t\t\t}\n\t\t}\n\t}\n\n\treturn changes\n\t\t.filter((c) => adapterSupports(adapter, c.kind))\n\t\t.sort((a, b) => EMISSION_ORDER.indexOf(a.kind) - EMISSION_ORDER.indexOf(b.kind))\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\n\tdescribe('diffSchemas', () => {\n\t\tfunction makeAdapter() {\n\t\t\treturn InMemoryAdapter.create({})\n\t\t}\n\n\t\ttest('returns empty array when no changes needed', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toEqual([])\n\t\t})\n\n\t\ttest('fresh DB returns createTable for everything', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], [])\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t\t{ name: 'age', type: 'number' },\n\t\t\t\t],\n\t\t\t})\n\t\t})\n\n\t\ttest('add field detected when target has field absent from current', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'addField',\n\t\t\t\ttable: 'users',\n\t\t\t\tfield: { name: 'age', type: 'number' },\n\t\t\t})\n\t\t})\n\n\t\ttest('drop field detected when current has field absent from target', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string', nullable: false },\n\t\t\t\t\t{ name: 'age', type: 'number', nullable: false },\n\t\t\t\t],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'dropField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t})\n\t\t})\n\n\t\ttest('modify field detected when type changes', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('age', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'age', type: 'number', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0]).toEqual({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t\tto: { name: 'age', type: 'string' },\n\t\t\t})\n\t\t})\n\n\t\ttest('drop table detected when current has table absent from target', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'posts',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'title', type: 'string', nullable: false }],\n\t\t\t\tindexes: [{ name: 'posts_title_idx', on: ['title'], unique: false }],\n\t\t\t\tforeignKeys: [{ name: 'posts_author_fk', on: 'authorId', references: { table: 'users', column: 'id' } }],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('dropForeignKey')\n\t\t\texpect(kinds).toContain('dropIndex')\n\t\t\texpect(kinds).toContain('dropTable')\n\t\t})\n\n\t\ttest('rename surfaces as drop+add (NOT auto-rename)', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('fullName', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'name', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('dropField')\n\t\t\texpect(kinds).toContain('addField')\n\t\t\texpect(kinds).not.toContain('renameField')\n\t\t})\n\n\t\ttest('emission order respects fixed canonical sequence', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('newField', v.number())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [\n\t\t\t\t{\n\t\t\t\t\tname: 'users',\n\t\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{ name: 'email', type: 'number', nullable: false },\n\t\t\t\t\t\t{ name: 'oldField', type: 'string', nullable: false },\n\t\t\t\t\t],\n\t\t\t\t\tindexes: [],\n\t\t\t\t\tforeignKeys: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'posts',\n\t\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\t\tfields: [],\n\t\t\t\t\tindexes: [],\n\t\t\t\t\tforeignKeys: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\tfor (let i = 0; i < kinds.length - 1; i++) {\n\t\t\t\tconst a = EMISSION_ORDER.indexOf(kinds[i])\n\t\t\t\tconst b = EMISSION_ORDER.indexOf(kinds[i + 1])\n\t\t\t\texpect(a).toBeLessThanOrEqual(b)\n\t\t\t}\n\t\t})\n\n\t\ttest('adapter-aware filtering removes unsupported variants', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass IndexOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\tasync applyAddIndex() {}\n\t\t\t\tasync applyDropIndex() {}\n\t\t\t\tasync loadMigrations() { return [] }\n\t\t\t\tasync recordMigration() {}\n\t\t\t\tasync introspect() { return [] }\n\t\t\t}\n\t\t\tconst adapter = new (IndexOnlyAdapter as any)() as IndexOnlyAdapter\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], [])\n\t\t\texpect(result).toEqual([])\n\t\t})\n\n\t\ttest('multiple tables: creates missing and drops extra', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.build()\n\t\t\tconst PostSchema = Schema.from('posts')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('title', v.string())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}, {\n\t\t\t\tname: 'comments',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema, PostSchema], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('dropTable')\n\t\t\texpect(kinds).toContain('createTable')\n\t\t\tconst dropTable = result.find((c) => c.kind === 'dropTable') as any\n\t\t\texpect(dropTable.name).toBe('comments')\n\t\t\tconst createTable = result.find((c) => c.kind === 'createTable') as any\n\t\t\texpect(createTable.name).toBe('posts')\n\t\t})\n\n\t\ttest('Mongo-style adapter with only index ops: field-bearing target returns empty diff', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass MongoStyleAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number', 'object', 'array'] as const\n\t\t\t\tasync applyAddIndex() {}\n\t\t\t\tasync applyDropIndex() {}\n\t\t\t\tasync loadMigrations() { return [] }\n\t\t\t\tasync recordMigration() {}\n\t\t\t}\n\t\t\tconst adapter = new (MongoStyleAdapter as any)() as MongoStyleAdapter\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [],\n\t\t\t\tindexes: [{ name: 'users_email_idx', on: ['email'], unique: true }],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\tconst kinds = result.map((c) => c.kind)\n\t\t\texpect(kinds.every((k) => k === 'addIndex' || k === 'dropIndex')).toBe(true)\n\t\t})\n\n\t\ttest('drop index and drop FK emitted when table is dropped', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'posts',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [],\n\t\t\t\tindexes: [{ name: 'posts_title_idx', on: ['title'], unique: false }],\n\t\t\t\tforeignKeys: [{ name: 'posts_author_fk', on: 'authorId', references: { table: 'users', column: 'id' } }],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [], current)\n\t\t\texpect(result).toHaveLength(3)\n\t\t\texpect(result[0].kind).toBe('dropForeignKey')\n\t\t\texpect(result[1].kind).toBe('dropIndex')\n\t\t\texpect(result[2].kind).toBe('dropTable')\n\t\t})\n\n\t\ttest('nullable field mismatch detected as modify', () => {\n\t\t\tconst adapter = makeAdapter()\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('email', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t\t.build()\n\t\t\tconst current: DiscoveredSchema[] = [{\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string', nullable: false }],\n\t\t\t\tindexes: [],\n\t\t\t\tforeignKeys: [],\n\t\t\t}]\n\t\t\tconst result = diffSchemas(adapter, [UserSchema], current)\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0].kind).toBe('modifyField')\n\t\t})\n\t})\n}\n","import type { OrmAdapterLike } from '../adapters/base'\nimport type { OrmAdapter } from '../orm-adapter'\nimport { diffSchemas } from './diff'\nimport type { DiscoveredSchema } from './introspection-types'\nimport type { ChangeFor } from './types'\nimport type { Repo } from '../repo/repo'\nimport type { AnySchema } from '../schema'\n\nexport type IntrospectableAdapter<A> = A extends { introspect(): Promise<DiscoveredSchema[]> } ? A : never\n\nexport class MigrationCodegen<A extends OrmAdapterLike<any>> {\n\treadonly #adapter: OrmAdapter & { introspect(): Promise<DiscoveredSchema[]> }\n\treadonly #target: ReadonlyArray<AnySchema>\n\n\tconstructor(\n\t\t_repo: Repo<A>,\n\t\tadapter: OrmAdapter & { introspect(): Promise<DiscoveredSchema[]> },\n\t\ttarget: ReadonlyArray<AnySchema>,\n\t) {\n\t\tthis.#adapter = adapter\n\t\tthis.#target = target\n\t}\n\n\tasync diff(): Promise<ReadonlyArray<ChangeFor<A>> | null> {\n\t\tconst current = await this.#adapter.introspect()\n\t\tconst changes = diffSchemas(this.#adapter, this.#target, current)\n\t\tif (changes.length === 0) return null\n\t\treturn changes as unknown as ReadonlyArray<ChangeFor<A>>\n\t}\n\n\tasync discover(): Promise<ReadonlyArray<DiscoveredSchema>> {\n\t\treturn this.#adapter.introspect()\n\t}\n\n\tstatic from<A extends OrmAdapterLike<any>>(\n\t\trepo: Repo<IntrospectableAdapter<A>>,\n\t\tadapter: A & OrmAdapter & { introspect(): Promise<DiscoveredSchema[]> },\n\t) {\n\t\treturn {\n\t\t\ttarget(schemas: ReadonlyArray<AnySchema>) {\n\t\t\t\treturn {\n\t\t\t\t\tbuild(): MigrationCodegen<A> {\n\t\t\t\t\t\treturn new MigrationCodegen(repo as unknown as Repo<A>, adapter, schemas)\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmIntrospectionError } = await import('../errors/introspection')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2)}`)\n\t\t.field('email', v.string())\n\t\t.field('age', v.number())\n\t\t.build()\n\n\tconst PostSchema = Schema.from('posts')\n\t\t.pk('id', v.string(), () => `p-${Math.random().toString(36).slice(2)}`)\n\t\t.field('title', v.string())\n\t\t.field('authorId', v.string())\n\t\t.build()\n\n\tfunction makeEnv() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\tconst repo = new Repo({ adapter, resolve: (s) => ({ table: s.name }) })\n\t\treturn { adapter, repo }\n\t}\n\n\tdescribe('MigrationCodegen', () => {\n\t\ttest('diff() returns createTable changes for fresh DB', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst changes = await codegen.diff()\n\t\t\texpect(changes).not.toBeNull()\n\t\t\texpect(changes).toHaveLength(1)\n\t\t\texpect(changes![0].kind).toBe('createTable')\n\t\t\tconst ct = changes![0] as any\n\t\t\texpect(ct.name).toBe('users')\n\t\t\texpect(ct.pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(ct.fields).toEqual([\n\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t{ name: 'age', type: 'number' },\n\t\t\t])\n\t\t})\n\n\t\ttest('diff() returns null when target matches current', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t\t{ name: 'age', type: 'number' },\n\t\t\t\t],\n\t\t\t})\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst changes = await codegen.diff()\n\t\t\texpect(changes).toBeNull()\n\t\t})\n\n\t\ttest('discover() returns raw introspection descriptors', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string' }],\n\t\t\t})\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], unique: true })\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst discovered = await codegen.discover()\n\t\t\texpect(discovered).toHaveLength(1)\n\t\t\texpect(discovered[0].name).toBe('users')\n\t\t\texpect(discovered[0].pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(discovered[0].fields).toEqual([{ name: 'email', type: 'string', nullable: false }])\n\t\t\texpect(discovered[0].indexes).toEqual([{ name: 'users_email_idx', on: ['email'], unique: true }])\n\t\t})\n\n\t\ttest('end-to-end: seed adapter state, declare target, call diff()', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [{ name: 'email', type: 'string' }],\n\t\t\t})\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema, PostSchema]).build()\n\t\t\tconst changes = await codegen.diff()\n\t\t\texpect(changes).not.toBeNull()\n\t\t\tconst kinds = changes!.map((c) => c.kind)\n\t\t\texpect(kinds).toContain('addField')\n\t\t\texpect(kinds).toContain('createTable')\n\t\t\tconst addField = changes!.find((c) => c.kind === 'addField') as any\n\t\t\texpect(addField.table).toBe('users')\n\t\t\texpect(addField.field.name).toBe('age')\n\t\t\tconst createTable = changes!.find((c) => c.kind === 'createTable') as any\n\t\t\texpect(createTable.name).toBe('posts')\n\t\t})\n\n\t\ttest('compile-time: IntrospectableAdapter is never when adapter lacks introspect', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass _NoIntrospectAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t}\n\t\t\ttype NoIntrospect = InstanceType<typeof _NoIntrospectAdapter>\n\t\t\texpectTypeOf<IntrospectableAdapter<NoIntrospect>>().toBeNever()\n\t\t})\n\n\t\ttest('OrmIntrospectionError thrown on unrecognized DB type (sentinel)', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\t// Inject a sentinel value with an invalid type into the adapter's table state\n\t\t\tadapter.tables.set('broken', {\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: new Map([['weirdCol', { name: 'weirdCol', type: 'bytea' as any }]]),\n\t\t\t})\n\t\t\tconst codegen = MigrationCodegen.from(repo, adapter).target([UserSchema]).build()\n\t\t\tconst origIntrospect = adapter.introspect.bind(adapter)\n\t\t\tadapter.introspect = async () => {\n\t\t\t\tconst schemas = await origIntrospect()\n\t\t\t\tfor (const s of schemas) {\n\t\t\t\t\tfor (const f of s.fields) {\n\t\t\t\t\t\tconst validTypes = ['string', 'number', 'boolean', 'null', 'object', 'array', 'date']\n\t\t\t\t\t\tif (!validTypes.includes(f.type)) {\n\t\t\t\t\t\t\tthrow new OrmIntrospectionError({ adapter: 'in-memory', table: s.name, cause: `unsupported type '${f.type}' on column '${f.name}'` })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn schemas\n\t\t\t}\n\t\t\tawait expect(codegen.diff()).rejects.toThrow(OrmIntrospectionError)\n\t\t\ttry {\n\t\t\t\tawait codegen.diff()\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.adapter).toBe('in-memory')\n\t\t\t\texpect(err.table).toBe('broken')\n\t\t\t}\n\t\t})\n\t})\n}\n","import type { OrmAdapterLike } from '../adapters/base'\nimport type { OrmAdapter } from '../orm-adapter'\nimport type { AnyChange } from './types'\nimport type { Repo } from '../repo/repo'\n\nexport async function applyChange(adapter: OrmAdapter, repo: Repo<OrmAdapterLike<any>>, change: AnyChange): Promise<void> {\n\tif (change.kind === 'execute') {\n\t\tawait change.up(repo)\n\t\treturn\n\t}\n\n\tconst methodName = `apply${change.kind[0].toUpperCase()}${change.kind.slice(1)}`\n\tconst method = (adapter as any)[methodName]\n\tif (typeof method !== 'function') {\n\t\tthrow new Error(`Adapter does not support change kind '${change.kind}'`)\n\t}\n\tawait method.call(adapter, change)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, vi } = import.meta.vitest\n\n\tdescribe('applyChange', () => {\n\t\ttest('routes addIndex to adapter.applyAddIndex', async () => {\n\t\t\tconst applyAddIndex = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyAddIndex } as any\n\t\t\tconst repo = {} as any\n\t\t\tawait applyChange(adapter, repo, { kind: 'addIndex', table: 'users', on: ['email'] })\n\t\t\texpect(applyAddIndex).toHaveBeenCalledWith({ kind: 'addIndex', table: 'users', on: ['email'] })\n\t\t})\n\n\t\ttest('routes execute to change.up(repo)', async () => {\n\t\t\tconst up = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = {} as any\n\t\t\tconst repo = {} as any\n\t\t\tawait applyChange(adapter, repo, { kind: 'execute', up })\n\t\t\texpect(up).toHaveBeenCalledWith(repo)\n\t\t})\n\n\t\ttest('throws when adapter lacks the apply method for a declarative change', async () => {\n\t\t\tconst adapter = {} as any\n\t\t\tconst repo = {} as any\n\t\t\tawait expect(applyChange(adapter, repo, { kind: 'addIndex', table: 't', on: ['a'] }))\n\t\t\t\t.rejects.toThrow(\"Adapter does not support change kind 'addIndex'\")\n\t\t})\n\n\t\ttest('routes createTable to adapter.applyCreateTable', async () => {\n\t\t\tconst applyCreateTable = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyCreateTable } as any\n\t\t\tconst change = { kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [] }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyCreateTable).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropTable to adapter.applyDropTable', async () => {\n\t\t\tconst applyDropTable = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropTable } as any\n\t\t\tconst change = { kind: 'dropTable' as const, name: 'users' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropTable).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes addField to adapter.applyAddField', async () => {\n\t\t\tconst applyAddField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyAddField } as any\n\t\t\tconst change = { kind: 'addField' as const, table: 'users', field: { name: 'age', type: 'number' } }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyAddField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropField to adapter.applyDropField', async () => {\n\t\t\tconst applyDropField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropField } as any\n\t\t\tconst change = { kind: 'dropField' as const, table: 'users', name: 'age' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes modifyField to adapter.applyModifyField', async () => {\n\t\t\tconst applyModifyField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyModifyField } as any\n\t\t\tconst change = { kind: 'modifyField' as const, table: 'users', name: 'age', to: { name: 'age', type: 'string' } }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyModifyField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes renameTable to adapter.applyRenameTable', async () => {\n\t\t\tconst applyRenameTable = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyRenameTable } as any\n\t\t\tconst change = { kind: 'renameTable' as const, from: 'users', to: 'accounts' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyRenameTable).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes renameField to adapter.applyRenameField', async () => {\n\t\t\tconst applyRenameField = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyRenameField } as any\n\t\t\tconst change = { kind: 'renameField' as const, table: 'users', from: 'name', to: 'fullName' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyRenameField).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropIndex to adapter.applyDropIndex', async () => {\n\t\t\tconst applyDropIndex = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropIndex } as any\n\t\t\tconst change = { kind: 'dropIndex' as const, name: 'users_email_idx' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropIndex).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes addForeignKey to adapter.applyAddForeignKey', async () => {\n\t\t\tconst applyAddForeignKey = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyAddForeignKey } as any\n\t\t\tconst change = { kind: 'addForeignKey' as const, table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' } }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyAddForeignKey).toHaveBeenCalledWith(change)\n\t\t})\n\n\t\ttest('routes dropForeignKey to adapter.applyDropForeignKey', async () => {\n\t\t\tconst applyDropForeignKey = vi.fn().mockResolvedValue(undefined)\n\t\t\tconst adapter = { applyDropForeignKey } as any\n\t\t\tconst change = { kind: 'dropForeignKey' as const, table: 'posts', name: 'posts_authorId_fk' }\n\t\t\tawait applyChange(adapter, {} as any, change)\n\t\t\texpect(applyDropForeignKey).toHaveBeenCalledWith(change)\n\t\t})\n\t})\n}\n","import type { AnyMigration } from './types'\nimport { OrmMigrationError } from '../errors/migration'\n\nexport type PendingOpts = { to?: string; steps?: number }\n\nexport function computePending(\n\tdeclared: ReadonlyArray<AnyMigration>,\n\tapplied: ReadonlyArray<{ id: string; appliedAt: number }>,\n\topts?: PendingOpts,\n): { pending: AnyMigration[]; skipped: string[] } {\n\tconst appliedIds = new Set(applied.map((a) => a.id))\n\tconst declaredIds = new Set(declared.map((d) => d.id))\n\n\tconst orphans = applied.filter((a) => !declaredIds.has(a.id)).map((a) => a.id)\n\tif (orphans.length > 0) {\n\t\tthrow new OrmMigrationError({\n\t\t\tid: orphans[0],\n\t\t\tphase: 'load',\n\t\t\tcause: `orphan migrations: [${orphans.join(', ')}]`,\n\t\t})\n\t}\n\n\tconst sorted = [...declared].sort((a, b) => a.id.localeCompare(b.id))\n\n\tconst pending: AnyMigration[] = []\n\tconst skipped: string[] = []\n\tfor (const m of sorted) {\n\t\tif (appliedIds.has(m.id)) {\n\t\t\tskipped.push(m.id)\n\t\t} else {\n\t\t\tpending.push(m)\n\t\t}\n\t}\n\n\tif (opts?.to !== undefined) {\n\t\tconst toIdx = pending.findIndex((m) => m.id === opts.to)\n\t\tif (toIdx === -1) {\n\t\t\tif (appliedIds.has(opts.to)) return { pending: [], skipped }\n\t\t\tthrow new OrmMigrationError({\n\t\t\t\tid: opts.to,\n\t\t\t\tphase: 'load',\n\t\t\t\tcause: `unknown migration id: ${opts.to}`,\n\t\t\t})\n\t\t}\n\t\tpending.splice(toIdx + 1)\n\t}\n\n\tif (opts?.steps !== undefined) {\n\t\tpending.splice(opts.steps)\n\t}\n\n\treturn { pending, skipped }\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { OrmMigrationError } = await import('../errors/migration')\n\n\tdescribe('computePending', () => {\n\t\ttest('returns all as pending when none applied', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0002-add-index', changes: [] },\n\t\t\t\t{ id: '0001-create-table', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [])\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001-create-table', '0002-add-index'])\n\t\t\texpect(result.skipped).toEqual([])\n\t\t})\n\n\t\ttest('skips already applied migrations', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }]\n\t\t\tconst result = computePending(declared, applied)\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0002', '0003'])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('throws on orphan migrations', () => {\n\t\t\tconst declared = [{ id: '0001', changes: [] }]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }, { id: 'ghost', appliedAt: 2 }]\n\t\t\texpect(() => computePending(declared, applied)).toThrow(OrmMigrationError)\n\t\t\ttry {\n\t\t\t\tcomputePending(declared, applied)\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t\texpect(err.cause).toContain('ghost')\n\t\t\t}\n\t\t})\n\n\t\ttest('returns empty pending when all applied', () => {\n\t\t\tconst declared = [{ id: '0001', changes: [] }]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }]\n\t\t\tconst result = computePending(declared, applied)\n\t\t\texpect(result.pending).toEqual([])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('sorts by lex id order', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: 'c', changes: [] },\n\t\t\t\t{ id: 'a', changes: [] },\n\t\t\t\t{ id: 'b', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [])\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['a', 'b', 'c'])\n\t\t})\n\n\t\ttest('to: returns pending up to and including the named id', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [], { to: '0002' })\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001', '0002'])\n\t\t})\n\n\t\ttest('to: no-op when target id already applied', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst applied = [{ id: '0001', appliedAt: 1 }, { id: '0002', appliedAt: 2 }]\n\t\t\tconst result = computePending(declared, applied, { to: '0002' })\n\t\t\texpect(result.pending).toEqual([])\n\t\t})\n\n\t\ttest('to: throws on unknown id', () => {\n\t\t\tconst declared = [{ id: '0001', changes: [] }]\n\t\t\texpect(() => computePending(declared, [], { to: 'unknown' })).toThrow(OrmMigrationError)\n\t\t\ttry {\n\t\t\t\tcomputePending(declared, [], { to: 'unknown' })\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t\texpect(err.id).toBe('unknown')\n\t\t\t}\n\t\t})\n\n\t\ttest('steps: returns the first N pending', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [], { steps: 1 })\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001'])\n\t\t})\n\n\t\ttest('steps: returns all pending when N exceeds count', () => {\n\t\t\tconst declared = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t]\n\t\t\tconst result = computePending(declared, [], { steps: 5 })\n\t\t\texpect(result.pending.map((m) => m.id)).toEqual(['0001', '0002'])\n\t\t})\n\t})\n}\n","import { OrmValidationError, type OrmValidationFailure } from '../errors/validation'\nimport type { OrmAdapter } from '../orm-adapter'\nimport type { AnyChange, AnyMigration } from './types'\n\nfunction isEmpty(s: string | undefined | null): boolean {\n\treturn !s || s.trim() === ''\n}\n\ntype ChangeContext = { adapter: OrmAdapter; migrationId: string; changeIndex: number; failures: OrmValidationFailure[] }\n\nfunction validateFieldSpec(ctx: ChangeContext, fieldSpec: { name: string; type: string }, fieldLabel: string): void {\n\tif (isEmpty(fieldSpec.name)) {\n\t\tctx.failures.push({ migrationId: ctx.migrationId, changeIndex: ctx.changeIndex, field: fieldLabel, cause: `${fieldLabel} name must be non-empty` })\n\t}\n\tif (ctx.adapter.supportedFieldTypes.length > 0 && !ctx.adapter.supportedFieldTypes.includes(fieldSpec.type as any)) {\n\t\tctx.failures.push({ migrationId: ctx.migrationId, changeIndex: ctx.changeIndex, field: fieldLabel, cause: `unsupported field type '${fieldSpec.type}'` })\n\t}\n}\n\nfunction fail(ctx: ChangeContext, field: string | undefined, cause: string): void {\n\tctx.failures.push({ migrationId: ctx.migrationId, changeIndex: ctx.changeIndex, ...(field ? { field } : {}), cause })\n}\n\nfunction validateChange(adapter: OrmAdapter, change: AnyChange, migrationId: string, changeIndex: number, failures: OrmValidationFailure[]): void {\n\tif (change.kind === 'execute') return\n\n\tconst ctx: ChangeContext = { adapter, migrationId, changeIndex, failures }\n\tconst methodName = `apply${change.kind[0].toUpperCase()}${change.kind.slice(1)}`\n\tif (typeof (adapter as any)[methodName] !== 'function') {\n\t\tfail(ctx, undefined, `adapter does not support change kind '${change.kind}'`)\n\t}\n\n\tswitch (change.kind) {\n\t\tcase 'createTable': {\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.pk.name)) fail(ctx, 'pk.name', 'pk name must be non-empty')\n\t\t\tif (adapter.supportedFieldTypes.length > 0 && !adapter.supportedFieldTypes.includes(change.pk.type as any)) {\n\t\t\t\tfail(ctx, 'pk.type', `unsupported field type '${change.pk.type}'`)\n\t\t\t}\n\t\t\tconst fieldNames = new Set<string>()\n\t\t\tfor (const f of change.fields) {\n\t\t\t\tvalidateFieldSpec(ctx, f, 'field')\n\t\t\t\tif (fieldNames.has(f.name)) fail(ctx, 'fields', `duplicate field name '${f.name}' in createTable`)\n\t\t\t\tfieldNames.add(f.name)\n\t\t\t}\n\t\t\tif (change.pk.name && fieldNames.has(change.pk.name)) {\n\t\t\t\tfail(ctx, 'pk.name', `pk name '${change.pk.name}' collides with a field name`)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropTable': {\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'table name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'addField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tvalidateFieldSpec(ctx, change.field, 'field')\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'field name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'modifyField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'field name must be non-empty')\n\t\t\tvalidateFieldSpec(ctx, change.to, 'to')\n\t\t\tbreak\n\t\t}\n\t\tcase 'renameTable': {\n\t\t\tif (isEmpty(change.from)) fail(ctx, 'from', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.to)) fail(ctx, 'to', 'table name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'renameField': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.from)) fail(ctx, 'from', 'field name must be non-empty')\n\t\t\tif (isEmpty(change.to)) fail(ctx, 'to', 'field name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'addIndex': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (!change.on || change.on.length === 0) fail(ctx, 'on', 'addIndex.on must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropIndex': {\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'index name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'addForeignKey': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.on)) fail(ctx, 'on', 'addForeignKey.on must be non-empty')\n\t\t\tif (isEmpty(change.references?.table)) fail(ctx, 'references.table', 'references table must be non-empty')\n\t\t\tif (isEmpty(change.references?.column)) fail(ctx, 'references.column', 'references column must be non-empty')\n\t\t\tbreak\n\t\t}\n\t\tcase 'dropForeignKey': {\n\t\t\tif (isEmpty(change.table)) fail(ctx, 'table', 'table name must be non-empty')\n\t\t\tif (isEmpty(change.name)) fail(ctx, 'name', 'foreign key name must be non-empty')\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport function assertNormalisedChanges(adapter: OrmAdapter, migrations: ReadonlyArray<AnyMigration>): void {\n\tconst failures: OrmValidationFailure[] = []\n\n\tconst seenIds = new Set<string>()\n\tfor (const m of migrations) {\n\t\tif (isEmpty(m.id)) {\n\t\t\tfailures.push({ cause: 'migration id must be a non-empty string' })\n\t\t\tcontinue\n\t\t}\n\n\t\tif (seenIds.has(m.id)) {\n\t\t\tfailures.push({ migrationId: m.id, cause: `duplicate migration id '${m.id}'` })\n\t\t}\n\t\tseenIds.add(m.id)\n\n\t\tfor (let i = 0; i < m.changes.length; i++) {\n\t\t\tvalidateChange(adapter, m.changes[i], m.id, i, failures)\n\t\t}\n\t}\n\n\tif (failures.length > 0) {\n\t\tthrow new OrmValidationError('changes', 'migrations', 'build', failures)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tdescribe('assertNormalisedChanges', () => {\n\t\tconst fullAdapter = {\n\t\t\tsupportedFieldTypes: ['string', 'number', 'boolean'],\n\t\t\tapplyCreateTable: async () => {},\n\t\t\tapplyDropTable: async () => {},\n\t\t\tapplyAddField: async () => {},\n\t\t\tapplyDropField: async () => {},\n\t\t\tapplyModifyField: async () => {},\n\t\t\tapplyRenameTable: async () => {},\n\t\t\tapplyRenameField: async () => {},\n\t\t\tapplyAddIndex: async () => {},\n\t\t\tapplyDropIndex: async () => {},\n\t\t\tapplyAddForeignKey: async () => {},\n\t\t\tapplyDropForeignKey: async () => {},\n\t\t} as any\n\n\t\tconst adapterWithIndex = { supportedFieldTypes: ['string', 'number'], applyAddIndex: async () => {} } as any\n\t\tconst adapterWithout = { supportedFieldTypes: [] } as any\n\n\t\ttest('passes for valid migrations with all variant kinds', () => {\n\t\t\tconst migrations = [\n\t\t\t\t{ id: '0001', changes: [\n\t\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] },\n\t\t\t\t\t{ kind: 'addField' as const, table: 'users', field: { name: 'age', type: 'number' } },\n\t\t\t\t\t{ kind: 'addIndex' as const, table: 'users', on: ['email'] },\n\t\t\t\t\t{ kind: 'addForeignKey' as const, table: 'users', on: 'orgId', references: { table: 'orgs', column: 'id' } },\n\t\t\t\t] },\n\t\t\t]\n\t\t\texpect(() => assertNormalisedChanges(fullAdapter, migrations)).not.toThrow()\n\t\t})\n\n\t\ttest('invariant A: throws on empty migration id', () => {\n\t\t\tconst migrations = [{ id: '', changes: [] }]\n\t\t\texpect(() => assertNormalisedChanges(fullAdapter, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.kind).toBe('changes')\n\t\t\t\texpect(err.failures).toHaveLength(1)\n\t\t\t\texpect(err.failures[0].cause).toContain('non-empty')\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant B: throws on duplicate migration ids with migrationId field', () => {\n\t\t\tconst migrations = [{ id: 'dup', changes: [] }, { id: 'dup', changes: [] }]\n\t\t\texpect(() => assertNormalisedChanges(fullAdapter, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.kind).toBe('changes')\n\t\t\t\tconst dup = err.failures.find((f: any) => f.cause.includes('duplicate'))\n\t\t\t\texpect(dup).toBeDefined()\n\t\t\t\texpect(dup.migrationId).toBe('dup')\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws when field type not in supportedFieldTypes', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'data', type: 'bigint' }] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type 'bigint'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws when pk type not in supportedFieldTypes', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'uuid' }, fields: [] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type 'uuid'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws for addField with unsupported type', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'addField' as const, table: 'users', field: { name: 'x', type: 'bigint' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: throws for modifyField with unsupported type', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'modifyField' as const, table: 'users', name: 'x', to: { name: 'x', type: 'bigint' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"unsupported field type\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant C: skips field type check when supportedFieldTypes is empty', () => {\n\t\t\tconst adapter = { ...fullAdapter, supportedFieldTypes: [] } as any\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'anything' }, fields: [{ name: 'x', type: 'custom' }] },\n\t\t\t] }]\n\t\t\texpect(() => assertNormalisedChanges(adapter, migrations)).not.toThrow()\n\t\t})\n\n\t\ttest('invariant D: throws on duplicate field names in createTable', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"duplicate field name 'email'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant D: throws when pk.name collides with a field name', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'email', type: 'string' }, fields: [\n\t\t\t\t\t{ name: 'email', type: 'string' },\n\t\t\t\t] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"pk name 'email' collides\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty table name in addIndex', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'addIndex' as const, table: '', on: ['email'] }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithIndex, migrations)).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('invariant E: throws on empty names in dropTable, dropField, renameTable, renameField, dropIndex, dropForeignKey', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropTable' as const, name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('table name must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty field name in dropField', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropField' as const, table: 'users', name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('field name must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty renameTable from/to', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'renameTable' as const, from: '', to: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.filter((f: any) => f.cause.includes('table name must be non-empty'))).toHaveLength(2)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty renameField from/to/table', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'renameField' as const, table: '', from: '', to: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(3)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty dropIndex name', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropIndex' as const, name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('index name must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant E: throws on empty dropForeignKey table/name', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'dropForeignKey' as const, table: '', name: '' },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(2)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant F: throws on empty addIndex.on', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'addIndex' as const, table: 'users', on: [] as string[] }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithIndex, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(adapterWithIndex, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant F: throws on empty addForeignKey.on', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'addForeignKey' as const, table: 'users', on: '', references: { table: 'orgs', column: 'id' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('addForeignKey.on must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant F: throws on empty addForeignKey references', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'addForeignKey' as const, table: 'users', on: 'orgId', references: { table: '', column: '' } },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(fullAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('references table must be non-empty'))).toBe(true)\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('references column must be non-empty'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant G: throws when adapter lacks required apply method', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'addIndex' as const, table: 'users', on: ['email'] }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithout, migrations)).toThrow(OrmValidationError)\n\t\t\ttry { assertNormalisedChanges(adapterWithout, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes('does not support'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant G: throws for each unsupported variant', () => {\n\t\t\tconst noOpAdapter = { supportedFieldTypes: ['string'] } as any\n\t\t\tconst migrations = [{ id: '0001', changes: [\n\t\t\t\t{ kind: 'createTable' as const, name: 'users', pk: { name: 'id', type: 'string' }, fields: [] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(noOpAdapter, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.some((f: any) => f.cause.includes(\"does not support change kind 'createTable'\"))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('invariant H: allows empty changes array (no-op baseline)', () => {\n\t\t\tconst migrations = [{ id: '0001-baseline', changes: [] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithIndex, migrations)).not.toThrow()\n\t\t})\n\n\t\ttest('invariant I: collects all failures into single throw', () => {\n\t\t\tconst migrations = [\n\t\t\t\t{ id: '', changes: [] },\n\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t{ id: 'dup', changes: [{ kind: 'addIndex' as const, table: '', on: [] as string[] }] },\n\t\t\t]\n\t\t\ttry { assertNormalisedChanges(adapterWithIndex, migrations) } catch (err: any) {\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(4)\n\t\t\t}\n\t\t})\n\n\t\ttest('failures carry migrationId and changeIndex', () => {\n\t\t\tconst migrations = [{ id: 'mig-1', changes: [\n\t\t\t\t{ kind: 'addIndex' as const, table: '', on: [] as string[] },\n\t\t\t] }]\n\t\t\ttry { assertNormalisedChanges(adapterWithIndex, migrations) } catch (err: any) {\n\t\t\t\tfor (const f of err.failures) {\n\t\t\t\t\texpect(f.migrationId).toBe('mig-1')\n\t\t\t\t\texpect(f.changeIndex).toBe(0)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\ttest('passes for execute changes without adapter check', () => {\n\t\t\tconst migrations = [{ id: '0001', changes: [{ kind: 'execute' as const, up: async () => {} }] }]\n\t\t\texpect(() => assertNormalisedChanges(adapterWithout, migrations)).not.toThrow()\n\t\t})\n\t})\n}\n","import type { OrmAdapterLike } from '../adapters/base'\nimport { OrmMigrationError } from '../errors/migration'\nimport type { OrmAdapter } from '../orm-adapter'\nimport { applyChange } from './apply'\nimport { computePending, type PendingOpts } from './pending'\nimport type { AnyChange, AnyMigration, Migration } from './types'\nimport { assertNormalisedChanges } from './validate'\nimport type { Repo } from '../repo/repo'\n\ntype RunResult = { ran: string[]; skipped: string[] }\nexport type StatusEntry = { id: string; applied: boolean; appliedAt?: number }\n\ntype HasAcquireMigrationLock<A> =\n\t'acquireMigrationLock' extends keyof A\n\t\t? A['acquireMigrationLock'] extends (...args: any) => any ? true : false\n\t\t: false\n\ntype WithoutLockStep<A extends OrmAdapterLike<any>> = HasAcquireMigrationLock<A> extends true\n\t? {}\n\t: { withoutLock(): { build(): Migrator<A> } }\n\nexport class Migrator<A extends OrmAdapterLike<any>> {\n\treadonly #repo: Repo<A>\n\treadonly #adapter: OrmAdapter\n\treadonly #migrations: ReadonlyArray<Migration<A>>\n\treadonly #withoutLock: boolean\n\n\tconstructor(repo: Repo<A>, adapter: OrmAdapter, migrations: ReadonlyArray<Migration<A>>, withoutLock = false) {\n\t\tthis.#repo = repo\n\t\tthis.#adapter = adapter\n\t\tthis.#migrations = migrations\n\t\tthis.#withoutLock = withoutLock\n\t}\n\n\t#requireMethod(name: 'loadMigrations' | 'recordMigration'): void {\n\t\tif (typeof this.#adapter[name] !== 'function') {\n\t\t\tconst phase = name === 'loadMigrations' ? 'load' : 'record' as const\n\t\t\tthrow new OrmMigrationError({ id: '', phase, cause: `adapter does not implement ${name}` })\n\t\t}\n\t}\n\n\tasync up(opts?: PendingOpts): Promise<RunResult> {\n\t\tthis.#requireMethod('loadMigrations')\n\t\tthis.#requireMethod('recordMigration')\n\n\t\tconst useLock = !this.#withoutLock && typeof this.#adapter.acquireMigrationLock === 'function'\n\t\tif (useLock) {\n\t\t\ttry {\n\t\t\t\treturn await this.#adapter.acquireMigrationLock!(() => this.#runPending(opts))\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof OrmMigrationError) throw err\n\t\t\t\tthrow new OrmMigrationError({ id: '', phase: 'lock', cause: err })\n\t\t\t}\n\t\t}\n\t\treturn this.#runPending(opts)\n\t}\n\n\tasync status(): Promise<StatusEntry[]> {\n\t\tthis.#requireMethod('loadMigrations')\n\t\tconst applied = await this.#adapter.loadMigrations!()\n\t\tconst appliedMap = new Map(applied.map((a) => [a.id, a.appliedAt]))\n\t\tconst sorted = [...this.#migrations].sort((a, b) => a.id.localeCompare(b.id))\n\t\treturn sorted.map((m) => {\n\t\t\tconst appliedAt = appliedMap.get(m.id)\n\t\t\tif (appliedAt !== undefined) return { id: m.id, applied: true as const, appliedAt }\n\t\t\treturn { id: m.id, applied: false as const }\n\t\t})\n\t}\n\n\tasync dry(opts?: PendingOpts): Promise<{ would: string[] }> {\n\t\tthis.#requireMethod('loadMigrations')\n\t\tconst applied = await this.#adapter.loadMigrations!()\n\t\tconst { pending } = computePending(this.#migrations as unknown as ReadonlyArray<AnyMigration>, applied, opts)\n\t\treturn { would: pending.map((m) => m.id) }\n\t}\n\n\tasync #runPending(opts?: PendingOpts): Promise<RunResult> {\n\t\tlet applied: { id: string; appliedAt: number }[]\n\t\ttry {\n\t\t\tapplied = await this.#adapter.loadMigrations!()\n\t\t} catch (err) {\n\t\t\tthrow new OrmMigrationError({ id: '', phase: 'load', cause: err })\n\t\t}\n\n\t\tconst { pending, skipped } = computePending(this.#migrations as unknown as ReadonlyArray<AnyMigration>, applied, opts)\n\t\tconst ran: string[] = []\n\n\t\tfor (const m of pending) {\n\t\t\tconst execute = async () => {\n\t\t\t\tfor (const c of m.changes) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait applyChange(this.#adapter, this.#repo as unknown as Repo<OrmAdapterLike<any>>, c as AnyChange)\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow new OrmMigrationError({ id: m.id, phase: 'user', cause: err })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#adapter.recordMigration!(m.id, Date.now())\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthrow new OrmMigrationError({ id: m.id, phase: 'record', cause: err })\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst shouldWrapInSession = m.tx !== false && typeof this.#adapter.session === 'function'\n\t\t\tif (shouldWrapInSession) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.#repo.session(execute)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (err instanceof OrmMigrationError) throw err\n\t\t\t\t\tthrow new OrmMigrationError({ id: m.id, phase: 'session', cause: err })\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait execute()\n\t\t\t}\n\n\t\t\tran.push(m.id)\n\t\t}\n\n\t\treturn { ran, skipped }\n\t}\n\n\tstatic from<A extends OrmAdapterLike<any>>(repo: Repo<A>, adapter: A & OrmAdapter) {\n\t\treturn {\n\t\t\tmigrations(migrations: ReadonlyArray<Migration<A>>) {\n\t\t\t\treturn {\n\t\t\t\t\tbuild(): Migrator<A> {\n\t\t\t\t\t\tassertNormalisedChanges(adapter, migrations as any)\n\t\t\t\t\t\treturn new Migrator(repo, adapter, migrations)\n\t\t\t\t\t},\n\t\t\t\t\twithoutLock() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tbuild(): Migrator<A> {\n\t\t\t\t\t\t\t\tassertNormalisedChanges(adapter, migrations as any)\n\t\t\t\t\t\t\t\treturn new Migrator(repo, adapter, migrations, true)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t} as { build(): Migrator<A> } & WithoutLockStep<A>\n\t\t\t},\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { Schema } = await import('../schema')\n\tconst { Repo } = await import('../repo/repo')\n\tconst { OrmValidationError } = await import('../errors/validation')\n\tconst { OrmMigrationError } = await import('../errors/migration')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2)}`)\n\t\t.field('email', v.string())\n\t\t.build()\n\n\tfunction makeEnv() {\n\t\tconst adapter = InMemoryAdapter.create({})\n\t\tconst repo = new Repo({ adapter, resolve: (s) => ({ table: s.name }) })\n\t\treturn { adapter, repo }\n\t}\n\n\tdescribe('Migrator', () => {\n\t\ttest('addIndex migration applies and is recorded', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-add-email-idx',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'], unique: true }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0001-add-email-idx'])\n\t\t\texpect(result.skipped).toEqual([])\n\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(true)\n\t\t\tconst idx = adapter.indexes.get('users_email_idx')!\n\t\t\texpect(idx.table).toBe('users')\n\t\t\texpect(idx.on).toEqual(['email'])\n\t\t\texpect(idx.unique).toBe(true)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(1)\n\t\t\texpect(recorded[0].id).toBe('0001-add-email-idx')\n\t\t})\n\n\t\ttest('execute migration runs user code with the same Repo', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-seed-user',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'seed-1', email: 'test@example.com' })\n\t\t\t\t\t},\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\tconst row = await repo.on(UserSchema).one().id('seed-1').find()\n\t\t\texpect(row).not.toBeNull()\n\t\t\texpect(row!.email).toBe('test@example.com')\n\t\t})\n\n\t\ttest('duplicate id throws OrmValidationError at build()', () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\texpect(() =>\n\t\t\t\tMigrator.from(repo, adapter)\n\t\t\t\t\t.migrations([\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t])\n\t\t\t\t\t.build(),\n\t\t\t).toThrow(OrmValidationError)\n\n\t\t\ttry {\n\t\t\t\tMigrator.from(repo, adapter)\n\t\t\t\t\t.migrations([\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t\t{ id: 'dup', changes: [] },\n\t\t\t\t\t])\n\t\t\t\t\t.build()\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.kind).toBe('changes')\n\t\t\t}\n\t\t})\n\n\t\ttest('up() skips already-applied migrations', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m1: Migration<typeof adapter> = { id: '0001', changes: [] }\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'] }],\n\t\t\t}\n\n\t\t\tawait adapter.recordMigration('0001', Date.now())\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0002'])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('up() returns empty ran when all applied', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('0001', Date.now())\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([{ id: '0001', changes: [] }]).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual([])\n\t\t\texpect(result.skipped).toEqual(['0001'])\n\t\t})\n\n\t\ttest('failed migration rolls back via session and throws OrmMigrationError', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m1: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'] }],\n\t\t\t}\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async () => { throw new Error('boom') },\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded.map((r) => r.id)).toEqual(['0001'])\n\t\t})\n\n\t\ttest('multiple changes in one migration all apply', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-multi',\n\t\t\t\tchanges: [\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'], unique: true },\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['id', 'email'], name: 'users_compound_idx' },\n\t\t\t\t],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\texpect(adapter.indexes.size).toBe(2)\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(true)\n\t\t\texpect(adapter.indexes.has('users_compound_idx')).toBe(true)\n\t\t})\n\n\t\ttest('lex-sorts migrations by id before running', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst order: string[] = []\n\t\t\tconst m1: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{ kind: 'execute', up: async () => { order.push('0002') } }],\n\t\t\t}\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'execute', up: async () => { order.push('0001') } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(order).toEqual(['0001', '0002'])\n\t\t})\n\n\t\ttest('createTable migration creates table metadata', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-create-users',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'createTable',\n\t\t\t\t\tname: 'users',\n\t\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{ name: 'email', type: 'string', unique: true },\n\t\t\t\t\t\t{ name: 'age', type: 'number', nullable: true },\n\t\t\t\t\t],\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\texpect(adapter.tables.has('users')).toBe(true)\n\t\t\tconst table = adapter.tables.get('users')!\n\t\t\texpect(table.pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(table.fields.size).toBe(2)\n\t\t\texpect(table.fields.get('email')).toEqual({ name: 'email', type: 'string', unique: true })\n\t\t\texpect(table.fields.get('age')).toEqual({ name: 'age', type: 'number', nullable: true })\n\t\t})\n\n\t\ttest('dropTable migration removes table metadata', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-users',\n\t\t\t\tchanges: [{ kind: 'dropTable', name: 'users' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.has('users')).toBe(false)\n\t\t})\n\n\t\ttest('addField migration adds field to existing table', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-add-email',\n\t\t\t\tchanges: [{ kind: 'addField', table: 'users', field: { name: 'email', type: 'string' } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.has('email')).toBe(true)\n\t\t})\n\n\t\ttest('dropField migration removes field from table', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-email',\n\t\t\t\tchanges: [{ kind: 'dropField', table: 'users', name: 'email' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.has('email')).toBe(false)\n\t\t})\n\n\t\ttest('modifyField migration updates field spec', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'age', type: 'string' }] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-modify-age',\n\t\t\t\tchanges: [{ kind: 'modifyField', table: 'users', name: 'age', to: { name: 'age', type: 'number', nullable: true } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.get('age')).toEqual({ name: 'age', type: 'number', nullable: true })\n\t\t})\n\n\t\ttest('renameTable migration renames the table key', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-rename-users',\n\t\t\t\tchanges: [{ kind: 'renameTable', from: 'users', to: 'accounts' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.has('users')).toBe(false)\n\t\t\texpect(adapter.tables.has('accounts')).toBe(true)\n\t\t})\n\n\t\ttest('renameField migration renames a field', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyCreateTable({ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'name', type: 'string' }] })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-rename-name',\n\t\t\t\tchanges: [{ kind: 'renameField', table: 'users', from: 'name', to: 'fullName' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.tables.get('users')!.fields.has('name')).toBe(false)\n\t\t\texpect(adapter.tables.get('users')!.fields.has('fullName')).toBe(true)\n\t\t\texpect(adapter.tables.get('users')!.fields.get('fullName')!.name).toBe('fullName')\n\t\t})\n\n\t\ttest('dropIndex migration removes an index', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], name: 'users_email_idx' })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-idx',\n\t\t\t\tchanges: [{ kind: 'dropIndex', name: 'users_email_idx' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(false)\n\t\t})\n\n\t\ttest('addForeignKey migration creates a FK entry', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-add-fk',\n\t\t\t\tchanges: [{ kind: 'addForeignKey', table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.foreignKeys.has('posts_authorId_fk')).toBe(true)\n\t\t\tconst fk = adapter.foreignKeys.get('posts_authorId_fk')!\n\t\t\texpect(fk.table).toBe('posts')\n\t\t\texpect(fk.on).toBe('authorId')\n\t\t\texpect(fk.references).toEqual({ table: 'users', column: 'id' })\n\t\t})\n\n\t\ttest('dropForeignKey migration removes a FK entry', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.applyAddForeignKey({ kind: 'addForeignKey', table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' }, name: 'posts_authorId_fk' })\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-drop-fk',\n\t\t\t\tchanges: [{ kind: 'dropForeignKey', table: 'posts', name: 'posts_authorId_fk' }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\t\t\texpect(adapter.foreignKeys.has('posts_authorId_fk')).toBe(false)\n\t\t})\n\n\t\ttest('full lifecycle: create table, add fields, indexes, FKs, then rename and drop', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{\n\t\t\t\t\tid: '0001-create',\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] },\n\t\t\t\t\t\t{ kind: 'createTable', name: 'posts', pk: { name: 'id', type: 'string' }, fields: [{ name: 'title', type: 'string' }, { name: 'authorId', type: 'string' }] },\n\t\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'], unique: true },\n\t\t\t\t\t\t{ kind: 'addForeignKey', table: 'posts', on: 'authorId', references: { table: 'users', column: 'id' } },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0002-evolve',\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'addField', table: 'users', field: { name: 'age', type: 'number', nullable: true } },\n\t\t\t\t\t\t{ kind: 'renameField', table: 'users', from: 'email', to: 'emailAddress' },\n\t\t\t\t\t\t{ kind: 'renameTable', from: 'posts', to: 'articles' },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0003-cleanup',\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'dropField', table: 'users', name: 'age' },\n\t\t\t\t\t\t{ kind: 'dropForeignKey', table: 'posts', name: 'posts_authorId_fk' },\n\t\t\t\t\t\t{ kind: 'dropIndex', name: 'users_email_idx' },\n\t\t\t\t\t\t{ kind: 'dropTable', name: 'articles' },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0001-create', '0002-evolve', '0003-cleanup'])\n\n\t\t\texpect(adapter.tables.has('users')).toBe(true)\n\t\t\texpect(adapter.tables.get('users')!.fields.has('emailAddress')).toBe(true)\n\t\t\texpect(adapter.tables.get('users')!.fields.has('age')).toBe(false)\n\t\t\texpect(adapter.tables.has('articles')).toBe(false)\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(false)\n\t\t\texpect(adapter.foreignKeys.has('posts_authorId_fk')).toBe(false)\n\t\t})\n\n\t\ttest('tx:true migration that throws rolls back both user effects and tracker row', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-will-fail',\n\t\t\t\tchanges: [\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'] },\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'partial', email: 'fail@test.com' })\n\t\t\t\t\t\t\tthrow new Error('mid-migration boom')\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(0)\n\t\t\texpect(adapter.indexes.size).toBe(0)\n\t\t\tconst row = await repo.on(UserSchema).one().id('partial').find()\n\t\t\texpect(row).toBeNull()\n\t\t})\n\n\t\ttest('tx:false migration that throws leaves partial state durable', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-no-tx',\n\t\t\t\ttx: false,\n\t\t\t\tchanges: [\n\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'] },\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'durable', email: 'stay@test.com' })\n\t\t\t\t\t\t\tthrow new Error('partial failure')\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(0)\n\t\t\texpect(adapter.indexes.has('users_email_idx')).toBe(true)\n\t\t\tconst row = await repo.on(UserSchema).one().id('durable').find()\n\t\t\texpect(row).not.toBeNull()\n\t\t\texpect(row!.email).toBe('stay@test.com')\n\t\t})\n\n\t\ttest('atomic-across-migrations: outer repo.session() wraps all in one tx', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m1: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'addIndex', table: 'users', on: ['email'] }],\n\t\t\t}\n\t\t\tconst m2: Migration<typeof adapter> = {\n\t\t\t\tid: '0002',\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async () => { throw new Error('fail in m2') },\n\t\t\t\t}],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m1, m2]).build()\n\t\t\tawait expect(\n\t\t\t\trepo.session(() => migrator.up()),\n\t\t\t).rejects.toThrow()\n\n\t\t\tconst recorded = await adapter.loadMigrations()\n\t\t\texpect(recorded).toHaveLength(0)\n\t\t\texpect(adapter.indexes.size).toBe(0)\n\t\t})\n\n\t\ttest('simultaneous up() calls serialize via acquireMigrationLock', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst order: string[] = []\n\t\t\tlet resolveGate!: () => void\n\t\t\tconst gate = new Promise<void>((r) => { resolveGate = r })\n\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{\n\t\t\t\t\tid: '0001',\n\t\t\t\t\tchanges: [{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async () => {\n\t\t\t\t\t\t\torder.push('0001-start')\n\t\t\t\t\t\t\tawait gate\n\t\t\t\t\t\t\torder.push('0001-end')\n\t\t\t\t\t\t},\n\t\t\t\t\t}],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0002',\n\t\t\t\t\tchanges: [{\n\t\t\t\t\t\tkind: 'execute',\n\t\t\t\t\t\tup: async () => { order.push('0002') },\n\t\t\t\t\t}],\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tconst migrator1 = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst migrator2 = Migrator.from(repo, adapter).migrations(migrations).build()\n\n\t\t\tconst p1 = migrator1.up()\n\t\t\tconst p2 = migrator2.up()\n\n\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\texpect(order).toEqual(['0001-start'])\n\n\t\t\tresolveGate()\n\t\t\tawait Promise.all([p1, p2])\n\n\t\t\texpect(order).toEqual(['0001-start', '0001-end', '0002'])\n\t\t})\n\n\t\ttest('tx:false retries cleanly from scratch after failure', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tlet callCount = 0\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001-retry',\n\t\t\t\ttx: false,\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async (r) => {\n\t\t\t\t\t\tcallCount++\n\t\t\t\t\t\tif (callCount === 1) {\n\t\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'partial', email: 'p@test.com' })\n\t\t\t\t\t\t\tthrow new Error('first attempt fails')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tawait r.on(UserSchema).one().create({ id: 'complete', email: 'c@test.com' })\n\t\t\t\t\t},\n\t\t\t\t}],\n\t\t\t}\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait expect(migrator.up()).rejects.toThrow(OrmMigrationError)\n\t\t\texpect(callCount).toBe(1)\n\n\t\t\tconst migrator2 = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tconst result = await migrator2.up()\n\t\t\texpect(result.ran).toEqual(['0001-retry'])\n\t\t\texpect(callCount).toBe(2)\n\t\t})\n\n\t\ttest('type-level: withoutLock() rejected when adapter declares acquireMigrationLock', () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst step = Migrator.from(repo, adapter).migrations([])\n\t\t\texpectTypeOf(step).toHaveProperty('build')\n\t\t\texpectTypeOf(step).not.toHaveProperty('withoutLock')\n\t\t})\n\n\t\ttest('type-level: withoutLock() accepted when adapter lacks acquireMigrationLock', async () => {\n\t\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\t\tclass NoLockAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync loadMigrations() { return [] }\n\t\t\t\tasync recordMigration() {}\n\t\t\t\tasync session<T>(fn: () => Promise<T>): Promise<T> { return fn() }\n\t\t\t}\n\t\t\tconst nlAdapter = new (NoLockAdapter as any)() as NoLockAdapter\n\t\t\tconst nlRepo = new Repo({ adapter: nlAdapter, resolve: (s) => ({ table: s.name }) })\n\t\t\tconst step = Migrator.from(nlRepo, nlAdapter).migrations([])\n\t\t\texpectTypeOf(step).toHaveProperty('build')\n\t\t\texpectTypeOf(step).toHaveProperty('withoutLock')\n\t\t})\n\n\t\ttest('up({ to }) runs only migrations up to and including the target', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst order: string[] = []\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: 'm-001', changes: [{ kind: 'execute', up: async () => { order.push('m-001') } }] },\n\t\t\t\t{ id: 'm-002', changes: [{ kind: 'execute', up: async () => { order.push('m-002') } }] },\n\t\t\t\t{ id: 'm-003', changes: [{ kind: 'execute', up: async () => { order.push('m-003') } }] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up({ to: 'm-002' })\n\t\t\texpect(result.ran).toEqual(['m-001', 'm-002'])\n\t\t\texpect(order).toEqual(['m-001', 'm-002'])\n\t\t})\n\n\t\ttest('up({ to }) is a no-op when target already applied', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('m-001', Date.now())\n\t\t\tawait adapter.recordMigration('m-002', Date.now())\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: 'm-001', changes: [] },\n\t\t\t\t{ id: 'm-002', changes: [] },\n\t\t\t\t{ id: 'm-003', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up({ to: 'm-002' })\n\t\t\texpect(result.ran).toEqual([])\n\t\t})\n\n\t\ttest('up({ to: unknown }) throws OrmMigrationError before any side effect', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tlet executed = false\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: 'm-001', changes: [{ kind: 'execute', up: async () => { executed = true } }] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tawait expect(migrator.up({ to: 'unknown' })).rejects.toThrow(OrmMigrationError)\n\t\t\texpect(executed).toBe(false)\n\t\t\ttry {\n\t\t\t\tawait Migrator.from(repo, adapter).migrations(migrations).build().up({ to: 'unknown' })\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t}\n\t\t})\n\n\t\ttest('up({ steps: 1 }) runs exactly 1 pending migration', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [{ kind: 'addIndex', table: 'users', on: ['email'] }] },\n\t\t\t\t{ id: '0002', changes: [{ kind: 'addIndex', table: 'users', on: ['id'] }] },\n\t\t\t\t{ id: '0003', changes: [{ kind: 'addIndex', table: 'users', on: ['email', 'id'] }] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up({ steps: 1 })\n\t\t\texpect(result.ran).toEqual(['0001'])\n\t\t\texpect(adapter.indexes.size).toBe(1)\n\t\t})\n\n\t\ttest('status() returns sorted entries with correct applied/pending flags', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst now = Date.now()\n\t\t\tawait adapter.recordMigration('0002', now)\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst entries = await migrator.status()\n\t\t\texpect(entries).toEqual([\n\t\t\t\t{ id: '0001', applied: false },\n\t\t\t\t{ id: '0002', applied: true, appliedAt: now },\n\t\t\t\t{ id: '0003', applied: false },\n\t\t\t])\n\t\t})\n\n\t\ttest('dry() returns the same plan up() would execute, without executing', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('0001', Date.now())\n\t\t\tlet executed = false\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [{ kind: 'execute', up: async () => { executed = true } }] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst plan = await migrator.dry()\n\t\t\texpect(plan).toEqual({ would: ['0002', '0003'] })\n\t\t\texpect(executed).toBe(false)\n\t\t})\n\n\t\ttest('dry(opts) respects to/steps', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t\t{ id: '0002', changes: [] },\n\t\t\t\t{ id: '0003', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\texpect(await migrator.dry({ to: '0002' })).toEqual({ would: ['0001', '0002'] })\n\t\t\texpect(await migrator.dry({ steps: 1 })).toEqual({ would: ['0001'] })\n\t\t})\n\n\t\ttest('orphan migration in tracker throws OrmMigrationError with phase load', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tawait adapter.recordMigration('ghost-001', Date.now())\n\t\t\tconst migrations: Migration<typeof adapter>[] = [\n\t\t\t\t{ id: '0001', changes: [] },\n\t\t\t]\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('load')\n\t\t\t\texpect(err.cause).toContain('ghost-001')\n\t\t\t}\n\t\t})\n\n\t\ttest('failing user code throws OrmMigrationError with phase user', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst m: Migration<typeof adapter> = {\n\t\t\t\tid: '0001',\n\t\t\t\tchanges: [{ kind: 'execute', up: async () => { throw new Error('user boom') } }],\n\t\t\t}\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('user')\n\t\t\t\texpect(err.id).toBe('0001')\n\t\t\t}\n\t\t})\n\n\t\ttest('failing recordMigration throws OrmMigrationError with phase record', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tconst origRecord = adapter.recordMigration.bind(adapter)\n\t\t\tadapter.recordMigration = async (id: string, at: number) => {\n\t\t\t\tif (id === '0001') throw new Error('record boom')\n\t\t\t\treturn origRecord(id, at)\n\t\t\t}\n\t\t\tconst m: Migration<typeof adapter> = { id: '0001', changes: [] }\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('record')\n\t\t\t\texpect(err.id).toBe('0001')\n\t\t\t}\n\t\t})\n\n\t\ttest('failing acquireMigrationLock throws OrmMigrationError with phase lock', async () => {\n\t\t\tconst { adapter, repo } = makeEnv()\n\t\t\tadapter.acquireMigrationLock = async () => { throw new Error('lock boom') }\n\t\t\tconst m: Migration<typeof adapter> = { id: '0001', changes: [] }\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\ttry {\n\t\t\t\tawait migrator.up()\n\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err).toBeInstanceOf(OrmMigrationError)\n\t\t\t\texpect(err.phase).toBe('lock')\n\t\t\t}\n\t\t})\n\t})\n}\n","import { toFieldName, type AnyField } from './fields'\n\nexport class OrderBy {\n\treadonly field: string\n\tconstructor(\n\t\tfield: string | AnyField,\n\t\treadonly direction: 'asc' | 'desc',\n\t) {\n\t\tthis.field = toFieldName(field)\n\t}\n}\n\nexport type QueryOptions<Sel extends string = string> = {\n\torderBy?: OrderBy[]\n\tlimit?: number\n\toffset?: number\n\tselect?: readonly Sel[]\n}\n\nexport type IterationOptions = {\n\tbatchSize?: number\n}\n\nexport type IterationQueryOptions<Sel extends string = string> = QueryOptions<Sel> & IterationOptions\n","import type { AnyField, Field } from './fields'\nimport type { AnySchema, SchemaOutput } from './schema'\n\ntype SchemaPkValueType<S extends AnySchema> = NonNullable<S['pkField']['__valueType']>\ntype FkPkMatch<S extends AnySchema, FK extends AnyField> =\n\tNonNullable<FK['__valueType']> extends SchemaPkValueType<S> ? FK : never\n\nexport class ManyRelation<\n\tN extends string = string,\n\tTgtOutput extends Record<string, any> = Record<string, any>,\n\tFK extends AnyField = AnyField,\n> {\n\tdeclare readonly _output: TgtOutput\n\tconstructor(\n\t\treadonly name: N,\n\t\treadonly source: AnySchema,\n\t\treadonly target: AnySchema,\n\t\treadonly foreignKey: FK,\n\t\treadonly references: AnyField,\n\t) {}\n}\n\nexport class OneRelation<\n\tN extends string = string,\n\tTgtOutput extends Record<string, any> = Record<string, any>,\n\tFK extends AnyField = AnyField,\n> {\n\tdeclare readonly _output: TgtOutput\n\tconstructor(\n\t\treadonly name: N,\n\t\treadonly source: AnySchema,\n\t\treadonly target: AnySchema,\n\t\treadonly foreignKey: FK,\n\t\treadonly fkOwner: 'source' | 'target',\n\t\treadonly references: AnyField,\n\t) {}\n}\n\nexport type AnyRelDef = ManyRelation<string, Record<string, any>, any> | OneRelation<string, Record<string, any>, any>\n\nexport type ResolveRelDef<D extends AnyRelDef> =\n\tD extends OneRelation<any, infer TOut, any> ? TOut | null : D extends ManyRelation<any, infer TOut, any> ? TOut[] : never\n\nexport interface NestedPreloadDef<D extends AnyRelDef = AnyRelDef> {\n\tdef: D\n\tpreloads?: readonly AnyPreloadDef[]\n}\n\nexport type AnyPreloadDef = AnyRelDef | NestedPreloadDef\n\ntype Shift<T extends readonly unknown[]> = T extends readonly [unknown, ...infer R] ? R : []\ntype NodeName<N extends AnyPreloadDef> = N extends AnyRelDef\n\t? N['name']\n\t: N extends NestedPreloadDef<infer D extends AnyRelDef>\n\t\t? D['name']\n\t\t: never\n\ntype ResolveRelDefWithNested<D extends AnyRelDef, P extends readonly AnyPreloadDef[], Depth extends readonly unknown[]> = Depth extends []\n\t? ResolveRelDef<D>\n\t: D extends OneRelation<any, infer TOut, any>\n\t\t? (TOut & PreloadedMap<P, Shift<Depth>>) | null\n\t\t: D extends ManyRelation<any, infer TOut, any>\n\t\t\t? (TOut & PreloadedMap<P, Shift<Depth>>)[]\n\t\t\t: never\n\ntype NodeValue<N extends AnyPreloadDef, Depth extends readonly unknown[]> =\n\tN extends OneRelation<any, infer TOut, any>\n\t\t? TOut | null\n\t\t: N extends ManyRelation<any, infer TOut, any>\n\t\t\t? TOut[]\n\t\t\t: N extends { def: infer D extends AnyRelDef; preloads?: infer P extends readonly AnyPreloadDef[] }\n\t\t\t\t? ResolveRelDefWithNested<D, P, Depth>\n\t\t\t\t: never\n\nexport type PreloadedMap<P extends readonly AnyPreloadDef[], Depth extends readonly unknown[] = [1, 2, 3, 4, 5]> = Depth extends []\n\t? Record<never, never>\n\t: {\n\t\t\t[N in P[number] as NodeName<N>]: NodeValue<N, Depth>\n\t\t}\n\nclass RelationsBuilder<S extends AnySchema, R extends Record<string, AnyRelDef> = Record<never, never>> {\n\treadonly #source: S\n\treadonly #defs: Record<string, AnyRelDef>\n\n\tconstructor(source: S, defs?: Record<string, AnyRelDef>) {\n\t\tthis.#source = source\n\t\tthis.#defs = defs ?? {}\n\t}\n\n\thasMany<K extends string, T extends AnySchema, FK extends Field<any, any, T>>(\n\t\tname: K extends keyof R ? never : K,\n\t\tfk: FkPkMatch<S, FK>,\n\t): RelationsBuilder<\n\t\tS,\n\t\t{\n\t\t\t[Key in keyof R | K]: Key extends K\n\t\t\t\t? ManyRelation<K, SchemaOutput<T>, FK>\n\t\t\t\t: Key extends keyof R\n\t\t\t\t\t? R[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst target = (fk as any).__schema as AnySchema\n\t\tconst nextDefs = { ...this.#defs, [name]: new ManyRelation(name, this.#source, target, fk as any, this.#source.pkField) }\n\t\treturn new RelationsBuilder(this.#source, nextDefs) as any\n\t}\n\n\thasOne<K extends string, T extends AnySchema, FK extends Field<any, any, T>>(\n\t\tname: K extends keyof R ? never : K,\n\t\tfk: FkPkMatch<S, FK>,\n\t): RelationsBuilder<\n\t\tS,\n\t\t{\n\t\t\t[Key in keyof R | K]: Key extends K\n\t\t\t\t? OneRelation<K, SchemaOutput<T>, FK>\n\t\t\t\t: Key extends keyof R\n\t\t\t\t\t? R[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst target = (fk as any).__schema as AnySchema\n\t\tconst nextDefs = { ...this.#defs, [name]: new OneRelation(name, this.#source, target, fk as any, 'target', this.#source.pkField) }\n\t\treturn new RelationsBuilder(this.#source, nextDefs) as any\n\t}\n\n\tbelongsTo<K extends string, T extends AnySchema, FK extends Field<any, any, S>>(\n\t\tname: K extends keyof R ? never : K,\n\t\tfk: FkPkMatch<T, FK>,\n\t\ttarget: T,\n\t\treferences?: Field<NonNullable<FK['__valueType']>, any, T>,\n\t): RelationsBuilder<\n\t\tS,\n\t\t{\n\t\t\t[Key in keyof R | K]: Key extends K\n\t\t\t\t? OneRelation<K, SchemaOutput<T>, FK>\n\t\t\t\t: Key extends keyof R\n\t\t\t\t\t? R[Key]\n\t\t\t\t\t: never\n\t\t}\n\t> {\n\t\tconst ref = references ?? target.pkField\n\t\tconst nextDefs = { ...this.#defs, [name]: new OneRelation(name, this.#source, target, fk as any, 'source', ref as any) }\n\t\treturn new RelationsBuilder(this.#source, nextDefs) as any\n\t}\n\n\tbuild(): R {\n\t\treturn this.#defs as R\n\t}\n}\n\nexport class Relations {\n\tstatic from<S extends AnySchema>(source: S) {\n\t\treturn new RelationsBuilder(source)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Schema } = await import('./schema')\n\n\tdescribe('Relations.from()', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'user-id')\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.string())\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => 'post-id')\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => 'org-id')\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => 'profile-id')\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\ttest('builds relations with hasMany, belongsTo, hasOne', () => {\n\t\t\tconst rels = Relations.from(UserSchema)\n\t\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t\t.build()\n\n\t\t\texpect(rels.posts).toBeInstanceOf(ManyRelation)\n\t\t\texpect(rels.org).toBeInstanceOf(OneRelation)\n\t\t\texpect(rels.profile).toBeInstanceOf(OneRelation)\n\t\t})\n\n\t\ttest('source references use outer-scope const (no src param)', () => {\n\t\t\tconst rels = Relations.from(UserSchema)\n\t\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t\t.build()\n\n\t\t\texpect(rels.org.foreignKey).toBe(UserSchema.fields.orgId)\n\t\t\texpect(rels.org.target).toBe(OrgSchema)\n\t\t})\n\n\t\ttest('clone-on-step: .hasMany() returns a new builder', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst a = base.hasMany('posts', PostSchema.fields.userId)\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('clone-on-step: .hasOne() returns a new builder', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst a = base.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('clone-on-step: .belongsTo() returns a new builder', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst a = base.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('clone-on-step: fan-out from shared base does not pollute either branch', () => {\n\t\t\tconst base = Relations.from(UserSchema)\n\t\t\tconst branchA = base.hasMany('posts', PostSchema.fields.userId).build()\n\t\t\tconst branchB = base.hasOne('profile', ProfileSchema.fields.userId).build()\n\n\t\t\texpect(Object.keys(branchA)).toEqual(['posts'])\n\t\t\texpect(Object.keys(branchB)).toEqual(['profile'])\n\t\t})\n\t})\n\n\tdescribe('Relations.from() behavior', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'user-id')\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.string())\n\t\t\t.field('managerId', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => 'post-id')\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => 'org-id')\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst TagSchema = Schema.from('tags')\n\t\t\t.pk('id', v.string(), () => 'tag-id')\n\t\t\t.field('label', v.string())\n\t\t\t.build()\n\n\t\tconst PostTagSchema = Schema.from('post_tags')\n\t\t\t.pk('id', v.string(), () => 'pt-id')\n\t\t\t.field('postId', v.string())\n\t\t\t.field('tagId', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => 'profile-id')\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema)\n\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t.build()\n\n\t\tconst PostRels = Relations.from(PostSchema)\n\t\t\t.belongsTo('author', PostSchema.fields.userId, UserSchema)\n\t\t\t.hasMany('postTags', PostTagSchema.fields.postId)\n\t\t\t.build()\n\n\t\tconst TagRels = Relations.from(TagSchema)\n\t\t\t.hasMany('postTags', PostTagSchema.fields.tagId)\n\t\t\t.build()\n\n\t\tconst PostTagRels = Relations.from(PostTagSchema)\n\t\t\t.belongsTo('post', PostTagSchema.fields.postId, PostSchema)\n\t\t\t.belongsTo('tag', PostTagSchema.fields.tagId, TagSchema)\n\t\t\t.build()\n\n\t\ttest('hasMany returns ManyRelation instances', () => {\n\t\t\texpect(UserRels.posts).toBeInstanceOf(ManyRelation)\n\t\t\texpect(PostRels.postTags).toBeInstanceOf(ManyRelation)\n\t\t\texpect(TagRels.postTags).toBeInstanceOf(ManyRelation)\n\t\t})\n\n\t\ttest('belongsTo returns OneRelation instances', () => {\n\t\t\texpect(UserRels.org).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostRels.author).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.post).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.tag).toBeInstanceOf(OneRelation)\n\t\t})\n\n\t\ttest('hasOne returns OneRelation instances', () => {\n\t\t\texpect(UserRels.profile).toBeInstanceOf(OneRelation)\n\t\t})\n\n\t\ttest('hasMany stores correct source, target, foreignKey, and references', () => {\n\t\t\tconst rel = UserRels.posts\n\t\t\texpect(rel.name).toBe('posts')\n\t\t\texpect(rel.source).toBe(UserSchema)\n\t\t\texpect(rel.target).toBe(PostSchema)\n\t\t\texpect(rel.foreignKey).toBe(PostSchema.fields.userId)\n\t\t\texpect(rel.references).toBe(UserSchema.pkField)\n\t\t})\n\n\t\ttest('hasOne stores correct source, target, foreignKey, and fkOwner', () => {\n\t\t\tconst rel = UserRels.profile\n\t\t\texpect(rel.name).toBe('profile')\n\t\t\texpect(rel.source).toBe(UserSchema)\n\t\t\texpect(rel.target).toBe(ProfileSchema)\n\t\t\texpect(rel.foreignKey).toBe(ProfileSchema.fields.userId)\n\t\t\texpect(rel.fkOwner).toBe('target')\n\t\t\texpect(rel.references).toBe(UserSchema.pkField)\n\t\t})\n\n\t\ttest('belongsTo stores correct source, target, foreignKey, and fkOwner', () => {\n\t\t\tconst rel = UserRels.org\n\t\t\texpect(rel.name).toBe('org')\n\t\t\texpect(rel.source).toBe(UserSchema)\n\t\t\texpect(rel.target).toBe(OrgSchema)\n\t\t\texpect(rel.foreignKey).toBe(UserSchema.fields.orgId)\n\t\t\texpect(rel.fkOwner).toBe('source')\n\t\t\texpect(rel.references).toBe(OrgSchema.pkField)\n\t\t})\n\n\t\ttest('join-table hasMany stores correct metadata', () => {\n\t\t\tconst rel = PostRels.postTags\n\t\t\texpect(rel.name).toBe('postTags')\n\t\t\texpect(rel.source).toBe(PostSchema)\n\t\t\texpect(rel.target).toBe(PostTagSchema)\n\t\t\texpect(rel.foreignKey).toBe(PostTagSchema.fields.postId)\n\t\t})\n\n\t\ttest('join-table belongsTo stores correct metadata', () => {\n\t\t\tconst rel = PostTagRels.tag\n\t\t\texpect(rel.name).toBe('tag')\n\t\t\texpect(rel.source).toBe(PostTagSchema)\n\t\t\texpect(rel.target).toBe(TagSchema)\n\t\t\texpect(rel.foreignKey).toBe(PostTagSchema.fields.tagId)\n\t\t})\n\n\t\ttest('self-referential relation works without special casing', () => {\n\t\t\tconst SelfRels = Relations.from(UserSchema)\n\t\t\t\t.belongsTo('manager', UserSchema.fields.managerId!, UserSchema)\n\t\t\t\t.build()\n\n\t\t\texpect(SelfRels.manager).toBeInstanceOf(OneRelation)\n\t\t\texpect(SelfRels.manager.source).toBe(UserSchema)\n\t\t\texpect(SelfRels.manager.target).toBe(UserSchema)\n\t\t\texpect(SelfRels.manager.fkOwner).toBe('source')\n\t\t})\n\n\t\ttest('many-to-many via explicit join schema', () => {\n\t\t\texpect(PostRels.postTags).toBeInstanceOf(ManyRelation)\n\t\t\texpect(PostTagRels.post).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.tag).toBeInstanceOf(OneRelation)\n\t\t\texpect(PostTagRels.post.target).toBe(PostSchema)\n\t\t\texpect(PostTagRels.tag.target).toBe(TagSchema)\n\t\t})\n\t})\n\n\tdescribe('type-level: Relations.from uniqueness guard', () => {\n\t\ttest('duplicate relation name is a TS error', () => {\n\t\t\tconst S = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\tconst T = Schema.from('targets')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('sId', v.string())\n\t\t\t\t.build()\n\t\t\t// @ts-expect-error — duplicate name 'items' should fail\n\t\t\tRelations.from(S).hasMany('items', T.fields.sId).hasMany('items', T.fields.sId)\n\t\t})\n\t})\n\n\tdescribe('type-level: FK-PK type-match guarantee', () => {\n\t\ttest('string FK pointing at number PK is a TS error', () => {\n\t\t\tconst NumPkSchema = Schema.from('nums')\n\t\t\t\t.pk('id', v.number(), () => 0)\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tconst StringFkSchema = Schema.from('strings')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('numRef', v.string())\n\t\t\t\t.build()\n\n\t\t\t// @ts-expect-error — string FK does not match number PK\n\t\t\tRelations.from(NumPkSchema).hasMany('items', StringFkSchema.fields.numRef)\n\t\t})\n\n\t\ttest('matching FK-PK types compile correctly', () => {\n\t\t\tconst S = Schema.from('source').pk('id', v.string(), () => 'x').build()\n\t\t\tconst T = Schema.from('target')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('sourceId', v.string())\n\t\t\t\t.build()\n\t\t\tconst rels = Relations.from(S).hasMany('items', T.fields.sourceId).build()\n\t\t\texpect(rels.items).toBeInstanceOf(ManyRelation)\n\t\t})\n\t})\n\n\tdescribe('type-level: Field-only-FK rule', () => {\n\t\ttest('raw string FK is a TS error for hasMany', () => {\n\t\t\tconst S = Schema.from('s').pk('id', v.string(), () => 'x').build()\n\t\t\t// @ts-expect-error — raw string not allowed, must be a Field instance\n\t\t\tRelations.from(S).hasMany('items', 'someKey')\n\t\t})\n\n\t\ttest('raw string FK is a TS error for belongsTo', () => {\n\t\t\tconst S = Schema.from('s')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('ref', v.string())\n\t\t\t\t.build()\n\t\t\tconst T = Schema.from('t').pk('id', v.string(), () => 'x').build()\n\t\t\t// @ts-expect-error — raw string not allowed, must be a Field instance\n\t\t\tRelations.from(S).belongsTo('parent', 'ref', T)\n\t\t})\n\t})\n\n\tdescribe('type-level: schema relations-agnosticism', () => {\n\t\ttest('schema artifact contains no relational information', () => {\n\t\t\tconst _S = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\ttype SKeys = keyof typeof _S\n\t\t\texpectTypeOf<'relations' extends SKeys ? true : false>().toEqualTypeOf<false>()\n\t\t})\n\t})\n}\n","import { v, type Pipe } from 'valleyed'\n\nimport { EquippedError } from '../../../errors'\nimport type { AnySchema } from '../../schema'\n\nexport type ComputedSelectionPlan = {\n\trequestedSelect: Set<string> | null\n\tadapterSelect?: string[]\n\tcomputeNames: string[]\n}\n\nexport function planSelection(schema: AnySchema, select?: readonly string[]): ComputedSelectionPlan {\n\tconst computedDefs = schema.computedDefs as Record<string, { deps: readonly string[] }>\n\tconst computedNames = new Set(Object.keys(computedDefs))\n\tconst persistedNames = new Set(Object.keys(schema.fields))\n\n\tif (!select || select.length === 0) {\n\t\treturn {\n\t\t\trequestedSelect: null,\n\t\t\tadapterSelect: undefined,\n\t\t\tcomputeNames: [...computedNames],\n\t\t}\n\t}\n\n\tconst requestedSelect = new Set(select)\n\tconst adapterSelect = new Set<string>()\n\tconst selectedComputeNames = new Set<string>()\n\n\tfor (const key of select) {\n\t\tif (persistedNames.has(key)) {\n\t\t\tadapterSelect.add(key)\n\t\t\tcontinue\n\t\t}\n\t\tif (computedNames.has(key)) {\n\t\t\tselectedComputeNames.add(key)\n\t\t\tfor (const dep of computedDefs[key].deps) adapterSelect.add(dep)\n\t\t\tcontinue\n\t\t}\n\t\tthrow new EquippedError('Unknown selected field', {\n\t\t\tschema: schema.name,\n\t\t\tselectedField: key,\n\t\t\tavailableFields: [...persistedNames, ...computedNames],\n\t\t})\n\t}\n\n\treturn {\n\t\trequestedSelect,\n\t\tadapterSelect: [...adapterSelect],\n\t\tcomputeNames: [...selectedComputeNames],\n\t}\n}\n\ntype ComputedDef = {\n\tpipe: Pipe<any, any>\n\tdeps: readonly string[]\n\tcompute: (data: Record<string, unknown>) => unknown\n}\n\nexport function applyComputedSelection(\n\tschema: AnySchema,\n\trows: Record<string, unknown>[],\n\tplan: ComputedSelectionPlan,\n): Record<string, unknown>[] {\n\tconst computedDefs = schema.computedDefs as Record<string, ComputedDef>\n\n\treturn rows.map((row) => {\n\t\tconst enriched: Record<string, unknown> = { ...row }\n\t\tfor (const computeName of plan.computeNames) {\n\t\t\tconst def = computedDefs[computeName]\n\t\t\tconst depInput: Record<string, unknown> = {}\n\t\t\tfor (const dep of def.deps) {\n\t\t\t\tif (!(dep in row)) {\n\t\t\t\t\tthrow new EquippedError('Computed field dependency missing from adapter result', {\n\t\t\t\t\t\tschema: schema.name,\n\t\t\t\t\t\tcomputedField: computeName,\n\t\t\t\t\t\tdependency: dep,\n\t\t\t\t\t\tdependencies: def.deps,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tdepInput[dep] = row[dep]\n\t\t\t}\n\t\t\tconst r = v.validate(def.pipe, def.compute(depInput))\n\t\t\tif (!r.valid) throw new EquippedError('Computed field validation failed', {\n\t\t\t\tschema: schema.name,\n\t\t\t\tcomputedField: computeName,\n\t\t\t\tcause: r.error,\n\t\t\t})\n\t\t\tenriched[computeName] = r.value\n\t\t}\n\n\t\tif (!plan.requestedSelect) return enriched\n\n\t\tconst shaped: Record<string, unknown> = {}\n\t\tfor (const key of plan.requestedSelect) {\n\t\t\tif (key in enriched) shaped[key] = enriched[key]\n\t\t}\n\t\treturn shaped\n\t})\n}\n","import { Instance } from '../../../instance'\nimport { OrmValidationError, type OrmValidationFailure } from '../../errors'\nimport { ManyRelation, OneRelation, type AnyPreloadDef, type AnyRelDef, type NestedPreloadDef } from '../../relations'\nimport type { AnySchema } from '../../schema'\n\nconst FALLBACK_PAGINATION_DEFAULT_LIMIT = 100\nconst MAX_PRELOAD_DEPTH = 5\n\nexport type ReadOffsetSource =\n\t| { kind: 'offset'; value: unknown }\n\t| { kind: 'page'; value: unknown }\n\nexport type ReadLimitSource = { value: unknown }\n\nexport type NormalisedAllReadQuery = {\n\tlimit?: number\n\toffset?: number\n}\n\nexport type NormalisedIterationReadQuery = NormalisedAllReadQuery & {\n\tbatchSize?: number\n}\n\nexport type NormalisedPaginatedReadQuery = {\n\tlimit: number\n\toffset: number\n\tcurrent: number\n}\n\nfunction isRelDef(def: unknown): def is AnyRelDef {\n\treturn def instanceof ManyRelation || def instanceof OneRelation\n}\n\nfunction isNestedPreloadDef(def: AnyPreloadDef): def is NestedPreloadDef {\n\treturn typeof def === 'object' && def != null && 'def' in def\n}\n\nfunction relationStep(def: AnyRelDef) {\n\treturn `${def.source.name}.${def.name}->${def.target.name}`\n}\n\nfunction isPositiveInteger(value: unknown): value is number {\n\treturn typeof value === 'number' && Number.isSafeInteger(value) && value > 0\n}\n\nfunction isNonNegativeInteger(value: unknown): value is number {\n\treturn typeof value === 'number' && Number.isSafeInteger(value) && value >= 0\n}\n\nfunction getPaginationDefaultLimit() {\n\treturn Instance.maybeGet()?.settings.utils.paginationDefaultLimit ?? FALLBACK_PAGINATION_DEFAULT_LIMIT\n}\n\nfunction collectSelectFailures(schema: AnySchema, select: readonly string[] | undefined, failures: OrmValidationFailure[]) {\n\tif (!select || select.length === 0) return\n\n\tconst persistedNames = new Set(Object.keys(schema.fields))\n\tconst computedNames = new Set(Object.keys(schema.computedDefs as Record<string, unknown>))\n\tfor (const field of select) {\n\t\tif (persistedNames.has(field) || computedNames.has(field)) continue\n\t\tfailures.push({\n\t\t\tfield,\n\t\t\tcause: `Unknown selected field \"${field}\" on schema \"${schema.name}\"`,\n\t\t})\n\t}\n}\n\nfunction collectPreloadFailures(\n\tschema: AnySchema,\n\tdefs: readonly AnyPreloadDef[] | undefined,\n\tfailures: OrmValidationFailure[],\n\tdepth = 1,\n\tpath: readonly string[] = [],\n) {\n\tif (defs == null) return\n\tif (!Array.isArray(defs)) {\n\t\tfailures.push({ cause: 'Preloads must be an array' })\n\t\treturn\n\t}\n\tif (defs.length === 0) return\n\n\tif (depth > MAX_PRELOAD_DEPTH) {\n\t\tfailures.push({ cause: `Preload depth exceeded max depth ${MAX_PRELOAD_DEPTH}` })\n\t\treturn\n\t}\n\n\tfor (const preload of defs) {\n\t\tconst rawDef = isRelDef(preload) ? preload : isNestedPreloadDef(preload) ? preload.def : undefined\n\t\tif (!isRelDef(rawDef)) {\n\t\t\tfailures.push({ cause: 'Invalid preload definition: expected a relation definition or nested preload definition with `def`' })\n\t\t\tcontinue\n\t\t}\n\n\t\tif (rawDef.source !== schema) {\n\t\t\tfailures.push({\n\t\t\t\tfield: rawDef.name,\n\t\t\t\tcause: `Preload relation \"${rawDef.name}\" belongs to source schema \"${rawDef.source.name}\" but was used from schema \"${schema.name}\"`,\n\t\t\t})\n\t\t}\n\n\t\tconst step = relationStep(rawDef)\n\t\tif (path.includes(step)) {\n\t\t\tfailures.push({ field: rawDef.name, cause: `Preload cycle detected: ${[...path, step].join(' -> ')}` })\n\t\t\tcontinue\n\t\t}\n\n\t\tif (isNestedPreloadDef(preload)) {\n\t\t\tconst nested = preload.preloads ?? []\n\t\t\tif (!Array.isArray(nested)) {\n\t\t\t\tfailures.push({ field: rawDef.name, cause: `Nested preloads for relation \"${rawDef.name}\" must be an array` })\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcollectPreloadFailures(rawDef.target, nested, failures, depth + 1, [...path, step])\n\t\t}\n\t}\n}\n\nfunction collectLimitFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (isPositiveInteger(value)) return value\n\tfailures.push({ field: 'limit', option: 'limit', cause: 'Limit must be a positive safe integer' })\n\treturn undefined\n}\n\nfunction collectOffsetFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (isNonNegativeInteger(value)) return value\n\tfailures.push({ field: 'offset', option: 'offset', cause: 'Offset must be a non-negative safe integer' })\n\treturn undefined\n}\n\nfunction collectPageFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (isPositiveInteger(value)) return value\n\tfailures.push({ field: 'page', option: 'page', cause: 'Page must be a positive safe integer' })\n\treturn undefined\n}\n\nfunction collectBatchSizeFailure(value: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (value === undefined) return undefined\n\tif (isPositiveInteger(value)) return value\n\tfailures.push({ field: 'batchSize', option: 'batchSize', cause: 'Batch size must be a positive safe integer' })\n\treturn undefined\n}\n\nfunction collectIterationOptionFailures(options: unknown, failures: OrmValidationFailure[]): number | undefined {\n\tif (options === undefined) return undefined\n\tif (options == null || typeof options !== 'object' || Array.isArray(options)) {\n\t\tfailures.push({ option: 'batchSize', cause: 'Iteration options must be an object' })\n\t\treturn undefined\n\t}\n\treturn collectBatchSizeFailure((options as { batchSize?: unknown }).batchSize, failures)\n}\n\nfunction throwIfFailures(schema: AnySchema, operation: string, failures: OrmValidationFailure[]) {\n\tif (failures.length > 0) throw new OrmValidationError('query-shape', schema.name, operation, failures)\n}\n\nexport function assertNormalisedFindReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t},\n): void {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\tthrowIfFailures(schema, operation, failures)\n}\n\nexport function normaliseAllFindReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): NormalisedAllReadQuery {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\n\tlet limit = state.limitSource === undefined ? undefined : collectLimitFailure(state.limitSource.value, failures)\n\tlet offset: number | undefined\n\n\tif (state.offsetSource?.kind === 'offset') {\n\t\toffset = collectOffsetFailure(state.offsetSource.value, failures)\n\t} else if (state.offsetSource?.kind === 'page') {\n\t\tconst page = collectPageFailure(state.offsetSource.value, failures)\n\t\tif (limit === undefined && state.limitSource === undefined) {\n\t\t\tlimit = getPaginationDefaultLimit()\n\t\t\tif (!isPositiveInteger(limit)) {\n\t\t\t\tfailures.push({ field: 'limit', cause: 'Default page limit must be a positive safe integer' })\n\t\t\t\tlimit = undefined\n\t\t\t}\n\t\t}\n\t\tif (page !== undefined && limit !== undefined) {\n\t\t\tconst resolvedOffset = (page - 1) * limit\n\t\t\tif (isNonNegativeInteger(resolvedOffset)) {\n\t\t\t\toffset = resolvedOffset\n\t\t\t} else {\n\t\t\t\tfailures.push({ field: 'offset', cause: 'Resolved page offset must be a non-negative safe integer' })\n\t\t\t}\n\t\t}\n\t}\n\n\tthrowIfFailures(schema, operation, failures)\n\treturn { limit, offset }\n}\n\nexport function normaliseAllIterateReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n\toptions?: unknown,\n): NormalisedIterationReadQuery {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\n\tlet limit = state.limitSource === undefined ? undefined : collectLimitFailure(state.limitSource.value, failures)\n\tlet offset: number | undefined\n\tconst batchSize = collectIterationOptionFailures(options, failures)\n\n\tif (state.offsetSource?.kind === 'offset') {\n\t\toffset = collectOffsetFailure(state.offsetSource.value, failures)\n\t} else if (state.offsetSource?.kind === 'page') {\n\t\tconst page = collectPageFailure(state.offsetSource.value, failures)\n\t\tif (limit === undefined && state.limitSource === undefined) {\n\t\t\tlimit = getPaginationDefaultLimit()\n\t\t\tif (!isPositiveInteger(limit)) {\n\t\t\t\tfailures.push({ field: 'limit', option: 'limit', cause: 'Default page limit must be a positive safe integer' })\n\t\t\t\tlimit = undefined\n\t\t\t}\n\t\t}\n\t\tif (page !== undefined && limit !== undefined) {\n\t\t\tconst resolvedOffset = (page - 1) * limit\n\t\t\tif (isNonNegativeInteger(resolvedOffset)) {\n\t\t\t\toffset = resolvedOffset\n\t\t\t} else {\n\t\t\t\tfailures.push({ field: 'offset', option: 'offset', cause: 'Resolved page offset must be a non-negative safe integer' })\n\t\t\t}\n\t\t}\n\t}\n\n\tthrowIfFailures(schema, operation, failures)\n\treturn { limit, offset, batchSize }\n}\n\nexport function normaliseAllPaginateReadShape(\n\tschema: AnySchema,\n\toperation: string,\n\tstate: {\n\t\tselect: readonly string[] | undefined\n\t\tpreloads: readonly AnyPreloadDef[] | undefined\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): NormalisedPaginatedReadQuery {\n\tconst failures: OrmValidationFailure[] = []\n\tcollectSelectFailures(schema, state.select, failures)\n\tcollectPreloadFailures(schema, state.preloads, failures)\n\n\tlet limit: number | undefined\n\tif (state.limitSource === undefined) {\n\t\tlimit = getPaginationDefaultLimit()\n\t\tif (!isPositiveInteger(limit)) {\n\t\t\tfailures.push({ field: 'limit', cause: 'Default page limit must be a positive safe integer' })\n\t\t\tlimit = undefined\n\t\t}\n\t} else {\n\t\tlimit = collectLimitFailure(state.limitSource.value, failures)\n\t}\n\n\tlet offset = 0\n\tlet current = 1\n\n\tif (state.offsetSource?.kind === 'offset') {\n\t\tconst resolvedOffset = collectOffsetFailure(state.offsetSource.value, failures)\n\t\tif (resolvedOffset !== undefined) {\n\t\t\toffset = resolvedOffset\n\t\t\tif (limit !== undefined) current = Math.floor(resolvedOffset / limit) + 1\n\t\t}\n\t} else if (state.offsetSource?.kind === 'page') {\n\t\tconst page = collectPageFailure(state.offsetSource.value, failures)\n\t\tif (page !== undefined) current = page\n\t\tif (page !== undefined && limit !== undefined) {\n\t\t\tconst resolvedOffset = (page - 1) * limit\n\t\t\tif (isNonNegativeInteger(resolvedOffset)) {\n\t\t\t\toffset = resolvedOffset\n\t\t\t} else {\n\t\t\t\tfailures.push({ field: 'offset', cause: 'Resolved page offset must be a non-negative safe integer' })\n\t\t\t}\n\t\t}\n\t}\n\n\tthrowIfFailures(schema, operation, failures)\n\treturn { limit: limit as number, offset, current }\n}\n","import { v, type Pipe, type PipeInput, type PipeOutput } from 'valleyed'\n\nimport { OrmValidationError, type OrmValidationFailure } from './errors'\nimport type { AnySchemaField, SchemaField } from './fields'\nimport { Schema, type AnySchema, type SchemaFields, type SchemaOutput } from './schema'\nimport { SetOp, isUpdateOp, opTouchedFields, type AnyUpdateOp } from './updates'\nimport type { Prettify } from './utils'\n\nexport type SchemaCreateInput<S extends AnySchema> = Prettify<\n\t{\n\t\t[K in keyof SchemaFields<S> as SchemaFields<S>[K] extends SchemaField<any, any, true>\n\t\t\t? never\n\t\t\t: K]: SchemaFields<S>[K] extends AnySchemaField ? PipeInput<SchemaFields<S>[K]['pipe']> : never\n\t} & {\n\t\t[K in keyof SchemaFields<S> as SchemaFields<S>[K] extends SchemaField<any, any, true>\n\t\t\t? K\n\t\t\t: never]?: SchemaFields<S>[K] extends AnySchemaField ? PipeInput<SchemaFields<S>[K]['pipe']> : never\n\t}\n>\n\nexport type SchemaUpdateInput<S extends AnySchema> =\n\tS extends Schema<any, any, infer F>\n\t\t? { [K in keyof F]?: F[K] extends AnySchemaField ? PipeInput<F[K]['pipe']> | AnyUpdateOp : never }\n\t\t: Record<string, unknown>\n\nexport type SchemaUpdateOutput<S extends AnySchema> =\n\tS extends Schema<any, any, infer F>\n\t\t? { [K in keyof F]?: F[K] extends AnySchemaField ? PipeOutput<F[K]['pipe']> | AnyUpdateOp : never }\n\t\t: Record<string, unknown>\n\nexport function tryValidateCreateRow<S extends AnySchema>(\n\ts: S,\n\tdata: Record<string, unknown>,\n): { ok: true; value: SchemaOutput<S> } | { ok: false; failures: OrmValidationFailure[] } {\n\tconst failures: OrmValidationFailure[] = []\n\tconst result: Record<string, unknown> = {}\n\n\tfor (const [key, entry] of Object.entries(s.fields)) {\n\t\tconst pipe = entry.onCreate ? v.defaults(entry.pipe, entry.onCreate()) : entry.pipe\n\t\tconst fieldValue = key in data ? data[key] : undefined\n\t\tconst validated = v.validate(pipe, fieldValue)\n\t\tif (validated.valid) {\n\t\t\tresult[key] = validated.value\n\t\t} else {\n\t\t\tfailures.push({ field: key, cause: validated.error })\n\t\t}\n\t}\n\n\tif (failures.length > 0) return { ok: false, failures }\n\treturn { ok: true, value: result as SchemaOutput<S> }\n}\n\nexport function validateCreate<S extends AnySchema>(s: S, data: Record<string, unknown>): SchemaOutput<S> {\n\tconst result = tryValidateCreateRow(s, data)\n\tif (!result.ok) {\n\t\tthrow new OrmValidationError('validation', s.name, 'createOne', result.failures)\n\t}\n\treturn result.value\n}\n\nexport function validateCreateMany<S extends AnySchema>(s: S, rows: Record<string, unknown>[]): SchemaOutput<S>[] {\n\tconst allFailures: OrmValidationFailure[] = []\n\tconst validated: SchemaOutput<S>[] = []\n\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst result = tryValidateCreateRow(s, rows[i])\n\t\tif (result.ok) {\n\t\t\tvalidated.push(result.value)\n\t\t} else {\n\t\t\tfor (const failure of result.failures) {\n\t\t\t\tallFailures.push({ ...failure, rowIndex: i })\n\t\t\t}\n\t\t}\n\t}\n\n\tif (allFailures.length > 0) {\n\t\tthrow new OrmValidationError('validation', s.name, 'createMany', allFailures)\n\t}\n\n\treturn validated\n}\n\nexport function validateUpdate<S extends AnySchema>(s: S, data: Record<string, unknown>): SchemaUpdateOutput<S> {\n\tconst pipes: Record<string, Pipe<any, any>> = {}\n\tconst ops: Record<string, unknown> = {}\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tif (isUpdateOp(value)) ops[key] = value\n\t\telse if (key in s.fieldDefs) pipes[key] = s.fieldDefs[key].pipe\n\t}\n\n\tfor (const [key, entry] of Object.entries(s.fieldDefs)) {\n\t\tif (!(key in data) && entry.onUpdate) pipes[key] = v.defaults(entry.pipe, entry.onUpdate())\n\t}\n\n\tconst r = v.validate(v.object(pipes), data)\n\tif (!r.valid) throw new OrmValidationError('validation', s.name, 'updateByPk', [{ cause: r.error }])\n\tconst validated = r.value as Record<string, unknown>\n\treturn { ...validated, ...ops } as SchemaUpdateOutput<S>\n}\n\nexport function validateUpdateOps(schema: AnySchema, ops: AnyUpdateOp[], operation = 'updateByPk'): AnyUpdateOp[] {\n\tconst touched = new Map<string, number[]>()\n\n\tfor (let i = 0; i < ops.length; i++) {\n\t\tfor (const field of opTouchedFields(ops[i])) {\n\t\t\tif (!touched.has(field)) touched.set(field, [])\n\t\t\ttouched.get(field)!.push(i)\n\t\t}\n\t}\n\n\tconst autoBumped: AnyUpdateOp[] = []\n\tfor (const [key, entry] of Object.entries(schema.fieldDefs)) {\n\t\tif (entry.onUpdate && !touched.has(key)) {\n\t\t\tconst bumpOp = new SetOp({ [key]: entry.onUpdate() })\n\t\t\tautoBumped.push(bumpOp)\n\t\t\ttouched.set(key, [ops.length + autoBumped.length - 1])\n\t\t}\n\t}\n\n\tconst allOps = [...ops, ...autoBumped]\n\n\tconst conflicts: OrmValidationFailure[] = []\n\tfor (const [field, indices] of touched) {\n\t\tif (indices.length > 1) {\n\t\t\tconflicts.push({ field, cause: `field \"${field}\" touched by multiple ops at indices [${indices.join(', ')}]` })\n\t\t}\n\t}\n\tif (conflicts.length > 0) {\n\t\tthrow new OrmValidationError('conflicting-ops', schema.name, operation, conflicts)\n\t}\n\n\tconst failures: OrmValidationFailure[] = []\n\tfor (let i = 0; i < allOps.length; i++) {\n\t\tconst op = allOps[i]\n\t\tif (op instanceof SetOp) {\n\t\t\tfor (const [key, value] of Object.entries(op.values)) {\n\t\t\t\tconst fieldDef = schema.fields[key] as AnySchemaField | undefined\n\t\t\t\tif (!fieldDef) continue\n\t\t\t\tconst r = v.validate(fieldDef.pipe, value)\n\t\t\t\tif (!r.valid) {\n\t\t\t\t\tfailures.push({ opIndex: i, field: key, cause: r.error })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (failures.length > 0) {\n\t\tthrow new OrmValidationError('validation', schema.name, operation, failures)\n\t}\n\n\treturn allOps\n}\n\nexport function composeSchemaConfig(\n\tresolve: (schema: AnySchema) => unknown,\n\ttransforms: ReadonlyArray<(config: any, schema: AnySchema) => any>,\n\tschema: AnySchema,\n\tpipe: Pipe<any, any>,\n): unknown {\n\tlet config = resolve(schema)\n\tfor (const transform of transforms) {\n\t\tconfig = transform(config, schema)\n\t}\n\tconst r = v.validate(pipe, config)\n\tif (!r.valid) throw new OrmValidationError('validation', schema.name, 'schemaConfig', [{ cause: r.error }])\n\treturn r.value\n}\n\nexport function validateUpsertConflicts(\n\tschema: AnySchema,\n\trawCreate: Record<string, unknown>,\n\tops: AnyUpdateOp[],\n): void {\n\tconst createFields = new Set(Object.keys(rawCreate))\n\tconst conflicts: OrmValidationFailure[] = []\n\tfor (const op of ops) {\n\t\tif (op instanceof SetOp) continue\n\t\tfor (const field of opTouchedFields(op)) {\n\t\t\tif (createFields.has(field)) {\n\t\t\t\tconflicts.push({ field, cause: `field \"${field}\" present in both create payload and atomic op \"${op.kind}\"` })\n\t\t\t}\n\t\t}\n\t}\n\tif (conflicts.length > 0) {\n\t\tthrow new OrmValidationError('conflicting-ops', schema.name, 'upsertOne', conflicts)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { IncOp, MulOp, SetOp, UnsetOp } = await import('./updates')\n\tconst { EquippedError } = await import('../errors')\n\n\tdescribe('validateCreate', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'auto-id')\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.optional(v.number()))\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.build()\n\n\t\ttest('generates pk when not provided', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.id).toBe('auto-id')\n\t\t})\n\n\t\ttest('uses provided pk when given', () => {\n\t\t\tconst result = validateCreate(UserSchema, { id: 'custom-id', email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.id).toBe('custom-id')\n\t\t})\n\n\t\ttest('applies onCreate generator for generated fields', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.createdAt).toBe(1000)\n\t\t})\n\n\t\ttest('allows overriding generated field values', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice', createdAt: 9999 })\n\t\t\texpect(result.createdAt).toBe(9999)\n\t\t})\n\n\t\ttest('optional fields default to undefined when not provided', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(result.age).toBeUndefined()\n\t\t})\n\n\t\ttest('strips unknown fields', () => {\n\t\t\tconst result = validateCreate(UserSchema, { email: 'a@b.com', name: 'Alice', admin: true })\n\t\t\texpect((result as any).admin).toBeUndefined()\n\t\t})\n\n\t\ttest('throws OrmValidationError on invalid field type', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreate(UserSchema, { email: 123, name: 'Alice' })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\texpect(err.operation).toBe('createOne')\n\t\t\t\texpect(err.failures.length).toBeGreaterThan(0)\n\t\t\t\texpect(err.failures[0].field).toBe('email')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws OrmValidationError when required field is missing', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreate(UserSchema, { email: 'a@b.com' })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.failures.some((f) => f.field === 'name')).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('collects all field failures in a single error', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreate(UserSchema, { email: 123, name: 456 })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\tconst failedFields = err.failures.map((f) => f.field)\n\t\t\t\texpect(failedFields).toContain('email')\n\t\t\t\texpect(failedFields).toContain('name')\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('validateCreateMany', () => {\n\t\tconst ItemSchema = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => 'item-id')\n\t\t\t.field('title', v.string())\n\t\t\t.field('price', v.number())\n\t\t\t.build()\n\n\t\ttest('validates all rows and returns validated documents', () => {\n\t\t\tconst results = validateCreateMany(ItemSchema, [\n\t\t\t\t{ title: 'A', price: 10 },\n\t\t\t\t{ title: 'B', price: 20 },\n\t\t\t])\n\t\t\texpect(results).toHaveLength(2)\n\t\t\texpect(results[0].title).toBe('A')\n\t\t\texpect(results[1].title).toBe('B')\n\t\t})\n\n\t\ttest('collects failures across rows with rowIndex populated', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreateMany(ItemSchema, [\n\t\t\t\t\t{ title: 'Good', price: 10 },\n\t\t\t\t\t{ title: 123, price: 20 },\n\t\t\t\t\t{ title: 'Also bad', price: 'not-a-number' },\n\t\t\t\t])\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.schema).toBe('items')\n\t\t\t\texpect(err.operation).toBe('createMany')\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(2)\n\t\t\t\tconst rowIndices = err.failures.map((f) => f.rowIndex)\n\t\t\t\texpect(rowIndices).toContain(1)\n\t\t\t\texpect(rowIndices).toContain(2)\n\t\t\t\texpect(rowIndices).not.toContain(0)\n\t\t\t}\n\t\t})\n\n\t\ttest('throws single error even with multiple bad rows', () => {\n\t\t\ttry {\n\t\t\t\tvalidateCreateMany(ItemSchema, [\n\t\t\t\t\t{ title: 1, price: 'bad' },\n\t\t\t\t\t{ title: 2, price: 'worse' },\n\t\t\t\t])\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.failures.filter((f) => f.rowIndex === 0).length).toBeGreaterThan(0)\n\t\t\t\texpect(err.failures.filter((f) => f.rowIndex === 1).length).toBeGreaterThan(0)\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('validateUpdate', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => 'auto-id')\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t\t.build()\n\n\t\ttest('validates only provided fields', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob' })\n\t\t\texpect(result).toHaveProperty('name', 'Bob')\n\t\t\texpect(result).not.toHaveProperty('email')\n\t\t})\n\n\t\ttest('applies onUpdate generator for unset generated fields', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob' })\n\t\t\texpect(result).toHaveProperty('updatedAt', 2000)\n\t\t})\n\n\t\ttest('allows overriding onUpdate field explicitly', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob', updatedAt: 5000 })\n\t\t\texpect(result).toHaveProperty('updatedAt', 5000)\n\t\t})\n\n\t\ttest('strips unknown fields', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob', admin: true })\n\t\t\texpect((result as any).admin).toBeUndefined()\n\t\t})\n\n\t\ttest('throws on invalid field type', () => {\n\t\t\texpect(() => validateUpdate(UserSchema, { name: 123 })).toThrow()\n\t\t})\n\n\t\ttest('passes Op instances through without validation', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: new IncOp('name', 1) })\n\t\t\texpect(result.name).toBeInstanceOf(IncOp)\n\t\t})\n\n\t\ttest('Op on a field suppresses onUpdate for that field but not others', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { updatedAt: new IncOp('updatedAt', 1) })\n\t\t\texpect(result.updatedAt).toBeInstanceOf(IncOp)\n\t\t})\n\n\t\ttest('plain value and Op can coexist in same update', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { name: 'Bob', email: new UnsetOp('email') })\n\t\t\texpect(result.name).toBe('Bob')\n\t\t\texpect(result.email).toBeInstanceOf(UnsetOp)\n\t\t\texpect(result.updatedAt).toBe(2000)\n\t\t})\n\n\t\ttest('Op on onUpdate field suppresses its generator', () => {\n\t\t\tconst result = validateUpdate(UserSchema, { updatedAt: new MulOp('updatedAt', 2) })\n\t\t\texpect(result.updatedAt).toBeInstanceOf(MulOp)\n\t\t})\n\t})\n\n\tdescribe('OrmValidationError', () => {\n\t\ttest('has correct kind, schema, operation, and failures', () => {\n\t\t\tconst err = new OrmValidationError('conflicting-ops', 'users', 'updateByPk', [\n\t\t\t\t{ field: 'views', cause: 'conflict' },\n\t\t\t])\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\texpect(err.schema).toBe('users')\n\t\t\texpect(err.operation).toBe('updateByPk')\n\t\t\texpect(err.failures).toHaveLength(1)\n\t\t})\n\t})\n\n\tdescribe('validateUpdateOps', () => {\n\t\tconst UpdateSchema = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => 'auto')\n\t\t\t.field('name', v.string())\n\t\t\t.field('views', v.number())\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t\t.build()\n\n\t\ttest('passes through valid ops', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new SetOp({ name: 'New Name' })])\n\t\t\texpect(ops.length).toBeGreaterThanOrEqual(1)\n\t\t\texpect(ops[0]).toBeInstanceOf(SetOp)\n\t\t})\n\n\t\ttest('auto-bumps onUpdate fields not touched by user ops', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new SetOp({ name: 'New Name' })])\n\t\t\tconst bumped = ops.find((op) => op instanceof SetOp && 'updatedAt' in op.values && op !== ops[0])\n\t\t\texpect(bumped).toBeDefined()\n\t\t\texpect((bumped as SetOp).values.updatedAt).toBe(2000)\n\t\t})\n\n\t\ttest('user set({updatedAt:X}) suppresses auto-bump for that field', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new SetOp({ updatedAt: 9999 })])\n\t\t\tconst setOps = ops.filter((op) => op instanceof SetOp) as SetOp[]\n\t\t\tconst allUpdatedAtValues = setOps.flatMap((op) =>\n\t\t\t\t'updatedAt' in op.values ? [op.values.updatedAt] : [],\n\t\t\t)\n\t\t\texpect(allUpdatedAtValues).toEqual([9999])\n\t\t})\n\n\t\ttest('atomic op on onUpdate field suppresses auto-bump', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new IncOp('updatedAt', 1)])\n\t\t\tconst setOps = ops.filter((op) => op instanceof SetOp) as SetOp[]\n\t\t\tconst hasAutoBumpedUpdatedAt = setOps.some((op) => 'updatedAt' in op.values)\n\t\t\texpect(hasAutoBumpedUpdatedAt).toBe(false)\n\t\t})\n\n\t\ttest('set({views:0}) + inc(views, 1) throws conflicting-ops', () => {\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ views: 0 }), new IncOp('views', 1)]),\n\t\t\t).toThrow(OrmValidationError)\n\n\t\t\ttry {\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ views: 0 }), new IncOp('views', 1)])\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\t\texpect(err.failures[0].field).toBe('views')\n\t\t\t}\n\t\t})\n\n\t\ttest('cross-kind conflict (unset + inc on same field) throws', () => {\n\t\t\tconst UpdateSchema2 = Schema.from('items2')\n\t\t\t\t.pk('id', v.string(), () => 'auto')\n\t\t\t\t.field('score', v.optional(v.number()))\n\t\t\t\t.build()\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(UpdateSchema2, [new UnsetOp('score'), new IncOp('score', 5)]),\n\t\t\t).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('SetOp values are pipe-validated', () => {\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ name: 123 as any })]),\n\t\t\t).toThrow(OrmValidationError)\n\n\t\t\ttry {\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [new SetOp({ name: 123 as any })])\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.failures[0].field).toBe('name')\n\t\t\t}\n\t\t})\n\n\t\ttest('atomic op operands are NOT pipe-validated', () => {\n\t\t\tconst ops = validateUpdateOps(UpdateSchema, [new IncOp('views', -999)])\n\t\t\texpect(ops).toHaveLength(2)\n\t\t})\n\n\t\ttest('auto-bumped SetOp values are pipe-validated', () => {\n\t\t\tconst BadSchema = Schema.from('bad')\n\t\t\t\t.pk('id', v.string(), () => 'auto')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('counter', v.number(), { onUpdate: () => 'not-a-number' as any })\n\t\t\t\t.build()\n\t\t\texpect(() =>\n\t\t\t\tvalidateUpdateOps(BadSchema, [new SetOp({ name: 'test' })]),\n\t\t\t).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('collects all conflicts in one error', () => {\n\t\t\ttry {\n\t\t\t\tvalidateUpdateOps(UpdateSchema, [\n\t\t\t\t\tnew SetOp({ views: 0, name: 'A' }),\n\t\t\t\t\tnew IncOp('views', 1),\n\t\t\t\t\tnew SetOp({ name: 'B' }),\n\t\t\t\t])\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\t\texpect(err.failures.length).toBe(2)\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('composeSchemaConfig', () => {\n\t\tconst TestSchema = Schema.from('cfg_test')\n\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t.build()\n\n\t\tconst tablePipe = v.object({ table: v.string() })\n\n\t\ttest('composes base resolver output and validates against pipe', () => {\n\t\t\tconst result = composeSchemaConfig(\n\t\t\t\t() => ({ table: 'users' }),\n\t\t\t\t[],\n\t\t\t\tTestSchema,\n\t\t\t\ttablePipe,\n\t\t\t)\n\t\t\texpect(result).toEqual({ table: 'users' })\n\t\t})\n\n\t\ttest('applies transforms in order before validation', () => {\n\t\t\tconst result = composeSchemaConfig(\n\t\t\t\t() => ({ table: 'users' }),\n\t\t\t\t[\n\t\t\t\t\t(cfg: any) => ({ ...cfg, table: `a_${cfg.table}` }),\n\t\t\t\t\t(cfg: any) => ({ ...cfg, table: `b_${cfg.table}` }),\n\t\t\t\t],\n\t\t\t\tTestSchema,\n\t\t\t\ttablePipe,\n\t\t\t)\n\t\t\texpect(result).toEqual({ table: 'b_a_users' })\n\t\t})\n\n\t\ttest('throws OrmValidationError when composed config fails pipe validation', () => {\n\t\t\ttry {\n\t\t\t\tcomposeSchemaConfig(\n\t\t\t\t\t() => ({ table: 123 }),\n\t\t\t\t\t[],\n\t\t\t\t\tTestSchema,\n\t\t\t\t\ttablePipe,\n\t\t\t\t)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.schema).toBe('cfg_test')\n\t\t\t\texpect(err.operation).toBe('schemaConfig')\n\t\t\t\texpect(err.failures).toHaveLength(1)\n\t\t\t}\n\t\t})\n\n\t\ttest('throws OrmValidationError when transform corrupts valid base config', () => {\n\t\t\ttry {\n\t\t\t\tcomposeSchemaConfig(\n\t\t\t\t\t() => ({ table: 'users' }),\n\t\t\t\t\t[(cfg: any) => ({ ...cfg, table: 42 })],\n\t\t\t\t\tTestSchema,\n\t\t\t\t\ttablePipe,\n\t\t\t\t)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\texpect(err.operation).toBe('schemaConfig')\n\t\t\t}\n\t\t})\n\n\t\ttest('returns typed effective config on success', () => {\n\t\t\tconst pipe = v.object({ table: v.string(), prefix: v.optional(v.string()) })\n\t\t\tconst result = composeSchemaConfig(\n\t\t\t\t() => ({ table: 'orders' }),\n\t\t\t\t[(cfg: any) => ({ ...cfg, prefix: 'tenant1' })],\n\t\t\t\tTestSchema,\n\t\t\t\tpipe,\n\t\t\t)\n\t\t\texpect(result).toEqual({ table: 'orders', prefix: 'tenant1' })\n\t\t})\n\t})\n}\n","import { planSelection } from './computeds'\nimport { assertNormalisedFindReadShape, normaliseAllFindReadShape, normaliseAllIterateReadShape, normaliseAllPaginateReadShape, type ReadLimitSource, type ReadOffsetSource } from './query-shape'\nimport type { Paginated, SelectedWithPreloads } from './types'\nimport { assertNormalisedAggregate, assertNormalisedFilter, type FilterGroup } from '../../filter'\nimport type { AggregateSpec } from '../../orm-adapter'\nimport type { IterationOptions, OrderBy } from '../../query-options'\nimport type { AnyPreloadDef } from '../../relations'\nimport type { AnySchema } from '../../schema'\nimport { validateCreate, validateCreateMany, validateUpdate, validateUpsertConflicts, type SchemaCreateInput, type SchemaUpdateInput } from '../../schema-validations'\nimport { SetOp, isUpdateOp, type AnyUpdateOp } from '../../updates'\nimport type { SchemaContext, UpsertInput } from '../builders'\n\nexport async function runOneRead<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t},\n): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tassertNormalisedFindReadShape(context.schema, 'findOne', state)\n\tconst row = await context.use.findOne(state.where)\n\tif (!row) return null\n\treturn context.shapeOneRow(state.select, state.preloads, row)\n}\n\nexport async function runAllRead<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t\torderBy: readonly OrderBy[]\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst query = normaliseAllFindReadShape(context.schema, 'findMany', state)\n\tconst plan = planSelection(context.schema, state.select as readonly string[] | undefined)\n\tconst rows = await context.use.findMany(state.where, {\n\t\tselect: plan.adapterSelect,\n\t\torderBy: [...state.orderBy],\n\t\tlimit: query.limit,\n\t\toffset: query.offset,\n\t})\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runAllCount<S extends AnySchema>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup },\n): Promise<number> {\n\tassertNormalisedFilter(context.schema, state.where)\n\treturn context.use.count(state.where)\n}\n\nfunction toPaginated<T>(items: T[], total: number, limit: number, current: number): Paginated<T> {\n\tconst start = 1\n\tconst last = Math.ceil(total / limit) || 1\n\tconst previous = current <= start || current > last ? null : current - 1\n\tconst next = current >= last ? null : current + 1\n\treturn {\n\t\tpages: { current, start, last, previous, next },\n\t\tdocs: { limit, total, count: items.length },\n\t\titems,\n\t}\n}\n\nexport async function runAllPaginate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t\torderBy: readonly OrderBy[]\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n): Promise<Paginated<SelectedWithPreloads<S, Sel, P>>> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst query = normaliseAllPaginateReadShape(context.schema, 'paginate', state)\n\tconst plan = planSelection(context.schema, state.select as readonly string[] | undefined)\n\tconst use = context.use\n\tconst [rows, total] = await Promise.all([\n\t\tuse.findMany(state.where, {\n\t\t\tselect: plan.adapterSelect,\n\t\t\torderBy: [...state.orderBy],\n\t\t\tlimit: query.limit,\n\t\t\toffset: query.offset,\n\t\t}),\n\t\tuse.count(state.where),\n\t])\n\tconst items = await context.shapeRows(state.select, state.preloads, rows)\n\treturn toPaginated(items, total, query.limit, query.current)\n}\n\nexport async function* runAllIterate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: {\n\t\twhere: FilterGroup\n\t\tselect: readonly Sel[] | undefined\n\t\tpreloads: P\n\t\torderBy: readonly OrderBy[]\n\t\tlimitSource?: ReadLimitSource\n\t\toffsetSource?: ReadOffsetSource\n\t},\n\toptions?: IterationOptions,\n): AsyncGenerator<SelectedWithPreloads<S, Sel, P>, void, void> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst query = normaliseAllIterateReadShape(context.schema, 'iterate', state, options)\n\tconst plan = planSelection(context.schema, state.select as readonly string[] | undefined)\n\n\tfor await (const row of context.use.iterateMany(state.where, {\n\t\tselect: plan.adapterSelect,\n\t\torderBy: [...state.orderBy],\n\t\tlimit: query.limit,\n\t\toffset: query.offset,\n\t\t...(query.batchSize === undefined ? {} : { batchSize: query.batchSize }),\n\t})) {\n\t\tconst shaped = await context.shapeRows(state.select, state.preloads, [row])\n\t\tconst first = shaped[0]\n\t\tif (first) yield first\n\t}\n}\n\nexport async function runOneCreate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaCreateInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P>> {\n\tconst validated = validateCreate(context.schema, data as any)\n\tconst row = await context.use.createOne(validated as any)\n\tconst [resolved] = await context.shapeRows(state.select, state.preloads, [row])\n\treturn resolved\n}\n\nexport async function runAllCreate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaCreateInput<S>[],\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tconst validated = validateCreateMany(context.schema, data as any)\n\tconst rows = await context.use.createMany(validated as any)\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runOneUpdate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaUpdateInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst validated = validateUpdate(context.schema, data as any)\n\tconst row = await context.use.updateOne(state.where, validated as any)\n\treturn context.shapeOneRow(state.select, state.preloads, row)\n}\n\nexport async function runAllUpdate<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n\tdata: SchemaUpdateInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst validated = validateUpdate(context.schema, data as any)\n\tconst rows = await context.use.updateMany(state.where, validated as any)\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runOneUpsert<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n\tdata: UpsertInput<S>,\n): Promise<SelectedWithPreloads<S, Sel, P>> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst create = validateCreate(context.schema, data.create as any)\n\tconst ops: AnyUpdateOp[] = []\n\tif ('update' in data) {\n\t\tconst validated = validateUpdate(context.schema, data.update as any)\n\t\tconst plainValues: Record<string, unknown> = {}\n\t\tfor (const [key, value] of Object.entries(validated)) {\n\t\t\tif (isUpdateOp(value)) {\n\t\t\t\tops.push(value)\n\t\t\t} else {\n\t\t\t\tplainValues[key] = value\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(plainValues).length > 0) {\n\t\t\tops.unshift(new SetOp(plainValues))\n\t\t}\n\t}\n\tif (ops.length > 0) {\n\t\tvalidateUpsertConflicts(context.schema, data.create as Record<string, unknown>, ops)\n\t}\n\tconst row = await context.use.upsertOne(state.where, create as any, ops)\n\treturn (await context.shapeOneRow(state.select, state.preloads, row)) as SelectedWithPreloads<S, Sel, P>\n}\n\nexport async function runOneDelete<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst row = await context.use.deleteOne(state.where)\n\treturn context.shapeOneRow(state.select, state.preloads, row)\n}\n\nexport async function runAllDelete<S extends AnySchema, Sel extends string, P extends readonly AnyPreloadDef[]>(\n\tcontext: SchemaContext<S>,\n\tstate: { where: FilterGroup; select: readonly Sel[] | undefined; preloads: P },\n): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\tassertNormalisedFilter(context.schema, state.where)\n\tconst rows = await context.use.deleteMany(state.where)\n\treturn context.shapeRows(state.select, state.preloads, rows)\n}\n\nexport async function runAggregate<S extends AnySchema>(\n\tcontext: SchemaContext<S>,\n\tspec: AggregateSpec,\n): Promise<Array<Record<string, unknown>>> {\n\tassertNormalisedAggregate(context.schema, context.use, spec)\n\treturn context.use.aggregate(spec)\n}\n","import { EquippedError } from '../../../errors'\nimport type { OrmUse } from '../../adapters/base'\nimport { FilterGroup } from '../../filter'\nimport type { AnyPreloadDef, AnyRelDef, NestedPreloadDef } from '../../relations'\nimport { ManyRelation, OneRelation } from '../../relations'\nimport type { AnySchema } from '../../schema'\n\nconst MAX_PRELOAD_DEPTH = 5\n\ntype ResolvedPreloadDef = {\n\tdef: AnyRelDef\n\tpreloads: ResolvedPreloadDef[]\n}\n\nfunction isNestedPreloadDef(def: AnyPreloadDef): def is NestedPreloadDef {\n\treturn typeof def === 'object' && def != null && 'def' in def\n}\n\nfunction relationStep(def: AnyRelDef) {\n\treturn `${def.source.name}.${def.name}->${def.target.name}`\n}\n\nfunction uniqueDefinedValues(entities: readonly Record<string, unknown>[], key: string) {\n\treturn [...new Set(entities.map((entity) => entity[key]).filter((value) => value != null))]\n}\n\nfunction attachOneRelation(\n\tentities: readonly Record<string, unknown>[],\n\tname: string,\n\tlookupKey: string,\n\tlookup: ReadonlyMap<unknown, Record<string, unknown>>,\n) {\n\treturn entities.map((entity) => ({ ...entity, [name]: lookup.get(entity[lookupKey]) ?? null }))\n}\n\nfunction attachManyRelation(\n\tentities: readonly Record<string, unknown>[],\n\tname: string,\n\tlookupKey: string,\n\tlookup: ReadonlyMap<unknown, Record<string, unknown>[]>,\n) {\n\treturn entities.map((entity) => ({ ...entity, [name]: lookup.get(entity[lookupKey]) ?? [] }))\n}\n\nfunction normalizePreloads(defs: readonly AnyPreloadDef[]): ResolvedPreloadDef[] {\n\treturn defs.map((def) => {\n\t\tif (def instanceof ManyRelation || def instanceof OneRelation) {\n\t\t\treturn { def, preloads: [] }\n\t\t}\n\n\t\tif (!isNestedPreloadDef(def) || !(def.def instanceof ManyRelation || def.def instanceof OneRelation)) {\n\t\t\tthrow new Error('Invalid preload definition: nested preloads must include a relation definition in `def`')\n\t\t}\n\n\t\treturn {\n\t\t\tdef: def.def,\n\t\t\tpreloads: normalizePreloads(def.preloads ?? []),\n\t\t}\n\t})\n}\n\nexport async function resolvePreloads<T extends Record<string, unknown>>(\n\tentities: T[],\n\tdefs: readonly AnyPreloadDef[],\n\tgetUse: (s: AnySchema) => OrmUse,\n) {\n\treturn resolvePreloadNodes(entities, normalizePreloads(defs), getUse, 1, []) as unknown as T[]\n}\n\nasync function resolvePreloadNodes(\n\tentities: Record<string, unknown>[],\n\tdefs: readonly ResolvedPreloadDef[],\n\tgetUse: (s: AnySchema) => OrmUse,\n\tdepth: number,\n\tpath: readonly string[],\n) {\n\tfor (const def of defs) entities = await resolvePreload(entities, def, getUse, depth, path)\n\treturn entities\n}\n\nasync function resolvePreload(\n\tentities: Record<string, unknown>[],\n\tnode: ResolvedPreloadDef,\n\tgetUse: (s: AnySchema) => OrmUse,\n\tdepth: number,\n\tpath: readonly string[],\n): Promise<Record<string, unknown>[]> {\n\tif (depth > MAX_PRELOAD_DEPTH) {\n\t\tthrow new EquippedError(`Preload depth exceeded max depth ${MAX_PRELOAD_DEPTH}`, {\n\t\t\toperation: 'resolvePreload',\n\t\t\tdepth,\n\t\t\tmaxDepth: MAX_PRELOAD_DEPTH,\n\t\t})\n\t}\n\n\tconst { def } = node\n\tconst { target, name } = def\n\tconst step = relationStep(def)\n\tif (path.includes(step)) {\n\t\tthrow new EquippedError(`Preload cycle detected: ${[...path, step].join(' -> ')}`, {\n\t\t\toperation: 'resolvePreload',\n\t\t\tpath,\n\t\t\tstep,\n\t\t})\n\t}\n\tconst nextPath = [...path, step]\n\n\tif (def instanceof OneRelation) {\n\t\tif (def.fkOwner === 'source') {\n\t\t\tconst refCol = def.references.name\n\t\t\tconst fkValues = uniqueDefinedValues(entities, def.foreignKey.name)\n\t\t\tif (fkValues.length === 0) return entities.map((e) => ({ ...e, [name]: null }))\n\n\t\t\tlet related = await getUse(target).findMany(FilterGroup.create().in(refCol, fkValues))\n\t\t\tif (node.preloads.length > 0 && related.length > 0) {\n\t\t\t\trelated = await resolvePreloadNodes(related, node.preloads, getUse, depth + 1, nextPath)\n\t\t\t}\n\t\t\tconst lookup = new Map(related.map((r) => [r[refCol], r]))\n\t\t\treturn attachOneRelation(entities, name, def.foreignKey.name, lookup)\n\t\t}\n\n\t\tconst refCol = def.references.name\n\t\tconst refValues = uniqueDefinedValues(entities, refCol)\n\t\tif (refValues.length === 0) return entities.map((e) => ({ ...e, [name]: null }))\n\n\t\tlet related = await getUse(target).findMany(FilterGroup.create().in(def.foreignKey, refValues))\n\t\tif (node.preloads.length > 0 && related.length > 0) {\n\t\t\trelated = await resolvePreloadNodes(related, node.preloads, getUse, depth + 1, nextPath)\n\t\t}\n\t\tconst lookup = new Map(related.map((r) => [r[def.foreignKey.name], r]))\n\t\treturn attachOneRelation(entities, name, refCol, lookup)\n\t}\n\n\tif (def instanceof ManyRelation) {\n\t\tconst refCol = def.references.name\n\t\tconst refValues = uniqueDefinedValues(entities, refCol)\n\t\tif (refValues.length === 0) return entities.map((e) => ({ ...e, [name]: [] }))\n\n\t\tlet related = await getUse(target).findMany(FilterGroup.create().in(def.foreignKey, refValues))\n\t\tif (node.preloads.length > 0 && related.length > 0) {\n\t\t\trelated = await resolvePreloadNodes(related, node.preloads, getUse, depth + 1, nextPath)\n\t\t}\n\n\t\tconst grouped = new Map<unknown, Record<string, unknown>[]>()\n\t\tfor (const r of related) {\n\t\t\tconst fk = r[def.foreignKey.name]\n\t\t\tif (!grouped.has(fk)) grouped.set(fk, [])\n\t\t\tgrouped.get(fk)!.push(r)\n\t\t}\n\t\treturn attachManyRelation(entities, name, refCol, grouped)\n\t}\n\n\tthrow new Error(`Unknown relation kind: ${String(Reflect.get(def as object, 'kind'))}; expected OneRelation or ManyRelation`)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../../adapters/in-memory')\n\tconst { OrmValidationError } = await import('../../errors')\n\tconst { Relations } = await import('../../relations')\n\tconst { Repo } = await import('../repo')\n\tconst { Schema } = await import('../../schema')\n\n\tdescribe('repo preload resolution', () => {\n\t\tlet userCounter = 0\n\t\tlet postCounter = 0\n\t\tlet profileCounter = 0\n\t\tlet orgCounter = 0\n\t\tlet aCounter = 0\n\t\tlet bCounter = 0\n\t\tlet cCounter = 0\n\t\tlet dCounter = 0\n\t\tlet eCounter = 0\n\t\tlet fCounter = 0\n\t\tlet gCounter = 0\n\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => `u${++userCounter}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => `p${++postCounter}`)\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => `pr${++profileCounter}`)\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => `o${++orgCounter}`)\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst ASchema = Schema.from('as')\n\t\t\t.pk('id', v.string(), () => `a${++aCounter}`)\n\t\t\t.build()\n\t\tconst BSchema = Schema.from('bs')\n\t\t\t.pk('id', v.string(), () => `b${++bCounter}`)\n\t\t\t.field('aId', v.string())\n\t\t\t.build()\n\t\tconst CSchema = Schema.from('cs')\n\t\t\t.pk('id', v.string(), () => `c${++cCounter}`)\n\t\t\t.field('bId', v.string())\n\t\t\t.build()\n\t\tconst DSchema = Schema.from('ds')\n\t\t\t.pk('id', v.string(), () => `d${++dCounter}`)\n\t\t\t.field('cId', v.string())\n\t\t\t.build()\n\t\tconst ESchema = Schema.from('es')\n\t\t\t.pk('id', v.string(), () => `e${++eCounter}`)\n\t\t\t.field('dId', v.string())\n\t\t\t.build()\n\t\tconst FSchema = Schema.from('fs')\n\t\t\t.pk('id', v.string(), () => `f${++fCounter}`)\n\t\t\t.field('eId', v.string())\n\t\t\t.build()\n\t\tconst GSchema = Schema.from('gs')\n\t\t\t.pk('id', v.string(), () => `g${++gCounter}`)\n\t\t\t.field('fId', v.string())\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema)\n\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t.build()\n\n\t\tconst PostRels = Relations.from(PostSchema)\n\t\t\t.belongsTo('author', PostSchema.fields.userId, UserSchema)\n\t\t\t.build()\n\n\t\tconst ARels = Relations.from(ASchema).hasMany('bs', BSchema.fields.aId).build()\n\t\tconst BRels = Relations.from(BSchema).hasMany('cs', CSchema.fields.bId).build()\n\t\tconst CRels = Relations.from(CSchema).hasMany('ds', DSchema.fields.cId).build()\n\t\tconst DRels = Relations.from(DSchema).hasMany('es', ESchema.fields.dId).build()\n\t\tconst ERels = Relations.from(ESchema).hasMany('fs', FSchema.fields.eId).build()\n\t\tconst FRels = Relations.from(FSchema).hasMany('gs', GSchema.fields.fId).build()\n\n\t\tfunction makeRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t}\n\n\t\tasync function expectPreloadQueryShapeError(read: Promise<unknown>, cause: RegExp) {\n\t\t\ttry {\n\t\t\t\tawait read\n\t\t\t\texpect.unreachable('preload query-shape validation should have failed')\n\t\t\t} catch (error) {\n\t\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = error as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('query-shape')\n\t\t\t\texpect(err.failures.some((failure) => cause.test(String(failure.cause)))).toBe(true)\n\t\t\t}\n\t\t}\n\n\t\ttest('hasMany preload resolves related entities', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'u@test.com', name: 'User' })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Post 1', userId: user.id })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Post 2', userId: user.id })\n\n\t\t\tconst users = await Repo.on(UserSchema).all().preload([UserRels.posts]).find()\n\t\t\texpect(users[0].posts).toHaveLength(2)\n\t\t})\n\n\t\ttest('hasOne and belongsTo preloads resolve null and non-null branches', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'x@test.com', name: 'X' })\n\t\t\tawait Repo.on(ProfileSchema).one().create({ bio: 'Hello', userId: user.id })\n\n\t\t\tconst users = await Repo.on(UserSchema).all().preload([UserRels.profile]).find()\n\t\t\texpect(users[0].profile?.bio).toBe('Hello')\n\n\t\t\tconst usersWithoutOrg = await Repo.on(UserSchema).all().preload([UserRels.org]).find()\n\t\t\texpect(usersWithoutOrg[0].org).toBeNull()\n\t\t})\n\n\t\ttest('nested preload resolves recursively', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'nested@test.com', name: 'Nested User' })\n\t\t\tawait Repo.on(ProfileSchema).one().create({ bio: 'Hello nested', userId: user.id })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Nested Post', userId: user.id })\n\n\t\t\tconst users = await Repo.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.preload([\n\t\t\t\t\t{\n\t\t\t\t\t\tdef: UserRels.posts,\n\t\t\t\t\t\tpreloads: [{ def: PostRels.author, preloads: [UserRels.profile] }],\n\t\t\t\t\t},\n\t\t\t\t])\n\t\t\t\t.find()\n\n\t\t\tconst author = users[0].posts[0].author\n\t\t\tconst profile = author?.profile\n\t\t\texpect(author?.id).toBe(user.id)\n\t\t\texpect(profile?.bio).toBe('Hello nested')\n\t\t})\n\n\t\ttest('cycle detection throws descriptive error', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'cycle@test.com', name: 'Cycle User' })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Cycle Post', userId: user.id })\n\n\t\t\tawait expectPreloadQueryShapeError(\n\t\t\t\tRepo.on(UserSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.preload([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdef: UserRels.posts,\n\t\t\t\t\t\t\tpreloads: [{ def: PostRels.author, preloads: [UserRels.posts] }],\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t\t.find(),\n\t\t\t\t/Preload cycle detected/,\n\t\t\t)\n\t\t})\n\n\t\ttest('depth limit throws when chain exceeds max depth', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst a = await Repo.on(ASchema).one().create({})\n\t\t\tconst b = await Repo.on(BSchema).one().create({ aId: a.id })\n\t\t\tconst c = await Repo.on(CSchema).one().create({ bId: b.id })\n\t\t\tconst d = await Repo.on(DSchema).one().create({ cId: c.id })\n\t\t\tconst e = await Repo.on(ESchema).one().create({ dId: d.id })\n\t\t\tconst f = await Repo.on(FSchema).one().create({ eId: e.id })\n\t\t\tawait Repo.on(GSchema).one().create({ fId: f.id })\n\n\t\t\tawait expectPreloadQueryShapeError(\n\t\t\t\tRepo.on(ASchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.preload([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdef: ARels.bs,\n\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tdef: BRels.cs,\n\t\t\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tdef: CRels.ds,\n\t\t\t\t\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tdef: DRels.es,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreloads: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdef: ERels.fs,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpreloads: [FRels.gs],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t\t.find(),\n\t\t\t\t/Preload depth exceeded/,\n\t\t\t)\n\t\t})\n\n\t\ttest('invalid nested preload definition throws a validation error', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tawait Repo.on(UserSchema).one().create({ email: 'u@test.com', name: 'User' })\n\n\t\t\tawait expectPreloadQueryShapeError(\n\t\t\t\tRepo.on(UserSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.preload([{ def: {} as any }])\n\t\t\t\t\t.find(),\n\t\t\t\t/Invalid preload definition/,\n\t\t\t)\n\t\t})\n\n\t\ttest('findOne with preloads resolves relations', async () => {\n\t\t\tconst Repo = makeRepo()\n\t\t\tconst user = await Repo.on(UserSchema).one().create({ email: 'u@test.com', name: 'User' })\n\t\t\tawait Repo.on(PostSchema).one().create({ title: 'Post', userId: user.id })\n\n\t\t\tconst found = await Repo.on(UserSchema).one().id(user.id).preload([UserRels.posts]).find()\n\t\t\texpect(found?.posts).toHaveLength(1)\n\t\t})\n\n\t\ttest('N+1 avoidance: N parents + children loaded in 2 queries, not N+1', async () => {\n\t\t\tconst { vi } = await import('vitest')\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tlet queryCount = 0\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((schema: any, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (...args: any[]) => {\n\t\t\t\t\t\tqueryCount++\n\t\t\t\t\t\treturn use.findMany(...(args as [any, any]))\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\tconst u1 = await repo.on(UserSchema).one().create({ email: 'a@test.com', name: 'A' })\n\t\t\tconst u2 = await repo.on(UserSchema).one().create({ email: 'b@test.com', name: 'B' })\n\t\t\tconst u3 = await repo.on(UserSchema).one().create({ email: 'c@test.com', name: 'C' })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P1', userId: u1.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P2', userId: u1.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P3', userId: u2.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'P4', userId: u3.id })\n\n\t\t\tqueryCount = 0\n\t\t\tconst users = await repo.on(UserSchema).all().preload([UserRels.posts]).find()\n\n\t\t\texpect(users).toHaveLength(3)\n\t\t\texpect(users.find((u) => u.id === u1.id)!.posts).toHaveLength(2)\n\t\t\texpect(users.find((u) => u.id === u2.id)!.posts).toHaveLength(1)\n\t\t\texpect(users.find((u) => u.id === u3.id)!.posts).toHaveLength(1)\n\t\t\texpect(queryCount).toBe(2)\n\t\t})\n\t})\n}\n","import type { InferRawArgs, InferRawReturn } from '../adapter'\nimport type { OrmUse } from '../adapters/base'\nimport { OrmNotFoundError, type OrmNotFoundOperation } from '../errors'\nimport { toFieldName, type AnyField, type Field } from '../fields'\nimport { FilterGroup, type FilterFactory } from '../filter'\nimport type { AggregateSpec } from '../orm-adapter'\nimport { OrderBy, type IterationOptions } from '../query-options'\nimport type { AnyPreloadDef } from '../relations'\nimport type { AnySchema, SchemaOutput } from '../schema'\nimport type { SchemaCreateInput, SchemaUpdateInput } from '../schema-validations'\nimport { applyComputedSelection, planSelection } from './internals/computeds'\nimport {\n\trunAggregate,\n\trunAllCount,\n\trunAllCreate,\n\trunAllDelete,\n\trunAllIterate,\n\trunAllPaginate,\n\trunAllRead,\n\trunAllUpdate,\n\trunOneCreate,\n\trunOneDelete,\n\trunOneRead,\n\trunOneUpdate,\n\trunOneUpsert,\n} from './internals/executors'\nimport { resolvePreloads } from './internals/preloads'\nimport type { ReadLimitSource, ReadOffsetSource } from './internals/query-shape'\nimport type { Paginated, SelectedWithPreloads } from './internals/types'\n\nexport type { Paginated }\n\ntype MaybeNull<T, Req extends boolean> = Req extends true ? T : T | null\ntype SchemaPrimaryKeyValue<S extends AnySchema> = SchemaOutput<S>[S['pkField']['name'] & keyof SchemaOutput<S>]\nexport type UpsertInput<S extends AnySchema> = { create: SchemaCreateInput<S> } | { create: SchemaCreateInput<S>; update: SchemaUpdateInput<S> }\ntype ReadState<Sel extends string, P extends readonly AnyPreloadDef[] = readonly AnyPreloadDef[]> = {\n\twhere?: FilterGroup\n\tselect?: readonly Sel[]\n\tpreloads?: P\n}\n\nexport type HasMethod<A, Method extends string> =\n\tMethod extends keyof A\n\t\t? A[Method] extends (...args: any) => any\n\t\t\t? true\n\t\t\t: false\n\t\t: false\n\nexport type OneBuilderSurface<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = [], Req extends boolean = false> =\n\tOneBuilder<S, A, Sel, P, Req> &\n\t(HasMethod<A, 'updateMany'> extends true ? {} : { update: never }) &\n\t(HasMethod<A, 'deleteMany'> extends true ? {} : { delete: never }) &\n\t(HasMethod<A, 'upsertOne'> extends true ? {} : { upsert: never })\n\nexport type AllBuilderSurface<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = []> =\n\tAllBuilder<S, A, Sel, P> &\n\t(HasMethod<A, 'iterateMany'> extends true ? {} : { iterate: never }) &\n\t(HasMethod<A, 'updateMany'> extends true ? {} : { update: never }) &\n\t(HasMethod<A, 'deleteMany'> extends true ? {} : { delete: never }) &\n\t(HasMethod<A, 'count'> extends true ? {} : { count: never }) &\n\t([HasMethod<A, 'findMany'>, HasMethod<A, 'count'>] extends [true, true] ? {} : { paginate: never })\n\ntype HasNonEmptyAggregateOps<A> = A extends { aggregateOps: readonly [any, ...any[]] } ? true : false\n\nexport type SchemaRefSurface<S extends AnySchema, A = unknown> =\n\tOmit<SchemaRef<S, A>, 'raw' | 'aggregate'> &\n\t(HasMethod<A, 'raw'> extends true\n\t\t? { raw: <T = InferRawReturn<A>>(...args: InferRawArgs<A>) => Promise<T> }\n\t\t: { raw: never }) &\n\t([HasMethod<A, 'aggregate'>, HasNonEmptyAggregateOps<A>] extends [true, true]\n\t\t? { aggregate: SchemaRef<S, A>['aggregate'] }\n\t\t: { aggregate: never })\n\ntype ReadBuilderFor<TBuilder, S extends AnySchema, A, Sel extends string, P extends readonly AnyPreloadDef[]> = TBuilder extends {\n\t_builderKind: 'one'\n\t_req: infer Req extends boolean\n}\n\t? OneBuilderSurface<S, A, Sel, P, Req>\n\t: TBuilder extends { _builderKind: 'all' }\n\t\t? AllBuilderSurface<S, A, Sel, P>\n\t\t: never\n\nexport class SchemaContext<S extends AnySchema> {\n\tconstructor(\n\t\treadonly schema: S,\n\t\tprivate readonly getUse: (target: AnySchema) => OrmUse,\n\t) {}\n\n\tasync shapeRows<Sel extends string, P extends readonly AnyPreloadDef[]>(\n\t\tselect: readonly Sel[] | undefined,\n\t\tpreloads: P,\n\t\trows: Record<string, unknown>[],\n\t): Promise<SelectedWithPreloads<S, Sel, P>[]> {\n\t\tconst plan = planSelection(this.schema, select)\n\t\tconst selected = applyComputedSelection(this.schema, rows, plan)\n\t\tif (preloads.length === 0) return selected as SelectedWithPreloads<S, Sel, P>[]\n\t\treturn (await resolvePreloads(selected, preloads, this.getUse)) as SelectedWithPreloads<S, Sel, P>[]\n\t}\n\n\tasync shapeOneRow<Sel extends string, P extends readonly AnyPreloadDef[]>(\n\t\tselect: readonly Sel[] | undefined,\n\t\tpreloads: P,\n\t\trow: Record<string, unknown> | null,\n\t): Promise<SelectedWithPreloads<S, Sel, P> | null> {\n\t\tif (!row) return null\n\t\tconst [resolved] = await this.shapeRows(select, preloads, [row])\n\t\treturn resolved ?? null\n\t}\n\n\tget use() {\n\t\treturn this.getUse(this.schema)\n\t}\n}\n\nabstract class ReadSelectState<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = []> {\n\tprotected readonly _context: SchemaContext<S>\n\tprotected _where: FilterGroup\n\tprotected _select: readonly Sel[] | undefined\n\tprotected _preloads: P\n\n\tconstructor(context: SchemaContext<S>, state?: ReadState<Sel, P>) {\n\t\tthis._context = context\n\t\tthis._where = state?.where ? state.where.clone() : FilterGroup.create()\n\t\tthis._select = state?.select\n\t\tthis._preloads = state?.preloads ?? ([] as unknown as P)\n\t}\n\n\twhere(factory: FilterFactory): this {\n\t\tconst nextGroup = factory(this._where.clone())\n\t\treturn this._clone<Sel, P>({\n\t\t\twhere: nextGroup,\n\t\t\tselect: this._select as readonly Sel[] | undefined,\n\t\t\tpreloads: this._preloads,\n\t\t}) as unknown as this\n\t}\n\n\tselect<NewSel extends keyof SchemaOutput<S> & string>(fields: readonly NewSel[]): ReadBuilderFor<this, S, A, NewSel, P> {\n\t\treturn this._clone<NewSel, P>({ select: fields })\n\t}\n\n\tpreload<NewP extends readonly AnyPreloadDef[]>(defs: NewP): ReadBuilderFor<this, S, A, Sel, NewP> {\n\t\treturn this._clone<Sel, NewP>({ preloads: defs })\n\t}\n\n\tprotected _readState<NewSel extends string = Sel, NewP extends readonly AnyPreloadDef[] = P>(\n\t\tnext: ReadState<NewSel, NewP> = {} as ReadState<NewSel, NewP>,\n\t): ReadState<NewSel, NewP> {\n\t\treturn {\n\t\t\twhere: next.where ?? this._where.clone(),\n\t\t\tselect: next.select ?? (this._select as unknown as NewSel[]),\n\t\t\tpreloads: next.preloads ?? ([...this._preloads] as unknown as NewP),\n\t\t}\n\t}\n\n\tprotected abstract _clone<NewSel extends string, NewP extends readonly AnyPreloadDef[]>(\n\t\t_next: ReadState<NewSel, NewP>,\n\t): ReadBuilderFor<this, S, A, NewSel, NewP>\n}\n\nexport class SchemaRef<S extends AnySchema, A = unknown> {\n\treadonly #context: SchemaContext<S>\n\n\tconstructor(context: SchemaContext<S>) {\n\t\tthis.#context = context\n\t}\n\n\tone(): OneBuilderSurface<S, A, never, []> {\n\t\treturn new OneBuilder<S, A, never, []>(this.#context) as OneBuilderSurface<S, A, never, []>\n\t}\n\n\tall(): AllBuilderSurface<S, A, never, []> {\n\t\treturn new AllBuilder<S, A, never, []>(this.#context) as AllBuilderSurface<S, A, never, []>\n\t}\n\n\taggregate(): AggregateBuilder<S, A, {}, {}, false, false, false> {\n\t\treturn new AggregateBuilder<S, A, {}, {}, false, false, false>(this.#context)\n\t}\n\n\traw(...args: any[]) {\n\t\treturn this.#context.use.raw(...args)\n\t}\n}\n\nexport class OneBuilder<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = [], Req extends boolean = false> extends ReadSelectState<S, A, Sel, P> {\n\tdeclare readonly _builderKind: 'one'\n\tdeclare readonly _req: Req\n\n\tprotected _required: boolean\n\tprotected _requiredMessage: string | undefined\n\n\tconstructor(context: SchemaContext<S>, state?: ReadState<Sel, P>, reqState?: { required: boolean; message?: string }) {\n\t\tsuper(context, state)\n\t\tthis._required = reqState?.required ?? false\n\t\tthis._requiredMessage = reqState?.message\n\t}\n\n\tid(value: SchemaPrimaryKeyValue<S>): this {\n\t\tconst nextGroup = this._where.clone().eq(this._context.schema.pkField, value)\n\t\treturn this._clone<Sel, P>({\n\t\t\twhere: nextGroup,\n\t\t\tselect: this._select as readonly Sel[] | undefined,\n\t\t\tpreloads: this._preloads,\n\t\t}) as this\n\t}\n\n\trequired(this: OneBuilder<S, A, Sel, P, false>, message?: string): OneBuilderSurface<S, A, Sel, P, true> {\n\t\treturn new OneBuilder<S, A, Sel, P, true>(this._context, this._readState(), { required: true, message }) as OneBuilderSurface<S, A, Sel, P, true>\n\t}\n\n\tprivate _assertFound(result: unknown, operation: OrmNotFoundOperation): void {\n\t\tif (this._required && result === null) {\n\t\t\tthrow new OrmNotFoundError({ schema: this._context.schema.name, operation, where: this._where, message: this._requiredMessage })\n\t\t}\n\t}\n\n\tprotected _clone<NewSel extends string, NewP extends readonly AnyPreloadDef[]>(next: ReadState<NewSel, NewP>) {\n\t\treturn new OneBuilder<S, A, NewSel, NewP, Req>(this._context, this._readState(next), { required: this._required, message: this._requiredMessage }) as any\n\t}\n\n\tcreate(data: SchemaCreateInput<S>) {\n\t\treturn runOneCreate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tasync update(data: SchemaUpdateInput<S>): Promise<MaybeNull<SelectedWithPreloads<S, Sel, P>, Req>> {\n\t\tconst result = await runOneUpdate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\twhere: this._where,\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t\tthis._assertFound(result, 'updateOne')\n\t\treturn result as any\n\t}\n\n\tupsert(data: UpsertInput<S>) {\n\t\treturn runOneUpsert(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\twhere: this._where,\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tasync delete(): Promise<MaybeNull<SelectedWithPreloads<S, Sel, P>, Req>> {\n\t\tconst result = await runOneDelete(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t})\n\t\tthis._assertFound(result, 'deleteOne')\n\t\treturn result as any\n\t}\n\n\tasync find(): Promise<MaybeNull<SelectedWithPreloads<S, Sel, P>, Req>> {\n\t\tconst result = await runOneRead(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t})\n\t\tthis._assertFound(result, 'findOne')\n\t\treturn result as any\n\t}\n}\n\nexport class AllBuilder<S extends AnySchema, A = unknown, Sel extends string = never, P extends readonly AnyPreloadDef[] = []> extends ReadSelectState<S, A, Sel, P> {\n\tdeclare readonly _builderKind: 'all'\n\n\t#orderBy: OrderBy[]\n\t#limitSource: ReadLimitSource | undefined\n\t#offsetSource: ReadOffsetSource | undefined\n\n\tconstructor(\n\t\tcontext: SchemaContext<S>,\n\t\tstate?: ReadState<Sel, P>,\n\t\tqueryState?: { orderBy?: OrderBy[]; limitSource?: ReadLimitSource; offsetSource?: ReadOffsetSource },\n\t) {\n\t\tsuper(context, state)\n\t\tthis.#orderBy = queryState?.orderBy ?? []\n\t\tthis.#limitSource = queryState?.limitSource\n\t\tthis.#offsetSource = queryState?.offsetSource\n\t}\n\n\t#withQuery(queryOverride: Partial<{ orderBy: OrderBy[]; limitSource: ReadLimitSource; offsetSource: ReadOffsetSource }>) {\n\t\tconst has = (key: keyof typeof queryOverride) => Object.prototype.hasOwnProperty.call(queryOverride, key)\n\t\treturn new AllBuilder<S, A, Sel, P>(\n\t\t\tthis._context,\n\t\t\tthis._readState(),\n\t\t\t{\n\t\t\t\torderBy: has('orderBy') ? queryOverride.orderBy : [...this.#orderBy],\n\t\t\t\tlimitSource: has('limitSource') ? queryOverride.limitSource : this.#limitSource,\n\t\t\t\toffsetSource: has('offsetSource') ? queryOverride.offsetSource : this.#offsetSource,\n\t\t\t},\n\t\t) as this\n\t}\n\n\tprotected _clone<NewSel extends string, NewP extends readonly AnyPreloadDef[]>(next: ReadState<NewSel, NewP>) {\n\t\treturn new AllBuilder<S, A, NewSel, NewP>(\n\t\t\tthis._context,\n\t\t\tthis._readState({\n\t\t\t\twhere: next.where,\n\t\t\t\tselect: next.select,\n\t\t\t\tpreloads: next.preloads,\n\t\t\t}),\n\t\t\t{ orderBy: [...this.#orderBy], limitSource: this.#limitSource, offsetSource: this.#offsetSource },\n\t\t) as any\n\t}\n\n\torderBy(field: string | AnyField, direction: 'asc' | 'desc' = 'asc') {\n\t\treturn this.#withQuery({ orderBy: [...this.#orderBy, new OrderBy(field, direction)] })\n\t}\n\n\tlimit(limit: number) {\n\t\treturn this.#withQuery({ limitSource: { value: limit } })\n\t}\n\n\toffset(offset: number) {\n\t\treturn this.#withQuery({ offsetSource: { kind: 'offset', value: offset } })\n\t}\n\n\tpage(page: number) {\n\t\treturn this.#withQuery({ offsetSource: { kind: 'page', value: page } })\n\t}\n\n\tcreate(data: SchemaCreateInput<S>[]) {\n\t\treturn runAllCreate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tupdate(data: SchemaUpdateInput<S>) {\n\t\treturn runAllUpdate(\n\t\t\tthis._context,\n\t\t\t{\n\t\t\t\twhere: this._where,\n\t\t\t\tselect: this._select,\n\t\t\t\tpreloads: this._preloads,\n\t\t\t},\n\t\t\tdata,\n\t\t)\n\t}\n\n\tdelete() {\n\t\treturn runAllDelete(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t})\n\t}\n\n\tfind() {\n\t\treturn runAllRead(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t\torderBy: this.#orderBy,\n\t\t\tlimitSource: this.#limitSource,\n\t\t\toffsetSource: this.#offsetSource,\n\t\t})\n\t}\n\n\tcount() {\n\t\treturn runAllCount(this._context, { where: this._where })\n\t}\n\n\tpaginate(): Promise<Paginated<SelectedWithPreloads<S, Sel, P>>> {\n\t\treturn runAllPaginate(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t\torderBy: this.#orderBy,\n\t\t\tlimitSource: this.#limitSource,\n\t\t\toffsetSource: this.#offsetSource,\n\t\t})\n\t}\n\n\titerate(options?: IterationOptions) {\n\t\treturn runAllIterate(this._context, {\n\t\t\twhere: this._where,\n\t\t\tselect: this._select,\n\t\t\tpreloads: this._preloads,\n\t\t\torderBy: this.#orderBy,\n\t\t\tlimitSource: this.#limitSource,\n\t\t\toffsetSource: this.#offsetSource,\n\t\t}, options)\n\t}\n}\n\ntype AggregateEntry = AggregateSpec['aggregates'][number]\n\ntype FieldsToGroupKeys<F extends readonly AnyField[]> = {\n\t[E in F[number] as E extends Field<any, infer N> ? N : never]: E extends Field<infer V> ? V : never\n}\n\nexport class AggregateBuilder<\n\tS extends AnySchema,\n\tA = unknown,\n\tAggs = {},\n\tGroupKeys = {},\n\tHasGroupBy extends boolean = false,\n\tHasWhere extends boolean = false,\n\tHasHaving extends boolean = false,\n> {\n\treadonly #context: SchemaContext<S>\n\treadonly #where: FilterGroup\n\treadonly #having: FilterGroup\n\treadonly #aggregates: readonly AggregateEntry[]\n\treadonly #groupBy: readonly string[]\n\n\tconstructor(\n\t\tcontext: SchemaContext<S>,\n\t\tstate?: { where?: FilterGroup; having?: FilterGroup; aggregates?: readonly AggregateEntry[]; groupBy?: readonly string[] },\n\t) {\n\t\tthis.#context = context\n\t\tthis.#where = state?.where ? state.where.clone() : FilterGroup.create()\n\t\tthis.#having = state?.having ? state.having.clone() : FilterGroup.create()\n\t\tthis.#aggregates = state?.aggregates ?? []\n\t\tthis.#groupBy = state?.groupBy ?? []\n\t}\n\n\tget #state() {\n\t\treturn { where: this.#where, having: this.#having, aggregates: this.#aggregates, groupBy: this.#groupBy }\n\t}\n\n\twhere(\n\t\t...args: HasWhere extends true ? [never] : [factory: FilterFactory]\n\t): AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, true, HasHaving> {\n\t\tconst factory = args[0] as FilterFactory\n\t\treturn new AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, true, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\twhere: factory(this.#where.clone()),\n\t\t})\n\t}\n\n\thaving(\n\t\t...args: HasHaving extends true ? [never] : [factory: FilterFactory]\n\t): AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, HasWhere, true> {\n\t\tconst factory = args[0] as FilterFactory\n\t\treturn new AggregateBuilder<S, A, Aggs, GroupKeys, HasGroupBy, HasWhere, true>(this.#context, {\n\t\t\t...this.#state,\n\t\t\thaving: factory(this.#having.clone()),\n\t\t})\n\t}\n\n\tgroupBy<F extends readonly Field<string | number | boolean | Date>[]>(\n\t\t...fields: HasGroupBy extends true ? [never] : [...F]\n\t): AggregateBuilder<S, A, Aggs, GroupKeys & FieldsToGroupKeys<F>, true, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs, GroupKeys & FieldsToGroupKeys<F>, true, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\tgroupBy: (fields as readonly AnyField[]).map((f) => toFieldName(f)),\n\t\t})\n\t}\n\n\tcount<K extends string>(\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'count', alias: alias as string }],\n\t\t})\n\t}\n\n\tcountDistinct<K extends string>(\n\t\tfield: AnyField,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'countDistinct', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tsum<K extends string>(\n\t\tfield: Field<number>,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'sum', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tavg<K extends string>(\n\t\tfield: Field<number>,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, number>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'avg', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tmin<F extends Field<number | string | Date>, K extends string>(\n\t\tfield: F,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'min', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tmax<F extends Field<number | string | Date>, K extends string>(\n\t\tfield: F,\n\t\t...[alias]: K extends keyof Aggs ? [never] : [alias: K]\n\t): AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving> {\n\t\treturn new AggregateBuilder<S, A, Aggs & Record<K, F extends Field<infer V> ? V : never>, GroupKeys, HasGroupBy, HasWhere, HasHaving>(this.#context, {\n\t\t\t...this.#state,\n\t\t\taggregates: [...this.#aggregates, { fn: 'max', field: toFieldName(field), alias: alias as string }],\n\t\t})\n\t}\n\n\tasync run(\n\t\t..._: [keyof Aggs] extends [never] ? [never] : []\n\t): Promise<HasGroupBy extends true ? (Aggs & GroupKeys)[] : Aggs> {\n\t\tconst spec: AggregateSpec = {\n\t\t\taggregates: this.#aggregates,\n\t\t\tgroupBy: this.#groupBy,\n\t\t}\n\t\tif (this.#where.children.length > 0) {\n\t\t\tspec.where = this.#where\n\t\t}\n\t\tif (this.#having.children.length > 0) {\n\t\t\tspec.having = this.#having\n\t\t}\n\t\tconst rows = await runAggregate(this.#context, spec)\n\t\tif (this.#groupBy.length > 0) {\n\t\t\treturn rows as any\n\t\t}\n\t\treturn rows[0] as any\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, beforeEach, vi } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Instance } = await import('../../instance')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { OrmValidationError } = await import('../errors')\n\tconst { OrmAdapter } = await import('../orm-adapter')\n\tconst { Relations } = await import('../relations')\n\tconst { Repo } = await import('./repo')\n\tconst { Schema } = await import('../schema')\n\n\tdescribe('builders', () => {\n\t\tlet repo: any\n\t\tbeforeEach(() => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\trepo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t})\n\n\t\ttest('update() executes and returns updated row', async () => {\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'up@test.com', name: 'Before' })\n\t\t\tconst updated = await repo.on(UserSchema).one().id(created.id).update({ name: 'After' })\n\t\t\texpect(updated?.name).toBe('After')\n\t\t\tconst found = await repo.on(UserSchema).one().id(created.id).find()\n\t\t\texpect(found?.name).toBe('After')\n\t\t})\n\n\t\ttest('find() returns rows', async () => {\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@x.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@x.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst rows = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.or([(g) => g.eq('name', 'Alice'), (g) => g.eq('name', 'Bob')]))\n\t\t\t\t.find()\n\t\t\texpect(rows).toHaveLength(2)\n\t\t})\n\n\t\ttest('write branches do not leak filters', async () => {\n\t\t\tconst UserSchema = Schema.from('users')\n\t\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t\t.field('email', v.string())\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'alice@x.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'bob@x.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst base = repo.on(UserSchema).all()\n\t\t\tawait base.where((q) => q.eq('name', 'Alice')).update({ name: 'A Updated' })\n\t\t\tawait base.where((q) => q.eq('name', 'Bob')).update({ name: 'B Updated' })\n\n\t\t\tconst all = await repo.on(UserSchema).all().orderBy('name', 'asc').find()\n\t\t\texpect(all.map((r) => r.name)).toEqual(['A Updated', 'B Updated'])\n\t\t})\n\t})\n\n\tdescribe('.required() modifier', () => {\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => `u-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tlet repo: any\n\t\tbeforeEach(() => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\trepo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t})\n\n\t\tdescribe('type narrowing', () => {\n\t\t\ttype IsExact<A, B> = [A] extends [B] ? ([B] extends [A] ? true : false) : false\n\t\t\ttype TestA = { findOne: (...a: any[]) => any; createOne: (...a: any[]) => any; createMany: (...a: any[]) => any; updateMany: (...a: any[]) => any; deleteMany: (...a: any[]) => any; upsertOne: (...a: any[]) => any; findMany: (...a: any[]) => any; deleteOne: (...a: any[]) => any; updateOne: (...a: any[]) => any }\n\t\t\ttype S = typeof UserSchema\n\t\t\ttype Result = import('./internals/types').SelectedWithPreloads<S, never, []>\n\t\t\ttype NameOnly = import('./internals/types').SelectedWithPreloads<S, 'name', []>\n\n\t\t\ttest('find() returns T | null without .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], false>['find']>\n\t\t\t\tconst _: IsExact<R, Promise<Result | null>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('find() returns T with .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['find']>\n\t\t\t\tconst _: IsExact<R, Promise<Result>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('update() returns T with .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['update']>\n\t\t\t\tconst _: IsExact<R, Promise<Result>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('delete() returns T with .required()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['delete']>\n\t\t\t\tconst _: IsExact<R, Promise<Result>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('create() return type unchanged regardless of Req', () => {\n\t\t\t\ttype WithReq = ReturnType<OneBuilderSurface<S, TestA, never, [], true>['create']>\n\t\t\t\ttype WithoutReq = ReturnType<OneBuilderSurface<S, TestA, never, [], false>['create']>\n\t\t\t\tconst _: IsExact<WithReq, WithoutReq> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('.required() preserves Req through select()', () => {\n\t\t\t\ttype R = ReturnType<OneBuilderSurface<S, TestA, 'name', [], true>['find']>\n\t\t\t\tconst _: IsExact<R, Promise<NameOnly>> = true\n\t\t\t\tvoid _\n\t\t\t})\n\n\t\t\ttest('.required() once-per-step: Req=true surface has uncallable required()', () => {\n\t\t\t\ttype ReqBuilder = OneBuilderSurface<S, TestA, never, [], true>\n\t\t\t\ttype RequiredMethod = ReqBuilder['required']\n\t\t\t\ttype ThisParam = ThisParameterType<RequiredMethod>\n\t\t\t\ttype _check = ThisParam extends OneBuilder<S, TestA, never, [], false> ? true : false\n\t\t\t\tconst _: _check = true\n\t\t\t\tvoid _\n\t\t\t})\n\t\t})\n\n\t\tdescribe('runtime throw behaviour', () => {\n\t\t\ttest('.required().find() throws OrmNotFoundError when no row matched', async () => {\n\t\t\t\tawait expect(\n\t\t\t\t\trepo.on(UserSchema).one().required().id('nonexistent').find(),\n\t\t\t\t).rejects.toThrow(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('.required().update() throws OrmNotFoundError when no row matched', async () => {\n\t\t\t\tawait expect(\n\t\t\t\t\trepo.on(UserSchema).one().required().id('nonexistent').update({ name: 'X' }),\n\t\t\t\t).rejects.toThrow(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('.required().delete() throws OrmNotFoundError when no row matched', async () => {\n\t\t\t\tawait expect(\n\t\t\t\t\trepo.on(UserSchema).one().required().id('nonexistent').delete(),\n\t\t\t\t).rejects.toThrow(OrmNotFoundError)\n\t\t\t})\n\n\t\t\ttest('thrown error carries schema, operation, and where', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').find()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect(e).toBeInstanceOf(OrmNotFoundError)\n\t\t\t\t\tconst err = e as InstanceType<typeof OrmNotFoundError>\n\t\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\t\texpect(err.operation).toBe('findOne')\n\t\t\t\t\texpect(err.where).toBeInstanceOf(FilterGroup)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('update throws with operation updateOne', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').update({ name: 'X' })\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).operation).toBe('updateOne')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('delete throws with operation deleteOne', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').delete()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).operation).toBe('deleteOne')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('no throw when row exists', () => {\n\t\t\ttest('.required().find() returns the row when found', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'A' })\n\t\t\t\tconst found = await repo.on(UserSchema).one().required().id(created.id).find()\n\t\t\t\texpect(found.name).toBe('A')\n\t\t\t})\n\n\t\t\ttest('.required().update() returns the updated row', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'A' })\n\t\t\t\tconst updated = await repo.on(UserSchema).one().required().id(created.id).update({ name: 'B' })\n\t\t\t\texpect(updated.name).toBe('B')\n\t\t\t})\n\n\t\t\ttest('.required().delete() returns the deleted row', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'A' })\n\t\t\t\tconst deleted = await repo.on(UserSchema).one().required().id(created.id).delete()\n\t\t\t\texpect(deleted.name).toBe('A')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('custom message', () => {\n\t\t\ttest('.required(message) uses custom message on throw', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required('user must exist').id('u-abc').find()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).message).toBe('user must exist')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('default message for PK-keyed chain', async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().required().id('u-abc').find()\n\t\t\t\t\texpect.unreachable('should have thrown')\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as any).message).toBe('users.findOne: no row matched id=u-abc')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('default behaviour preserved', () => {\n\t\t\ttest('find() returns null without .required()', async () => {\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').find()\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\n\t\t\ttest('update() returns null without .required()', async () => {\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').update({ name: 'X' })\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\n\t\t\ttest('delete() returns null without .required()', async () => {\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').delete()\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\t\t})\n\n\t\tdescribe('runtime no-op for create/upsert', () => {\n\t\t\ttest('.required() before create() returns the created row', async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().required().create({ email: 'x@y.com', name: 'X' })\n\t\t\t\texpect(created.email).toBe('x@y.com')\n\t\t\t\texpect(created.name).toBe('X')\n\t\t\t})\n\n\t\t\ttest('.required() before upsert() returns the upserted row', async () => {\n\t\t\t\tconst upserted = await repo\n\t\t\t\t\t.on(UserSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.required()\n\t\t\t\t\t.where((q: any) => q.eq('email', 'x@y.com'))\n\t\t\t\t\t.upsert({ create: { email: 'x@y.com', name: 'X' } })\n\t\t\t\texpect(upserted.email).toBe('x@y.com')\n\t\t\t\texpect(upserted.name).toBe('X')\n\t\t\t})\n\t\t})\n\t})\n\n\tdescribe('read query-shape validation and page state', () => {\n\t\tlet itemCounter = 0\n\t\tlet userCounter = 0\n\t\tlet postCounter = 0\n\n\t\tconst ItemSchema = Schema.from('paged_items')\n\t\t\t.pk('id', v.string(), () => `item-${++itemCounter}`)\n\t\t\t.field('position', v.number())\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst UserSchema = Schema.from('query_shape_users')\n\t\t\t.pk('id', v.string(), () => `user-${++userCounter}`)\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('query_shape_posts')\n\t\t\t.pk('id', v.string(), () => `post-${++postCounter}`)\n\t\t\t.field('userId', v.string())\n\t\t\t.field('title', v.string())\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema).hasMany('posts', PostSchema.fields.userId).build()\n\t\tconst PostRels = Relations.from(PostSchema).belongsTo('author', PostSchema.fields.userId, UserSchema).build()\n\n\t\tfunction makeRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t}\n\n\t\tasync function seedItems(repo: any, count: number) {\n\t\t\tawait repo.on(ItemSchema).all().create(\n\t\t\t\tArray.from({ length: count }, (_, index) => ({ position: index + 1, name: `Item ${index + 1}` })),\n\t\t\t)\n\t\t}\n\n\t\tfunction expectQueryShapeError(error: unknown, field?: string) {\n\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\tconst err = error as InstanceType<typeof OrmValidationError>\n\t\t\texpect(err.kind).toBe('query-shape')\n\t\t\tif (field) expect(err.failures.some((failure) => failure.field === field)).toBe(true)\n\t\t}\n\n\t\ttest('.page(n) is 1-based offset sugar for .find()', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 10)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(3).page(2).find()\n\n\t\t\texpect(rows.map((row) => row.position)).toEqual([4, 5, 6])\n\t\t})\n\n\t\ttest('.page(2).limit(50).find() uses the final effective limit for offset', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 125)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).limit(50).find()\n\n\t\t\texpect(rows).toHaveLength(50)\n\t\t\texpect(rows[0].position).toBe(51)\n\t\t\texpect(rows.at(-1)?.position).toBe(100)\n\t\t})\n\n\t\ttest('duplicate .limit(...) calls keep last-wins behavior', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 10)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(7).limit(3).find()\n\n\t\t\texpect(rows.map((row) => row.position)).toEqual([1, 2, 3])\n\t\t})\n\n\t\ttest('.offset(...) and .page(...) are last-source-wins', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 20)\n\n\t\t\tconst offsetWins = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(5).page(2).offset(10).find()\n\t\t\tconst pageWins = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(5).offset(10).page(2).find()\n\n\t\t\texpect(offsetWins.map((row) => row.position)).toEqual([11, 12, 13, 14, 15])\n\t\t\texpect(pageWins.map((row) => row.position)).toEqual([6, 7, 8, 9, 10])\n\t\t})\n\n\t\ttest('invalid page, limit, and offset values fail as query-shape errors at find()', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\tfor (const [field, read] of [\n\t\t\t\t['page', () => repo.on(ItemSchema).all().page(0 as any).find()],\n\t\t\t\t['limit', () => repo.on(ItemSchema).all().limit(0 as any).find()],\n\t\t\t\t['limit', () => repo.on(ItemSchema).all().limit(undefined as any).page(2).find()],\n\t\t\t\t['offset', () => repo.on(ItemSchema).all().offset(-1 as any).find()],\n\t\t\t] as const) {\n\t\t\t\ttry {\n\t\t\t\t\tawait read()\n\t\t\t\t\texpect.unreachable(`${field} should have failed`)\n\t\t\t\t} catch (error) {\n\t\t\t\t\texpectQueryShapeError(error, field)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\ttest('unknown selected fields fail as query-shape errors on find reads before rows are loaded', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\ttry {\n\t\t\t\tawait repo.on(ItemSchema).one().select(['unknownField' as any]).find()\n\t\t\t\texpect.unreachable('one().find() should have failed')\n\t\t\t} catch (error) {\n\t\t\t\texpectQueryShapeError(error, 'unknownField')\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait repo.on(ItemSchema).all().select(['unknownField' as any]).find()\n\t\t\t\texpect.unreachable('all().find() should have failed')\n\t\t\t} catch (error) {\n\t\t\t\texpectQueryShapeError(error, 'unknownField')\n\t\t\t}\n\t\t})\n\n\t\ttest('invalid and coherency-broken preload definitions fail as query-shape errors on find reads', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\tfor (const read of [\n\t\t\t\t() => repo.on(UserSchema).all().preload([{ def: {} as any }]).find(),\n\t\t\t\t() => repo.on(UserSchema).all().preload([PostRels.author]).find(),\n\t\t\t\t() => repo.on(UserSchema).all().preload([{ def: UserRels.posts, preloads: [UserRels.posts] }]).find(),\n\t\t\t]) {\n\t\t\t\ttry {\n\t\t\t\t\tawait read()\n\t\t\t\t\texpect.unreachable('preload should have failed')\n\t\t\t\t} catch (error) {\n\t\t\t\t\texpectQueryShapeError(error)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\ttest('orderBy(string) remains an unvalidated raw-string escape hatch', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 2)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('missingRawSortField', 'asc').find()\n\n\t\t\texpect(rows).toHaveLength(2)\n\t\t})\n\n\t\ttest('page-based reads without an initialized Instance use default limit 100', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 250)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).find()\n\n\t\t\texpect(rows).toHaveLength(100)\n\t\t\texpect(rows[0].position).toBe(101)\n\t\t\texpect(rows.at(-1)?.position).toBe(200)\n\t\t})\n\n\t\ttest('find() without page, offset, or limit keeps existing flat-array behavior', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 12)\n\n\t\t\tconst rows = await repo.on(ItemSchema).all().orderBy('position', 'asc').find()\n\n\t\t\texpect(rows).toHaveLength(12)\n\t\t\texpect(rows.map((row) => row.position)).toEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\n\t\t})\n\n\t\ttest('.paginate() returns a first-page envelope with docs computed from filter-only count', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 5)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(2).paginate()\n\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([1, 2])\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 5, count: 2 })\n\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 3, previous: null, next: 2 })\n\t\t})\n\n\t\ttest('.paginate() reports pages.last = 1 for empty result sets', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 3)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().where((q) => q.eq('name', 'missing')).limit(5).paginate()\n\n\t\t\texpect(page.items).toEqual([])\n\t\t\texpect(page.docs).toEqual({ limit: 5, total: 0, count: 0 })\n\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 1, previous: null, next: null })\n\t\t})\n\n\t\ttest('.paginate() preserves the previous neighbor on the last real page', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 5)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(2).page(3).paginate()\n\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([5])\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 5, count: 1 })\n\t\t\texpect(page.pages).toEqual({ current: 3, start: 1, last: 3, previous: 2, next: null })\n\t\t})\n\n\t\ttest('.paginate() preserves past-last page requests with no navigation neighbors', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 5)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').limit(2).page(4).paginate()\n\n\t\t\texpect(page.items).toEqual([])\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 5, count: 0 })\n\t\t\texpect(page.pages).toEqual({ current: 4, start: 1, last: 3, previous: null, next: null })\n\t\t})\n\n\t\ttest('.paginate() does not require orderBy', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 3)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().limit(2).paginate()\n\n\t\t\texpect(page.items).toHaveLength(2)\n\t\t\texpect(page.docs).toEqual({ limit: 2, total: 3, count: 2 })\n\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 2, previous: null, next: 2 })\n\t\t})\n\n\t\ttest('.paginate() without an explicit limit uses the safe default page limit without Instance.get()', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 101)\n\t\t\tconst getSpy = vi.spyOn(Instance, 'get').mockImplementation(() => {\n\t\t\t\tthrow new Error('Instance.get() should not be required for pagination defaults')\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').paginate()\n\n\t\t\t\texpect(page.items).toHaveLength(100)\n\t\t\t\texpect(page.docs).toEqual({ limit: 100, total: 101, count: 100 })\n\t\t\t\texpect(page.pages).toEqual({ current: 1, start: 1, last: 2, previous: null, next: 2 })\n\t\t\t} finally {\n\t\t\t\tgetSpy.mockRestore()\n\t\t\t}\n\t\t})\n\n\t\ttest('.paginate() counts only the filter while page items honor limit and offset', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(ItemSchema).all().create([\n\t\t\t\t{ position: 1, name: 'keep' },\n\t\t\t\t{ position: 2, name: 'drop' },\n\t\t\t\t{ position: 3, name: 'keep' },\n\t\t\t\t{ position: 4, name: 'keep' },\n\t\t\t])\n\n\t\t\tconst page = await repo\n\t\t\t\t.on(ItemSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'keep'))\n\t\t\t\t.orderBy('position', 'asc')\n\t\t\t\t.limit(1)\n\t\t\t\t.page(2)\n\t\t\t\t.paginate()\n\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([3])\n\t\t\texpect(page.docs).toEqual({ limit: 1, total: 3, count: 1 })\n\t\t\texpect(page.pages).toEqual({ current: 2, start: 1, last: 3, previous: 1, next: 3 })\n\t\t})\n\n\t\ttest('.paginate() starts item and count reads in parallel after query-shape validation and config resolution', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\tconst events: string[] = []\n\t\t\t;(adapter as any).use = vi.fn((schema: AnySchema, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (...args: any[]) => {\n\t\t\t\t\t\tevents.push('findMany:start')\n\t\t\t\t\t\tawait Promise.resolve()\n\t\t\t\t\t\tevents.push('findMany:end')\n\t\t\t\t\t\treturn use.findMany(...(args as [any, any]))\n\t\t\t\t\t},\n\t\t\t\t\tcount: async (...args: any[]) => {\n\t\t\t\t\t\tevents.push('count:start')\n\t\t\t\t\t\tawait Promise.resolve()\n\t\t\t\t\t\tevents.push('count:end')\n\t\t\t\t\t\treturn use.count(...(args as [any]))\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => {\n\t\t\t\t\tevents.push('resolve')\n\t\t\t\t\treturn { table: s.name }\n\t\t\t\t})\n\t\t\t\t.build()\n\t\t\tawait seedItems(repo, 3)\n\t\t\tevents.length = 0\n\n\t\t\tconst page = await repo.on(ItemSchema).all().where((q) => q.eq('name', 'Item 1')).limit(1).paginate()\n\n\t\t\texpect(events[0]).toBe('resolve')\n\t\t\texpect(events).toContain('count:start')\n\t\t\texpect(events).toContain('findMany:end')\n\t\t\texpect(events.indexOf('count:start')).toBeLessThan(events.indexOf('findMany:end'))\n\t\t\texpect(page.items.map((row) => row.position)).toEqual([1])\n\t\t\texpect(page.docs).toEqual({ limit: 1, total: 1, count: 1 })\n\t\t})\n\n\t\ttest('.paginate() items preserve selected row shape', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 2)\n\n\t\t\tconst page = await repo.on(ItemSchema).all().orderBy('position', 'asc').select(['name']).limit(1).paginate()\n\n\t\t\texpect(page.items).toEqual([{ name: 'Item 1' }])\n\t\t\texpect(page.docs).toMatchObject({ total: 2, count: 1 })\n\t\t})\n\n\t\ttest('.paginate() items preserve preloaded row shape', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst alice = await repo.on(UserSchema).one().create({ name: 'Alice' })\n\t\t\tconst bob = await repo.on(UserSchema).one().create({ name: 'Bob' })\n\t\t\tawait repo.on(PostSchema).all().create([\n\t\t\t\t{ userId: alice.id, title: 'A1' },\n\t\t\t\t{ userId: alice.id, title: 'A2' },\n\t\t\t\t{ userId: bob.id, title: 'B1' },\n\t\t\t])\n\n\t\t\tconst page = await repo.on(UserSchema).all().orderBy('name', 'asc').preload([UserRels.posts]).limit(1).paginate()\n\n\t\t\texpect(page.items).toHaveLength(1)\n\t\t\texpect(page.items[0].name).toBe('Alice')\n\t\t\texpect(page.items[0].posts.map((post: any) => post.title)).toEqual(['A1', 'A2'])\n\t\t\texpect(page.docs).toEqual({ limit: 1, total: 2, count: 1 })\n\t\t})\n\n\t\ttest('.paginate() uses offset-source last-wins and the final effective limit', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait seedItems(repo, 10)\n\n\t\t\tconst pageSource = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).limit(3).paginate()\n\t\t\tconst offsetSource = await repo.on(ItemSchema).all().orderBy('position', 'asc').page(2).limit(2).offset(4).paginate()\n\n\t\t\texpect(pageSource.items.map((row) => row.position)).toEqual([4, 5, 6])\n\t\t\texpect(pageSource.pages.current).toBe(2)\n\t\t\texpect(pageSource.docs.limit).toBe(3)\n\t\t\texpect(offsetSource.items.map((row) => row.position)).toEqual([5, 6])\n\t\t\texpect(offsetSource.pages.current).toBe(3)\n\t\t\texpect(offsetSource.docs.limit).toBe(2)\n\t\t})\n\t})\n\n\tdescribe('type-level: paginate surface', () => {\n\t\tconst _TestSchema = Schema.from('paginate_type_users')\n\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\t\ttype S = typeof _TestSchema\n\n\t\ttest('Paginated<T> exposes pages, docs, and items', () => {\n\t\t\ttype Page = Paginated<{ id: string }>\n\t\t\texpectTypeOf<Page>().toHaveProperty('pages')\n\t\t\texpectTypeOf<Page>().toHaveProperty('docs')\n\t\t\texpectTypeOf<Page>().toHaveProperty('items')\n\t\t\texpectTypeOf<Page['items']>().toEqualTypeOf<{ id: string }[]>()\n\t\t})\n\n\t\ttest('.paginate() is a no-argument AllBuilder terminal', () => {\n\t\t\ttype Adapter = { findMany: (...a: any[]) => any; count: (...a: any[]) => any }\n\t\t\ttype All = AllBuilderSurface<S, Adapter>\n\t\t\ttype Result = import('./internals/types').SelectedWithPreloads<S, never, []>\n\n\t\t\texpectTypeOf<All['paginate']>().toBeFunction()\n\t\t\texpectTypeOf<Parameters<All['paginate']>>().toEqualTypeOf<[]>()\n\t\t\texpectTypeOf<ReturnType<All['paginate']>>().toEqualTypeOf<Promise<Paginated<Result>>>()\n\t\t})\n\n\t\ttest('.paginate() exists only on AllBuilder', () => {\n\t\t\ttype Adapter = { findMany: (...a: any[]) => any; count: (...a: any[]) => any }\n\t\t\ttype One = OneBuilderSurface<S, Adapter>\n\t\t\ttype OneHasPaginate = 'paginate' extends keyof One ? true : false\n\n\t\t\texpectTypeOf<OneHasPaginate>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.paginate() is gated on both findMany and count', () => {\n\t\t\tclass FullAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync count() { return 0 }\n\t\t\t}\n\t\t\tclass CountOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync count() { return 0 }\n\t\t\t}\n\t\t\tclass FindOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype Full = AllBuilderSurface<S, FullAdapter>\n\t\t\ttype MissingFindMany = AllBuilderSurface<S, CountOnlyAdapter>\n\t\t\ttype MissingCount = AllBuilderSurface<S, FindOnlyAdapter>\n\n\t\t\texpectTypeOf<Full['paginate']>().toBeFunction()\n\t\t\texpectTypeOf<MissingFindMany['paginate']>().toBeNever()\n\t\t\texpectTypeOf<MissingCount['paginate']>().toBeNever()\n\t\t})\n\t})\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport type { AnySchema } from '../schema'\n\nexport type ConfigTransform<C> = (config: C, schema: AnySchema) => C\n\nconst store = new AsyncLocalStorage<ConfigTransform<any>[]>()\n\nexport function run<C, T>(transform: ConfigTransform<C>, fn: () => T): T {\n\tconst current = store.getStore() ?? []\n\treturn store.run([...current, transform], fn)\n}\n\nexport function currentTransforms<C>(): ConfigTransform<C>[] {\n\treturn store.getStore() ?? []\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\ttype TestConfig = { prefix: string }\n\tconst dummySchema = { name: 'test' } as AnySchema\n\n\tfunction applyTransforms(base: TestConfig): TestConfig {\n\t\tlet config = base\n\t\tfor (const t of currentTransforms<TestConfig>()) {\n\t\t\tconfig = t(config, dummySchema)\n\t\t}\n\t\treturn config\n\t}\n\n\tdescribe('ALS runtime', () => {\n\t\ttest('reads outside run() see no transforms (default config)', () => {\n\t\t\tconst transforms = currentTransforms<TestConfig>()\n\t\t\texpect(transforms).toEqual([])\n\t\t\texpect(applyTransforms({ prefix: 'base' })).toEqual({ prefix: 'base' })\n\t\t})\n\n\t\ttest('reads inside run() see the override', () => {\n\t\t\tconst result = run<TestConfig, TestConfig>(\n\t\t\t\t(config) => ({ prefix: `scoped_${config.prefix}` }),\n\t\t\t\t() => applyTransforms({ prefix: 'base' }),\n\t\t\t)\n\t\t\texpect(result).toEqual({ prefix: 'scoped_base' })\n\t\t})\n\n\t\ttest('reads after run() returns see no transforms', () => {\n\t\t\trun<TestConfig, void>(\n\t\t\t\t(config) => ({ prefix: `inner_${config.prefix}` }),\n\t\t\t\t() => {},\n\t\t\t)\n\t\t\texpect(applyTransforms({ prefix: 'base' })).toEqual({ prefix: 'base' })\n\t\t})\n\n\t\ttest('nested run() calls compose — inner derives from outer', () => {\n\t\t\tconst result = run<TestConfig, TestConfig>(\n\t\t\t\t(config) => ({ prefix: `a_${config.prefix}` }),\n\t\t\t\t() =>\n\t\t\t\t\trun<TestConfig, TestConfig>(\n\t\t\t\t\t\t(config) => ({ prefix: `b_${config.prefix}` }),\n\t\t\t\t\t\t() => applyTransforms({ prefix: 'base' }),\n\t\t\t\t\t),\n\t\t\t)\n\t\t\texpect(result).toEqual({ prefix: 'b_a_base' })\n\t\t})\n\n\t\ttest('two parallel run() calls do not bleed into each other', async () => {\n\t\t\tconst results = await Promise.all([\n\t\t\t\trun<TestConfig, Promise<TestConfig>>(\n\t\t\t\t\t(config) => ({ prefix: `tenant1_${config.prefix}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\treturn applyTransforms({ prefix: 'base' })\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\trun<TestConfig, Promise<TestConfig>>(\n\t\t\t\t\t(config) => ({ prefix: `tenant2_${config.prefix}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\treturn applyTransforms({ prefix: 'base' })\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t])\n\n\t\t\texpect(results[0]).toEqual({ prefix: 'tenant1_base' })\n\t\t\texpect(results[1]).toEqual({ prefix: 'tenant2_base' })\n\t\t})\n\n\t\ttest('overrides survive across awaits inside fn', async () => {\n\t\t\tconst result = await run<TestConfig, Promise<TestConfig>>(\n\t\t\t\t(config) => ({ prefix: `async_${config.prefix}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 5))\n\t\t\t\t\tconst mid = applyTransforms({ prefix: 'step1' })\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 5))\n\t\t\t\t\tconst end = applyTransforms({ prefix: 'step2' })\n\t\t\t\t\treturn { prefix: `${mid.prefix}+${end.prefix}` }\n\t\t\t\t},\n\t\t\t)\n\t\t\texpect(result).toEqual({ prefix: 'async_step1+async_step2' })\n\t\t})\n\t})\n}\n","import type { Pipe } from 'valleyed'\n\nimport type { InferAdapterConfig } from '../adapter'\nimport { currentTransforms, run } from './als'\nimport { SchemaContext, SchemaRef, type HasMethod, type SchemaRefSurface } from './builders'\nimport type { OrmAdapterConfig, OrmAdapterLike } from '../adapters/base'\nimport type { IterationOptions } from '../query-options'\nimport type { AnySchema } from '../schema'\nimport { composeSchemaConfig } from '../schema-validations'\n\nexport type { ConfigTransform } from './als'\n\nexport class Repo<A extends OrmAdapterLike<any>> {\n\treadonly #adapter: A\n\treadonly #defaults: (schema: AnySchema) => InferAdapterConfig<A>\n\treadonly #schemaConfigPipe: Pipe<any, any> | undefined\n\n\tconstructor({ adapter, resolve }: { adapter: A; resolve: (schema: AnySchema) => InferAdapterConfig<A> }) {\n\t\tthis.#adapter = adapter\n\t\tthis.#defaults = resolve\n\t\tthis.#schemaConfigPipe = (adapter as any).schemaConfigPipe\n\t}\n\n\t#getConfig(s: AnySchema): InferAdapterConfig<A> {\n\t\tconst transforms = [...currentTransforms<InferAdapterConfig<A>>()]\n\t\tif (this.#schemaConfigPipe) {\n\t\t\treturn composeSchemaConfig(this.#defaults, transforms, s, this.#schemaConfigPipe) as InferAdapterConfig<A>\n\t\t}\n\t\tlet config = this.#defaults(s)\n\t\tfor (const transform of transforms) {\n\t\t\tconfig = transform(config, s)\n\t\t}\n\t\treturn config\n\t}\n\n\t#getUse(s: AnySchema) {\n\t\treturn this.#adapter.use(s, this.#getConfig(s))\n\t}\n\n\ton<S extends AnySchema>(schema: S): SchemaRefSurface<S, A> {\n\t\treturn new SchemaRef<S, A>(new SchemaContext(schema, (target) => this.#getUse(target))) as unknown as SchemaRefSurface<S, A>\n\t}\n\n\tstatic from<NewA extends OrmAdapterLike<any>>(adapter: NewA): RepoBuilder<NewA> {\n\t\treturn new RepoBuilder<NewA>(adapter)\n\t}\n\n\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\treturn this.#adapter.session?.(fn) ?? fn()\n\t}\n\n\tresolve<T>(resolver: (config: InferAdapterConfig<A>, schema: AnySchema) => InferAdapterConfig<A>, fn: () => T): T {\n\t\treturn run<InferAdapterConfig<A>, T>(resolver, fn)\n\t}\n}\n\nclass RepoBuilder<A extends OrmAdapterLike<any>> {\n\t#adapter: unknown\n\t#resolve: unknown\n\n\tconstructor(adapter?: unknown, resolve?: unknown) {\n\t\tthis.#adapter = adapter\n\t\tthis.#resolve = resolve\n\t}\n\n\tresolve(fn: (schema: AnySchema) => OrmAdapterConfig<A>): RepoBuilder<A> {\n\t\treturn new RepoBuilder<A>(this.#adapter, fn)\n\t}\n\n\tbuild(this: RepoBuilder<A>): RepoSurface<A> {\n\t\treturn new Repo<A>({\n\t\t\tadapter: this.#adapter as any,\n\t\t\tresolve: this.#resolve as any,\n\t\t}) as RepoSurface<A>\n\t}\n}\n\nexport type RepoSurface<A extends OrmAdapterLike<any>> = Repo<A> &\n\t(HasMethod<A, 'session'> extends true ? {} : { session: never })\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, vi } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { InMemoryAdapter } = await import('../adapters/in-memory')\n\tconst { OrmAdapter } = await import('../orm-adapter')\n\tconst { OrmValidationError } = await import('../errors')\n\tconst { Instance } = await import('../../instance')\n\tconst { Relations } = await import('../relations')\n\tconst { Schema } = await import('../schema')\n\n\tfunction mockInstance() {\n\t\treturn vi.spyOn(Instance, 'on').mockImplementation(() => {})\n\t}\n\n\tdescribe('Repo.from() and repo.on()', () => {\n\t\ttest('Repo.from(adapter).resolve(...).build() creates a working repo', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tconst created = await repo.on(TestSchema).one().create({ name: 'Hello' })\n\t\t\texpect(created.name).toBe('Hello')\n\t\t\tconst found = await repo.on(TestSchema).one().id(created.id).find()\n\t\t\texpect(found?.name).toBe('Hello')\n\t\t})\n\n\t\ttest('repo.on(schema) returns a SchemaRef', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tconst ref = repo.on(TestSchema)\n\t\t\texpect(ref).toBeInstanceOf(SchemaRef)\n\t\t})\n\t})\n\n\tdescribe('clone-on-step: RepoBuilder fan-out independence', () => {\n\t\ttest('.resolve() returns a new builder, not the same instance', () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst base = Repo.from(adapter)\n\t\t\tconst a = base.resolve((s) => ({ table: s.name }))\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\t})\n\n\tdescribe('repo/Repo core behavior', () => {\n\t\tlet userCounter = 0\n\t\tlet postCounter = 0\n\t\tlet profileCounter = 0\n\t\tlet orgCounter = 0\n\n\t\tconst UserSchema = Schema.from('users')\n\t\t\t.pk('id', v.string(), () => `u${++userCounter}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('orgId', v.optional(v.string()), { onCreate: () => undefined })\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.build()\n\n\t\tconst PostSchema = Schema.from('posts')\n\t\t\t.pk('id', v.string(), () => `p${++postCounter}`)\n\t\t\t.field('title', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst ProfileSchema = Schema.from('profiles')\n\t\t\t.pk('id', v.string(), () => `pr${++profileCounter}`)\n\t\t\t.field('bio', v.string())\n\t\t\t.field('userId', v.string())\n\t\t\t.build()\n\n\t\tconst OrgSchema = Schema.from('orgs')\n\t\t\t.pk('id', v.string(), () => `o${++orgCounter}`)\n\t\t\t.field('name', v.string())\n\t\t\t.build()\n\n\t\tconst PersonSchema = Schema.from('people')\n\t\t\t.pk('id', v.string(), () => `person-${++userCounter}`)\n\t\t\t.field('firstName', v.string())\n\t\t\t.field('lastName', v.string())\n\t\t\t.computed('fullName', ['firstName', 'lastName'], v.string(), ({ firstName, lastName }) => `${firstName} ${lastName}`)\n\t\t\t.build()\n\n\t\tconst UserRels = Relations.from(UserSchema)\n\t\t\t.hasMany('posts', PostSchema.fields.userId)\n\t\t\t.hasOne('profile', ProfileSchema.fields.userId)\n\t\t\t.belongsTo('org', UserSchema.fields.orgId, OrgSchema)\n\t\t\t.build()\n\n\t\tfunction makeRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('fluent builders support one/all read chains', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'fluent@test.com', name: 'Fluent User' })\n\n\t\t\tconst one = await repo.on(UserSchema).one().id(created.id).select(['id', 'name']).find()\n\t\t\texpect(one).toEqual({ id: created.id, name: 'Fluent User' })\n\n\t\t\tconst all = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('id', created.id))\n\t\t\t\t.orderBy('createdAt', 'desc')\n\t\t\t\t.limit(1)\n\t\t\t\t.select(['id'])\n\t\t\t\t.find()\n\n\t\t\texpect(all).toEqual([{ id: created.id }])\n\t\t})\n\n\t\ttest('all().count() returns filtered counts and ignores query-shape state', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'alice@count.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'bob@count.com', name: 'Bob' },\n\t\t\t\t\t{ email: 'alice2@count.com', name: 'Alice' },\n\t\t\t\t])\n\n\t\t\tconst count = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.select(['does_not_exist'] as any)\n\t\t\t\t.preload(['does_not_exist'] as any)\n\t\t\t\t.orderBy('does_not_exist')\n\t\t\t\t.limit(0)\n\t\t\t\t.page(0)\n\t\t\t\t.count()\n\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\ttest('all().count() validates only the filter', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(UserSchema).one().create({ email: 'bad-filter-count@test.com', name: 'Alice' })\n\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(UserSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.eq('does_not_exist' as any, 'x'))\n\t\t\t\t\t.select(['also_missing'] as any)\n\t\t\t\t\t.preload(['also_missing'] as any)\n\t\t\t\t\t.limit(0)\n\t\t\t\t\t.count(),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('all().count() is distinct from aggregate count', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'one@agg-count.com', name: 'Same' },\n\t\t\t\t\t{ email: 'two@agg-count.com', name: 'Same' },\n\t\t\t\t])\n\n\t\t\tconst count = await repo.on(UserSchema).all().where((q) => q.eq('name', 'Same')).count()\n\t\t\tconst aggregate = await repo.on(UserSchema).aggregate().count('total').where((q) => q.eq('name', 'Same')).run()\n\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(aggregate).toEqual({ total: 2 })\n\t\t})\n\n\t\ttest('builder snapshots are immutable across chain branches', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'alice@branch.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'bob@branch.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst base = repo.on(UserSchema).all()\n\t\t\tconst branchA = base.where((q) => q.eq('name', 'Alice')).select(['id'])\n\t\t\tconst branchB = base.where((q) => q.eq('name', 'Bob')).select(['name'])\n\n\t\t\tconst rowsA = await branchA.find()\n\t\t\tconst rowsB = await branchB.find()\n\n\t\t\texpect(rowsA).toHaveLength(1)\n\t\t\texpect(rowsB).toHaveLength(1)\n\t\t\texpect(rowsA.every((r) => 'id' in r && !('name' in r))).toBe(true)\n\t\t\texpect(rowsB).toEqual([{ name: 'Bob' }])\n\t\t})\n\n\t\ttest('fluent builders support write chains with preloads', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst org = await repo.on(OrgSchema).one().create({ name: 'Fluent Org' })\n\n\t\t\tconst user = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.preload([UserRels.org])\n\t\t\t\t.create({ email: 'writer@test.com', name: 'Writer', orgId: org.id })\n\n\t\t\texpect((user.org as any).name).toBe('Fluent Org')\n\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).select(['id', 'name']).update({ name: 'Updated Writer' })\n\n\t\t\texpect(updated).toEqual({ id: user.id, name: 'Updated Writer' })\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).select(['id']).delete()\n\t\t\texpect(deleted).toEqual({ id: user.id })\n\t\t})\n\n\t\ttest('session supports multi-operation writes with fluent builders', async () => {\n\t\t\tconst repo = makeRepo()\n\n\t\t\tconst insertedId = await repo.session(async () => {\n\t\t\t\tconst created = await repo.on(UserSchema).one().create({ email: 'tx@fluent.com', name: 'Tx Fluent' })\n\t\t\t\tawait repo.on(UserSchema).one().id(created.id).update({ name: 'Tx Fluent Updated' })\n\t\t\t\treturn created.id\n\t\t\t})\n\n\t\t\tconst persisted = await repo.on(UserSchema).one().id(insertedId).select(['name']).find()\n\t\t\texpect(persisted).toEqual({ name: 'Tx Fluent Updated' })\n\t\t})\n\n\t\ttest('create/find/update/delete flows work', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'a@b.com', name: 'Alice' })\n\t\t\texpect(user.id).toMatch(/^u\\d+$/)\n\t\t\texpect(user.createdAt).toBe(1000)\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found?.id).toBe(user.id)\n\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).update({ name: 'Updated' })\n\t\t\texpect(updated?.name).toBe('Updated')\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).delete()\n\t\t\texpect(deleted?.id).toBe(user.id)\n\t\t})\n\n\t\ttest('findById, updateById, and deleteById target the schema primary key', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'id@test.com', name: 'ById' })\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found?.id).toBe(user.id)\n\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).update({ name: 'Changed' })\n\t\t\texpect(updated?.name).toBe('Changed')\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).delete()\n\t\t\texpect(deleted?.id).toBe(user.id)\n\t\t\texpect(await repo.on(UserSchema).one().id(user.id).find()).toBeNull()\n\t\t})\n\n\t\ttest('createMany, findMany and upsertOne work', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@b.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@c.com', name: 'Bob' },\n\t\t\t\t])\n\t\t\texpect(await repo.on(UserSchema).all().find()).toHaveLength(2)\n\n\t\t\tconst inserted = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('id', 'u-fixed'))\n\t\t\t\t.upsert({ create: { email: 'new@test.com', name: 'New' } })\n\t\t\texpect(inserted.name).toBe('New')\n\t\t})\n\n\t\ttest('accepts chainable where input for filters and options', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@b.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@c.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst rows = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.or([(g) => g.eq('name', 'Alice'), (g) => g.eq('name', 'Bob')]))\n\t\t\t\t.orderBy('name', 'desc')\n\t\t\t\t.limit(1)\n\t\t\t\t.find()\n\n\t\t\texpect(rows).toHaveLength(1)\n\t\t\texpect(rows[0].name).toBe('Bob')\n\t\t})\n\n\t\ttest('all().iterate uses adapter iterateMany without findMany emulation', async () => {\n\t\t\tconst TestSchema = Schema.from('iter_repo_users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tlet findManyCalls = 0\n\t\t\tlet capturedOptions: unknown\n\n\t\t\tclass IterAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['gt'] as const\n\t\t\t\tasync findMany(): Promise<Record<string, unknown>[]> {\n\t\t\t\t\tfindManyCalls += 1\n\t\t\t\t\tthrow new Error('findMany should not be called')\n\t\t\t\t}\n\t\t\t\tasync *iterateMany(_s: AnySchema, _c: unknown, _f: unknown, options?: unknown) {\n\t\t\t\t\tcapturedOptions = options\n\t\t\t\t\tyield { id: 'u3', name: 'Carol', age: 40 }\n\t\t\t\t\tyield { id: 'u1', name: 'Alice', age: 30 }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (IterAdapter as any)() as IterAdapter\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\tconst rows: Array<{ id: string; name: string; age: number }> = []\n\t\t\tfor await (const row of repo.on(TestSchema).all().where((q) => q.gt('age', 19)).orderBy('age', 'desc').offset(1).limit(2).iterate()) {\n\t\t\t\trows.push(row)\n\t\t\t}\n\n\t\t\texpect(findManyCalls).toBe(0)\n\t\t\texpect(capturedOptions).toMatchObject({ orderBy: [{ field: 'age', direction: 'desc' }], offset: 1, limit: 2 })\n\t\t\texpect(rows.map((row) => row.name)).toEqual(['Carol', 'Alice'])\n\t\t})\n\n\t\ttest('all().iterate accepts batchSize and forwards it only to iterateMany', async () => {\n\t\t\tconst TestSchema = Schema.from('iter_batch_users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst events: unknown[] = []\n\n\t\t\tclass IterAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: unknown, options?: unknown) {\n\t\t\t\t\tevents.push({ method: 'findMany', options })\n\t\t\t\t\treturn [{ id: 'u1', name: 'Alice' }]\n\t\t\t\t}\n\t\t\t\tasync count(_s: AnySchema, _c: unknown, _f: unknown) {\n\t\t\t\t\tevents.push({ method: 'count' })\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\tasync *iterateMany(_s: AnySchema, _c: unknown, _f: unknown, options?: unknown) {\n\t\t\t\t\tevents.push({ method: 'iterateMany', options })\n\t\t\t\t\tyield { id: 'u1', name: 'Alice' }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (IterAdapter as any)() as IterAdapter\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\n\t\t\tconst iterated: Array<{ id: string; name: string }> = []\n\t\t\tfor await (const row of repo.on(TestSchema).all().limit(10).iterate({ batchSize: 3 })) {\n\t\t\t\titerated.push(row)\n\t\t\t}\n\t\t\tawait repo.on(TestSchema).all().limit(10).find()\n\t\t\tawait repo.on(TestSchema).all().limit(10).paginate()\n\n\t\t\texpect(iterated).toEqual([{ id: 'u1', name: 'Alice' }])\n\t\t\texpect(events).toEqual([\n\t\t\t\t{ method: 'iterateMany', options: expect.objectContaining({ limit: 10, batchSize: 3 }) },\n\t\t\t\t{ method: 'findMany', options: expect.not.objectContaining({ batchSize: expect.anything() }) },\n\t\t\t\t{ method: 'findMany', options: expect.not.objectContaining({ batchSize: expect.anything() }) },\n\t\t\t\t{ method: 'count' },\n\t\t\t])\n\t\t})\n\n\t\ttest('all().iterate validates batchSize before adapter iteration runs', async () => {\n\t\t\tconst TestSchema = Schema.from('iter_invalid_batch_users')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tlet iterateManyCalls = 0\n\n\t\t\tclass IterAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync *iterateMany() {\n\t\t\t\t\titerateManyCalls += 1\n\t\t\t\t\tyield { id: 'u1', name: 'Alice' }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (IterAdapter as any)() as IterAdapter\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\n\t\t\tfor (const batchSize of [0, -1, 1.5, Number.MAX_SAFE_INTEGER + 1, Number.POSITIVE_INFINITY, Number.NaN, '2'] as const) {\n\t\t\t\ttry {\n\t\t\t\t\tfor await (const _row of repo.on(TestSchema).all().iterate({ batchSize } as any)) {\n\t\t\t\t\t\tvoid _row\n\t\t\t\t\t}\n\t\t\t\t\texpect.unreachable(`batchSize ${String(batchSize)} should have failed`)\n\t\t\t\t} catch (error) {\n\t\t\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\t\t\tconst err = error as InstanceType<typeof OrmValidationError>\n\t\t\t\t\texpect(err.kind).toBe('query-shape')\n\t\t\t\t\texpect(err.operation).toBe('iterate')\n\t\t\t\t\texpect(err.failures).toEqual([\n\t\t\t\t\t\texpect.objectContaining({ option: 'batchSize' }),\n\t\t\t\t\t])\n\t\t\t\t}\n\t\t\t}\n\t\t\texpect(iterateManyCalls).toBe(0)\n\t\t})\n\n\t\ttest('all().iterate yields selected and preloaded documents one at a time', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tlet preloadReads = 0\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((schema: AnySchema, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (...args: any[]) => {\n\t\t\t\t\t\tif (schema === PostSchema) preloadReads += 1\n\t\t\t\t\t\treturn use.findMany(...(args as [any, any]))\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\tconst alice = await repo.on(UserSchema).one().create({ email: 'alice@iter.com', name: 'Alice' })\n\t\t\tconst bob = await repo.on(UserSchema).one().create({ email: 'bob@iter.com', name: 'Bob' })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'A1', userId: alice.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'A2', userId: alice.id })\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'B1', userId: bob.id })\n\n\t\t\tconst rows: any[] = []\n\t\t\tconst iterator = repo.on(UserSchema).all().orderBy('name', 'asc').select(['id', 'name']).preload([UserRels.posts]).iterate({ batchSize: 1 })\n\t\t\texpect(iterator[Symbol.asyncIterator]()).toBe(iterator)\n\t\t\tfor await (const row of iterator) rows.push(row)\n\n\t\t\texpect(rows).toHaveLength(2)\n\t\t\texpect(rows.map((row) => row.name)).toEqual(['Alice', 'Bob'])\n\t\t\texpect(rows[0]).not.toHaveProperty('email')\n\t\t\texpect(rows[0].posts.map((post) => post.title)).toEqual(['A1', 'A2'])\n\t\t\texpect(rows[1].posts.map((post) => post.title)).toEqual(['B1'])\n\t\t\texpect(preloadReads).toBe(2)\n\t\t})\n\n\t\ttest('all().iterate honors page-based offsets and validates read query shape', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(UserSchema).all().create([\n\t\t\t\t{ email: 'u1@iter.com', name: 'A' },\n\t\t\t\t{ email: 'u2@iter.com', name: 'B' },\n\t\t\t\t{ email: 'u3@iter.com', name: 'C' },\n\t\t\t\t{ email: 'u4@iter.com', name: 'D' },\n\t\t\t\t{ email: 'u5@iter.com', name: 'E' },\n\t\t\t])\n\n\t\t\tconst paged: string[] = []\n\t\t\tfor await (const row of repo.on(UserSchema).all().orderBy('name', 'asc').limit(2).page(2).iterate()) {\n\t\t\t\tpaged.push(row.name)\n\t\t\t}\n\t\t\texpect(paged).toEqual(['C', 'D'])\n\n\t\t\ttry {\n\t\t\t\tfor await (const _row of repo.on(UserSchema).all().select(['missing' as any]).iterate()) {\n\t\t\t\t\tvoid _row\n\t\t\t\t}\n\t\t\t\texpect.unreachable('iterate should validate selected fields before reading')\n\t\t\t} catch (error) {\n\t\t\t\texpect(error).toBeInstanceOf(OrmValidationError)\n\t\t\t\texpect((error as InstanceType<typeof OrmValidationError>).kind).toBe('query-shape')\n\t\t\t}\n\t\t})\n\n\t\ttest('resolve chains adapter config transforms', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `a_${config.table}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait repo.resolve(\n\t\t\t\t\t\t(config) => ({ table: `b_${config.table}` }),\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tawait repo.on(UserSchema).all().find()\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t)\n\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'b_a_users' })\n\t\t})\n\n\t\ttest('session returns callback value and persists writes', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tlet insertedId = ''\n\t\t\tconst result = await repo.session(async () => {\n\t\t\t\tconst inserted = await repo.on(UserSchema).one().create({ email: 't@test.com', name: 'TxUser' })\n\t\t\t\tinsertedId = inserted.id\n\t\t\t\treturn 42\n\t\t\t})\n\n\t\t\texpect(result).toBe(42)\n\t\t\texpect(await repo.on(UserSchema).one().id(insertedId).find()).not.toBeNull()\n\t\t})\n\n\t\ttest('preloads can be resolved on mutation methods', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst org = await repo.on(OrgSchema).one().create({ name: 'Corp' })\n\t\t\tconst user = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.preload([UserRels.org])\n\t\t\t\t.create({ email: 'u@test.com', name: 'User', orgId: org.id })\n\t\t\texpect((user.org as any).name).toBe('Corp')\n\n\t\t\tawait repo.on(PostSchema).one().create({ title: 'Post', userId: user.id })\n\t\t\tconst updated = await repo.on(UserSchema).one().id(user.id).preload([UserRels.posts]).update({ name: 'Updated' })\n\t\t\texpect(updated?.posts).toHaveLength(1)\n\t\t})\n\n\t\ttest('in-memory adapter without crud.raw collapses schemaRef.raw to never', () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst ref = repo.on(UserSchema)\n\t\t\texpectTypeOf(ref.raw).toBeNever()\n\t\t})\n\n\t\ttest('raw forwards user args through adapter.use to adapter.raw', async () => {\n\t\t\tlet capturedArgs: unknown[] = []\n\t\t\tconst spy = mockInstance()\n\t\t\tclass RawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync raw(_s: any, _c: any, command: string, params: unknown[]) {\n\t\t\t\t\tcapturedArgs = [_s, _c, command, params]\n\t\t\t\t\treturn { rows: [{ id: '1' }] }\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst rawAdapter = new (RawAdapter as any)() as InstanceType<typeof RawAdapter>\n\t\t\tspy.mockRestore()\n\n\t\t\tconst repo = Repo.from(rawAdapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tconst TestSchema = Schema.from('raw_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst result = await repo.on(TestSchema).raw('SELECT * FROM raw_test WHERE id = $1', ['abc'])\n\t\t\texpect(capturedArgs[0]).toBe(TestSchema)\n\t\t\texpect(capturedArgs[1]).toEqual({ table: 'raw_test' })\n\t\t\texpect(capturedArgs[2]).toBe('SELECT * FROM raw_test WHERE id = $1')\n\t\t\texpect(capturedArgs[3]).toEqual(['abc'])\n\t\t\texpect(result).toEqual({ rows: [{ id: '1' }] })\n\t\t})\n\n\t\ttest('raw with single-arg adapter (mongo-style) forwards correctly', async () => {\n\t\t\tlet capturedPipeline: unknown = undefined\n\t\t\tconst spy = mockInstance()\n\t\t\tclass MongoStyleAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ col: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, pipeline: Record<string, unknown>[]) {\n\t\t\t\t\tcapturedPipeline = pipeline\n\t\t\t\t\treturn [{ total: 42 }]\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst mongoStyleAdapter = new (MongoStyleAdapter as any)() as InstanceType<typeof MongoStyleAdapter>\n\t\t\tspy.mockRestore()\n\n\t\t\tconst repo = Repo.from(mongoStyleAdapter)\n\t\t\t\t.resolve(() => ({ col: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst TestSchema = Schema.from('mongo_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst result = await repo.on(TestSchema).raw([{ $count: 'total' }])\n\t\t\texpect(capturedPipeline).toEqual([{ $count: 'total' }])\n\t\t\texpect(result).toEqual([{ total: 42 }])\n\t\t})\n\n\t\ttest('computed fields are derived and shaped correctly when selected', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst created = await repo.on(PersonSchema).one().create({ firstName: 'Ada', lastName: 'Lovelace' })\n\t\t\tconst rows = await repo.on(PersonSchema).all().select(['id', 'fullName']).find()\n\n\t\t\texpect(rows).toEqual([{ id: created.id, fullName: 'Ada Lovelace' }])\n\t\t})\n\n\t\ttest('computed field selection auto-includes dependencies for adapter reads', async () => {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\tlet seenSelect: string[] | undefined\n\t\t\t;(adapter as any).use = vi.fn((schema: any, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (filter: any, options: any) => {\n\t\t\t\t\t\tseenSelect = options?.select as string[] | undefined\n\t\t\t\t\t\treturn use.findMany(filter, options)\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tawait repo.on(PersonSchema).one().create({ firstName: 'Grace', lastName: 'Hopper' })\n\t\t\tawait repo.on(PersonSchema).all().select(['id', 'fullName']).find()\n\n\t\t\texpect(seenSelect).toEqual(expect.arrayContaining(['id', 'firstName', 'lastName']))\n\t\t})\n\n\t\ttest('unknown selected fields fail fast', async () => {\n\t\t\tconst { EquippedError } = await import('../../errors')\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(PersonSchema).one().create({ firstName: 'Ada', lastName: 'Lovelace' })\n\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(PersonSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.select(['unknownField' as any])\n\t\t\t\t\t.find(),\n\t\t\t).rejects.toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('missing computed dependencies in adapter output fail fast', async () => {\n\t\t\tconst { EquippedError } = await import('../../errors')\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((schema: any, config: any) => {\n\t\t\t\tconst use = origUse(schema, config)\n\t\t\t\treturn {\n\t\t\t\t\t...use,\n\t\t\t\t\tfindMany: async (filter: any, options: any) => {\n\t\t\t\t\t\tconst rows = await use.findMany(filter, options)\n\t\t\t\t\t\treturn rows.map((row: any) => {\n\t\t\t\t\t\t\tconst next = { ...row }\n\t\t\t\t\t\t\tdelete (next as any).lastName\n\t\t\t\t\t\t\treturn next\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\tawait repo.on(PersonSchema).one().create({ firstName: 'Katherine', lastName: 'Johnson' })\n\n\t\t\tawait expect(repo.on(PersonSchema).all().select(['fullName']).find()).rejects.toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('one().id().find() returns seeded document and null for missing', async () => {\n\t\t\tconst TestSchema = Schema.from('findbytest')\n\t\t\t\t.pk('id', v.string(), () => 'gen')\n\t\t\t\t.build()\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst use = adapter.use(TestSchema, { table: 'findbytest' })\n\t\t\tawait use.createOne({ id: 'x' })\n\n\t\t\tconst found = await repo.on(TestSchema).one().id('x').find()\n\t\t\texpect(found).toEqual({ id: 'x' })\n\n\t\t\tconst missing = await repo.on(TestSchema).one().id('missing').find()\n\t\t\texpect(missing).toBeNull()\n\t\t})\n\n\t\tdescribe('schema-per-call create path', () => {\n\t\t\ttest('createOne round-trip via one().id().find()', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).one().create({ email: 'rt@test.com', name: 'RoundTrip' })\n\t\t\t\texpect(inserted.email).toBe('rt@test.com')\n\t\t\t\texpect(inserted.name).toBe('RoundTrip')\n\t\t\t\texpect(inserted.id).toBeDefined()\n\n\t\t\t\tconst found = await repo.on(UserSchema).one().id(inserted.id).find()\n\t\t\t\texpect(found).not.toBeNull()\n\t\t\t\texpect(found!.id).toBe(inserted.id)\n\t\t\t\texpect(found!.email).toBe('rt@test.com')\n\t\t\t})\n\n\t\t\ttest('createOne injects onCreate defaults for missing fields', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).one().create({ email: 'defaults@test.com', name: 'Defaults' })\n\t\t\t\texpect(inserted.createdAt).toBe(1000)\n\t\t\t\texpect(inserted.id).toBeDefined()\n\t\t\t})\n\n\t\t\ttest('createOne throws OrmValidationError with kind validation and field populated', async () => {\n\t\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).one().create({ email: 123 as any, name: 'Bad' })\n\t\t\t\t\texpect.unreachable()\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\t\texpect(err.operation).toBe('createOne')\n\t\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\t\texpect(err.failures.length).toBeGreaterThan(0)\n\t\t\t\t\texpect(err.failures[0].field).toBe('email')\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('createMany round-trip via one().id().find()', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).all().create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Bob' },\n\t\t\t\t])\n\t\t\t\texpect(inserted).toHaveLength(2)\n\n\t\t\t\tconst foundA = await repo.on(UserSchema).one().id(inserted[0].id).find()\n\t\t\t\tconst foundB = await repo.on(UserSchema).one().id(inserted[1].id).find()\n\t\t\t\texpect(foundA!.email).toBe('a@test.com')\n\t\t\t\texpect(foundB!.email).toBe('b@test.com')\n\t\t\t})\n\n\t\t\ttest('createMany collects all failures with rowIndex and throws single OrmValidationError', async () => {\n\t\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\ttry {\n\t\t\t\t\tawait repo.on(UserSchema).all().create([\n\t\t\t\t\t\t{ email: 'good@test.com', name: 'Good' },\n\t\t\t\t\t\t{ email: 123 as any, name: 'Bad' },\n\t\t\t\t\t\t{ email: 'also-bad' as any, name: 456 as any },\n\t\t\t\t\t])\n\t\t\t\t\texpect.unreachable()\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\t\texpect(err.kind).toBe('validation')\n\t\t\t\t\texpect(err.operation).toBe('createMany')\n\t\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\t\tconst rowIndices = err.failures.map((f) => f.rowIndex)\n\t\t\t\t\texpect(rowIndices).toContain(1)\n\t\t\t\t\texpect(rowIndices).toContain(2)\n\t\t\t\t\texpect(rowIndices).not.toContain(0)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttest('one().id().find() returns null for non-existent pk', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst result = await repo.on(UserSchema).one().id('nonexistent').find()\n\t\t\t\texpect(result).toBeNull()\n\t\t\t})\n\n\t\t\ttest('createMany with onCreate defaults applied to all rows', async () => {\n\t\t\t\tconst repo = makeRepo()\n\t\t\t\tconst inserted = await repo.on(UserSchema).all().create([\n\t\t\t\t\t{ email: 'x@test.com', name: 'X' },\n\t\t\t\t\t{ email: 'y@test.com', name: 'Y' },\n\t\t\t\t])\n\t\t\t\texpect(inserted[0].createdAt).toBe(1000)\n\t\t\t\texpect(inserted[1].createdAt).toBe(1000)\n\t\t\t\texpect(inserted[0].id).toBeDefined()\n\t\t\t\texpect(inserted[1].id).toBeDefined()\n\t\t\t})\n\t\t})\n\n\t\ttest('one().id().delete() removes and returns document, null for missing', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'del@test.com', name: 'ToDelete' })\n\n\t\t\tconst deleted = await repo.on(UserSchema).one().id(user.id).delete()\n\t\t\texpect(deleted).toEqual(expect.objectContaining({ id: user.id, name: 'ToDelete' }))\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found).toBeNull()\n\n\t\t\tconst missing = await repo.on(UserSchema).one().id('nonexistent').delete()\n\t\t\texpect(missing).toBeNull()\n\t\t})\n\n\t\ttest('one().where().update() updates first matching document via filter', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.update({ name: 'Alicia' })\n\t\t\texpect(updated?.name).toBe('Alicia')\n\t\t})\n\n\t\ttest('one().where().update() with non-unique filter selects first match', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Same' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Same' },\n\t\t\t\t])\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('name', 'Same'))\n\t\t\t\t.update({ name: 'Changed' })\n\t\t\texpect(updated?.name).toBe('Changed')\n\n\t\t\tconst all = await repo.on(UserSchema).all().find()\n\t\t\tconst changedCount = all.filter((u) => u.name === 'Changed').length\n\t\t\texpect(changedCount).toBe(1)\n\t\t})\n\n\t\ttest('all().where().update() updates all matching documents', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Same' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Same' },\n\t\t\t\t\t{ email: 'c@test.com', name: 'Different' },\n\t\t\t\t])\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'Same'))\n\t\t\t\t.update({ name: 'Updated' })\n\t\t\texpect(updated).toHaveLength(2)\n\t\t\texpect(updated.every((u) => u.name === 'Updated')).toBe(true)\n\t\t})\n\n\t\ttest('all().where().update() applies auto-bump for onUpdate fields', async () => {\n\t\t\tconst AutoSchema = Schema.from('auto')\n\t\t\t\t.pk('id', v.string(), () => `a${++userCounter}`)\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.field('updatedAt', v.number(), { onCreate: () => 0, onUpdate: () => 9999 })\n\t\t\t\t.build()\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo.on(AutoSchema).one().create({ name: 'A' })\n\n\t\t\tconst updated = await repo\n\t\t\t\t.on(AutoSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'A'))\n\t\t\t\t.update({ name: 'B' })\n\t\t\texpect(updated[0].updatedAt).toBe(9999)\n\t\t})\n\n\t\ttest('one().where().delete() removes first matching document', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'Alice' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'Bob' },\n\t\t\t\t])\n\n\t\t\tconst deleted = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.delete()\n\t\t\texpect(deleted?.name).toBe('Alice')\n\n\t\t\tconst remaining = await repo.on(UserSchema).all().find()\n\t\t\texpect(remaining).toHaveLength(1)\n\t\t})\n\n\t\ttest('all().where().delete() removes all matching and returns them', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ email: 'a@test.com', name: 'ToDelete' },\n\t\t\t\t\t{ email: 'b@test.com', name: 'ToDelete' },\n\t\t\t\t\t{ email: 'c@test.com', name: 'Keep' },\n\t\t\t\t])\n\n\t\t\tconst deleted = await repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'ToDelete'))\n\t\t\t\t.delete()\n\t\t\texpect(deleted).toHaveLength(2)\n\n\t\t\tconst remaining = await repo.on(UserSchema).all().find()\n\t\t\texpect(remaining).toHaveLength(1)\n\t\t\texpect(remaining[0].name).toBe('Keep')\n\t\t})\n\n\t\ttest('round-trip update via filter preserves data integrity', async () => {\n\t\t\tconst repo = makeRepo()\n\t\t\tconst user = await repo.on(UserSchema).one().create({ email: 'rt@test.com', name: 'Original' })\n\n\t\t\tawait repo\n\t\t\t\t.on(UserSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('id', user.id))\n\t\t\t\t.update({ name: 'Modified' })\n\n\t\t\tconst found = await repo.on(UserSchema).one().id(user.id).find()\n\t\t\texpect(found?.name).toBe('Modified')\n\t\t\texpect(found?.email).toBe('rt@test.com')\n\t\t})\n\t})\n\n\tdescribe('type-level: per-op gating on FilterGroup', () => {\n\t\ttest('undeclared filter op is never on GatedFilterGroup', () => {\n\t\t\tconst { GatedFilterGroup: _type } = {} as any\n\t\t\ttype EqOnlyOps = readonly ['eq']\n\t\t\ttype Gated = import('../filter').GatedFilterGroup<EqOnlyOps>\n\t\t\texpectTypeOf<Gated['eq']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['ne']>().toBeNever()\n\t\t\texpectTypeOf<Gated['gt']>().toBeNever()\n\t\t\texpectTypeOf<Gated['and']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['or']>().not.toBeNever()\n\t\t})\n\n\t\ttest('all declared ops are available, undeclared are never', () => {\n\t\t\ttype TwoOps = readonly ['eq', 'gt']\n\t\t\ttype Gated = import('../filter').GatedFilterGroup<TwoOps>\n\t\t\texpectTypeOf<Gated['eq']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['gt']>().not.toBeNever()\n\t\t\texpectTypeOf<Gated['ne']>().toBeNever()\n\t\t\texpectTypeOf<Gated['lt']>().toBeNever()\n\t\t\texpectTypeOf<Gated['in']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('type-level: missing queryableOps yields empty ops', () => {\n\t\ttest('adapter without queryableOps yields empty InferAdapterQueryableOps', () => {\n\t\t\tclass MinimalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = [] as const\n\t\t\t}\n\t\t\ttype Ops = import('../adapter').InferAdapterQueryableOps<MinimalAdapter>\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<readonly []>()\n\t\t})\n\t})\n\n\tdescribe('type-level: method gating via class-based adapter', () => {\n\t\ttest('adapter with findMany enables all().find()', () => {\n\t\t\tclass FindAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = FindAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['find']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with iterateMany enables all().iterate(options?)', () => {\n\t\t\tclass IterateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync *iterateMany() {}\n\t\t\t}\n\t\t\ttype A = IterateAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['iterate']>().toBeFunction()\n\t\t\texpectTypeOf<Parameters<All['iterate']>>().toEqualTypeOf<[options?: IterationOptions]>()\n\t\t\texpectTypeOf<ReturnType<All['iterate']>>().toEqualTypeOf<AsyncGenerator<import('./internals/types').SelectedWithPreloads<S, never, []>, void, void>>()\n\t\t})\n\n\t\ttest('iterate exists only on AllBuilder and has no CDC-style sibling methods', () => {\n\t\t\tclass IterateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync *iterateMany() {}\n\t\t\t}\n\t\t\ttype A = IterateAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\ttype OneHasIterate = 'iterate' extends keyof One ? true : false\n\t\t\ttype CdcKeys = Extract<'stream' | 'watch' | 'subscribe' | 'changeFeed', keyof All>\n\t\t\texpectTypeOf<OneHasIterate>().toEqualTypeOf<false>()\n\t\t\texpectTypeOf<CdcKeys>().toBeNever()\n\t\t})\n\n\t\ttest('missing iterateMany collapses all().iterate to never', () => {\n\t\t\tclass FindOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = FindOnlyAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['iterate']>().toBeNever()\n\t\t})\n\n\t\ttest('missing updateMany collapses one().update and all().update to never', () => {\n\t\t\tclass ReadOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = ReadOnlyAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['update']>().toBeNever()\n\t\t\texpectTypeOf<All['update']>().toBeNever()\n\t\t})\n\n\t\ttest('missing deleteMany collapses one().delete and all().delete to never', () => {\n\t\t\tclass NoDeleteAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoDeleteAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['delete']>().toBeNever()\n\t\t\texpectTypeOf<All['delete']>().toBeNever()\n\t\t})\n\n\t\ttest('missing raw collapses schemaRef.raw to never', () => {\n\t\t\tclass NoRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeNever()\n\t\t})\n\n\t\ttest('missing upsertOne collapses one().upsert to never', () => {\n\t\t\tclass NoUpsertAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoUpsertAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with updateMany enables one().update and all().update', () => {\n\t\t\tclass WithUpdateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync updateMany() { return [] }\n\t\t\t}\n\t\t\ttype A = WithUpdateAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['update']>().toBeFunction()\n\t\t\texpectTypeOf<All['update']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with deleteMany enables one().delete and all().delete', () => {\n\t\t\tclass WithDeleteAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync deleteMany() { return [] }\n\t\t\t}\n\t\t\ttype A = WithDeleteAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['delete']>().toBeFunction()\n\t\t\texpectTypeOf<All['delete']>().toBeFunction()\n\t\t})\n\n\t\ttest('missing count collapses all().count to never', () => {\n\t\t\tclass NoCountAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoCountAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['count']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with count enables all().count', () => {\n\t\t\tclass WithCountAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync count() { return 0 }\n\t\t\t}\n\t\t\ttype A = WithCountAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A>\n\t\t\texpectTypeOf<All['count']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with raw enables schemaRef.raw', () => {\n\t\t\tclass WithRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, _command: string) { return { rows: [] } }\n\t\t\t}\n\t\t\ttype A = WithRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter raw signature drives arg-tuple inference on schemaRef.raw', () => {\n\t\t\tclass TypedRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, _sql: string, _params: number[]) { return [42] }\n\t\t\t}\n\t\t\ttype A = TypedRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t\texpectTypeOf<Ref['raw']>().parameters.toEqualTypeOf<[sql: string, params: number[]]>()\n\t\t})\n\n\t\ttest('per-call <T> override narrows raw return type', () => {\n\t\t\tclass DefaultRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any, _sql: string) { return { rows: [] as unknown[] } }\n\t\t\t}\n\t\t\ttype A = DefaultRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t\texpectTypeOf<Ref['raw']>().parameters.toEqualTypeOf<[sql: string]>()\n\t\t})\n\n\t\ttest('adapter with zero-arg raw infers empty arg tuple', () => {\n\t\t\tclass ZeroArgRawAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync raw(_s: any, _c: any) { return 'pong' }\n\t\t\t}\n\t\t\ttype A = ZeroArgRawAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['raw']>().parameters.toEqualTypeOf<[]>()\n\t\t\texpectTypeOf<Ref['raw']>().toBeFunction()\n\t\t})\n\n\t\ttest('gating survives through select() chains', () => {\n\t\t\tclass MinimalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t}\n\t\t\ttype A = MinimalAdapter\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\ttype S = typeof _TestSchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A, 'id'>\n\t\t\ttype All = import('./builders').AllBuilderSurface<S, A, 'id'>\n\t\t\texpectTypeOf<One['update']>().toBeNever()\n\t\t\texpectTypeOf<One['delete']>().toBeNever()\n\t\t\texpectTypeOf<All['update']>().toBeNever()\n\t\t\texpectTypeOf<All['delete']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('type-level: aggregate gating', () => {\n\t\ttest('adapter with aggregateOps = [] narrows repo.on(S).aggregate to never', () => {\n\t\t\tclass EmptyAggAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly aggregateOps = [] as const\n\t\t\t}\n\t\t\ttype A = EmptyAggAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with aggregate method and non-empty aggregateOps narrows to callable', () => {\n\t\t\tclass FullAggAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly aggregateOps = ['count', 'sum'] as const\n\t\t\t\tasync aggregate() { return [] }\n\t\t\t}\n\t\t\ttype A = FullAggAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter with aggregate method but empty aggregateOps narrows to never', () => {\n\t\t\tclass MethodOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly aggregateOps = [] as const\n\t\t\t\tasync aggregate() { return [] }\n\t\t\t}\n\t\t\ttype A = MethodOnlyAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with non-empty aggregateOps but no aggregate method narrows to never', () => {\n\t\t\tclass OpsOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly aggregateOps = ['count'] as const\n\t\t\t}\n\t\t\ttype A = OpsOnlyAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\n\t\ttest('default aggregateOps on OrmAdapter is empty, so aggregate is never by default', () => {\n\t\t\tclass DefaultAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t}\n\t\t\ttype A = DefaultAdapter\n\t\t\ttype Ref = import('./builders').SchemaRefSurface<import('../schema').AnySchema, A>\n\t\t\texpectTypeOf<Ref['aggregate']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('type-level: AggregateBuilder', () => {\n\t\tclass AggAdapter extends OrmAdapter {\n\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\treadonly supportedFieldTypes = ['string', 'number', 'boolean', 'object', 'array'] as const\n\t\t\treadonly aggregateOps = ['count', 'countDistinct', 'sum', 'avg', 'min', 'max'] as const\n\t\t\tasync aggregate() { return [] }\n\t\t}\n\t\tconst _S = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t.field('name', v.string())\n\t\t\t.field('amount', v.number())\n\t\t\t.field('active', v.boolean())\n\t\t\t.field('tags', v.array(v.string()))\n\t\t\t.field('meta', v.object({ x: v.number() }))\n\t\t\t.build()\n\t\ttype S = typeof _S\n\t\ttype A = AggAdapter\n\t\ttype Builder = import('./builders').AggregateBuilder<S, A, {}, {}, false>\n\n\t\ttest('.count(alias) adds alias to result type as number', () => {\n\t\t\ttype AfterCount = ReturnType<Builder['count']>\n\t\t\ttype Result = Awaited<ReturnType<AfterCount['run']>>\n\t\t\texpectTypeOf<Result>().toHaveProperty('total')\n\t\t})\n\n\t\ttest('duplicate alias: \"a\" extends keyof Aggs triggers never guard', () => {\n\t\t\ttype AggsWithA = { a: number }\n\t\t\ttype DuplicateGuard = 'a' extends keyof AggsWithA ? [never] : [alias: 'a']\n\t\t\texpectTypeOf<DuplicateGuard>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.run() on empty Aggs requires never arg (compile error gate)', () => {\n\t\t\ttype RunParams = Parameters<Builder['run']>\n\t\t\texpectTypeOf<RunParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.run() on non-empty Aggs takes no args', () => {\n\t\t\ttype WithCount = import('./builders').AggregateBuilder<S, A, { total: number }, {}, false>\n\t\t\ttype RunParams = Parameters<WithCount['run']>\n\t\t\texpectTypeOf<RunParams>().toEqualTypeOf<[]>()\n\t\t})\n\n\t\ttest('.run() returns single object when HasGroupBy = false', () => {\n\t\t\ttype WithCount = import('./builders').AggregateBuilder<S, A, { total: number }, {}, false>\n\t\t\ttype Result = Awaited<ReturnType<WithCount['run']>>\n\t\t\texpectTypeOf<Result>().toEqualTypeOf<{ total: number }>()\n\t\t})\n\n\t\ttest('.run() returns array when HasGroupBy = true', () => {\n\t\t\ttype WithGroupBy = import('./builders').AggregateBuilder<S, A, { total: number }, { name: string }, true>\n\t\t\ttype Result = Awaited<ReturnType<WithGroupBy['run']>>\n\t\t\texpectTypeOf<Result>().toEqualTypeOf<({ total: number } & { name: string })[]>()\n\t\t})\n\n\t\ttest('group-key fields appear in result row with schema-declared types', () => {\n\t\t\ttype WithGroupBy = import('./builders').AggregateBuilder<S, A, { total: number }, { name: string; amount: number }, true>\n\t\t\ttype Result = Awaited<ReturnType<WithGroupBy['run']>>\n\t\t\ttype Row = Result[number]\n\t\t\texpectTypeOf<Row>().toHaveProperty('total')\n\t\t\texpectTypeOf<Row>().toHaveProperty('name')\n\t\t\texpectTypeOf<Row>().toHaveProperty('amount')\n\t\t})\n\n\t\ttest('.sum rejects string field (field-type constraint)', () => {\n\t\t\ttype SumFieldParam = Parameters<Builder['sum']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.name extends SumFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.avg rejects string field (field-type constraint)', () => {\n\t\t\ttype AvgFieldParam = Parameters<Builder['avg']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.name extends AvgFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.min rejects array field', () => {\n\t\t\ttype MinFieldParam = Parameters<Builder['min']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.tags extends MinFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.max rejects object field', () => {\n\t\t\ttype MaxFieldParam = Parameters<Builder['max']>[0]\n\t\t\ttype IsAccepted = typeof _S.fields.meta extends MaxFieldParam ? true : false\n\t\t\texpectTypeOf<IsAccepted>().toEqualTypeOf<false>()\n\t\t})\n\n\t\ttest('.where().where() is a compile error', () => {\n\t\t\ttype AfterWhere = import('./builders').AggregateBuilder<S, A, {}, {}, false, true, false>\n\t\t\ttype WhereParams = Parameters<AfterWhere['where']>\n\t\t\texpectTypeOf<WhereParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.having().having() is a compile error', () => {\n\t\t\ttype AfterHaving = import('./builders').AggregateBuilder<S, A, {}, {}, false, false, true>\n\t\t\ttype HavingParams = Parameters<AfterHaving['having']>\n\t\t\texpectTypeOf<HavingParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('.groupBy().groupBy() is a compile error', () => {\n\t\t\ttype AfterGroupBy = import('./builders').AggregateBuilder<S, A, {}, { name: string }, true, false, false>\n\t\t\ttype GroupByParams = Parameters<AfterGroupBy['groupBy']>\n\t\t\texpectTypeOf<GroupByParams>().toEqualTypeOf<[never]>()\n\t\t})\n\n\t\ttest('clone-on-step: .where() returns a new builder', () => {\n\t\t\ttype After = ReturnType<Builder['where']>\n\t\t\texpectTypeOf<After>().toMatchTypeOf<import('./builders').AggregateBuilder<S, A, {}, {}, false, true, false>>()\n\t\t})\n\t})\n\n\tdescribe('repo.on().all().where().find() end-to-end', () => {\n\t\tconst TestSchema = Schema.from('e2e')\n\t\t\t.pk('id', v.string(), () => `e-${Math.random().toString(36).slice(2)}`)\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.number())\n\t\t\t.field('active', v.boolean())\n\t\t\t.field('tags', v.array(v.string()))\n\t\t\t.field('score', v.optional(v.number()), { onCreate: () => undefined })\n\t\t\t.build()\n\n\t\tfunction makeE2eRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t\treturn { repo, adapter }\n\t\t}\n\n\t\tasync function seedData(repo: any) {\n\t\t\tawait repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.create([\n\t\t\t\t\t{ name: 'Alice', age: 30, active: true, tags: ['admin', 'user'] },\n\t\t\t\t\t{ name: 'Bob', age: 20, active: false, tags: ['user'] },\n\t\t\t\t\t{ name: 'Carol', age: 40, active: true, tags: ['admin'] },\n\t\t\t\t\t{ name: 'Dave', age: 25, active: true, tags: ['user', 'guest'], score: 100 },\n\t\t\t\t])\n\t\t}\n\n\t\ttest('all().where().find() returns matching documents', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.active, true))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(3)\n\t\t\texpect(results.every((r) => r.active === true)).toBe(true)\n\t\t})\n\n\t\ttest('one().where().find() returns first matching document', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.name, 'Bob'))\n\t\t\t\t.find()\n\t\t\texpect(result).not.toBeNull()\n\t\t\texpect(result!.name).toBe('Bob')\n\t\t})\n\n\t\ttest('one().where().find() returns null when no match', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.name, 'Nobody'))\n\t\t\t\t.find()\n\t\t\texpect(result).toBeNull()\n\t\t})\n\n\t\ttest('eq filter op matches exact value', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq(TestSchema.fields.age, 30))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Alice')\n\t\t})\n\n\t\ttest('ne filter op excludes matching values', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.ne(TestSchema.fields.name, 'Alice'))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(3)\n\t\t\texpect(results.every((r) => r.name !== 'Alice')).toBe(true)\n\t\t})\n\n\t\ttest('gt filter op matches values greater than', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gt(TestSchema.fields.age, 25))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('gte filter op matches values greater than or equal', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte(TestSchema.fields.age, 30))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('lt filter op matches values less than', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.lt(TestSchema.fields.age, 25))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Bob')\n\t\t})\n\n\t\ttest('lte filter op matches values less than or equal', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.lte(TestSchema.fields.age, 25))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Bob', 'Dave'])\n\t\t})\n\n\t\ttest('in filter op matches values in array', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.in(TestSchema.fields.name, ['Alice', 'Carol']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('notIn filter op excludes values in array', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.notIn(TestSchema.fields.name, ['Alice', 'Carol']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Bob', 'Dave'])\n\t\t})\n\n\t\ttest('like filter op matches substring case-insensitively', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.like(TestSchema.fields.name, 'ali'))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Alice')\n\t\t})\n\n\t\ttest('exists filter op matches non-null values', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.exists(TestSchema.fields.score))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Dave')\n\t\t})\n\n\t\ttest('notExists filter op matches null/undefined values', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.notExists(TestSchema.fields.score))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(3)\n\t\t})\n\n\t\ttest('contains filter op matches array subset', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.contains('tags', ['admin']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol'])\n\t\t})\n\n\t\ttest('notContains filter op excludes array subset', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.notContains('tags', ['admin']))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Bob', 'Dave'])\n\t\t})\n\n\t\ttest('and combinator requires all conditions', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.and([(g) => g.gt(TestSchema.fields.age, 20), (g) => g.eq(TestSchema.fields.active, true)]))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Carol', 'Dave'])\n\t\t})\n\n\t\ttest('or combinator matches any condition', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.or([(g) => g.eq(TestSchema.fields.name, 'Alice'), (g) => g.eq(TestSchema.fields.name, 'Bob')]))\n\t\t\t\t.find()\n\t\t\texpect(results.map((r) => r.name).sort()).toEqual(['Alice', 'Bob'])\n\t\t})\n\n\t\ttest('raw-string field overload works end-to-end', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tconst results = await repo\n\t\t\t\t.on(TestSchema)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('name', 'Alice'))\n\t\t\t\t.find()\n\t\t\texpect(results).toHaveLength(1)\n\t\t\texpect(results[0].name).toBe('Alice')\n\t\t})\n\n\t\ttest('empty and([]) throws at builder time', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\texpect(() =>\n\t\t\t\trepo\n\t\t\t\t\t.on(TestSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.and([]))\n\t\t\t\t\t.find(),\n\t\t\t).toThrow()\n\t\t})\n\n\t\ttest('empty or([]) throws at builder time', async () => {\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\texpect(() =>\n\t\t\t\trepo\n\t\t\t\t\t.on(TestSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.or([]))\n\t\t\t\t\t.find(),\n\t\t\t).toThrow()\n\t\t})\n\n\t\ttest('unknown field in filter throws OrmValidationError at boundary', async () => {\n\t\t\tconst { OrmValidationError: OrmValErr } = await import('../errors')\n\t\t\tconst { repo } = makeE2eRepo()\n\t\t\tawait seedData(repo)\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(TestSchema)\n\t\t\t\t\t.all()\n\t\t\t\t\t.where((q) => q.eq('nonexistentField', 42))\n\t\t\t\t\t.find(),\n\t\t\t).rejects.toBeInstanceOf(OrmValErr)\n\t\t})\n\t})\n\n\tdescribe('one().id().update() (replaces updateByPk)', () => {\n\t\tlet viewCounter = 0\n\t\tconst ItemSchema = Schema.from('items')\n\t\t\t.pk('id', v.string(), () => `item-${++viewCounter}`)\n\t\t\t.field('title', v.string())\n\t\t\t.field('views', v.number())\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => Date.now() })\n\t\t\t.build()\n\n\t\tfunction makeUpdateRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('round-trip update via one().id().update()', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 0 })\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ title: 'Updated' })\n\t\t\texpect(updated).not.toBeNull()\n\t\t\texpect(updated!.title).toBe('Updated')\n\t\t\texpect(updated!.views).toBe(0)\n\n\t\t\tconst found = await repo.on(ItemSchema).one().id(item.id).find()\n\t\t\texpect(found!.title).toBe('Updated')\n\t\t})\n\n\t\ttest('auto-bump injects updatedAt on un-touched onUpdate field', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 0 })\n\t\t\tconst before = item.updatedAt\n\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ title: 'Changed' })\n\t\t\texpect(updated!.updatedAt).not.toBe(before)\n\t\t\texpect(updated!.updatedAt).toBeGreaterThanOrEqual(before)\n\t\t})\n\n\t\ttest('user set({updatedAt:X}) suppresses auto-bump', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 0 })\n\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ updatedAt: 9999 })\n\t\t\texpect(updated!.updatedAt).toBe(9999)\n\t\t})\n\n\t\ttest('update with inc op via SchemaUpdateInput', async () => {\n\t\t\tconst { IncOp } = await import('../updates')\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst item = await repo.on(ItemSchema).one().create({ title: 'Hello', views: 10 })\n\n\t\t\tconst updated = await repo.on(ItemSchema).one().id(item.id).update({ views: new IncOp('views', 5) })\n\t\t\texpect(updated!.views).toBe(15)\n\t\t})\n\n\t\ttest('update returns null for missing pk', async () => {\n\t\t\tconst repo = makeUpdateRepo()\n\t\t\tconst result = await repo.on(ItemSchema).one().id('nonexistent').update({ title: 'X' })\n\t\t\texpect(result).toBeNull()\n\t\t})\n\t})\n\n\tdescribe('one().where().upsert() (replaces upsertOne)', () => {\n\t\tlet upsertCounter = 0\n\n\t\tconst UpsertSchema = Schema.from('upserts')\n\t\t\t.pk('id', v.string(), () => `up-${++upsertCounter}`)\n\t\t\t.field('email', v.string())\n\t\t\t.field('name', v.string())\n\t\t\t.field('views', v.number())\n\t\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 9999 })\n\t\t\t.build()\n\n\t\tfunction makeUpsertRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('create-then-update path: row missing → inserts and applies update', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'alice@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'alice@test.com', name: 'Alice', views: 0 },\n\t\t\t\t\tupdate: { name: 'Alice Updated' },\n\t\t\t\t})\n\n\t\t\texpect(result.email).toBe('alice@test.com')\n\t\t\texpect(result.name).toBe('Alice Updated')\n\t\t\texpect(result.createdAt).toBe(1000)\n\t\t})\n\n\t\ttest('create path with set value overriding create field is allowed', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'override@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'override@test.com', name: 'Original', views: 0 },\n\t\t\t\t\tupdate: { views: 42 },\n\t\t\t\t})\n\n\t\t\texpect(result.views).toBe(42)\n\t\t\texpect(result.name).toBe('Original')\n\t\t})\n\n\t\ttest('update-only-on-exists path: row exists → ignores create, applies update + auto-bump', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tawait repo.on(UpsertSchema).one().create({ email: 'bob@test.com', name: 'Bob', views: 42 })\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'bob@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'bob@test.com', name: 'IGNORED', views: 0 },\n\t\t\t\t\tupdate: { name: 'Bob Updated' },\n\t\t\t\t})\n\n\t\t\texpect(result.name).toBe('Bob Updated')\n\t\t\texpect(result.views).toBe(42)\n\t\t\texpect(result.updatedAt).toBe(9999)\n\t\t})\n\n\t\ttest('create-vs-op conflict throws OrmValidationError with kind conflicting-ops', async () => {\n\t\t\tconst { IncOp } = await import('../updates')\n\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\ttry {\n\t\t\t\tawait repo\n\t\t\t\t\t.on(UpsertSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.where((q) => q.eq('email', 'conflict@test.com'))\n\t\t\t\t\t.upsert({\n\t\t\t\t\t\tcreate: { email: 'conflict@test.com', name: 'Conflict', views: 0 },\n\t\t\t\t\t\tupdate: { views: new IncOp('views', 1) },\n\t\t\t\t\t})\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('conflicting-ops')\n\t\t\t\texpect(err.operation).toBe('upsertOne')\n\t\t\t\texpect(err.failures[0].field).toBe('views')\n\t\t\t}\n\t\t})\n\n\t\ttest('empty-update-allowed: create with no update is allowed', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'noops@test.com'))\n\t\t\t\t.upsert({ create: { email: 'noops@test.com', name: 'NoOps', views: 0 } })\n\n\t\t\texpect(result.email).toBe('noops@test.com')\n\t\t\texpect(result.name).toBe('NoOps')\n\t\t})\n\n\t\ttest('empty-update-allowed: if exists do nothing', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tawait repo.on(UpsertSchema).one().create({ email: 'exists@test.com', name: 'Original', views: 5 })\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'exists@test.com'))\n\t\t\t\t.upsert({ create: { email: 'exists@test.com', name: 'IGNORED', views: 0 } })\n\n\t\t\texpect(result.name).toBe('Original')\n\t\t\texpect(result.views).toBe(5)\n\t\t})\n\n\t\ttest('upsert-returns-document rule: returns resulting document', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst insertResult = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'doc@test.com'))\n\t\t\t\t.upsert({ create: { email: 'doc@test.com', name: 'Doc', views: 0 } })\n\t\t\texpect(insertResult.id).toBeDefined()\n\t\t\texpect(insertResult.email).toBe('doc@test.com')\n\n\t\t\tconst updateResult = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'doc@test.com'))\n\t\t\t\t.upsert({\n\t\t\t\t\tcreate: { email: 'doc@test.com', name: 'IGNORED', views: 0 },\n\t\t\t\t\tupdate: { name: 'DocUpdated' },\n\t\t\t\t})\n\t\t\texpect(updateResult.id).toBe(insertResult.id)\n\t\t\texpect(updateResult.name).toBe('DocUpdated')\n\t\t})\n\n\t\ttest('validates create payload via validateCreate (onCreate defaults injected)', async () => {\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tconst result = await repo\n\t\t\t\t.on(UpsertSchema)\n\t\t\t\t.one()\n\t\t\t\t.where((q) => q.eq('email', 'defaults@test.com'))\n\t\t\t\t.upsert({ create: { email: 'defaults@test.com', name: 'Defaults', views: 0 } })\n\n\t\t\texpect(result.id).toBeDefined()\n\t\t\texpect(result.createdAt).toBe(1000)\n\t\t})\n\n\t\ttest('validates create payload and throws OrmValidationError on invalid', async () => {\n\t\t\tconst { OrmValidationError } = await import('../errors')\n\t\t\tconst repo = makeUpsertRepo()\n\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(UpsertSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.where((q) => q.eq('email', 'bad@test.com'))\n\t\t\t\t\t.upsert({ create: { email: 123 as any, name: 'Bad', views: 0 } }),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('upsert-filter-incompatible error from adapter boundary', async () => {\n\t\t\tconst { OrmValidationError } = await import('../errors')\n\n\t\t\tconst spy = mockInstance()\n\t\t\tclass RestrictedAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number', 'boolean'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync upsertOne(_schema: any, _config: any, _filter: any, _create: any, _ops: any): Promise<Record<string, unknown>> {\n\t\t\t\t\tthrow new OrmValidationError('upsert-filter-incompatible', 'test', 'upsertOne', [\n\t\t\t\t\t\t{ cause: 'adapter requires single eq filter on unique column, received complex filter' },\n\t\t\t\t\t])\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst restrictedAdapter = new (RestrictedAdapter as any)() as InstanceType<typeof RestrictedAdapter>\n\t\t\tspy.mockRestore()\n\n\t\t\tconst repo = Repo.from(restrictedAdapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\n\t\t\ttry {\n\t\t\t\tawait repo\n\t\t\t\t\t.on(UpsertSchema)\n\t\t\t\t\t.one()\n\t\t\t\t\t.where((q: any) => q.eq('email', 'x@test.com'))\n\t\t\t\t\t.upsert({ create: { email: 'x@test.com', name: 'X', views: 0 } })\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\tconst err = e as InstanceType<typeof OrmValidationError>\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('type-level: upsert gating', () => {\n\t\ttest('adapter with upsertOne enables one().upsert', () => {\n\t\t\tclass WithUpsertAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t\tasync upsertOne() { return {} }\n\t\t\t}\n\t\t\ttype A = WithUpsertAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeFunction()\n\t\t})\n\n\t\ttest('adapter without upsertOne collapses one().upsert to never', () => {\n\t\t\tclass NoUpsertAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoUpsertAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeNever()\n\t\t})\n\n\t\ttest('adapter without upsertOne (crud-only) collapses one().upsert to never', () => {\n\t\t\tclass CrudOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\t\t\t\tasync findByPk() { return null }\n\t\t\t}\n\t\t\ttype A = CrudOnlyAdapter\n\t\t\ttype S = import('../schema').AnySchema\n\t\t\ttype One = import('./builders').OneBuilderSurface<S, A>\n\t\t\texpectTypeOf<One['upsert']>().toBeNever()\n\t\t})\n\t})\n\n\tdescribe('repo.session — transactional behaviour', () => {\n\t\tconst SchemaA = Schema.from('accounts')\n\t\t\t.pk('id', v.string(), () => `a-${Math.random().toString(36).slice(2)}`)\n\t\t\t.field('balance', v.number())\n\t\t\t.build()\n\t\tconst SchemaB = Schema.from('ledger')\n\t\t\t.pk('id', v.string(), () => `l-${Math.random().toString(36).slice(2)}`)\n\t\t\t.field('amount', v.number())\n\t\t\t.field('accountId', v.string())\n\t\t\t.build()\n\n\t\tfunction makeSessionRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\treturn Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\t\t}\n\n\t\ttest('throw-to-rollback: uncaught throw rolls back all writes and rejects with same error', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tawait repo.on(SchemaA).one().create({ balance: 100 })\n\n\t\t\tconst err = new Error('boom')\n\t\t\tawait expect(\n\t\t\t\trepo.session(async () => {\n\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 200 })\n\t\t\t\t\tthrow err\n\t\t\t\t}),\n\t\t\t).rejects.toBe(err)\n\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(1)\n\t\t\texpect(all[0].balance).toBe(100)\n\t\t})\n\n\t\ttest('return-to-commit: successful return commits and resolves with callback value', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tconst result = await repo.session(async () => {\n\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 500 })\n\t\t\t\treturn 'committed'\n\t\t\t})\n\n\t\t\texpect(result).toBe('committed')\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(1)\n\t\t\texpect(all[0].balance).toBe(500)\n\t\t})\n\n\t\ttest('cross-schema session: multiple schemas share one tx; on throw both roll back', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tconst account = await repo.on(SchemaA).one().create({ balance: 1000 })\n\n\t\t\tawait expect(\n\t\t\t\trepo.session(async () => {\n\t\t\t\t\tawait repo\n\t\t\t\t\t\t.on(SchemaA)\n\t\t\t\t\t\t.all()\n\t\t\t\t\t\t.where((q) => q.eq('id', account.id))\n\t\t\t\t\t\t.update({ balance: 900 })\n\t\t\t\t\tawait repo.on(SchemaB).one().create({ amount: 100, accountId: account.id })\n\t\t\t\t\tthrow new Error('tx failure')\n\t\t\t\t}),\n\t\t\t).rejects.toThrow('tx failure')\n\n\t\t\tconst acct = await repo.on(SchemaA).one().id(account.id).find()\n\t\t\texpect(acct!.balance).toBe(1000)\n\n\t\t\tconst entries = await repo\n\t\t\t\t.on(SchemaB)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.eq('accountId', account.id))\n\t\t\t\t.find()\n\t\t\texpect(entries).toHaveLength(0)\n\t\t})\n\n\t\ttest('nested session: inner repo.session delegates to adapter (flat in in-memory)', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\n\t\t\tconst result = await repo.session(async () => {\n\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 100 })\n\t\t\t\tconst inner = await repo.session(async () => {\n\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 200 })\n\t\t\t\t\treturn 'inner'\n\t\t\t\t})\n\t\t\t\treturn inner\n\t\t\t})\n\n\t\t\texpect(result).toBe('inner')\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(2)\n\t\t})\n\n\t\ttest('nested session: throw in inner rolls back entire outer tx (flat nesting)', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tawait repo.on(SchemaA).one().create({ balance: 50 })\n\n\t\t\tawait expect(\n\t\t\t\trepo.session(async () => {\n\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 100 })\n\t\t\t\t\tawait repo.session(async () => {\n\t\t\t\t\t\tawait repo.on(SchemaA).one().create({ balance: 200 })\n\t\t\t\t\t\tthrow new Error('inner boom')\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t).rejects.toThrow('inner boom')\n\n\t\t\tconst all = await repo\n\t\t\t\t.on(SchemaA)\n\t\t\t\t.all()\n\t\t\t\t.where((q) => q.gte('balance', 0))\n\t\t\t\t.find()\n\t\t\texpect(all).toHaveLength(1)\n\t\t\texpect(all[0].balance).toBe(50)\n\t\t})\n\n\t\ttest('no-tx-argument rule: session callback receives no arguments', async () => {\n\t\t\tconst repo = makeSessionRepo()\n\t\t\tlet argCount = -1\n\t\t\tawait repo.session(async function () {\n\t\t\t\targCount = arguments.length\n\t\t\t})\n\t\t\texpect(argCount).toBe(0)\n\t\t})\n\t})\n\n\tdescribe('type-level: session gating', () => {\n\t\ttest('missing session collapses repo.session to never', () => {\n\t\t\tclass NoSessionAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() { return [] }\n\t\t\t}\n\t\t\ttype A = NoSessionAdapter\n\t\t\tconst _repo = {} as import('./repo').RepoSurface<A>\n\t\t\texpectTypeOf(_repo.session).toBeNever()\n\t\t})\n\n\t\ttest('adapter with session enables repo.session', () => {\n\t\t\tclass WithSessionAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync session<T>(fn: () => Promise<T>): Promise<T> { return fn() }\n\t\t\t}\n\t\t\ttype A = WithSessionAdapter\n\t\t\tconst _repo = {} as import('./repo').RepoSurface<A>\n\t\t\texpectTypeOf(_repo.session).toBeFunction()\n\t\t})\n\t})\n\n\tdescribe('ALS-backed resolve', () => {\n\t\ttest('reads inside repo.resolve see the override', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `override_${config.table}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t},\n\t\t\t)\n\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'override_test' })\n\t\t})\n\n\t\ttest('reads outside repo.resolve see the default config', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `scoped_${config.table}` }),\n\t\t\t\tasync () => {},\n\t\t\t)\n\n\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'test' })\n\t\t})\n\n\t\ttest('two parallel repo.resolve calls do not bleed into each other', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait Promise.all([\n\t\t\t\trepo.resolve(\n\t\t\t\t\t(config) => ({ table: `tenant1_${config.table}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\trepo.resolve(\n\t\t\t\t\t(config) => ({ table: `tenant2_${config.table}` }),\n\t\t\t\t\tasync () => {\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t])\n\n\t\t\texpect(seenConfigs).toContainEqual({ table: 'tenant1_test' })\n\t\t\texpect(seenConfigs).toContainEqual({ table: 'tenant2_test' })\n\t\t\texpect(seenConfigs).not.toContainEqual({ table: 'tenant2_tenant1_test' })\n\t\t\texpect(seenConfigs).not.toContainEqual({ table: 'tenant1_tenant2_test' })\n\t\t})\n\n\t\ttest('overrides survive across awaits inside fn', async () => {\n\t\t\tconst seenConfigs: unknown[] = []\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst origUse = adapter.use.bind(adapter)\n\t\t\t;(adapter as any).use = vi.fn((s: any, config: any) => {\n\t\t\t\tseenConfigs.push(config)\n\t\t\t\treturn origUse(s, config)\n\t\t\t})\n\n\t\t\tconst TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait repo.resolve(\n\t\t\t\t(config) => ({ table: `async_${config.table}` }),\n\t\t\t\tasync () => {\n\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, 10))\n\t\t\t\t\tawait repo.on(TestSchema).all().find()\n\t\t\t\t},\n\t\t\t)\n\n\t\t\texpect(seenConfigs).toHaveLength(2)\n\t\t\texpect(seenConfigs[0]).toEqual({ table: 'async_test' })\n\t\t\texpect(seenConfigs[1]).toEqual({ table: 'async_test' })\n\t\t})\n\t})\n\n\tdescribe('class-based OrmAdapter with Repo', async () => {\n\t\tconst { OrmAdapter } = await import('../orm-adapter')\n\t\tconst { FilterGroup } = await import('../filter')\n\t\tconst { OrmValidationError } = await import('../errors')\n\n\t\tfunction makeClassAdapter() {\n\t\t\tconst stores = new Map<string, Map<string, Record<string, unknown>>>()\n\t\t\tfunction getStore(name: string) {\n\t\t\t\tif (!stores.has(name)) stores.set(name, new Map())\n\t\t\t\treturn stores.get(name)!\n\t\t\t}\n\n\t\t\tclass TestClassAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\n\t\t\t\tasync findMany(_schema: import('../schema').AnySchema, config: unknown, group: import('../filter').FilterGroup) {\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\treturn [...store.values()].filter((doc) => {\n\t\t\t\t\t\tfor (const child of group.children) {\n\t\t\t\t\t\t\tif (child instanceof (FilterGroup as any).constructor) continue\n\t\t\t\t\t\t\tconst f = child as any\n\t\t\t\t\t\t\tif (f.op === 'eq' && doc[f.field] !== f.value) return false\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tasync createMany(s: import('../schema').AnySchema, config: unknown, data: Record<string, unknown>[]) {\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\tconst pk = s.pkField.name\n\t\t\t\t\tfor (const d of data) store.set(String(d[pk]), { ...d })\n\t\t\t\t\treturn data.map((d) => ({ ...d }))\n\t\t\t\t}\n\n\t\t\t\tasync updateMany(s: import('../schema').AnySchema, config: unknown, group: import('../filter').FilterGroup, data: Record<string, unknown>) {\n\t\t\t\t\tconst rows = await this.findMany(s, config, group)\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\tconst pk = s.pkField.name\n\t\t\t\t\treturn rows.map((row) => {\n\t\t\t\t\t\tconst updated = { ...row, ...data }\n\t\t\t\t\t\tstore.set(String(updated[pk]), updated)\n\t\t\t\t\t\treturn { ...updated }\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tasync deleteMany(s: import('../schema').AnySchema, config: unknown, group: import('../filter').FilterGroup) {\n\t\t\t\t\tconst rows = await this.findMany(s, config, group)\n\t\t\t\t\tconst cfg = config as { table: string }\n\t\t\t\t\tconst store = getStore(cfg.table)\n\t\t\t\t\tconst pk = s.pkField.name\n\t\t\t\t\tfor (const row of rows) store.delete(String(row[pk]))\n\t\t\t\t\treturn rows\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst spy = mockInstance()\n\t\t\tconst adapter = new (TestClassAdapter as any)() as InstanceType<typeof TestClassAdapter>\n\t\t\tspy.mockRestore()\n\t\t\treturn { adapter, stores }\n\t\t}\n\n\t\tconst TestSchema = Schema.from('class_test')\n\t\t\t.pk('id', v.string(), () => `ct-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t.field('name', v.string())\n\t\t\t.field('age', v.number())\n\t\t\t.build()\n\n\t\ttest('Repo.from(classAdapter).resolve(...).build() creates a working repo', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst created = await repo.on(TestSchema).one().create({ name: 'Alice', age: 30 })\n\t\t\texpect(created.name).toBe('Alice')\n\t\t\texpect(created.age).toBe(30)\n\n\t\t\tconst found = await repo.on(TestSchema).one().id(created.id).find()\n\t\t\texpect(found).not.toBeNull()\n\t\t\texpect(found!.name).toBe('Alice')\n\t\t})\n\n\t\ttest('dispatch validator validates config against schemaConfigPipe', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 123 }) as any)\n\t\t\t\t.build()\n\n\t\t\tawait expect(\n\t\t\t\trepo.on(TestSchema).all().find(),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('dispatch validator validates after transforms applied', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tawait expect(\n\t\t\t\trepo.resolve(\n\t\t\t\t\t() => ({ table: 42 }) as any,\n\t\t\t\t\tasync () => repo.on(TestSchema).all().find(),\n\t\t\t\t),\n\t\t\t).rejects.toBeInstanceOf(OrmValidationError)\n\t\t})\n\n\t\ttest('createMany + findMany round-trip works', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst created = await repo.on(TestSchema).all().create([\n\t\t\t\t{ name: 'Alice', age: 30 },\n\t\t\t\t{ name: 'Bob', age: 25 },\n\t\t\t])\n\t\t\texpect(created).toHaveLength(2)\n\n\t\t\tconst all = await repo.on(TestSchema).all().find()\n\t\t\texpect(all).toHaveLength(2)\n\t\t})\n\n\t\ttest('update and delete work on class-based adapter', async () => {\n\t\t\tconst { adapter } = makeClassAdapter()\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve((s) => ({ table: s.name }))\n\t\t\t\t.build()\n\n\t\t\tconst user = await repo.on(TestSchema).one().create({ name: 'Alice', age: 30 })\n\t\t\tconst updated = await repo.on(TestSchema).one().id(user.id).update({ name: 'Alicia' })\n\t\t\texpect(updated?.name).toBe('Alicia')\n\n\t\t\tconst deleted = await repo.on(TestSchema).one().id(user.id).delete()\n\t\t\texpect(deleted?.id).toBe(user.id)\n\n\t\t\tconst found = await repo.on(TestSchema).one().id(user.id).find()\n\t\t\texpect(found).toBeNull()\n\t\t})\n\t})\n\n\tdescribe('repo.on().aggregate() end-to-end', () => {\n\t\tconst OrderSchema = Schema.from('orders')\n\t\t\t.pk('id', v.string(), () => `o-${Math.random().toString(36).slice(2, 8)}`)\n\t\t\t.field('product', v.string())\n\t\t\t.field('amount', v.number())\n\t\t\t.field('region', v.string())\n\t\t\t.build()\n\n\t\tfunction makeAggRepo() {\n\t\t\tconst adapter = InMemoryAdapter.create({})\n\t\t\tconst repo = Repo.from(adapter).resolve((s) => ({ table: s.name })).build()\n\t\t\treturn { repo, adapter }\n\t\t}\n\n\t\tasync function seedOrders(repo: any) {\n\t\t\tawait repo.on(OrderSchema).all().create([\n\t\t\t\t{ product: 'Widget', amount: 10, region: 'US' },\n\t\t\t\t{ product: 'Gadget', amount: 20, region: 'EU' },\n\t\t\t\t{ product: 'Widget', amount: 30, region: 'US' },\n\t\t\t\t{ product: 'Gadget', amount: 40, region: 'EU' },\n\t\t\t\t{ product: 'Widget', amount: 50, region: 'US' },\n\t\t\t])\n\t\t}\n\n\t\ttest('count returns total row count', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().count('total').run()\n\t\t\texpect(result).toEqual({ total: 5 })\n\t\t})\n\n\t\ttest('count with where filter returns filtered count', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.where((q) => q.eq('region', 'US'))\n\t\t\t\t.count('total')\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ total: 3 })\n\t\t})\n\n\t\ttest('count on empty result returns zero', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().count('total').run()\n\t\t\texpect(result).toEqual({ total: 0 })\n\t\t})\n\n\t\ttest('clone-on-step: base builder is not mutated by fan-out', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst base = repo.on(OrderSchema).aggregate().count('a')\n\t\t\tconst withFilter = base.where((q) => q.eq('region', 'US'))\n\t\t\tconst resultAll = await base.count('b').run()\n\t\t\tconst resultFiltered = await withFilter.count('c').run()\n\t\t\texpect(resultAll.a).toBe(5)\n\t\t\texpect(resultFiltered.a).toBe(3)\n\t\t})\n\n\t\ttest('where before count produces correct result', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.count('total')\n\t\t\t\t.where((q) => q.eq('product', 'Gadget'))\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ total: 2 })\n\t\t})\n\n\t\ttest('boundary validation rejects unknown field in where filter', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait expect(\n\t\t\t\trepo.on(OrderSchema).aggregate().count('total').where((q) => q.eq('nonexistent', 'x')).run(),\n\t\t\t).rejects.toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('sum returns total of numeric field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().sum(OrderSchema.fields.amount, 'revenue').run()\n\t\t\texpect(result).toEqual({ revenue: 150 })\n\t\t})\n\n\t\ttest('avg returns average of numeric field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().avg(OrderSchema.fields.amount, 'avgAmount').run()\n\t\t\texpect(result).toEqual({ avgAmount: 30 })\n\t\t})\n\n\t\ttest('min returns minimum value', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().min(OrderSchema.fields.amount, 'lowest').run()\n\t\t\texpect(result).toEqual({ lowest: 10 })\n\t\t})\n\n\t\ttest('max returns maximum value', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().max(OrderSchema.fields.amount, 'highest').run()\n\t\t\texpect(result).toEqual({ highest: 50 })\n\t\t})\n\n\t\ttest('countDistinct returns unique value count', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().countDistinct(OrderSchema.fields.product, 'unique').run()\n\t\t\texpect(result).toEqual({ unique: 2 })\n\t\t})\n\n\t\ttest('min on string field returns lexicographic minimum', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().min(OrderSchema.fields.region, 'firstRegion').run()\n\t\t\texpect(result).toEqual({ firstRegion: 'EU' })\n\t\t})\n\n\t\ttest('max on string field returns lexicographic maximum', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().max(OrderSchema.fields.region, 'lastRegion').run()\n\t\t\texpect(result).toEqual({ lastRegion: 'US' })\n\t\t})\n\n\t\ttest('combined aggregators in single chain', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.count('total')\n\t\t\t\t.sum(OrderSchema.fields.amount, 'revenue')\n\t\t\t\t.avg(OrderSchema.fields.amount, 'avgAmount')\n\t\t\t\t.min(OrderSchema.fields.amount, 'lowest')\n\t\t\t\t.max(OrderSchema.fields.amount, 'highest')\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ total: 5, revenue: 150, avgAmount: 30, lowest: 10, highest: 50 })\n\t\t})\n\n\t\ttest('groupBy single column returns per-group results', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.sum(OrderSchema.fields.amount, 'total')\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us).toEqual({ region: 'US', cnt: 3, total: 90 })\n\t\t\texpect(eu).toEqual({ region: 'EU', cnt: 2, total: 60 })\n\t\t})\n\n\t\ttest('groupBy multi-column returns per-combo results', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region, OrderSchema.fields.product)\n\t\t\t\t.count('cnt')\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(2)\n\t\t\tconst usWidget = result.find((r) => r.region === 'US' && r.product === 'Widget')\n\t\t\tconst euGadget = result.find((r) => r.region === 'EU' && r.product === 'Gadget')\n\t\t\texpect(usWidget?.cnt).toBe(3)\n\t\t\texpect(euGadget?.cnt).toBe(2)\n\t\t})\n\n\t\ttest('where + groupBy filters before grouping', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.where((q) => q.gt('amount', 15))\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.run()\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us?.cnt).toBe(2)\n\t\t\texpect(eu?.cnt).toBe(2)\n\t\t})\n\n\t\ttest('having filters after aggregation', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.sum(OrderSchema.fields.amount, 'total')\n\t\t\t\t.having((q) => q.gt('total', 80))\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(1)\n\t\t\texpect(result[0].region).toBe('US')\n\t\t\texpect(result[0].total).toBe(90)\n\t\t})\n\n\t\ttest('where + having work together', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.where((q) => q.gt('amount', 15))\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.having((q) => q.gte('cnt', 2))\n\t\t\t\t.run()\n\t\t\texpect(result).toHaveLength(2)\n\t\t})\n\n\t\ttest('countDistinct with groupBy', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.countDistinct(OrderSchema.fields.product, 'uniqueProducts')\n\t\t\t\t.run()\n\t\t\tconst us = result.find((r) => r.region === 'US')\n\t\t\tconst eu = result.find((r) => r.region === 'EU')\n\t\t\texpect(us?.uniqueProducts).toBe(1)\n\t\t\texpect(eu?.uniqueProducts).toBe(1)\n\t\t})\n\n\t\ttest('step order is irrelevant: groupBy before or after aggregators', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait seedOrders(repo)\n\t\t\tconst resultA = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.count('cnt')\n\t\t\t\t.run()\n\t\t\tconst resultB = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.count('cnt')\n\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t.run()\n\t\t\texpect(resultA.sort((a, b) => a.region.localeCompare(b.region)))\n\t\t\t\t.toEqual(resultB.sort((a, b) => a.region.localeCompare(b.region)))\n\t\t})\n\n\t\ttest('boundary validation rejects unknown groupBy field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait expect(\n\t\t\t\t(repo.on(OrderSchema).aggregate() as any).groupBy({ name: 'nonexistent', path: ['nonexistent'] }).count('total').run(),\n\t\t\t).rejects.toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('boundary validation rejects unknown having field', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tawait expect(\n\t\t\t\trepo\n\t\t\t\t\t.on(OrderSchema)\n\t\t\t\t\t.aggregate()\n\t\t\t\t\t.groupBy(OrderSchema.fields.region)\n\t\t\t\t\t.count('cnt')\n\t\t\t\t\t.having((q) => q.gt('nonexistent', 0))\n\t\t\t\t\t.run(),\n\t\t\t).rejects.toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('min/max on empty store returns null', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tconst result = await repo\n\t\t\t\t.on(OrderSchema)\n\t\t\t\t.aggregate()\n\t\t\t\t.min(OrderSchema.fields.amount, 'lowest')\n\t\t\t\t.max(OrderSchema.fields.amount, 'highest')\n\t\t\t\t.run()\n\t\t\texpect(result).toEqual({ lowest: null, highest: null })\n\t\t})\n\n\t\ttest('avg on empty store returns zero', async () => {\n\t\t\tconst { repo } = makeAggRepo()\n\t\t\tconst result = await repo.on(OrderSchema).aggregate().avg(OrderSchema.fields.amount, 'avgAmount').run()\n\t\t\texpect(result).toEqual({ avgAmount: 0 })\n\t\t})\n\t})\n\n}\n"],"mappings":"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","names":["EquippedError","OrmValidationError","OrmNotFoundError","OrmReplayError","OrmValidationError","FilterGroup","EquippedError","OrmValidationError","OrmNotFoundError","ulid","v","v","v","v","ulid","Repo","EventLogSchema","makeRepo","OrmValidationError","v","EquippedError","Repo","EventLogSchema","makeRepo","v","Schema","OrmReplayError","HandlerRegistry","fire","Repo","EventLogSchema","makeRepo","v","Schema","OrmValidationError","user","v","Schema","OrmAdapter","Repo","makeEnv","v","Schema","OrmIntrospectionError","OrmAdapter","OrmMigrationError","Repo","makeEnv","v","Schema","OrmValidationError","OrmMigrationError","OrmAdapter","v","Schema","v","v","v","v","IncOp","MulOp","SetOp","UnsetOp","EquippedError","MAX_PRELOAD_DEPTH","isNestedPreloadDef","relationStep","refCol","related","lookup","v","OrmValidationError","Relations","Repo","Schema","v","Instance","OrmValidationError","OrmAdapter","Relations","Repo","Schema","applyTransforms","Instance","mockInstance","v","OrmAdapter","OrmValidationError","Relations","Schema","EquippedError","IncOp","FilterGroup","store"]}