equipped 5.2.9 → 5.3.0-alpha.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 (779) hide show
  1. package/CHANGELOG.md +88 -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 +1705 -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 +1709 -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 +1600 -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-2TCFNKRZ.mjs +1824 -0
  110. package/dist/esm/chunk-2TCFNKRZ.mjs.map +1 -0
  111. package/dist/esm/chunk-6DW4GW3R.min.mjs +2 -0
  112. package/dist/esm/chunk-6DW4GW3R.min.mjs.map +1 -0
  113. package/dist/esm/chunk-6SB5M4XH.mjs +795 -0
  114. package/dist/esm/chunk-6SB5M4XH.mjs.map +1 -0
  115. package/dist/esm/chunk-AQY7QVYI.min.mjs +2 -0
  116. package/dist/esm/chunk-AUKXL4EA.min.mjs +2 -0
  117. package/dist/esm/chunk-AUKXL4EA.min.mjs.map +1 -0
  118. package/dist/esm/chunk-BJNIUCPT.min.mjs +2 -0
  119. package/dist/esm/chunk-BJNIUCPT.min.mjs.map +1 -0
  120. package/dist/esm/chunk-DKPZJIIR.mjs +29 -0
  121. package/dist/esm/chunk-DKPZJIIR.mjs.map +1 -0
  122. package/dist/esm/chunk-DSUJ5FUL.min.mjs +2 -0
  123. package/dist/esm/chunk-DSUJ5FUL.min.mjs.map +1 -0
  124. package/dist/esm/chunk-ECBJ3NT3.min.mjs +2 -0
  125. package/dist/esm/chunk-ECBJ3NT3.min.mjs.map +1 -0
  126. package/dist/{types/events/types/kafka.js → esm/chunk-I4BB436E.mjs} +60 -37
  127. package/dist/esm/chunk-I4BB436E.mjs.map +1 -0
  128. package/dist/esm/chunk-IEBC3OWN.mjs +22 -0
  129. package/dist/esm/chunk-IEBC3OWN.mjs.map +1 -0
  130. package/dist/esm/chunk-J5LGTIGS.mjs +10 -0
  131. package/dist/esm/chunk-KW3PBDFD.mjs +53 -0
  132. package/dist/esm/chunk-KW3PBDFD.mjs.map +1 -0
  133. package/dist/esm/chunk-LTDVZJYJ.min.mjs +32 -0
  134. package/dist/esm/chunk-LTDVZJYJ.min.mjs.map +1 -0
  135. package/dist/esm/chunk-MYGAF2AC.min.mjs +2 -0
  136. package/dist/esm/chunk-MYGAF2AC.min.mjs.map +1 -0
  137. package/dist/esm/chunk-OXI6IKAM.min.mjs +2 -0
  138. package/dist/esm/chunk-OXI6IKAM.min.mjs.map +1 -0
  139. package/dist/esm/chunk-RIRBNBTC.mjs +113 -0
  140. package/dist/esm/chunk-RIRBNBTC.mjs.map +1 -0
  141. package/dist/esm/chunk-TWKHVLLT.mjs +1280 -0
  142. package/dist/esm/chunk-TWKHVLLT.mjs.map +1 -0
  143. package/dist/esm/chunk-VCCS7CAI.mjs +8 -0
  144. package/dist/esm/chunk-VCCS7CAI.mjs.map +1 -0
  145. package/dist/esm/chunk-WHIWTP2Z.min.mjs +2 -0
  146. package/dist/esm/chunk-WHIWTP2Z.min.mjs.map +1 -0
  147. package/dist/esm/chunk-YTHRK2PO.mjs +126 -0
  148. package/dist/esm/chunk-YTHRK2PO.mjs.map +1 -0
  149. package/dist/esm/chunk-YTM6ZURZ.min.mjs +2 -0
  150. package/dist/esm/chunk-YTM6ZURZ.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-GP3G26B6.min.mjs +2 -0
  184. package/dist/esm/introspection-GP3G26B6.min.mjs.map +1 -0
  185. package/dist/esm/introspection-Y7EXSYPD.mjs +10 -0
  186. package/dist/esm/introspection-Y7EXSYPD.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 +126 -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/{types/server/impls/fastify.js → esm/server/adapters/fastify/index.mjs} +56 -45
  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-3PpBAx1K.d.ts} +58 -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-32DMHN3G.js +1823 -0
  248. package/dist/types/chunk-4LRJJSGG.js +112 -0
  249. package/dist/types/chunk-A2MRYMCA.js +1279 -0
  250. package/dist/types/chunk-H6JBLKX5.js +794 -0
  251. package/dist/{esm/events/types/kafka.mjs → types/chunk-IAHTILKJ.js} +59 -38
  252. package/dist/types/chunk-JZ2JTENY.js +125 -0
  253. package/dist/types/chunk-KZKFYO4V.js +7 -0
  254. package/dist/types/chunk-LN3A6R4Y.js +28 -0
  255. package/dist/types/chunk-LWUMIHL4.js +21 -0
  256. package/dist/types/chunk-MLKGABMK.js +9 -0
  257. package/dist/types/chunk-XOU2A2Y6.js +52 -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-ZQCAW254.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 +194 -0
  293. package/dist/types/server/adapters/express/index.js +125 -0
  294. package/dist/types/server/adapters/fastify/index.d.ts +219 -0
  295. package/dist/{esm/server/impls/fastify.mjs → types/server/adapters/fastify/index.js} +55 -46
  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 +154 -15
  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.map +0 -1
  644. package/dist/esm/server/middlewares/index.min.mjs +0 -2
  645. package/dist/esm/server/middlewares/index.min.mjs.map +0 -1
  646. package/dist/esm/server/middlewares/index.mjs +0 -2
  647. package/dist/esm/server/middlewares/index.mjs.map +0 -1
  648. package/dist/esm/server/middlewares/requireAuthUser.min.mjs +0 -2
  649. package/dist/esm/server/middlewares/requireAuthUser.min.mjs.map +0 -1
  650. package/dist/esm/server/middlewares/requireAuthUser.mjs +0 -22
  651. package/dist/esm/server/middlewares/requireAuthUser.mjs.map +0 -1
  652. package/dist/esm/server/openapi.min.mjs +0 -30
  653. package/dist/esm/server/openapi.min.mjs.map +0 -1
  654. package/dist/esm/server/openapi.mjs +0 -191
  655. package/dist/esm/server/openapi.mjs.map +0 -1
  656. package/dist/esm/server/pipes.min.mjs +0 -2
  657. package/dist/esm/server/pipes.min.mjs.map +0 -1
  658. package/dist/esm/server/pipes.mjs +0 -67
  659. package/dist/esm/server/pipes.mjs.map +0 -1
  660. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs +0 -2
  661. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs.map +0 -1
  662. package/dist/esm/server/requests-auth-methods/apiKeys.mjs +0 -21
  663. package/dist/esm/server/requests-auth-methods/apiKeys.mjs.map +0 -1
  664. package/dist/esm/server/requests-auth-methods/base.min.mjs +0 -2
  665. package/dist/esm/server/requests-auth-methods/base.min.mjs.map +0 -1
  666. package/dist/esm/server/requests-auth-methods/base.mjs +0 -20
  667. package/dist/esm/server/requests-auth-methods/base.mjs.map +0 -1
  668. package/dist/esm/server/requests-auth-methods/index.min.mjs +0 -2
  669. package/dist/esm/server/requests-auth-methods/index.min.mjs.map +0 -1
  670. package/dist/esm/server/requests-auth-methods/index.mjs +0 -4
  671. package/dist/esm/server/requests-auth-methods/index.mjs.map +0 -1
  672. package/dist/esm/server/requests-auth-methods/jwt.min.mjs +0 -2
  673. package/dist/esm/server/requests-auth-methods/jwt.min.mjs.map +0 -1
  674. package/dist/esm/server/requests-auth-methods/jwt.mjs +0 -78
  675. package/dist/esm/server/requests-auth-methods/jwt.mjs.map +0 -1
  676. package/dist/esm/server/requests.min.mjs +0 -2
  677. package/dist/esm/server/requests.min.mjs.map +0 -1
  678. package/dist/esm/server/requests.mjs +0 -80
  679. package/dist/esm/server/requests.mjs.map +0 -1
  680. package/dist/esm/server/routes.min.mjs +0 -2
  681. package/dist/esm/server/routes.min.mjs.map +0 -1
  682. package/dist/esm/server/routes.mjs +0 -74
  683. package/dist/esm/server/routes.mjs.map +0 -1
  684. package/dist/esm/server/sockets.min.mjs +0 -2
  685. package/dist/esm/server/sockets.min.mjs.map +0 -1
  686. package/dist/esm/server/sockets.mjs +0 -126
  687. package/dist/esm/server/sockets.mjs.map +0 -1
  688. package/dist/esm/server/types.min.mjs +0 -2
  689. package/dist/esm/server/types.min.mjs.map +0 -1
  690. package/dist/esm/server/types.mjs +0 -34
  691. package/dist/esm/server/types.mjs.map +0 -1
  692. package/dist/esm/types/overrides.min.mjs +0 -1
  693. package/dist/esm/types/overrides.mjs +0 -1
  694. package/dist/esm/utilities/authProviders.min.mjs +0 -2
  695. package/dist/esm/utilities/authProviders.min.mjs.map +0 -1
  696. package/dist/esm/utilities/authProviders.mjs +0 -53
  697. package/dist/esm/utilities/authProviders.mjs.map +0 -1
  698. package/dist/esm/utilities/hash.min.mjs +0 -2
  699. package/dist/esm/utilities/hash.min.mjs.map +0 -1
  700. package/dist/esm/utilities/hash.mjs +0 -17
  701. package/dist/esm/utilities/hash.mjs.map +0 -1
  702. package/dist/esm/utilities/json.min.mjs +0 -2
  703. package/dist/esm/utilities/json.min.mjs.map +0 -1
  704. package/dist/esm/utilities/json.mjs +0 -16
  705. package/dist/esm/utilities/json.mjs.map +0 -1
  706. package/dist/esm/utilities/media.min.mjs +0 -2
  707. package/dist/esm/utilities/media.min.mjs.map +0 -1
  708. package/dist/esm/utilities/media.mjs +0 -13
  709. package/dist/esm/utilities/media.mjs.map +0 -1
  710. package/dist/esm/utilities/random.min.mjs +0 -2
  711. package/dist/esm/utilities/random.min.mjs.map +0 -1
  712. package/dist/esm/utilities/random.mjs +0 -12
  713. package/dist/esm/utilities/random.mjs.map +0 -1
  714. package/dist/esm/utilities/retry.min.mjs +0 -2
  715. package/dist/esm/utilities/retry.min.mjs.map +0 -1
  716. package/dist/esm/utilities/retry.mjs +0 -14
  717. package/dist/esm/utilities/retry.mjs.map +0 -1
  718. package/dist/esm/validations/valleyed.min.mjs +0 -2
  719. package/dist/esm/validations/valleyed.min.mjs.map +0 -1
  720. package/dist/esm/validations/valleyed.mjs +0 -43
  721. package/dist/esm/validations/valleyed.mjs.map +0 -1
  722. package/dist/types/audit/events.js +0 -100
  723. package/dist/types/audit/index.d.ts +0 -44
  724. package/dist/types/audit/index.js +0 -1
  725. package/dist/types/cache/base.js +0 -5
  726. package/dist/types/cache/pipes.js +0 -15
  727. package/dist/types/cache/types/in-memory.js +0 -46
  728. package/dist/types/cache/types/redis.js +0 -54
  729. package/dist/types/db-C8YY1yTO.d.ts +0 -14
  730. package/dist/types/db-Dj1SGto0.d.ts +0 -24
  731. package/dist/types/dbs/base/changes.js +0 -35
  732. package/dist/types/dbs/base/core.js +0 -0
  733. package/dist/types/dbs/base/db.js +0 -13
  734. package/dist/types/dbs/base/types.js +0 -1
  735. package/dist/types/dbs/mongo/changes.js +0 -80
  736. package/dist/types/dbs/mongo/db.js +0 -224
  737. package/dist/types/dbs/mongo/query.js +0 -65
  738. package/dist/types/dbs/pipes.js +0 -103
  739. package/dist/types/errors/equippedError.js +0 -11
  740. package/dist/types/errors/requestError.js +0 -11
  741. package/dist/types/errors/types/badRequestError.js +0 -11
  742. package/dist/types/errors/types/notAuthenticatedError.js +0 -11
  743. package/dist/types/errors/types/notAuthorizedError.js +0 -11
  744. package/dist/types/errors/types/notFoundError.js +0 -11
  745. package/dist/types/errors/types/tokenExpired.js +0 -11
  746. package/dist/types/errors/types/validationError.js +0 -15
  747. package/dist/types/events/base.js +0 -5
  748. package/dist/types/events/pipes.js +0 -27
  749. package/dist/types/events/types/rabbitmq.js +0 -53
  750. package/dist/types/instance/hooks.js +0 -25
  751. package/dist/types/instance/settings.js +0 -56
  752. package/dist/types/jobs/pipes.js +0 -12
  753. package/dist/types/kafka-Cf-TUJgv.d.ts +0 -54
  754. package/dist/types/server/impls/base.js +0 -210
  755. package/dist/types/server/impls/express.js +0 -110
  756. package/dist/types/server/middlewares/index.js +0 -1
  757. package/dist/types/server/middlewares/requireAuthUser.js +0 -21
  758. package/dist/types/server/openapi.js +0 -190
  759. package/dist/types/server/pipes.js +0 -66
  760. package/dist/types/server/requests-auth-methods/apiKeys.js +0 -20
  761. package/dist/types/server/requests-auth-methods/base.js +0 -19
  762. package/dist/types/server/requests-auth-methods/index.js +0 -3
  763. package/dist/types/server/requests-auth-methods/jwt.js +0 -77
  764. package/dist/types/server/requests.js +0 -79
  765. package/dist/types/server/routes.js +0 -73
  766. package/dist/types/server/sockets.js +0 -125
  767. package/dist/types/server/types.js +0 -33
  768. package/dist/types/types/overrides.js +0 -0
  769. package/dist/types/utilities/authProviders.js +0 -52
  770. package/dist/types/utilities/hash.js +0 -16
  771. package/dist/types/utilities/json.js +0 -15
  772. package/dist/types/utilities/media.js +0 -12
  773. package/dist/types/utilities/random.js +0 -11
  774. package/dist/types/utilities/retry.js +0 -13
  775. package/dist/types/validations/valleyed.js +0 -42
  776. /package/dist/esm/{dbs/base/core.min.mjs.map → cache/adapters/redis/index.min.mjs.map} +0 -0
  777. /package/dist/esm/{dbs/base/core.mjs.map → cache/adapters/redis/index.mjs.map} +0 -0
  778. /package/dist/esm/{types/overrides.min.mjs.map → chunk-AQY7QVYI.min.mjs.map} +0 -0
  779. /package/dist/esm/{types/overrides.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
@@ -0,0 +1,1539 @@
1
+ import {
2
+ Filter,
3
+ FilterGroup,
4
+ IncOp,
5
+ MaxOp,
6
+ MinOp,
7
+ MulOp,
8
+ OrmAdapter,
9
+ PatchOp,
10
+ PullOp,
11
+ PushOp,
12
+ UnsetOp,
13
+ flattenOps
14
+ } from "../../../chunk-TWKHVLLT.mjs";
15
+ import {
16
+ EquippedError,
17
+ configurable
18
+ } from "../../../chunk-2TCFNKRZ.mjs";
19
+ import "../../../chunk-VCCS7CAI.mjs";
20
+ import "../../../chunk-J5LGTIGS.mjs";
21
+
22
+ // src/orm/adapters/mongodb/index.ts
23
+ import { AsyncLocalStorage } from "async_hooks";
24
+ import { MongoClient } from "mongodb";
25
+ import { v } from "valleyed";
26
+
27
+ // src/orm/adapters/mongodb/query.ts
28
+ function compileMongoFilter(group, primaryKey) {
29
+ const clauses = [];
30
+ for (const child of group.children) {
31
+ const compiled = compileChild(child, primaryKey);
32
+ if (compiled) clauses.push(compiled);
33
+ }
34
+ if (clauses.length === 0) return {};
35
+ if (clauses.length === 1) return clauses[0];
36
+ return { $and: clauses };
37
+ }
38
+ function compileMongoQuery(group, options, primaryKey) {
39
+ const mongoFilter = compileMongoFilter(group, primaryKey);
40
+ const orderBys = options?.orderBy ?? [];
41
+ const sort = orderBys.length > 0 ? Object.fromEntries(orderBys.map((o) => [mapField(o.field, primaryKey), o.direction === "desc" ? -1 : 1])) : void 0;
42
+ const selects = options?.select ?? [];
43
+ const projection = selects.length > 0 ? Object.fromEntries(selects.map((f) => [mapField(f, primaryKey), 1])) : void 0;
44
+ return {
45
+ filter: mongoFilter,
46
+ sort,
47
+ limit: options?.limit,
48
+ skip: options?.offset,
49
+ projection
50
+ };
51
+ }
52
+ function mapField(field, primaryKey) {
53
+ if (field === "id" && primaryKey === "_id") return "_id";
54
+ return field;
55
+ }
56
+ function compileFilter(f, primaryKey) {
57
+ const field = mapField(f.field, primaryKey);
58
+ switch (f.op) {
59
+ case "eq":
60
+ return { [field]: { $eq: f.value } };
61
+ case "ne":
62
+ return { [field]: { $ne: f.value } };
63
+ case "gt":
64
+ return { [field]: { $gt: f.value } };
65
+ case "gte":
66
+ return { [field]: { $gte: f.value } };
67
+ case "lt":
68
+ return { [field]: { $lt: f.value } };
69
+ case "lte":
70
+ return { [field]: { $lte: f.value } };
71
+ case "in":
72
+ return { [field]: { $in: f.value } };
73
+ case "notIn":
74
+ return { [field]: { $nin: f.value } };
75
+ case "like":
76
+ return { [field]: { $regex: new RegExp(String(f.value), "i") } };
77
+ case "exists":
78
+ return { [field]: { $exists: true, $ne: null } };
79
+ case "notExists":
80
+ return { [field]: { $eq: null } };
81
+ case "contains":
82
+ return { [field]: { $all: Array.isArray(f.value) ? f.value : [f.value] } };
83
+ case "notContains":
84
+ return { [field]: { $not: { $all: Array.isArray(f.value) ? f.value : [f.value] } } };
85
+ default:
86
+ return { [field]: { $eq: f.value } };
87
+ }
88
+ }
89
+ function compileChild(child, primaryKey) {
90
+ if (child instanceof Filter) return compileFilter(child, primaryKey);
91
+ if (child instanceof FilterGroup) return compileGroup(child, primaryKey);
92
+ return null;
93
+ }
94
+ function compileGroup(group, primaryKey) {
95
+ const clauses = group.children.map((c) => compileChild(c, primaryKey)).filter((c) => c !== null);
96
+ if (clauses.length === 0) return null;
97
+ if (clauses.length === 1) return clauses[0];
98
+ return { [group.op === "or" ? "$or" : "$and"]: clauses };
99
+ }
100
+ function compileMongoUpdate(data) {
101
+ const $set = {};
102
+ const $inc = {};
103
+ const $mul = {};
104
+ const $min = {};
105
+ const $max = {};
106
+ const $unset = {};
107
+ const $push = {};
108
+ const $pull = {};
109
+ for (const [key, value] of Object.entries(data)) {
110
+ if (value instanceof IncOp) $inc[key] = value.value;
111
+ else if (value instanceof MulOp) $mul[key] = value.value;
112
+ else if (value instanceof MinOp) $min[key] = value.value;
113
+ else if (value instanceof MaxOp) $max[key] = value.value;
114
+ else if (value instanceof UnsetOp) $unset[key] = "";
115
+ else if (value instanceof PushOp) $push[key] = value.value;
116
+ else if (value instanceof PullOp) $pull[key] = value.value;
117
+ else if (value instanceof PatchOp) {
118
+ const patchVal = value.value;
119
+ for (const [subKey, subVal] of Object.entries(patchVal)) {
120
+ $set[`${key}.${subKey}`] = subVal;
121
+ }
122
+ } else $set[key] = value;
123
+ }
124
+ const result = {};
125
+ if (Object.keys($set).length) result.$set = $set;
126
+ if (Object.keys($inc).length) result.$inc = $inc;
127
+ if (Object.keys($mul).length) result.$mul = $mul;
128
+ if (Object.keys($min).length) result.$min = $min;
129
+ if (Object.keys($max).length) result.$max = $max;
130
+ if (Object.keys($unset).length) result.$unset = $unset;
131
+ if (Object.keys($push).length) result.$push = $push;
132
+ if (Object.keys($pull).length) result.$pull = $pull;
133
+ return result;
134
+ }
135
+ function compileMongoOps(ops) {
136
+ return compileMongoUpdate(flattenOps(ops));
137
+ }
138
+ function compileMongoAggregate(spec, primaryKey) {
139
+ const pipeline = [];
140
+ if (spec.where) {
141
+ const match = compileMongoFilter(spec.where, primaryKey);
142
+ if (Object.keys(match).length > 0) pipeline.push({ $match: match });
143
+ }
144
+ const groupId = spec.groupBy.length > 0 ? Object.fromEntries(spec.groupBy.map((f) => [f, `$${mapField(f, primaryKey)}`])) : null;
145
+ const accumulators = {};
146
+ for (const agg of spec.aggregates) {
147
+ const fieldRef = agg.field ? `$${mapField(agg.field, primaryKey)}` : void 0;
148
+ switch (agg.fn) {
149
+ case "count":
150
+ accumulators[agg.alias] = { $sum: 1 };
151
+ break;
152
+ case "countDistinct":
153
+ accumulators[agg.alias] = { $addToSet: fieldRef };
154
+ break;
155
+ case "sum":
156
+ case "avg":
157
+ case "min":
158
+ case "max":
159
+ accumulators[agg.alias] = { [`$${agg.fn}`]: fieldRef };
160
+ break;
161
+ }
162
+ }
163
+ pipeline.push({ $group: { _id: groupId, ...accumulators } });
164
+ const project = { _id: 0 };
165
+ for (const f of spec.groupBy) {
166
+ project[f] = `$_id.${f}`;
167
+ }
168
+ for (const agg of spec.aggregates) {
169
+ if (agg.fn === "countDistinct") {
170
+ project[agg.alias] = { $size: `$${agg.alias}` };
171
+ } else {
172
+ project[agg.alias] = 1;
173
+ }
174
+ }
175
+ pipeline.push({ $project: project });
176
+ if (spec.having) {
177
+ const havingMatch = compileMongoFilter(spec.having, "");
178
+ if (Object.keys(havingMatch).length > 0) pipeline.push({ $match: havingMatch });
179
+ }
180
+ return pipeline;
181
+ }
182
+ if (void 0) {
183
+ const { describe, test, expect } = void 0;
184
+ const { FilterGroup: FilterGroup2 } = await null;
185
+ const { OrderBy } = await null;
186
+ describe("compileMongoFilter", () => {
187
+ test("empty filter group compiles to empty object", () => {
188
+ const group = FilterGroup2.create();
189
+ expect(compileMongoFilter(group, "id")).toEqual({});
190
+ });
191
+ test("single eq filter compiles to $eq", () => {
192
+ const group = FilterGroup2.create().eq("name", "Alice");
193
+ expect(compileMongoFilter(group, "id")).toEqual({ name: { $eq: "Alice" } });
194
+ });
195
+ test("ne, gt, gte, lt, lte compile to corresponding Mongo ops", () => {
196
+ expect(compileMongoFilter(FilterGroup2.create().ne("age", 5), "id")).toEqual({ age: { $ne: 5 } });
197
+ expect(compileMongoFilter(FilterGroup2.create().gt("age", 10), "id")).toEqual({ age: { $gt: 10 } });
198
+ expect(compileMongoFilter(FilterGroup2.create().gte("age", 20), "id")).toEqual({ age: { $gte: 20 } });
199
+ expect(compileMongoFilter(FilterGroup2.create().lt("age", 30), "id")).toEqual({ age: { $lt: 30 } });
200
+ expect(compileMongoFilter(FilterGroup2.create().lte("age", 40), "id")).toEqual({ age: { $lte: 40 } });
201
+ });
202
+ test("in compiles to $in", () => {
203
+ const group = FilterGroup2.create().in("status", ["a", "b"]);
204
+ expect(compileMongoFilter(group, "id")).toEqual({ status: { $in: ["a", "b"] } });
205
+ });
206
+ test("notIn compiles to $nin (canonical name notIn, Mongo op $nin)", () => {
207
+ const group = FilterGroup2.create().notIn("status", ["x", "y"]);
208
+ expect(compileMongoFilter(group, "id")).toEqual({ status: { $nin: ["x", "y"] } });
209
+ });
210
+ test("like compiles to $regex with case-insensitive flag", () => {
211
+ const group = FilterGroup2.create().like("name", "ali");
212
+ const result = compileMongoFilter(group, "id");
213
+ expect(result.name).toEqual({ $regex: expect.any(RegExp) });
214
+ const regex = result.name.$regex;
215
+ expect(regex.flags).toBe("i");
216
+ expect(regex.test("Alice")).toBe(true);
217
+ });
218
+ test("exists compiles to $exists: true, $ne: null", () => {
219
+ const group = FilterGroup2.create().exists("val");
220
+ expect(compileMongoFilter(group, "id")).toEqual({ val: { $exists: true, $ne: null } });
221
+ });
222
+ test("notExists is its own op \u2014 compiles to $eq: null", () => {
223
+ const group = FilterGroup2.create().notExists("val");
224
+ expect(compileMongoFilter(group, "id")).toEqual({ val: { $eq: null } });
225
+ });
226
+ test("contains compiles to $all", () => {
227
+ const group = FilterGroup2.create().contains("tags", ["a", "b"]);
228
+ expect(compileMongoFilter(group, "id")).toEqual({ tags: { $all: ["a", "b"] } });
229
+ });
230
+ test("notContains compiles to $not: { $all }", () => {
231
+ const group = FilterGroup2.create().notContains("tags", ["x"]);
232
+ expect(compileMongoFilter(group, "id")).toEqual({ tags: { $not: { $all: ["x"] } } });
233
+ });
234
+ test("multiple clauses produce $and", () => {
235
+ const group = FilterGroup2.create().eq("a", 1).gt("b", 2);
236
+ const result = compileMongoFilter(group, "id");
237
+ expect(result).toEqual({ $and: [{ a: { $eq: 1 } }, { b: { $gt: 2 } }] });
238
+ });
239
+ test("nested and/or groups compile correctly", () => {
240
+ const group = FilterGroup2.create().and([
241
+ (q) => q.eq("a", 1),
242
+ (q) => q.or([(g) => g.eq("b", 2), (g) => g.eq("c", 3)])
243
+ ]);
244
+ const result = compileMongoFilter(group, "id");
245
+ expect(result).toEqual({
246
+ $and: [{ a: { $eq: 1 } }, { $or: [{ b: { $eq: 2 } }, { c: { $eq: 3 } }] }]
247
+ });
248
+ });
249
+ test("maps id field to _id when primaryKey is _id", () => {
250
+ const group = FilterGroup2.create().eq("id", "abc");
251
+ expect(compileMongoFilter(group, "_id")).toEqual({ _id: { $eq: "abc" } });
252
+ });
253
+ });
254
+ describe("compileMongoQuery", () => {
255
+ test("options: sort, limit, skip, projection", () => {
256
+ const group = FilterGroup2.create().eq("active", true);
257
+ const options = {
258
+ orderBy: [new OrderBy("name", "asc"), new OrderBy("age", "desc")],
259
+ limit: 10,
260
+ offset: 5,
261
+ select: ["name", "age"]
262
+ };
263
+ const result = compileMongoQuery(group, options, "id");
264
+ expect(result.filter).toEqual({ active: { $eq: true } });
265
+ expect(result.sort).toEqual({ name: 1, age: -1 });
266
+ expect(result.limit).toBe(10);
267
+ expect(result.skip).toBe(5);
268
+ expect(result.projection).toEqual({ name: 1, age: 1 });
269
+ });
270
+ test("undefined options returns undefined for sort/limit/skip/projection", () => {
271
+ const group = FilterGroup2.create().eq("x", 1);
272
+ const result = compileMongoQuery(group, void 0, "id");
273
+ expect(result.sort).toBeUndefined();
274
+ expect(result.limit).toBeUndefined();
275
+ expect(result.skip).toBeUndefined();
276
+ expect(result.projection).toBeUndefined();
277
+ });
278
+ });
279
+ describe("compileMongoUpdate", () => {
280
+ test("plain values go into $set", () => {
281
+ const result = compileMongoUpdate({ name: "Alice", age: 30 });
282
+ expect(result).toEqual({ $set: { name: "Alice", age: 30 } });
283
+ });
284
+ test("IncOp goes into $inc", () => {
285
+ const result = compileMongoUpdate({ count: new IncOp("count", 5) });
286
+ expect(result).toEqual({ $inc: { count: 5 } });
287
+ });
288
+ test("MulOp goes into $mul", () => {
289
+ const result = compileMongoUpdate({ score: new MulOp("score", 2) });
290
+ expect(result).toEqual({ $mul: { score: 2 } });
291
+ });
292
+ test("MinOp/MaxOp go into $min/$max", () => {
293
+ const result = compileMongoUpdate({
294
+ lo: new MinOp("lo", 1),
295
+ hi: new MaxOp("hi", 99)
296
+ });
297
+ expect(result).toEqual({ $min: { lo: 1 }, $max: { hi: 99 } });
298
+ });
299
+ test("UnsetOp goes into $unset", () => {
300
+ const result = compileMongoUpdate({ old: new UnsetOp("old") });
301
+ expect(result).toEqual({ $unset: { old: "" } });
302
+ });
303
+ test("PushOp/PullOp go into $push/$pull", () => {
304
+ const result = compileMongoUpdate({
305
+ tags: new PushOp("tags", "new"),
306
+ removed: new PullOp("removed", "old")
307
+ });
308
+ expect(result).toEqual({ $push: { tags: "new" }, $pull: { removed: "old" } });
309
+ });
310
+ test("PatchOp produces dot-notation $set entries", () => {
311
+ const result = compileMongoUpdate({ meta: new PatchOp("meta", { a: 1, b: 2 }) });
312
+ expect(result).toEqual({ $set: { "meta.a": 1, "meta.b": 2 } });
313
+ });
314
+ test("empty data produces empty result", () => {
315
+ const result = compileMongoUpdate({});
316
+ expect(result).toEqual({});
317
+ });
318
+ });
319
+ describe("compileMongoOps", () => {
320
+ test("SetOp values go into $set", () => {
321
+ const result = compileMongoOps([new SetOp({ name: "Bob", age: 25 })]);
322
+ expect(result).toEqual({ $set: { name: "Bob", age: 25 } });
323
+ });
324
+ test("mixed ops compile to separate Mongo update operators", () => {
325
+ const result = compileMongoOps([
326
+ new SetOp({ name: "Alice" }),
327
+ new IncOp("count", 1),
328
+ new PushOp("tags", "x")
329
+ ]);
330
+ expect(result).toEqual({
331
+ $set: { name: "Alice" },
332
+ $inc: { count: 1 },
333
+ $push: { tags: "x" }
334
+ });
335
+ });
336
+ test("empty ops produces empty result", () => {
337
+ expect(compileMongoOps([])).toEqual({});
338
+ });
339
+ });
340
+ describe("compileMongoAggregate", () => {
341
+ test("bare count produces $group with $sum:1 and $project", () => {
342
+ const spec = {
343
+ aggregates: [{ fn: "count", alias: "total" }],
344
+ groupBy: []
345
+ };
346
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
347
+ { $group: { _id: null, total: { $sum: 1 } } },
348
+ { $project: { _id: 0, total: 1 } }
349
+ ]);
350
+ });
351
+ test("multi-aggregator produces all accumulators in $group", () => {
352
+ const spec = {
353
+ aggregates: [
354
+ { fn: "count", alias: "total" },
355
+ { fn: "sum", field: "amount", alias: "revenue" },
356
+ { fn: "avg", field: "price", alias: "avgPrice" }
357
+ ],
358
+ groupBy: []
359
+ };
360
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
361
+ {
362
+ $group: {
363
+ _id: null,
364
+ total: { $sum: 1 },
365
+ revenue: { $sum: "$amount" },
366
+ avgPrice: { $avg: "$price" }
367
+ }
368
+ },
369
+ { $project: { _id: 0, total: 1, revenue: 1, avgPrice: 1 } }
370
+ ]);
371
+ });
372
+ test("single-column groupBy produces composite _id and $project lift", () => {
373
+ const spec = {
374
+ aggregates: [{ fn: "count", alias: "total" }],
375
+ groupBy: ["region"]
376
+ };
377
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
378
+ { $group: { _id: { region: "$region" }, total: { $sum: 1 } } },
379
+ { $project: { _id: 0, region: "$_id.region", total: 1 } }
380
+ ]);
381
+ });
382
+ test("multi-column groupBy via composite _id", () => {
383
+ const spec = {
384
+ aggregates: [{ fn: "sum", field: "amount", alias: "revenue" }],
385
+ groupBy: ["region", "year"]
386
+ };
387
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
388
+ {
389
+ $group: {
390
+ _id: { region: "$region", year: "$year" },
391
+ revenue: { $sum: "$amount" }
392
+ }
393
+ },
394
+ {
395
+ $project: {
396
+ _id: 0,
397
+ region: "$_id.region",
398
+ year: "$_id.year",
399
+ revenue: 1
400
+ }
401
+ }
402
+ ]);
403
+ });
404
+ test("where-only emits $match before $group", () => {
405
+ const spec = {
406
+ where: FilterGroup2.create().eq("active", true),
407
+ aggregates: [{ fn: "count", alias: "total" }],
408
+ groupBy: []
409
+ };
410
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
411
+ { $match: { active: { $eq: true } } },
412
+ { $group: { _id: null, total: { $sum: 1 } } },
413
+ { $project: { _id: 0, total: 1 } }
414
+ ]);
415
+ });
416
+ test("having-only emits $match after $project", () => {
417
+ const spec = {
418
+ aggregates: [{ fn: "count", alias: "total" }],
419
+ groupBy: ["region"],
420
+ having: FilterGroup2.create().gt("total", 5)
421
+ };
422
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
423
+ { $group: { _id: { region: "$region" }, total: { $sum: 1 } } },
424
+ { $project: { _id: 0, region: "$_id.region", total: 1 } },
425
+ { $match: { total: { $gt: 5 } } }
426
+ ]);
427
+ });
428
+ test("where + having produces both $match stages", () => {
429
+ const spec = {
430
+ where: FilterGroup2.create().eq("active", true),
431
+ aggregates: [{ fn: "sum", field: "amount", alias: "revenue" }],
432
+ groupBy: ["region"],
433
+ having: FilterGroup2.create().gte("revenue", 1e3)
434
+ };
435
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
436
+ { $match: { active: { $eq: true } } },
437
+ {
438
+ $group: {
439
+ _id: { region: "$region" },
440
+ revenue: { $sum: "$amount" }
441
+ }
442
+ },
443
+ { $project: { _id: 0, region: "$_id.region", revenue: 1 } },
444
+ { $match: { revenue: { $gte: 1e3 } } }
445
+ ]);
446
+ });
447
+ test("countDistinct uses $addToSet in $group and $size in $project", () => {
448
+ const spec = {
449
+ aggregates: [{ fn: "countDistinct", field: "userId", alias: "uniqueUsers" }],
450
+ groupBy: []
451
+ };
452
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
453
+ { $group: { _id: null, uniqueUsers: { $addToSet: "$userId" } } },
454
+ { $project: { _id: 0, uniqueUsers: { $size: "$uniqueUsers" } } }
455
+ ]);
456
+ });
457
+ test("min/max produce $min/$max accumulators", () => {
458
+ const spec = {
459
+ aggregates: [
460
+ { fn: "min", field: "price", alias: "lowest" },
461
+ { fn: "max", field: "price", alias: "highest" }
462
+ ],
463
+ groupBy: []
464
+ };
465
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
466
+ {
467
+ $group: {
468
+ _id: null,
469
+ lowest: { $min: "$price" },
470
+ highest: { $max: "$price" }
471
+ }
472
+ },
473
+ { $project: { _id: 0, lowest: 1, highest: 1 } }
474
+ ]);
475
+ });
476
+ test("field-name mapping: id field maps to _id when primaryKey is _id", () => {
477
+ const spec = {
478
+ where: FilterGroup2.create().eq("id", "abc"),
479
+ aggregates: [{ fn: "count", alias: "total" }],
480
+ groupBy: ["id"]
481
+ };
482
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
483
+ { $match: { _id: { $eq: "abc" } } },
484
+ { $group: { _id: { id: "$_id" }, total: { $sum: 1 } } },
485
+ { $project: { _id: 0, id: "$_id.id", total: 1 } }
486
+ ]);
487
+ });
488
+ test("countDistinct with groupBy combines $addToSet, groupBy lift, and $size", () => {
489
+ const spec = {
490
+ aggregates: [{ fn: "countDistinct", field: "category", alias: "uniqueCats" }],
491
+ groupBy: ["region"]
492
+ };
493
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
494
+ {
495
+ $group: {
496
+ _id: { region: "$region" },
497
+ uniqueCats: { $addToSet: "$category" }
498
+ }
499
+ },
500
+ {
501
+ $project: {
502
+ _id: 0,
503
+ region: "$_id.region",
504
+ uniqueCats: { $size: "$uniqueCats" }
505
+ }
506
+ }
507
+ ]);
508
+ });
509
+ test("all six aggregators in a single pipeline", () => {
510
+ const spec = {
511
+ aggregates: [
512
+ { fn: "count", alias: "total" },
513
+ { fn: "countDistinct", field: "status", alias: "uniqueStatuses" },
514
+ { fn: "sum", field: "amount", alias: "totalAmount" },
515
+ { fn: "avg", field: "amount", alias: "avgAmount" },
516
+ { fn: "min", field: "amount", alias: "minAmount" },
517
+ { fn: "max", field: "amount", alias: "maxAmount" }
518
+ ],
519
+ groupBy: ["region"]
520
+ };
521
+ const pipeline = compileMongoAggregate(spec, "_id");
522
+ expect(pipeline).toEqual([
523
+ {
524
+ $group: {
525
+ _id: { region: "$region" },
526
+ total: { $sum: 1 },
527
+ uniqueStatuses: { $addToSet: "$status" },
528
+ totalAmount: { $sum: "$amount" },
529
+ avgAmount: { $avg: "$amount" },
530
+ minAmount: { $min: "$amount" },
531
+ maxAmount: { $max: "$amount" }
532
+ }
533
+ },
534
+ {
535
+ $project: {
536
+ _id: 0,
537
+ region: "$_id.region",
538
+ total: 1,
539
+ uniqueStatuses: { $size: "$uniqueStatuses" },
540
+ totalAmount: 1,
541
+ avgAmount: 1,
542
+ minAmount: 1,
543
+ maxAmount: 1
544
+ }
545
+ }
546
+ ]);
547
+ });
548
+ test("empty where filter is omitted from pipeline", () => {
549
+ const spec = {
550
+ where: FilterGroup2.create(),
551
+ aggregates: [{ fn: "count", alias: "total" }],
552
+ groupBy: []
553
+ };
554
+ expect(compileMongoAggregate(spec, "_id")).toEqual([
555
+ { $group: { _id: null, total: { $sum: 1 } } },
556
+ { $project: { _id: 0, total: 1 } }
557
+ ]);
558
+ });
559
+ });
560
+ }
561
+
562
+ // src/orm/adapters/mongodb/index.ts
563
+ var mongoSchemaConfigPipe = () => v.object({ db: v.string(), col: v.string() });
564
+ var mongoConnectionPipe = () => v.object({
565
+ uri: v.string()
566
+ });
567
+ var MIGRATION_TRACKER_COLLECTION = "equipped_migrations";
568
+ var MongoDbAdapter = class extends configurable(mongoConnectionPipe, OrmAdapter) {
569
+ schemaConfigPipe = mongoSchemaConfigPipe();
570
+ queryableOps = ["eq", "ne", "gt", "gte", "lt", "lte", "in", "notIn", "like", "exists", "notExists", "contains", "notContains"];
571
+ updateOps = ["set", "inc", "mul", "min", "max", "unset", "push", "pull", "patch"];
572
+ aggregateOps = ["count", "countDistinct", "sum", "avg", "min", "max"];
573
+ supportedFieldTypes = ["string", "number", "boolean", "null", "object", "array", "date"];
574
+ client;
575
+ #sessionStore = new AsyncLocalStorage();
576
+ constructor(config, options) {
577
+ super(config);
578
+ this.client = new MongoClient(config.uri, {
579
+ ...options,
580
+ ignoreUndefined: true
581
+ });
582
+ }
583
+ #getCollection(schemaCfg) {
584
+ return this.client.db(schemaCfg.db).collection(schemaCfg.col);
585
+ }
586
+ async connect() {
587
+ try {
588
+ await this.client.connect();
589
+ } catch (error) {
590
+ throw new EquippedError("Failed to connect MongoDB client", { adapter: "mongodb" }, error);
591
+ }
592
+ }
593
+ async disconnect() {
594
+ try {
595
+ await this.client.close();
596
+ } catch (error) {
597
+ throw new EquippedError("Failed to disconnect MongoDB client", { adapter: "mongodb" }, error);
598
+ }
599
+ }
600
+ async findByPk(schema, config, pk) {
601
+ const schemaCfg = config;
602
+ try {
603
+ const pkName = schema.pkField.name;
604
+ const collection = this.#getCollection(schemaCfg);
605
+ const doc = await collection.findOne(
606
+ { [pkName]: pk },
607
+ { session: this.#sessionStore.getStore() }
608
+ );
609
+ return doc;
610
+ } catch (error) {
611
+ throw new EquippedError(
612
+ "MongoDB findByPk failed",
613
+ { adapter: "mongodb", operation: "findByPk", collection: schemaCfg.col },
614
+ error
615
+ );
616
+ }
617
+ }
618
+ async createMany(_schema, config, data) {
619
+ const schemaCfg = config;
620
+ try {
621
+ const collection = this.#getCollection(schemaCfg);
622
+ const docs = data.map((d) => d);
623
+ await collection.insertMany(docs, { session: this.#sessionStore.getStore() });
624
+ return data;
625
+ } catch (error) {
626
+ throw new EquippedError(
627
+ "MongoDB createMany failed",
628
+ { adapter: "mongodb", operation: "createMany", collection: schemaCfg.col },
629
+ error
630
+ );
631
+ }
632
+ }
633
+ async updateByPk(schema, config, pk, ops) {
634
+ const schemaCfg = config;
635
+ try {
636
+ const pkName = schema.pkField.name;
637
+ const collection = this.#getCollection(schemaCfg);
638
+ const update = compileMongoOps(ops);
639
+ if (Object.keys(update).length === 0) {
640
+ return await collection.findOne({ [pkName]: pk }, { session: this.#sessionStore.getStore() });
641
+ }
642
+ return await collection.findOneAndUpdate(
643
+ { [pkName]: pk },
644
+ update,
645
+ { returnDocument: "after", session: this.#sessionStore.getStore() }
646
+ );
647
+ } catch (error) {
648
+ throw new EquippedError(
649
+ "MongoDB updateByPk failed",
650
+ { adapter: "mongodb", operation: "updateByPk", collection: schemaCfg.col },
651
+ error
652
+ );
653
+ }
654
+ }
655
+ async deleteByPk(schema, config, pk) {
656
+ const schemaCfg = config;
657
+ try {
658
+ const pkName = schema.pkField.name;
659
+ const collection = this.#getCollection(schemaCfg);
660
+ return await collection.findOneAndDelete(
661
+ { [pkName]: pk },
662
+ { session: this.#sessionStore.getStore() }
663
+ );
664
+ } catch (error) {
665
+ throw new EquippedError(
666
+ "MongoDB deleteByPk failed",
667
+ { adapter: "mongodb", operation: "deleteByPk", collection: schemaCfg.col },
668
+ error
669
+ );
670
+ }
671
+ }
672
+ async raw(_schema, config, pipeline) {
673
+ const schemaCfg = config;
674
+ try {
675
+ const collection = this.#getCollection(schemaCfg);
676
+ const result = await collection.aggregate(pipeline, { session: this.#sessionStore.getStore() }).toArray();
677
+ return result;
678
+ } catch (error) {
679
+ if (error instanceof EquippedError) throw error;
680
+ throw new EquippedError(
681
+ "MongoDB raw failed",
682
+ { adapter: "mongodb", operation: "raw", collection: schemaCfg.col },
683
+ error
684
+ );
685
+ }
686
+ }
687
+ async aggregate(schema, config, spec) {
688
+ const schemaCfg = config;
689
+ try {
690
+ const pk = schema.pkField.name;
691
+ const collection = this.#getCollection(schemaCfg);
692
+ const pipeline = compileMongoAggregate(spec, pk);
693
+ const result = await collection.aggregate(pipeline, { session: this.#sessionStore.getStore() }).toArray();
694
+ return result;
695
+ } catch (error) {
696
+ if (error instanceof EquippedError) throw error;
697
+ throw new EquippedError(
698
+ "MongoDB aggregate failed",
699
+ { adapter: "mongodb", operation: "aggregate", collection: schemaCfg.col },
700
+ error
701
+ );
702
+ }
703
+ }
704
+ async findMany(schema, config, filter, options) {
705
+ const schemaCfg = config;
706
+ try {
707
+ const pk = schema.pkField.name;
708
+ const { filter: mongoFilter, sort, limit, skip, projection } = compileMongoQuery(filter, options, pk);
709
+ const collection = this.#getCollection(schemaCfg);
710
+ let cursor = collection.find(mongoFilter, {
711
+ session: this.#sessionStore.getStore(),
712
+ projection
713
+ });
714
+ if (sort) cursor = cursor.sort(sort);
715
+ if (limit) cursor = cursor.limit(limit);
716
+ if (skip) cursor = cursor.skip(skip);
717
+ return await cursor.toArray();
718
+ } catch (error) {
719
+ throw new EquippedError(
720
+ "MongoDB findMany failed",
721
+ { adapter: "mongodb", operation: "findMany", collection: schemaCfg.col },
722
+ error
723
+ );
724
+ }
725
+ }
726
+ async count(schema, config, filter) {
727
+ const schemaCfg = config;
728
+ try {
729
+ const pk = schema.pkField.name;
730
+ const collection = this.#getCollection(schemaCfg);
731
+ return await collection.countDocuments(compileMongoFilter(filter, pk), { session: this.#sessionStore.getStore() });
732
+ } catch (error) {
733
+ throw new EquippedError(
734
+ "MongoDB count failed",
735
+ { adapter: "mongodb", operation: "count", collection: schemaCfg.col },
736
+ error
737
+ );
738
+ }
739
+ }
740
+ async *iterateMany(schema, config, filter, options) {
741
+ const schemaCfg = config;
742
+ let cursor;
743
+ try {
744
+ const pk = schema.pkField.name;
745
+ const { filter: mongoFilter, sort, limit, skip, projection } = compileMongoQuery(filter, options, pk);
746
+ const collection = this.#getCollection(schemaCfg);
747
+ cursor = collection.find(mongoFilter, {
748
+ session: this.#sessionStore.getStore(),
749
+ projection
750
+ });
751
+ if (sort) cursor = cursor.sort(sort);
752
+ if (limit) cursor = cursor.limit(limit);
753
+ if (skip) cursor = cursor.skip(skip);
754
+ if (options?.batchSize !== void 0) cursor = cursor.batchSize(options.batchSize);
755
+ for await (const row of cursor) {
756
+ yield row;
757
+ }
758
+ } catch (error) {
759
+ throw new EquippedError(
760
+ "MongoDB iterateMany failed",
761
+ { adapter: "mongodb", operation: "iterateMany", collection: schemaCfg.col },
762
+ error
763
+ );
764
+ } finally {
765
+ await cursor?.close();
766
+ }
767
+ }
768
+ async updateMany(schema, config, filter, data) {
769
+ const schemaCfg = config;
770
+ try {
771
+ const pk = schema.pkField.name;
772
+ const collection = this.#getCollection(schemaCfg);
773
+ const session = this.#sessionStore.getStore();
774
+ const mongoFilter = compileMongoFilter(filter, pk);
775
+ const matchingDocs = await collection.find(mongoFilter, { session, projection: { [pk]: 1 } }).toArray();
776
+ const ids = matchingDocs.map((d) => d[pk]);
777
+ const idFilter = { [pk]: { $in: ids } };
778
+ const update = compileMongoUpdate(data);
779
+ if (Object.keys(update).length > 0) {
780
+ await collection.updateMany(idFilter, update, { session });
781
+ }
782
+ return await collection.find({ [pk]: { $in: ids } }, { session }).toArray();
783
+ } catch (error) {
784
+ throw new EquippedError(
785
+ "MongoDB updateMany failed",
786
+ { adapter: "mongodb", operation: "updateMany", collection: schemaCfg.col },
787
+ error
788
+ );
789
+ }
790
+ }
791
+ async deleteMany(schema, config, filter) {
792
+ const schemaCfg = config;
793
+ try {
794
+ const pk = schema.pkField.name;
795
+ const collection = this.#getCollection(schemaCfg);
796
+ const session = this.#sessionStore.getStore();
797
+ const mongoFilter = compileMongoFilter(filter, pk);
798
+ const docs = await collection.find(mongoFilter, { session }).toArray();
799
+ if (docs.length > 0) {
800
+ await collection.deleteMany(mongoFilter, { session });
801
+ }
802
+ return docs;
803
+ } catch (error) {
804
+ throw new EquippedError(
805
+ "MongoDB deleteMany failed",
806
+ { adapter: "mongodb", operation: "deleteMany", collection: schemaCfg.col },
807
+ error
808
+ );
809
+ }
810
+ }
811
+ async upsertOne(schema, config, filter, create, ops) {
812
+ const schemaCfg = config;
813
+ try {
814
+ const pk = schema.pkField.name;
815
+ const collection = this.#getCollection(schemaCfg);
816
+ const mongoFilter = compileMongoFilter(filter, pk);
817
+ const updateDoc = compileMongoOps(ops);
818
+ const doc = await collection.findOneAndUpdate(
819
+ mongoFilter,
820
+ {
821
+ ...updateDoc,
822
+ $setOnInsert: create
823
+ },
824
+ {
825
+ returnDocument: "after",
826
+ session: this.#sessionStore.getStore(),
827
+ upsert: true
828
+ }
829
+ );
830
+ return doc;
831
+ } catch (error) {
832
+ throw new EquippedError(
833
+ "MongoDB upsertOne failed",
834
+ { adapter: "mongodb", operation: "upsertOne", collection: schemaCfg.col },
835
+ error
836
+ );
837
+ }
838
+ }
839
+ async session(fn) {
840
+ if (this.#sessionStore.getStore()) return fn();
841
+ try {
842
+ const session = await this.client.startSession();
843
+ try {
844
+ return await session.withTransaction(async () => this.#sessionStore.run(session, fn));
845
+ } finally {
846
+ await session.endSession();
847
+ }
848
+ } catch (error) {
849
+ if (error instanceof EquippedError) throw error;
850
+ throw new EquippedError("MongoDB session failed", { adapter: "mongodb", operation: "session" }, error);
851
+ }
852
+ }
853
+ async loadMigrations() {
854
+ const db = this.client.db();
855
+ const docs = await db.collection(MIGRATION_TRACKER_COLLECTION).find({}).toArray();
856
+ return docs.map((d) => ({ id: String(d._id), appliedAt: d.appliedAt }));
857
+ }
858
+ async recordMigration(id, appliedAt) {
859
+ const db = this.client.db();
860
+ await db.collection(MIGRATION_TRACKER_COLLECTION).insertOne({ _id: id, appliedAt });
861
+ }
862
+ async applyAddIndex(change) {
863
+ const db = this.client.db();
864
+ const fields = {};
865
+ for (const f of change.on) {
866
+ fields[f] = 1;
867
+ }
868
+ const name = change.name ?? `${change.table}_${change.on.join("_")}_idx`;
869
+ await db.collection(change.table).createIndex(fields, { unique: change.unique ?? false, name });
870
+ }
871
+ async applyDropIndex(change) {
872
+ const db = this.client.db();
873
+ const collections = await db.listCollections().toArray();
874
+ for (const col of collections) {
875
+ const indexes = await db.collection(col.name).listIndexes().toArray();
876
+ if (indexes.some((idx) => idx.name === change.name)) {
877
+ await db.collection(col.name).dropIndex(change.name);
878
+ return;
879
+ }
880
+ }
881
+ }
882
+ async introspect() {
883
+ const db = this.client.db();
884
+ const collections = await db.listCollections().toArray();
885
+ const schemas = [];
886
+ for (const col of collections) {
887
+ if (col.name === MIGRATION_TRACKER_COLLECTION) continue;
888
+ const rawIndexes = await db.collection(col.name).listIndexes().toArray();
889
+ const indexes = rawIndexes.filter((idx) => idx.name !== "_id_").map((idx) => ({
890
+ name: idx.name,
891
+ on: Object.keys(idx.key),
892
+ unique: !!idx.unique
893
+ }));
894
+ schemas.push({
895
+ name: col.name,
896
+ pk: void 0,
897
+ fields: [],
898
+ indexes,
899
+ foreignKeys: []
900
+ });
901
+ }
902
+ return schemas;
903
+ }
904
+ };
905
+ if (void 0) {
906
+ const { describe, test, expect, expectTypeOf } = void 0;
907
+ describe("MongoDbAdapter: class-via-configurable shape", () => {
908
+ test("MongoDbAdapter.create validates connection config via pipe", () => {
909
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
910
+ expect(adapter).toBeInstanceOf(MongoDbAdapter);
911
+ expect(adapter.client).toBeInstanceOf(MongoClient);
912
+ });
913
+ test("MongoDbAdapter.create rejects invalid config", () => {
914
+ expect(() => MongoDbAdapter.create({})).toThrow();
915
+ expect(() => MongoDbAdapter.create({ uri: 123 })).toThrow();
916
+ });
917
+ test("readonly schemaConfigPipe declared with { db, col } shape", () => {
918
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
919
+ expect(adapter.schemaConfigPipe).toBeDefined();
920
+ });
921
+ test("capability declarations use as const", () => {
922
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
923
+ expect(adapter.supportedFieldTypes).toEqual([
924
+ "string",
925
+ "number",
926
+ "boolean",
927
+ "null",
928
+ "object",
929
+ "array",
930
+ "date"
931
+ ]);
932
+ expect(adapter.queryableOps).toEqual([
933
+ "eq",
934
+ "ne",
935
+ "gt",
936
+ "gte",
937
+ "lt",
938
+ "lte",
939
+ "in",
940
+ "notIn",
941
+ "like",
942
+ "exists",
943
+ "notExists",
944
+ "contains",
945
+ "notContains"
946
+ ]);
947
+ expect(adapter.updateOps).toEqual([
948
+ "set",
949
+ "inc",
950
+ "mul",
951
+ "min",
952
+ "max",
953
+ "unset",
954
+ "push",
955
+ "pull",
956
+ "patch"
957
+ ]);
958
+ expect(adapter.aggregateOps).toEqual([
959
+ "count",
960
+ "countDistinct",
961
+ "sum",
962
+ "avg",
963
+ "min",
964
+ "max"
965
+ ]);
966
+ });
967
+ test("underlying MongoClient exposed as readonly instance field", () => {
968
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
969
+ expect(adapter.client).toBeInstanceOf(MongoClient);
970
+ });
971
+ test("adapter.use returns OrmUse-shaped object", async () => {
972
+ const { Schema } = await null;
973
+ const { v: v2 } = await null;
974
+ const schema = Schema.from("test").pk("id", v2.string(), () => "x").build();
975
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
976
+ const use = adapter.use(schema, { db: "testdb", col: "testcol" });
977
+ expect(use.findMany).toBeTypeOf("function");
978
+ expect(use.iterateMany).toBeTypeOf("function");
979
+ expect(use.findOne).toBeTypeOf("function");
980
+ expect(use.count).toBeTypeOf("function");
981
+ expect(use.createOne).toBeTypeOf("function");
982
+ expect(use.createMany).toBeTypeOf("function");
983
+ expect(use.updateMany).toBeTypeOf("function");
984
+ expect(use.updateOne).toBeTypeOf("function");
985
+ expect(use.upsertOne).toBeTypeOf("function");
986
+ expect(use.deleteOne).toBeTypeOf("function");
987
+ expect(use.deleteMany).toBeTypeOf("function");
988
+ expect(use.raw).toBeTypeOf("function");
989
+ });
990
+ test("type-level: adapter declares all 9 canonical update ops", () => {
991
+ const _adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
992
+ expectTypeOf().toEqualTypeOf();
993
+ });
994
+ test("type-level: adapter declares all 7 field types", () => {
995
+ const _adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
996
+ expectTypeOf().toEqualTypeOf();
997
+ });
998
+ test("type-level: adapter declares all 13 queryable ops", () => {
999
+ const _adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1000
+ expectTypeOf().toEqualTypeOf();
1001
+ });
1002
+ test("type-level: Repo.from with MongoDbAdapter enables all builder methods", async () => {
1003
+ const { Repo } = await null;
1004
+ const { Schema } = await null;
1005
+ const { v: v2 } = await null;
1006
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1007
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1008
+ const _TestSchema = Schema.from("test").pk("id", v2.string(), () => "x").build();
1009
+ const _one = repo.on(_TestSchema).one();
1010
+ const _all = repo.on(_TestSchema).all();
1011
+ const _ref = repo.on(_TestSchema);
1012
+ expectTypeOf(_one.create).toBeFunction();
1013
+ expectTypeOf(_one.find).toBeFunction();
1014
+ expectTypeOf(_one.update).toBeFunction();
1015
+ expectTypeOf(_one.delete).toBeFunction();
1016
+ expectTypeOf(_one.upsert).toBeFunction();
1017
+ expectTypeOf(_all.create).toBeFunction();
1018
+ expectTypeOf(_all.find).toBeFunction();
1019
+ expectTypeOf(_all.count).toBeFunction();
1020
+ expectTypeOf(_all.update).toBeFunction();
1021
+ expectTypeOf(_all.delete).toBeFunction();
1022
+ expectTypeOf(_ref.raw).toBeFunction();
1023
+ expectTypeOf(repo.session).toBeFunction();
1024
+ });
1025
+ test("type-level: raw arg-tuple infers (pipeline: Record<string, unknown>[]) from MongoDbAdapter", async () => {
1026
+ const { Repo } = await null;
1027
+ const { Schema } = await null;
1028
+ const { v: v2 } = await null;
1029
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1030
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1031
+ const _TestSchema = Schema.from("test").pk("id", v2.string(), () => "x").build();
1032
+ const _ref = repo.on(_TestSchema);
1033
+ expectTypeOf(_ref.raw).parameters.toEqualTypeOf();
1034
+ });
1035
+ test("type-level: per-call <T> override narrows MongoDbAdapter raw return type", async () => {
1036
+ const { Repo } = await null;
1037
+ const { Schema } = await null;
1038
+ const { v: v2 } = await null;
1039
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1040
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1041
+ const _TestSchema = Schema.from("test").pk("id", v2.string(), () => "x").build();
1042
+ const _ref = repo.on(_TestSchema);
1043
+ expectTypeOf(_ref.raw).returns.toEqualTypeOf();
1044
+ });
1045
+ test("count forwards compiled filter to collection.countDocuments", async () => {
1046
+ const { Schema } = await null;
1047
+ const { v: v2 } = await null;
1048
+ const { FilterGroup: FilterGroup2 } = await null;
1049
+ const schema = Schema.from("mongo_count").pk("_id", v2.string(), () => "x").field("name", v2.string()).build();
1050
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1051
+ let capturedFilter;
1052
+ adapter.client.db = () => ({
1053
+ collection: () => ({
1054
+ countDocuments: async (filter, _opts) => {
1055
+ capturedFilter = filter;
1056
+ return 7;
1057
+ }
1058
+ })
1059
+ });
1060
+ const result = await adapter.count(schema, { db: "testdb", col: "things" }, FilterGroup2.create().eq("name", "Alice"));
1061
+ expect(capturedFilter).toEqual({ name: { $eq: "Alice" } });
1062
+ expect(result).toBe(7);
1063
+ });
1064
+ test("raw forwards pipeline to collection.aggregate at runtime", async () => {
1065
+ const { Schema } = await null;
1066
+ const { v: v2 } = await null;
1067
+ const schema = Schema.from("mongo_raw").pk("id", v2.string(), () => "x").build();
1068
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1069
+ let capturedPipeline;
1070
+ const mockResults = [{ total: 42 }];
1071
+ adapter.client.db = () => ({
1072
+ collection: () => ({
1073
+ aggregate: (pipeline, _opts) => {
1074
+ capturedPipeline = pipeline;
1075
+ return { toArray: async () => mockResults };
1076
+ }
1077
+ })
1078
+ });
1079
+ const result = await adapter.use(schema, { db: "testdb", col: "things" }).raw([{ $count: "total" }]);
1080
+ expect(capturedPipeline).toEqual([{ $count: "total" }]);
1081
+ expect(result).toEqual(mockResults);
1082
+ });
1083
+ test("iterateMany forwards batchSize and closes cursor on early return", async () => {
1084
+ const { Schema } = await null;
1085
+ const { v: v2 } = await null;
1086
+ const { FilterGroup: FilterGroup2 } = await null;
1087
+ const { OrderBy } = await null;
1088
+ const schema = Schema.from("mongo_iter").pk("_id", v2.string(), () => "x").field("age", v2.number()).build();
1089
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1090
+ let capturedFindFilter;
1091
+ let capturedFindOptions;
1092
+ let capturedSort;
1093
+ let capturedLimit;
1094
+ let capturedSkip;
1095
+ let capturedBatchSize;
1096
+ let closeCalls = 0;
1097
+ const cursor = {
1098
+ sort(sort) {
1099
+ capturedSort = sort;
1100
+ return this;
1101
+ },
1102
+ limit(limit) {
1103
+ capturedLimit = limit;
1104
+ return this;
1105
+ },
1106
+ skip(skip) {
1107
+ capturedSkip = skip;
1108
+ return this;
1109
+ },
1110
+ batchSize(batchSize) {
1111
+ capturedBatchSize = batchSize;
1112
+ return this;
1113
+ },
1114
+ async close() {
1115
+ closeCalls += 1;
1116
+ },
1117
+ async *[Symbol.asyncIterator]() {
1118
+ yield { _id: "u4", age: 50 };
1119
+ yield { _id: "u3", age: 40 };
1120
+ }
1121
+ };
1122
+ adapter.client.db = () => ({
1123
+ collection: () => ({
1124
+ find: (filter, options) => {
1125
+ capturedFindFilter = filter;
1126
+ capturedFindOptions = options;
1127
+ return cursor;
1128
+ }
1129
+ })
1130
+ });
1131
+ const rows = [];
1132
+ for await (const row of adapter.use(schema, { db: "testdb", col: "people" }).iterateMany(FilterGroup2.create().gt("age", 19), {
1133
+ orderBy: [new OrderBy("age", "desc")],
1134
+ offset: 1,
1135
+ limit: 2,
1136
+ batchSize: 25
1137
+ })) {
1138
+ rows.push(row);
1139
+ break;
1140
+ }
1141
+ expect(capturedFindFilter).toEqual({ age: { $gt: 19 } });
1142
+ expect(capturedFindOptions).toEqual({ session: void 0, projection: void 0 });
1143
+ expect(capturedSort).toEqual({ age: -1 });
1144
+ expect(capturedLimit).toBe(2);
1145
+ expect(capturedSkip).toBe(1);
1146
+ expect(capturedBatchSize).toBe(25);
1147
+ expect(rows).toEqual([{ _id: "u4", age: 50 }]);
1148
+ expect(closeCalls).toBe(1);
1149
+ });
1150
+ test("iterateMany closes cursor on normal completion", async () => {
1151
+ const { Schema } = await null;
1152
+ const { v: v2 } = await null;
1153
+ const { FilterGroup: FilterGroup2 } = await null;
1154
+ const schema = Schema.from("mongo_iter_complete").pk("_id", v2.string(), () => "x").field("age", v2.number()).build();
1155
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1156
+ let closeCalls = 0;
1157
+ const cursor = {
1158
+ async close() {
1159
+ closeCalls += 1;
1160
+ },
1161
+ async *[Symbol.asyncIterator]() {
1162
+ yield { _id: "u1", age: 30 };
1163
+ yield { _id: "u2", age: 40 };
1164
+ }
1165
+ };
1166
+ adapter.client.db = () => ({
1167
+ collection: () => ({
1168
+ find: () => cursor
1169
+ })
1170
+ });
1171
+ const rows = [];
1172
+ for await (const row of adapter.use(schema, { db: "testdb", col: "people" }).iterateMany(FilterGroup2.create())) {
1173
+ rows.push(row);
1174
+ }
1175
+ expect(rows).toEqual([{ _id: "u1", age: 30 }, { _id: "u2", age: 40 }]);
1176
+ expect(closeCalls).toBe(1);
1177
+ });
1178
+ test("nested session returns callback without starting new transaction", () => {
1179
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1180
+ expect(adapter.session).toBeTypeOf("function");
1181
+ });
1182
+ test("type-level: adapter declares all 6 canonical aggregate ops", () => {
1183
+ const _adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1184
+ expectTypeOf().toEqualTypeOf();
1185
+ });
1186
+ test("type-level: Repo.from with MongoDbAdapter enables aggregate method", async () => {
1187
+ const { Repo } = await null;
1188
+ const { Schema } = await null;
1189
+ const { v: v2 } = await null;
1190
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1191
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1192
+ const _TestSchema = Schema.from("test").pk("id", v2.string(), () => "x").build();
1193
+ const _ref = repo.on(_TestSchema);
1194
+ expectTypeOf(_ref.aggregate).toBeFunction();
1195
+ });
1196
+ test("aggregate forwards compiled pipeline to collection.aggregate", async () => {
1197
+ const { Schema } = await null;
1198
+ const { v: v2 } = await null;
1199
+ const schema = Schema.from("mongo_agg").pk("_id", v2.string(), () => "x").field("amount", v2.number()).build();
1200
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1201
+ let capturedPipeline;
1202
+ const mockResults = [{ total: 3, revenue: 150 }];
1203
+ adapter.client.db = () => ({
1204
+ collection: () => ({
1205
+ aggregate: (pipeline, _opts) => {
1206
+ capturedPipeline = pipeline;
1207
+ return { toArray: async () => mockResults };
1208
+ }
1209
+ })
1210
+ });
1211
+ const result = await adapter.aggregate(schema, { db: "testdb", col: "orders" }, {
1212
+ aggregates: [
1213
+ { fn: "count", alias: "total" },
1214
+ { fn: "sum", field: "amount", alias: "revenue" }
1215
+ ],
1216
+ groupBy: []
1217
+ });
1218
+ expect(capturedPipeline).toEqual([
1219
+ { $group: { _id: null, total: { $sum: 1 }, revenue: { $sum: "$amount" } } },
1220
+ { $project: { _id: 0, total: 1, revenue: 1 } }
1221
+ ]);
1222
+ expect(result).toEqual(mockResults);
1223
+ });
1224
+ test("aggregate with where and groupBy produces correct pipeline", async () => {
1225
+ const { Schema } = await null;
1226
+ const { v: v2 } = await null;
1227
+ const { FilterGroup: FilterGroup2 } = await null;
1228
+ const schema = Schema.from("mongo_agg2").pk("_id", v2.string(), () => "x").field("region", v2.string()).field("amount", v2.number()).build();
1229
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1230
+ let capturedPipeline;
1231
+ adapter.client.db = () => ({
1232
+ collection: () => ({
1233
+ aggregate: (pipeline, _opts) => {
1234
+ capturedPipeline = pipeline;
1235
+ return { toArray: async () => [{ region: "US", total: 2 }] };
1236
+ }
1237
+ })
1238
+ });
1239
+ await adapter.aggregate(schema, { db: "testdb", col: "orders" }, {
1240
+ where: FilterGroup2.create().gt("amount", 10),
1241
+ aggregates: [{ fn: "count", alias: "total" }],
1242
+ groupBy: ["region"]
1243
+ });
1244
+ expect(capturedPipeline).toEqual([
1245
+ { $match: { amount: { $gt: 10 } } },
1246
+ { $group: { _id: { region: "$region" }, total: { $sum: 1 } } },
1247
+ { $project: { _id: 0, region: "$_id.region", total: 1 } }
1248
+ ]);
1249
+ });
1250
+ test("auto-wires Instance hooks for connect/disconnect", async () => {
1251
+ const { Instance: Inst } = await null;
1252
+ const { vi } = await null;
1253
+ const onSpy = vi.spyOn(Inst, "on").mockImplementation(() => {
1254
+ });
1255
+ MongoDbAdapter.create({ uri: "mongodb://localhost:27017" });
1256
+ expect(onSpy).toHaveBeenCalledWith("start", expect.any(Function), expect.objectContaining({ class: MongoDbAdapter }));
1257
+ expect(onSpy).toHaveBeenCalledWith("close", expect.any(Function), expect.objectContaining({ class: MongoDbAdapter }));
1258
+ onSpy.mockRestore();
1259
+ });
1260
+ });
1261
+ describe("MongoDbAdapter: migrations", () => {
1262
+ function mockMongoDb(adapter) {
1263
+ const state = {
1264
+ migrations: /* @__PURE__ */ new Map(),
1265
+ collections: /* @__PURE__ */ new Map()
1266
+ };
1267
+ const getCol = (name) => {
1268
+ if (!state.collections.has(name)) {
1269
+ state.collections.set(name, { indexes: [] });
1270
+ }
1271
+ return state.collections.get(name);
1272
+ };
1273
+ adapter.client.db = () => ({
1274
+ collection: (name) => {
1275
+ if (name === MIGRATION_TRACKER_COLLECTION) {
1276
+ return {
1277
+ find: () => ({ toArray: async () => [...state.migrations.values()] }),
1278
+ insertOne: async (doc) => {
1279
+ state.migrations.set(doc._id, doc);
1280
+ }
1281
+ };
1282
+ }
1283
+ const col = getCol(name);
1284
+ return {
1285
+ createIndex: async (fields, opts) => {
1286
+ col.indexes.push({ name: opts.name, key: fields, unique: opts.unique });
1287
+ },
1288
+ dropIndex: async (indexName) => {
1289
+ col.indexes = col.indexes.filter((i) => i.name !== indexName);
1290
+ },
1291
+ listIndexes: () => ({
1292
+ toArray: async () => [
1293
+ { name: "_id_", key: { _id: 1 } },
1294
+ ...col.indexes
1295
+ ]
1296
+ })
1297
+ };
1298
+ },
1299
+ listCollections: () => ({
1300
+ toArray: async () => [...state.collections.keys()].map((name) => ({ name }))
1301
+ })
1302
+ });
1303
+ return state;
1304
+ }
1305
+ test("loadMigrations reads from equipped_migrations collection", async () => {
1306
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1307
+ const state = mockMongoDb(adapter);
1308
+ state.migrations.set("0001", { _id: "0001", appliedAt: 1e3 });
1309
+ state.migrations.set("0002", { _id: "0002", appliedAt: 2e3 });
1310
+ const result = await adapter.loadMigrations();
1311
+ expect(result).toEqual([
1312
+ { id: "0001", appliedAt: 1e3 },
1313
+ { id: "0002", appliedAt: 2e3 }
1314
+ ]);
1315
+ });
1316
+ test("loadMigrations returns empty array when no migrations exist", async () => {
1317
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1318
+ mockMongoDb(adapter);
1319
+ const result = await adapter.loadMigrations();
1320
+ expect(result).toEqual([]);
1321
+ });
1322
+ test("recordMigration inserts into equipped_migrations with _id", async () => {
1323
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1324
+ const state = mockMongoDb(adapter);
1325
+ await adapter.recordMigration("0001", 1234);
1326
+ expect(state.migrations.has("0001")).toBe(true);
1327
+ expect(state.migrations.get("0001")).toEqual({ _id: "0001", appliedAt: 1234 });
1328
+ });
1329
+ test("applyAddIndex creates index with specified name and fields", async () => {
1330
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1331
+ const state = mockMongoDb(adapter);
1332
+ await adapter.applyAddIndex({ kind: "addIndex", table: "users", on: ["email"], unique: true, name: "users_email_unique" });
1333
+ const col = state.collections.get("users");
1334
+ expect(col.indexes).toHaveLength(1);
1335
+ expect(col.indexes[0]).toEqual({ name: "users_email_unique", key: { email: 1 }, unique: true });
1336
+ });
1337
+ test("applyAddIndex auto-derives name when absent", async () => {
1338
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1339
+ const state = mockMongoDb(adapter);
1340
+ await adapter.applyAddIndex({ kind: "addIndex", table: "users", on: ["email"] });
1341
+ const col = state.collections.get("users");
1342
+ expect(col.indexes[0].name).toBe("users_email_idx");
1343
+ });
1344
+ test("applyAddIndex auto-derived compound index name", async () => {
1345
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1346
+ const state = mockMongoDb(adapter);
1347
+ await adapter.applyAddIndex({ kind: "addIndex", table: "orders", on: ["userId", "createdAt"] });
1348
+ const col = state.collections.get("orders");
1349
+ expect(col.indexes[0].name).toBe("orders_userId_createdAt_idx");
1350
+ expect(col.indexes[0].key).toEqual({ userId: 1, createdAt: 1 });
1351
+ });
1352
+ test("applyDropIndex finds and drops index by scanning collections", async () => {
1353
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1354
+ const state = mockMongoDb(adapter);
1355
+ state.collections.set("users", { indexes: [{ name: "users_email_idx", key: { email: 1 }, unique: true }] });
1356
+ await adapter.applyDropIndex({ kind: "dropIndex", name: "users_email_idx" });
1357
+ expect(state.collections.get("users").indexes).toHaveLength(0);
1358
+ });
1359
+ test("applyDropIndex is a no-op when index not found", async () => {
1360
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1361
+ mockMongoDb(adapter);
1362
+ await adapter.applyDropIndex({ kind: "dropIndex", name: "nonexistent_idx" });
1363
+ });
1364
+ test("introspect returns DiscoveredSchema with empty fields, pk, and foreignKeys", async () => {
1365
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1366
+ const state = mockMongoDb(adapter);
1367
+ state.collections.set("users", { indexes: [] });
1368
+ state.collections.set("posts", { indexes: [] });
1369
+ const schemas = await adapter.introspect();
1370
+ expect(schemas).toHaveLength(2);
1371
+ for (const s of schemas) {
1372
+ expect(s.pk).toBeUndefined();
1373
+ expect(s.fields).toEqual([]);
1374
+ expect(s.foreignKeys).toEqual([]);
1375
+ }
1376
+ });
1377
+ test("introspect skips _id_ index", async () => {
1378
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1379
+ const state = mockMongoDb(adapter);
1380
+ state.collections.set("users", { indexes: [{ name: "users_email_idx", key: { email: 1 }, unique: false }] });
1381
+ const schemas = await adapter.introspect();
1382
+ expect(schemas).toHaveLength(1);
1383
+ expect(schemas[0].indexes).toHaveLength(1);
1384
+ expect(schemas[0].indexes[0].name).toBe("users_email_idx");
1385
+ });
1386
+ test("introspect skips tracker collection", async () => {
1387
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1388
+ const state = mockMongoDb(adapter);
1389
+ state.collections.set("users", { indexes: [] });
1390
+ state.collections.set(MIGRATION_TRACKER_COLLECTION, { indexes: [] });
1391
+ const schemas = await adapter.introspect();
1392
+ expect(schemas).toHaveLength(1);
1393
+ expect(schemas[0].name).toBe("users");
1394
+ });
1395
+ test("introspect maps index keys to on array and unique flag", async () => {
1396
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1397
+ const state = mockMongoDb(adapter);
1398
+ state.collections.set("orders", {
1399
+ indexes: [
1400
+ { name: "orders_userId_createdAt_idx", key: { userId: 1, createdAt: 1 }, unique: false },
1401
+ { name: "orders_email_unique", key: { email: 1 }, unique: true }
1402
+ ]
1403
+ });
1404
+ const schemas = await adapter.introspect();
1405
+ expect(schemas[0].indexes).toEqual([
1406
+ { name: "orders_userId_createdAt_idx", on: ["userId", "createdAt"], unique: false },
1407
+ { name: "orders_email_unique", on: ["email"], unique: true }
1408
+ ]);
1409
+ });
1410
+ test("adapter does not implement acquireMigrationLock", () => {
1411
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1412
+ expect(adapter.acquireMigrationLock).toBeUndefined();
1413
+ });
1414
+ test("adapter does not implement DDL apply methods", () => {
1415
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1416
+ expect(adapter.applyCreateTable).toBeUndefined();
1417
+ expect(adapter.applyDropTable).toBeUndefined();
1418
+ expect(adapter.applyAddField).toBeUndefined();
1419
+ expect(adapter.applyDropField).toBeUndefined();
1420
+ expect(adapter.applyModifyField).toBeUndefined();
1421
+ expect(adapter.applyRenameTable).toBeUndefined();
1422
+ expect(adapter.applyRenameField).toBeUndefined();
1423
+ expect(adapter.applyAddForeignKey).toBeUndefined();
1424
+ expect(adapter.applyDropForeignKey).toBeUndefined();
1425
+ });
1426
+ test("type-level: ChangeFor<MongoDbAdapter> excludes DDL variants", () => {
1427
+ expectTypeOf().not.toBeNever();
1428
+ expectTypeOf().not.toBeNever();
1429
+ expectTypeOf().not.toBeNever();
1430
+ expectTypeOf().toBeNever();
1431
+ expectTypeOf().toBeNever();
1432
+ expectTypeOf().toBeNever();
1433
+ expectTypeOf().toBeNever();
1434
+ expectTypeOf().toBeNever();
1435
+ expectTypeOf().toBeNever();
1436
+ expectTypeOf().toBeNever();
1437
+ expectTypeOf().toBeNever();
1438
+ expectTypeOf().toBeNever();
1439
+ });
1440
+ test("type-level: Migrator.from(repo, adapter).build() works without withoutLock", async () => {
1441
+ const { Migrator } = await null;
1442
+ const { Repo } = await null;
1443
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1444
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1445
+ const step = Migrator.from(repo, adapter).migrations([]);
1446
+ expectTypeOf(step).toHaveProperty("build");
1447
+ expectTypeOf(step).toHaveProperty("withoutLock");
1448
+ });
1449
+ test("type-level: Migrator.from(repo, adapter).withoutLock().build() also works", async () => {
1450
+ const { Migrator } = await null;
1451
+ const { Repo } = await null;
1452
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1453
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1454
+ const migrator = Migrator.from(repo, adapter).migrations([]).withoutLock().build();
1455
+ expect(migrator).toBeDefined();
1456
+ });
1457
+ test("end-to-end: Migrator runs addIndex + dropIndex + execute changes", async () => {
1458
+ const { Migrator } = await null;
1459
+ const { Repo } = await null;
1460
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1461
+ const state = mockMongoDb(adapter);
1462
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1463
+ let executeRan = false;
1464
+ const migrations = [
1465
+ {
1466
+ id: "0001-add-idx",
1467
+ tx: false,
1468
+ changes: [
1469
+ { kind: "addIndex", table: "users", on: ["email"], unique: true }
1470
+ ]
1471
+ },
1472
+ {
1473
+ id: "0002-backfill",
1474
+ tx: false,
1475
+ changes: [
1476
+ { kind: "execute", up: async () => {
1477
+ executeRan = true;
1478
+ } }
1479
+ ]
1480
+ },
1481
+ {
1482
+ id: "0003-drop-idx",
1483
+ tx: false,
1484
+ changes: [
1485
+ { kind: "dropIndex", name: "users_email_idx" }
1486
+ ]
1487
+ }
1488
+ ];
1489
+ const migrator = Migrator.from(repo, adapter).migrations(migrations).build();
1490
+ const result = await migrator.up();
1491
+ expect(result.ran).toEqual(["0001-add-idx", "0002-backfill", "0003-drop-idx"]);
1492
+ expect(executeRan).toBe(true);
1493
+ expect(state.migrations.size).toBe(3);
1494
+ expect(state.collections.get("users").indexes).toHaveLength(0);
1495
+ });
1496
+ test("introspect round-trip: addIndex then introspect sees the index", async () => {
1497
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1498
+ const state = mockMongoDb(adapter);
1499
+ state.collections.set("users", {
1500
+ indexes: [{ name: "users_email_idx", key: { email: 1 }, unique: true }]
1501
+ });
1502
+ const schemas = await adapter.introspect();
1503
+ expect(schemas).toHaveLength(1);
1504
+ expect(schemas[0].name).toBe("users");
1505
+ expect(schemas[0].pk).toBeUndefined();
1506
+ expect(schemas[0].fields).toEqual([]);
1507
+ expect(schemas[0].foreignKeys).toEqual([]);
1508
+ expect(schemas[0].indexes).toEqual([
1509
+ { name: "users_email_idx", on: ["email"], unique: true }
1510
+ ]);
1511
+ });
1512
+ test("data backfill via execute change", async () => {
1513
+ const { Migrator } = await null;
1514
+ const { Repo } = await null;
1515
+ const adapter = MongoDbAdapter.create({ uri: "mongodb://localhost:27017/testdb" });
1516
+ mockMongoDb(adapter);
1517
+ const repo = Repo.from(adapter).resolve(() => ({ db: "test", col: "test" })).build();
1518
+ const backfilledData = [];
1519
+ const m = {
1520
+ id: "0001-backfill",
1521
+ tx: false,
1522
+ changes: [{
1523
+ kind: "execute",
1524
+ up: async () => {
1525
+ backfilledData.push("user-1-normalized");
1526
+ backfilledData.push("user-2-normalized");
1527
+ }
1528
+ }]
1529
+ };
1530
+ const migrator = Migrator.from(repo, adapter).migrations([m]).build();
1531
+ await migrator.up();
1532
+ expect(backfilledData).toEqual(["user-1-normalized", "user-2-normalized"]);
1533
+ });
1534
+ });
1535
+ }
1536
+ export {
1537
+ MongoDbAdapter
1538
+ };
1539
+ //# sourceMappingURL=index.mjs.map