equipped 5.2.9 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +362 -34
  3. package/dist/cjs/cache/adapters/in-memory/index.cjs +824 -0
  4. package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -0
  5. package/dist/cjs/cache/adapters/in-memory/index.min.cjs +4 -0
  6. package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -0
  7. package/dist/cjs/cache/adapters/redis/index.cjs +844 -0
  8. package/dist/cjs/cache/adapters/redis/index.cjs.map +1 -0
  9. package/dist/cjs/cache/adapters/redis/index.min.cjs +4 -0
  10. package/dist/cjs/cache/adapters/redis/index.min.cjs.map +1 -0
  11. package/dist/cjs/cache/index.cjs +602 -4
  12. package/dist/cjs/cache/index.cjs.map +1 -1
  13. package/dist/cjs/cache/index.min.cjs +3 -1
  14. package/dist/cjs/cache/index.min.cjs.map +1 -1
  15. package/dist/cjs/dbs/adapters/mongodb/index.cjs +1314 -0
  16. package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -0
  17. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +4 -0
  18. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -0
  19. package/dist/cjs/dbs/index.cjs +965 -6
  20. package/dist/cjs/dbs/index.cjs.map +1 -1
  21. package/dist/cjs/dbs/index.min.cjs +3 -1
  22. package/dist/cjs/dbs/index.min.cjs.map +1 -1
  23. package/dist/cjs/errors/index.cjs +127 -8
  24. package/dist/cjs/errors/index.cjs.map +1 -1
  25. package/dist/cjs/errors/index.min.cjs +1 -1
  26. package/dist/cjs/errors/index.min.cjs.map +1 -1
  27. package/dist/cjs/events/adapters/kafka/index.cjs +845 -0
  28. package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -0
  29. package/dist/cjs/events/adapters/kafka/index.min.cjs +4 -0
  30. package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -0
  31. package/dist/cjs/events/adapters/rabbitmq/index.cjs +836 -0
  32. package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -0
  33. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +4 -0
  34. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -0
  35. package/dist/cjs/events/index.cjs +33 -4
  36. package/dist/cjs/events/index.cjs.map +1 -1
  37. package/dist/cjs/events/index.min.cjs +1 -1
  38. package/dist/cjs/events/index.min.cjs.map +1 -1
  39. package/dist/cjs/index.cjs +588 -1
  40. package/dist/cjs/index.cjs.map +1 -1
  41. package/dist/cjs/index.min.cjs +3 -1
  42. package/dist/cjs/index.min.cjs.map +1 -1
  43. package/dist/cjs/instance/index.cjs +514 -64
  44. package/dist/cjs/instance/index.cjs.map +1 -1
  45. package/dist/cjs/instance/index.min.cjs +3 -3
  46. package/dist/cjs/instance/index.min.cjs.map +1 -1
  47. package/dist/cjs/jobs/adapters/redis/index.cjs +979 -0
  48. package/dist/cjs/jobs/adapters/redis/index.cjs.map +1 -0
  49. package/dist/cjs/jobs/adapters/redis/index.min.cjs +4 -0
  50. package/dist/cjs/jobs/adapters/redis/index.min.cjs.map +1 -0
  51. package/dist/cjs/jobs/index.cjs +55 -2
  52. package/dist/cjs/jobs/index.cjs.map +1 -1
  53. package/dist/cjs/jobs/index.min.cjs +1 -1
  54. package/dist/cjs/jobs/index.min.cjs.map +1 -1
  55. package/dist/cjs/orm/adapters/in-memory/index.cjs +2551 -0
  56. package/dist/cjs/orm/adapters/in-memory/index.cjs.map +1 -0
  57. package/dist/cjs/orm/adapters/in-memory/index.min.cjs +4 -0
  58. package/dist/cjs/orm/adapters/in-memory/index.min.cjs.map +1 -0
  59. package/dist/cjs/orm/adapters/json/index.cjs +3518 -0
  60. package/dist/cjs/orm/adapters/json/index.cjs.map +1 -0
  61. package/dist/cjs/orm/adapters/json/index.min.cjs +4 -0
  62. package/dist/cjs/orm/adapters/json/index.min.cjs.map +1 -0
  63. package/dist/cjs/orm/adapters/mongodb/index.cjs +3299 -0
  64. package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -0
  65. package/dist/cjs/orm/adapters/mongodb/index.min.cjs +4 -0
  66. package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -0
  67. package/dist/cjs/orm/adapters/postgresql/index.cjs +4114 -0
  68. package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -0
  69. package/dist/cjs/orm/adapters/postgresql/index.min.cjs +49 -0
  70. package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -0
  71. package/dist/cjs/orm/index.cjs +9216 -0
  72. package/dist/cjs/orm/index.cjs.map +1 -0
  73. package/dist/cjs/orm/index.min.cjs +4 -0
  74. package/dist/cjs/orm/index.min.cjs.map +1 -0
  75. package/dist/cjs/server/adapters/express/index.cjs +1967 -0
  76. package/dist/cjs/server/adapters/express/index.cjs.map +1 -0
  77. package/dist/cjs/server/adapters/express/index.min.cjs +32 -0
  78. package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -0
  79. package/dist/cjs/server/adapters/fastify/index.cjs +1974 -0
  80. package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -0
  81. package/dist/cjs/server/adapters/fastify/index.min.cjs +32 -0
  82. package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -0
  83. package/dist/cjs/server/index.cjs +1811 -9
  84. package/dist/cjs/server/index.cjs.map +1 -1
  85. package/dist/cjs/server/index.min.cjs +31 -1
  86. package/dist/cjs/server/index.min.cjs.map +1 -1
  87. package/dist/cjs/types/index.cjs +18 -1
  88. package/dist/cjs/types/index.cjs.map +1 -1
  89. package/dist/cjs/types/index.min.cjs +1 -1
  90. package/dist/cjs/types/index.min.cjs.map +1 -1
  91. package/dist/cjs/utilities/index.cjs +862 -7
  92. package/dist/cjs/utilities/index.cjs.map +1 -1
  93. package/dist/cjs/utilities/index.min.cjs +3 -1
  94. package/dist/cjs/utilities/index.min.cjs.map +1 -1
  95. package/dist/cjs/validations/index.cjs +679 -10
  96. package/dist/cjs/validations/index.cjs.map +1 -1
  97. package/dist/cjs/validations/index.min.cjs +3 -1
  98. package/dist/cjs/validations/index.min.cjs.map +1 -1
  99. package/dist/esm/cache/adapters/in-memory/index.min.mjs +2 -0
  100. package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -0
  101. package/dist/esm/cache/adapters/in-memory/index.mjs +93 -0
  102. package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -0
  103. package/dist/esm/cache/adapters/redis/index.min.mjs +2 -0
  104. package/dist/esm/cache/adapters/redis/index.mjs +13 -0
  105. package/dist/esm/cache/index.min.mjs +1 -1
  106. package/dist/esm/cache/index.min.mjs.map +1 -1
  107. package/dist/esm/cache/index.mjs +9 -4
  108. package/dist/esm/cache/index.mjs.map +1 -1
  109. package/dist/esm/chunk-4JLDXF7T.min.mjs +2 -0
  110. package/dist/esm/chunk-4JLDXF7T.min.mjs.map +1 -0
  111. package/dist/{types/events/types/kafka.js → esm/chunk-4MXYZS5R.mjs} +60 -37
  112. package/dist/esm/chunk-4MXYZS5R.mjs.map +1 -0
  113. package/dist/esm/chunk-5VW3JAFR.min.mjs +2 -0
  114. package/dist/esm/chunk-5VW3JAFR.min.mjs.map +1 -0
  115. package/dist/esm/chunk-AKQBDYUO.mjs +126 -0
  116. package/dist/esm/chunk-AKQBDYUO.mjs.map +1 -0
  117. package/dist/esm/chunk-AQY7QVYI.min.mjs +2 -0
  118. package/dist/esm/chunk-B5QQ32YY.min.mjs +2 -0
  119. package/dist/esm/chunk-B5QQ32YY.min.mjs.map +1 -0
  120. package/dist/esm/chunk-BJNIUCPT.min.mjs +2 -0
  121. package/dist/esm/chunk-BJNIUCPT.min.mjs.map +1 -0
  122. package/dist/esm/chunk-DKPZJIIR.mjs +29 -0
  123. package/dist/esm/chunk-DKPZJIIR.mjs.map +1 -0
  124. package/dist/esm/chunk-DSUJ5FUL.min.mjs +2 -0
  125. package/dist/esm/chunk-DSUJ5FUL.min.mjs.map +1 -0
  126. package/dist/esm/chunk-FLAPYQUT.min.mjs +32 -0
  127. package/dist/esm/chunk-FLAPYQUT.min.mjs.map +1 -0
  128. package/dist/esm/chunk-J5LGTIGS.mjs +10 -0
  129. package/dist/esm/chunk-JH6EBXY4.mjs +53 -0
  130. package/dist/esm/chunk-JH6EBXY4.mjs.map +1 -0
  131. package/dist/esm/chunk-MDQKODYQ.mjs +2035 -0
  132. package/dist/esm/chunk-MDQKODYQ.mjs.map +1 -0
  133. package/dist/esm/chunk-PCAUXBAG.min.mjs +2 -0
  134. package/dist/esm/chunk-PCAUXBAG.min.mjs.map +1 -0
  135. package/dist/esm/chunk-PNZNNUMN.mjs +113 -0
  136. package/dist/esm/chunk-PNZNNUMN.mjs.map +1 -0
  137. package/dist/esm/chunk-PQCBVQL6.mjs +1280 -0
  138. package/dist/esm/chunk-PQCBVQL6.mjs.map +1 -0
  139. package/dist/esm/chunk-QHLKB47N.min.mjs +2 -0
  140. package/dist/esm/chunk-QHLKB47N.min.mjs.map +1 -0
  141. package/dist/esm/chunk-SGZNOYC3.min.mjs +2 -0
  142. package/dist/esm/chunk-SGZNOYC3.min.mjs.map +1 -0
  143. package/dist/esm/chunk-TVTYDU2D.mjs +795 -0
  144. package/dist/esm/chunk-TVTYDU2D.mjs.map +1 -0
  145. package/dist/esm/chunk-VCCS7CAI.mjs +8 -0
  146. package/dist/esm/chunk-VCCS7CAI.mjs.map +1 -0
  147. package/dist/esm/chunk-Z2TZ3KR7.mjs +22 -0
  148. package/dist/esm/chunk-Z2TZ3KR7.mjs.map +1 -0
  149. package/dist/esm/chunk-ZGMFFK6Y.min.mjs +2 -0
  150. package/dist/esm/chunk-ZGMFFK6Y.min.mjs.map +1 -0
  151. package/dist/esm/dbs/adapters/mongodb/index.min.mjs +2 -0
  152. package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -0
  153. package/dist/esm/dbs/adapters/mongodb/index.mjs +419 -0
  154. package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -0
  155. package/dist/esm/dbs/index.min.mjs +1 -1
  156. package/dist/esm/dbs/index.min.mjs.map +1 -1
  157. package/dist/esm/dbs/index.mjs +22 -6
  158. package/dist/esm/dbs/index.mjs.map +1 -1
  159. package/dist/esm/errors/index.min.mjs +1 -1
  160. package/dist/esm/errors/index.min.mjs.map +1 -1
  161. package/dist/esm/errors/index.mjs +22 -8
  162. package/dist/esm/errors/index.mjs.map +1 -1
  163. package/dist/esm/events/adapters/kafka/index.min.mjs +2 -0
  164. package/dist/esm/events/adapters/kafka/index.min.mjs.map +1 -0
  165. package/dist/esm/events/adapters/kafka/index.mjs +12 -0
  166. package/dist/esm/events/adapters/kafka/index.mjs.map +1 -0
  167. package/dist/esm/events/adapters/rabbitmq/index.min.mjs +2 -0
  168. package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -0
  169. package/dist/esm/events/adapters/rabbitmq/index.mjs +92 -0
  170. package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -0
  171. package/dist/esm/events/index.min.mjs +1 -1
  172. package/dist/esm/events/index.min.mjs.map +1 -1
  173. package/dist/esm/events/index.mjs +7 -4
  174. package/dist/esm/events/index.mjs.map +1 -1
  175. package/dist/esm/index.min.mjs +1 -1
  176. package/dist/esm/index.min.mjs.map +1 -1
  177. package/dist/esm/index.mjs +8 -1
  178. package/dist/esm/index.mjs.map +1 -1
  179. package/dist/esm/instance/index.min.mjs +1 -3
  180. package/dist/esm/instance/index.min.mjs.map +1 -1
  181. package/dist/esm/instance/index.mjs +4 -132
  182. package/dist/esm/instance/index.mjs.map +1 -1
  183. package/dist/esm/introspection-32BRYKYY.mjs +10 -0
  184. package/dist/esm/introspection-32BRYKYY.mjs.map +1 -0
  185. package/dist/esm/introspection-A72WMWE3.min.mjs +2 -0
  186. package/dist/esm/introspection-A72WMWE3.min.mjs.map +1 -0
  187. package/dist/esm/jobs/adapters/redis/index.min.mjs +2 -0
  188. package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -0
  189. package/dist/esm/jobs/{types/redis.mjs → adapters/redis/index.mjs} +71 -56
  190. package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -0
  191. package/dist/esm/jobs/index.min.mjs +1 -1
  192. package/dist/esm/jobs/index.min.mjs.map +1 -1
  193. package/dist/esm/jobs/index.mjs +9 -2
  194. package/dist/esm/jobs/index.mjs.map +1 -1
  195. package/dist/esm/orm/adapters/in-memory/index.min.mjs +2 -0
  196. package/dist/esm/orm/adapters/in-memory/index.min.mjs.map +1 -0
  197. package/dist/esm/orm/adapters/in-memory/index.mjs +11 -0
  198. package/dist/esm/orm/adapters/in-memory/index.mjs.map +1 -0
  199. package/dist/esm/orm/adapters/json/index.min.mjs +2 -0
  200. package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -0
  201. package/dist/esm/orm/adapters/json/index.mjs +980 -0
  202. package/dist/esm/orm/adapters/json/index.mjs.map +1 -0
  203. package/dist/esm/orm/adapters/mongodb/index.min.mjs +2 -0
  204. package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -0
  205. package/dist/esm/orm/adapters/mongodb/index.mjs +1539 -0
  206. package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -0
  207. package/dist/esm/orm/adapters/postgresql/index.min.mjs +47 -0
  208. package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -0
  209. package/dist/esm/orm/adapters/postgresql/index.mjs +2070 -0
  210. package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -0
  211. package/dist/esm/orm/index.min.mjs +2 -0
  212. package/dist/esm/orm/index.min.mjs.map +1 -0
  213. package/dist/esm/orm/index.mjs +7326 -0
  214. package/dist/esm/orm/index.mjs.map +1 -0
  215. package/dist/esm/server/adapters/express/index.min.mjs +2 -0
  216. package/dist/esm/server/adapters/express/index.min.mjs.map +1 -0
  217. package/dist/esm/server/adapters/express/index.mjs +177 -0
  218. package/dist/esm/server/adapters/express/index.mjs.map +1 -0
  219. package/dist/esm/server/adapters/fastify/index.min.mjs +2 -0
  220. package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -0
  221. package/dist/esm/server/adapters/fastify/index.mjs +185 -0
  222. package/dist/esm/server/adapters/fastify/index.mjs.map +1 -0
  223. package/dist/esm/server/index.min.mjs +1 -1
  224. package/dist/esm/server/index.min.mjs.map +1 -1
  225. package/dist/esm/server/index.mjs +38 -9
  226. package/dist/esm/server/index.mjs.map +1 -1
  227. package/dist/esm/types/index.min.mjs +0 -1
  228. package/dist/esm/types/index.min.mjs.map +1 -1
  229. package/dist/esm/types/index.mjs +0 -1
  230. package/dist/esm/types/index.mjs.map +1 -1
  231. package/dist/esm/utilities/index.min.mjs +1 -1
  232. package/dist/esm/utilities/index.min.mjs.map +1 -1
  233. package/dist/esm/utilities/index.mjs +22 -9
  234. package/dist/esm/utilities/index.mjs.map +1 -1
  235. package/dist/esm/validations/index.min.mjs +1 -1
  236. package/dist/esm/validations/index.min.mjs.map +1 -1
  237. package/dist/esm/validations/index.mjs +8 -18
  238. package/dist/esm/validations/index.mjs.map +1 -1
  239. package/dist/types/adapter-Coap9ISX.d.ts +1435 -0
  240. package/dist/types/{fastify-DLPUK3vD.d.ts → base-DVr0fHil.d.ts} +76 -143
  241. package/dist/types/cache/adapters/in-memory/index.d.ts +21 -0
  242. package/dist/types/cache/adapters/in-memory/index.js +92 -0
  243. package/dist/types/cache/adapters/redis/index.d.ts +73 -0
  244. package/dist/types/cache/adapters/redis/index.js +12 -0
  245. package/dist/types/cache/index.d.ts +2 -42
  246. package/dist/types/cache/index.js +9 -4
  247. package/dist/types/chunk-3M4PBZAQ.js +125 -0
  248. package/dist/types/chunk-3TKJGSCZ.js +21 -0
  249. package/dist/types/chunk-65EHKCDZ.js +112 -0
  250. package/dist/types/chunk-JQ2FWX4W.js +1279 -0
  251. package/dist/types/chunk-KZKFYO4V.js +7 -0
  252. package/dist/types/chunk-LN3A6R4Y.js +28 -0
  253. package/dist/types/chunk-MLKGABMK.js +9 -0
  254. package/dist/types/chunk-NJ2FHI3U.js +794 -0
  255. package/dist/types/chunk-OHFTQGQG.js +52 -0
  256. package/dist/{esm/events/types/kafka.mjs → types/chunk-XGGGAEET.js} +59 -38
  257. package/dist/types/chunk-YTY3EFNB.js +2034 -0
  258. package/dist/types/{core-BrkNSwvc.d.ts → core-tNlIMH9Y.d.ts} +48 -38
  259. package/dist/types/dbs/adapters/mongodb/index.d.ts +43 -0
  260. package/dist/types/dbs/adapters/mongodb/index.js +418 -0
  261. package/dist/types/dbs/index.d.ts +14 -12
  262. package/dist/types/dbs/index.js +22 -6
  263. package/dist/types/equippedError-Cmo60Kn-.d.ts +8 -0
  264. package/dist/types/errors/index.d.ts +3 -3
  265. package/dist/types/errors/index.js +22 -8
  266. package/dist/types/events/adapters/kafka/index.d.ts +83 -0
  267. package/dist/types/events/adapters/kafka/index.js +11 -0
  268. package/dist/types/events/adapters/rabbitmq/index.d.ts +41 -0
  269. package/dist/types/events/adapters/rabbitmq/index.js +91 -0
  270. package/dist/types/events/index.d.ts +11 -11
  271. package/dist/types/events/index.js +7 -4
  272. package/dist/types/index.d.ts +2 -25
  273. package/dist/types/index.js +8 -1
  274. package/dist/types/instance/index.d.ts +12 -179
  275. package/dist/types/instance/index.js +4 -132
  276. package/dist/types/introspection-VOIU3XE6.js +9 -0
  277. package/dist/types/jobs/adapters/redis/index.d.ts +93 -0
  278. package/dist/types/jobs/{types/redis.js → adapters/redis/index.js} +70 -55
  279. package/dist/types/jobs/index.d.ts +19 -35
  280. package/dist/types/jobs/index.js +9 -2
  281. package/dist/types/orm/adapters/in-memory/index.d.ts +92 -0
  282. package/dist/types/orm/adapters/in-memory/index.js +10 -0
  283. package/dist/types/orm/adapters/json/index.d.ts +72 -0
  284. package/dist/types/orm/adapters/json/index.js +979 -0
  285. package/dist/types/orm/adapters/mongodb/index.d.ts +74 -0
  286. package/dist/types/orm/adapters/mongodb/index.js +1538 -0
  287. package/dist/types/orm/adapters/postgresql/index.d.ts +112 -0
  288. package/dist/types/orm/adapters/postgresql/index.js +2069 -0
  289. package/dist/types/orm/index.d.ts +160 -0
  290. package/dist/types/orm/index.js +7325 -0
  291. package/dist/types/{requestError-C2PNWUrt.d.ts → requestError-DdaL8hc3.d.ts} +2 -8
  292. package/dist/types/server/adapters/express/index.d.ts +196 -0
  293. package/dist/types/server/adapters/express/index.js +176 -0
  294. package/dist/types/server/adapters/fastify/index.d.ts +221 -0
  295. package/dist/types/server/adapters/fastify/index.js +184 -0
  296. package/dist/types/server/index.d.ts +10 -11
  297. package/dist/types/server/index.js +38 -9
  298. package/dist/types/types/index.js +0 -1
  299. package/dist/types/utilities/index.d.ts +22 -9
  300. package/dist/types/utilities/index.js +22 -9
  301. package/dist/types/{validationError-Bw8OYv5s.d.ts → validationError-oigtHqBi.d.ts} +1 -1
  302. package/dist/types/validations/index.d.ts +3 -2
  303. package/dist/types/validations/index.js +8 -18
  304. package/package.json +155 -18
  305. package/dist/cjs/audit/events.cjs +0 -101
  306. package/dist/cjs/audit/events.cjs.map +0 -1
  307. package/dist/cjs/audit/events.min.cjs +0 -2
  308. package/dist/cjs/audit/events.min.cjs.map +0 -1
  309. package/dist/cjs/audit/index.cjs +0 -2
  310. package/dist/cjs/audit/index.cjs.map +0 -1
  311. package/dist/cjs/audit/index.min.cjs +0 -2
  312. package/dist/cjs/audit/index.min.cjs.map +0 -1
  313. package/dist/cjs/cache/base.cjs +0 -6
  314. package/dist/cjs/cache/base.cjs.map +0 -1
  315. package/dist/cjs/cache/base.min.cjs +0 -2
  316. package/dist/cjs/cache/base.min.cjs.map +0 -1
  317. package/dist/cjs/cache/pipes.cjs +0 -16
  318. package/dist/cjs/cache/pipes.cjs.map +0 -1
  319. package/dist/cjs/cache/pipes.min.cjs +0 -2
  320. package/dist/cjs/cache/pipes.min.cjs.map +0 -1
  321. package/dist/cjs/cache/types/in-memory.cjs +0 -47
  322. package/dist/cjs/cache/types/in-memory.cjs.map +0 -1
  323. package/dist/cjs/cache/types/in-memory.min.cjs +0 -2
  324. package/dist/cjs/cache/types/in-memory.min.cjs.map +0 -1
  325. package/dist/cjs/cache/types/redis.cjs +0 -55
  326. package/dist/cjs/cache/types/redis.cjs.map +0 -1
  327. package/dist/cjs/cache/types/redis.min.cjs +0 -2
  328. package/dist/cjs/cache/types/redis.min.cjs.map +0 -1
  329. package/dist/cjs/dbs/base/changes.cjs +0 -36
  330. package/dist/cjs/dbs/base/changes.cjs.map +0 -1
  331. package/dist/cjs/dbs/base/changes.min.cjs +0 -2
  332. package/dist/cjs/dbs/base/changes.min.cjs.map +0 -1
  333. package/dist/cjs/dbs/base/core.cjs +0 -1
  334. package/dist/cjs/dbs/base/core.cjs.map +0 -1
  335. package/dist/cjs/dbs/base/core.min.cjs +0 -1
  336. package/dist/cjs/dbs/base/core.min.cjs.map +0 -1
  337. package/dist/cjs/dbs/base/db.cjs +0 -14
  338. package/dist/cjs/dbs/base/db.cjs.map +0 -1
  339. package/dist/cjs/dbs/base/db.min.cjs +0 -2
  340. package/dist/cjs/dbs/base/db.min.cjs.map +0 -1
  341. package/dist/cjs/dbs/base/types.cjs +0 -2
  342. package/dist/cjs/dbs/base/types.cjs.map +0 -1
  343. package/dist/cjs/dbs/base/types.min.cjs +0 -2
  344. package/dist/cjs/dbs/base/types.min.cjs.map +0 -1
  345. package/dist/cjs/dbs/mongo/changes.cjs +0 -81
  346. package/dist/cjs/dbs/mongo/changes.cjs.map +0 -1
  347. package/dist/cjs/dbs/mongo/changes.min.cjs +0 -2
  348. package/dist/cjs/dbs/mongo/changes.min.cjs.map +0 -1
  349. package/dist/cjs/dbs/mongo/db.cjs +0 -225
  350. package/dist/cjs/dbs/mongo/db.cjs.map +0 -1
  351. package/dist/cjs/dbs/mongo/db.min.cjs +0 -2
  352. package/dist/cjs/dbs/mongo/db.min.cjs.map +0 -1
  353. package/dist/cjs/dbs/mongo/query.cjs +0 -66
  354. package/dist/cjs/dbs/mongo/query.cjs.map +0 -1
  355. package/dist/cjs/dbs/mongo/query.min.cjs +0 -2
  356. package/dist/cjs/dbs/mongo/query.min.cjs.map +0 -1
  357. package/dist/cjs/dbs/pipes.cjs +0 -104
  358. package/dist/cjs/dbs/pipes.cjs.map +0 -1
  359. package/dist/cjs/dbs/pipes.min.cjs +0 -2
  360. package/dist/cjs/dbs/pipes.min.cjs.map +0 -1
  361. package/dist/cjs/errors/equippedError.cjs +0 -12
  362. package/dist/cjs/errors/equippedError.cjs.map +0 -1
  363. package/dist/cjs/errors/equippedError.min.cjs +0 -2
  364. package/dist/cjs/errors/equippedError.min.cjs.map +0 -1
  365. package/dist/cjs/errors/requestError.cjs +0 -12
  366. package/dist/cjs/errors/requestError.cjs.map +0 -1
  367. package/dist/cjs/errors/requestError.min.cjs +0 -2
  368. package/dist/cjs/errors/requestError.min.cjs.map +0 -1
  369. package/dist/cjs/errors/types/badRequestError.cjs +0 -12
  370. package/dist/cjs/errors/types/badRequestError.cjs.map +0 -1
  371. package/dist/cjs/errors/types/badRequestError.min.cjs +0 -2
  372. package/dist/cjs/errors/types/badRequestError.min.cjs.map +0 -1
  373. package/dist/cjs/errors/types/notAuthenticatedError.cjs +0 -12
  374. package/dist/cjs/errors/types/notAuthenticatedError.cjs.map +0 -1
  375. package/dist/cjs/errors/types/notAuthenticatedError.min.cjs +0 -2
  376. package/dist/cjs/errors/types/notAuthenticatedError.min.cjs.map +0 -1
  377. package/dist/cjs/errors/types/notAuthorizedError.cjs +0 -12
  378. package/dist/cjs/errors/types/notAuthorizedError.cjs.map +0 -1
  379. package/dist/cjs/errors/types/notAuthorizedError.min.cjs +0 -2
  380. package/dist/cjs/errors/types/notAuthorizedError.min.cjs.map +0 -1
  381. package/dist/cjs/errors/types/notFoundError.cjs +0 -12
  382. package/dist/cjs/errors/types/notFoundError.cjs.map +0 -1
  383. package/dist/cjs/errors/types/notFoundError.min.cjs +0 -2
  384. package/dist/cjs/errors/types/notFoundError.min.cjs.map +0 -1
  385. package/dist/cjs/errors/types/tokenExpired.cjs +0 -12
  386. package/dist/cjs/errors/types/tokenExpired.cjs.map +0 -1
  387. package/dist/cjs/errors/types/tokenExpired.min.cjs +0 -2
  388. package/dist/cjs/errors/types/tokenExpired.min.cjs.map +0 -1
  389. package/dist/cjs/errors/types/validationError.cjs +0 -16
  390. package/dist/cjs/errors/types/validationError.cjs.map +0 -1
  391. package/dist/cjs/errors/types/validationError.min.cjs +0 -2
  392. package/dist/cjs/errors/types/validationError.min.cjs.map +0 -1
  393. package/dist/cjs/events/base.cjs +0 -6
  394. package/dist/cjs/events/base.cjs.map +0 -1
  395. package/dist/cjs/events/base.min.cjs +0 -2
  396. package/dist/cjs/events/base.min.cjs.map +0 -1
  397. package/dist/cjs/events/pipes.cjs +0 -28
  398. package/dist/cjs/events/pipes.cjs.map +0 -1
  399. package/dist/cjs/events/pipes.min.cjs +0 -2
  400. package/dist/cjs/events/pipes.min.cjs.map +0 -1
  401. package/dist/cjs/events/types/kafka.cjs +0 -80
  402. package/dist/cjs/events/types/kafka.cjs.map +0 -1
  403. package/dist/cjs/events/types/kafka.min.cjs +0 -2
  404. package/dist/cjs/events/types/kafka.min.cjs.map +0 -1
  405. package/dist/cjs/events/types/rabbitmq.cjs +0 -54
  406. package/dist/cjs/events/types/rabbitmq.cjs.map +0 -1
  407. package/dist/cjs/events/types/rabbitmq.min.cjs +0 -2
  408. package/dist/cjs/events/types/rabbitmq.min.cjs.map +0 -1
  409. package/dist/cjs/instance/hooks.cjs +0 -26
  410. package/dist/cjs/instance/hooks.cjs.map +0 -1
  411. package/dist/cjs/instance/hooks.min.cjs +0 -2
  412. package/dist/cjs/instance/hooks.min.cjs.map +0 -1
  413. package/dist/cjs/instance/settings.cjs +0 -57
  414. package/dist/cjs/instance/settings.cjs.map +0 -1
  415. package/dist/cjs/instance/settings.min.cjs +0 -2
  416. package/dist/cjs/instance/settings.min.cjs.map +0 -1
  417. package/dist/cjs/jobs/pipes.cjs +0 -13
  418. package/dist/cjs/jobs/pipes.cjs.map +0 -1
  419. package/dist/cjs/jobs/pipes.min.cjs +0 -2
  420. package/dist/cjs/jobs/pipes.min.cjs.map +0 -1
  421. package/dist/cjs/jobs/types/redis.cjs +0 -106
  422. package/dist/cjs/jobs/types/redis.cjs.map +0 -1
  423. package/dist/cjs/jobs/types/redis.min.cjs +0 -2
  424. package/dist/cjs/jobs/types/redis.min.cjs.map +0 -1
  425. package/dist/cjs/server/impls/base.cjs +0 -211
  426. package/dist/cjs/server/impls/base.cjs.map +0 -1
  427. package/dist/cjs/server/impls/base.min.cjs +0 -2
  428. package/dist/cjs/server/impls/base.min.cjs.map +0 -1
  429. package/dist/cjs/server/impls/express.cjs +0 -111
  430. package/dist/cjs/server/impls/express.cjs.map +0 -1
  431. package/dist/cjs/server/impls/express.min.cjs +0 -2
  432. package/dist/cjs/server/impls/express.min.cjs.map +0 -1
  433. package/dist/cjs/server/impls/fastify.cjs +0 -121
  434. package/dist/cjs/server/impls/fastify.cjs.map +0 -1
  435. package/dist/cjs/server/impls/fastify.min.cjs +0 -2
  436. package/dist/cjs/server/impls/fastify.min.cjs.map +0 -1
  437. package/dist/cjs/server/middlewares/index.cjs +0 -2
  438. package/dist/cjs/server/middlewares/index.cjs.map +0 -1
  439. package/dist/cjs/server/middlewares/index.min.cjs +0 -2
  440. package/dist/cjs/server/middlewares/index.min.cjs.map +0 -1
  441. package/dist/cjs/server/middlewares/requireAuthUser.cjs +0 -22
  442. package/dist/cjs/server/middlewares/requireAuthUser.cjs.map +0 -1
  443. package/dist/cjs/server/middlewares/requireAuthUser.min.cjs +0 -2
  444. package/dist/cjs/server/middlewares/requireAuthUser.min.cjs.map +0 -1
  445. package/dist/cjs/server/openapi.cjs +0 -191
  446. package/dist/cjs/server/openapi.cjs.map +0 -1
  447. package/dist/cjs/server/openapi.min.cjs +0 -30
  448. package/dist/cjs/server/openapi.min.cjs.map +0 -1
  449. package/dist/cjs/server/pipes.cjs +0 -67
  450. package/dist/cjs/server/pipes.cjs.map +0 -1
  451. package/dist/cjs/server/pipes.min.cjs +0 -2
  452. package/dist/cjs/server/pipes.min.cjs.map +0 -1
  453. package/dist/cjs/server/requests-auth-methods/apiKeys.cjs +0 -21
  454. package/dist/cjs/server/requests-auth-methods/apiKeys.cjs.map +0 -1
  455. package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs +0 -2
  456. package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs.map +0 -1
  457. package/dist/cjs/server/requests-auth-methods/base.cjs +0 -20
  458. package/dist/cjs/server/requests-auth-methods/base.cjs.map +0 -1
  459. package/dist/cjs/server/requests-auth-methods/base.min.cjs +0 -2
  460. package/dist/cjs/server/requests-auth-methods/base.min.cjs.map +0 -1
  461. package/dist/cjs/server/requests-auth-methods/index.cjs +0 -4
  462. package/dist/cjs/server/requests-auth-methods/index.cjs.map +0 -1
  463. package/dist/cjs/server/requests-auth-methods/index.min.cjs +0 -2
  464. package/dist/cjs/server/requests-auth-methods/index.min.cjs.map +0 -1
  465. package/dist/cjs/server/requests-auth-methods/jwt.cjs +0 -78
  466. package/dist/cjs/server/requests-auth-methods/jwt.cjs.map +0 -1
  467. package/dist/cjs/server/requests-auth-methods/jwt.min.cjs +0 -2
  468. package/dist/cjs/server/requests-auth-methods/jwt.min.cjs.map +0 -1
  469. package/dist/cjs/server/requests.cjs +0 -80
  470. package/dist/cjs/server/requests.cjs.map +0 -1
  471. package/dist/cjs/server/requests.min.cjs +0 -2
  472. package/dist/cjs/server/requests.min.cjs.map +0 -1
  473. package/dist/cjs/server/routes.cjs +0 -74
  474. package/dist/cjs/server/routes.cjs.map +0 -1
  475. package/dist/cjs/server/routes.min.cjs +0 -2
  476. package/dist/cjs/server/routes.min.cjs.map +0 -1
  477. package/dist/cjs/server/sockets.cjs +0 -126
  478. package/dist/cjs/server/sockets.cjs.map +0 -1
  479. package/dist/cjs/server/sockets.min.cjs +0 -2
  480. package/dist/cjs/server/sockets.min.cjs.map +0 -1
  481. package/dist/cjs/server/types.cjs +0 -34
  482. package/dist/cjs/server/types.cjs.map +0 -1
  483. package/dist/cjs/server/types.min.cjs +0 -2
  484. package/dist/cjs/server/types.min.cjs.map +0 -1
  485. package/dist/cjs/types/overrides.cjs +0 -1
  486. package/dist/cjs/types/overrides.cjs.map +0 -1
  487. package/dist/cjs/types/overrides.min.cjs +0 -1
  488. package/dist/cjs/types/overrides.min.cjs.map +0 -1
  489. package/dist/cjs/utilities/authProviders.cjs +0 -53
  490. package/dist/cjs/utilities/authProviders.cjs.map +0 -1
  491. package/dist/cjs/utilities/authProviders.min.cjs +0 -2
  492. package/dist/cjs/utilities/authProviders.min.cjs.map +0 -1
  493. package/dist/cjs/utilities/hash.cjs +0 -17
  494. package/dist/cjs/utilities/hash.cjs.map +0 -1
  495. package/dist/cjs/utilities/hash.min.cjs +0 -2
  496. package/dist/cjs/utilities/hash.min.cjs.map +0 -1
  497. package/dist/cjs/utilities/json.cjs +0 -16
  498. package/dist/cjs/utilities/json.cjs.map +0 -1
  499. package/dist/cjs/utilities/json.min.cjs +0 -2
  500. package/dist/cjs/utilities/json.min.cjs.map +0 -1
  501. package/dist/cjs/utilities/media.cjs +0 -13
  502. package/dist/cjs/utilities/media.cjs.map +0 -1
  503. package/dist/cjs/utilities/media.min.cjs +0 -2
  504. package/dist/cjs/utilities/media.min.cjs.map +0 -1
  505. package/dist/cjs/utilities/random.cjs +0 -12
  506. package/dist/cjs/utilities/random.cjs.map +0 -1
  507. package/dist/cjs/utilities/random.min.cjs +0 -2
  508. package/dist/cjs/utilities/random.min.cjs.map +0 -1
  509. package/dist/cjs/utilities/retry.cjs +0 -14
  510. package/dist/cjs/utilities/retry.cjs.map +0 -1
  511. package/dist/cjs/utilities/retry.min.cjs +0 -2
  512. package/dist/cjs/utilities/retry.min.cjs.map +0 -1
  513. package/dist/cjs/validations/valleyed.cjs +0 -43
  514. package/dist/cjs/validations/valleyed.cjs.map +0 -1
  515. package/dist/cjs/validations/valleyed.min.cjs +0 -2
  516. package/dist/cjs/validations/valleyed.min.cjs.map +0 -1
  517. package/dist/esm/audit/events.min.mjs +0 -2
  518. package/dist/esm/audit/events.min.mjs.map +0 -1
  519. package/dist/esm/audit/events.mjs +0 -101
  520. package/dist/esm/audit/events.mjs.map +0 -1
  521. package/dist/esm/audit/index.min.mjs +0 -2
  522. package/dist/esm/audit/index.min.mjs.map +0 -1
  523. package/dist/esm/audit/index.mjs +0 -2
  524. package/dist/esm/audit/index.mjs.map +0 -1
  525. package/dist/esm/cache/base.min.mjs +0 -2
  526. package/dist/esm/cache/base.min.mjs.map +0 -1
  527. package/dist/esm/cache/base.mjs +0 -6
  528. package/dist/esm/cache/base.mjs.map +0 -1
  529. package/dist/esm/cache/pipes.min.mjs +0 -2
  530. package/dist/esm/cache/pipes.min.mjs.map +0 -1
  531. package/dist/esm/cache/pipes.mjs +0 -16
  532. package/dist/esm/cache/pipes.mjs.map +0 -1
  533. package/dist/esm/cache/types/in-memory.min.mjs +0 -2
  534. package/dist/esm/cache/types/in-memory.min.mjs.map +0 -1
  535. package/dist/esm/cache/types/in-memory.mjs +0 -47
  536. package/dist/esm/cache/types/in-memory.mjs.map +0 -1
  537. package/dist/esm/cache/types/redis.min.mjs +0 -2
  538. package/dist/esm/cache/types/redis.min.mjs.map +0 -1
  539. package/dist/esm/cache/types/redis.mjs +0 -55
  540. package/dist/esm/cache/types/redis.mjs.map +0 -1
  541. package/dist/esm/dbs/base/changes.min.mjs +0 -2
  542. package/dist/esm/dbs/base/changes.min.mjs.map +0 -1
  543. package/dist/esm/dbs/base/changes.mjs +0 -36
  544. package/dist/esm/dbs/base/changes.mjs.map +0 -1
  545. package/dist/esm/dbs/base/core.min.mjs +0 -1
  546. package/dist/esm/dbs/base/core.mjs +0 -1
  547. package/dist/esm/dbs/base/db.min.mjs +0 -2
  548. package/dist/esm/dbs/base/db.min.mjs.map +0 -1
  549. package/dist/esm/dbs/base/db.mjs +0 -14
  550. package/dist/esm/dbs/base/db.mjs.map +0 -1
  551. package/dist/esm/dbs/base/types.min.mjs +0 -2
  552. package/dist/esm/dbs/base/types.min.mjs.map +0 -1
  553. package/dist/esm/dbs/base/types.mjs +0 -2
  554. package/dist/esm/dbs/base/types.mjs.map +0 -1
  555. package/dist/esm/dbs/mongo/changes.min.mjs +0 -2
  556. package/dist/esm/dbs/mongo/changes.min.mjs.map +0 -1
  557. package/dist/esm/dbs/mongo/changes.mjs +0 -81
  558. package/dist/esm/dbs/mongo/changes.mjs.map +0 -1
  559. package/dist/esm/dbs/mongo/db.min.mjs +0 -2
  560. package/dist/esm/dbs/mongo/db.min.mjs.map +0 -1
  561. package/dist/esm/dbs/mongo/db.mjs +0 -225
  562. package/dist/esm/dbs/mongo/db.mjs.map +0 -1
  563. package/dist/esm/dbs/mongo/query.min.mjs +0 -2
  564. package/dist/esm/dbs/mongo/query.min.mjs.map +0 -1
  565. package/dist/esm/dbs/mongo/query.mjs +0 -66
  566. package/dist/esm/dbs/mongo/query.mjs.map +0 -1
  567. package/dist/esm/dbs/pipes.min.mjs +0 -2
  568. package/dist/esm/dbs/pipes.min.mjs.map +0 -1
  569. package/dist/esm/dbs/pipes.mjs +0 -104
  570. package/dist/esm/dbs/pipes.mjs.map +0 -1
  571. package/dist/esm/errors/equippedError.min.mjs +0 -2
  572. package/dist/esm/errors/equippedError.min.mjs.map +0 -1
  573. package/dist/esm/errors/equippedError.mjs +0 -12
  574. package/dist/esm/errors/equippedError.mjs.map +0 -1
  575. package/dist/esm/errors/requestError.min.mjs +0 -2
  576. package/dist/esm/errors/requestError.min.mjs.map +0 -1
  577. package/dist/esm/errors/requestError.mjs +0 -12
  578. package/dist/esm/errors/requestError.mjs.map +0 -1
  579. package/dist/esm/errors/types/badRequestError.min.mjs +0 -2
  580. package/dist/esm/errors/types/badRequestError.min.mjs.map +0 -1
  581. package/dist/esm/errors/types/badRequestError.mjs +0 -12
  582. package/dist/esm/errors/types/badRequestError.mjs.map +0 -1
  583. package/dist/esm/errors/types/notAuthenticatedError.min.mjs +0 -2
  584. package/dist/esm/errors/types/notAuthenticatedError.min.mjs.map +0 -1
  585. package/dist/esm/errors/types/notAuthenticatedError.mjs +0 -12
  586. package/dist/esm/errors/types/notAuthenticatedError.mjs.map +0 -1
  587. package/dist/esm/errors/types/notAuthorizedError.min.mjs +0 -2
  588. package/dist/esm/errors/types/notAuthorizedError.min.mjs.map +0 -1
  589. package/dist/esm/errors/types/notAuthorizedError.mjs +0 -12
  590. package/dist/esm/errors/types/notAuthorizedError.mjs.map +0 -1
  591. package/dist/esm/errors/types/notFoundError.min.mjs +0 -2
  592. package/dist/esm/errors/types/notFoundError.min.mjs.map +0 -1
  593. package/dist/esm/errors/types/notFoundError.mjs +0 -12
  594. package/dist/esm/errors/types/notFoundError.mjs.map +0 -1
  595. package/dist/esm/errors/types/tokenExpired.min.mjs +0 -2
  596. package/dist/esm/errors/types/tokenExpired.min.mjs.map +0 -1
  597. package/dist/esm/errors/types/tokenExpired.mjs +0 -12
  598. package/dist/esm/errors/types/tokenExpired.mjs.map +0 -1
  599. package/dist/esm/errors/types/validationError.min.mjs +0 -2
  600. package/dist/esm/errors/types/validationError.min.mjs.map +0 -1
  601. package/dist/esm/errors/types/validationError.mjs +0 -16
  602. package/dist/esm/errors/types/validationError.mjs.map +0 -1
  603. package/dist/esm/events/base.min.mjs +0 -2
  604. package/dist/esm/events/base.min.mjs.map +0 -1
  605. package/dist/esm/events/base.mjs +0 -6
  606. package/dist/esm/events/base.mjs.map +0 -1
  607. package/dist/esm/events/pipes.min.mjs +0 -2
  608. package/dist/esm/events/pipes.min.mjs.map +0 -1
  609. package/dist/esm/events/pipes.mjs +0 -28
  610. package/dist/esm/events/pipes.mjs.map +0 -1
  611. package/dist/esm/events/types/kafka.min.mjs +0 -2
  612. package/dist/esm/events/types/kafka.min.mjs.map +0 -1
  613. package/dist/esm/events/types/kafka.mjs.map +0 -1
  614. package/dist/esm/events/types/rabbitmq.min.mjs +0 -2
  615. package/dist/esm/events/types/rabbitmq.min.mjs.map +0 -1
  616. package/dist/esm/events/types/rabbitmq.mjs +0 -54
  617. package/dist/esm/events/types/rabbitmq.mjs.map +0 -1
  618. package/dist/esm/instance/hooks.min.mjs +0 -2
  619. package/dist/esm/instance/hooks.min.mjs.map +0 -1
  620. package/dist/esm/instance/hooks.mjs +0 -26
  621. package/dist/esm/instance/hooks.mjs.map +0 -1
  622. package/dist/esm/instance/settings.min.mjs +0 -2
  623. package/dist/esm/instance/settings.min.mjs.map +0 -1
  624. package/dist/esm/instance/settings.mjs +0 -57
  625. package/dist/esm/instance/settings.mjs.map +0 -1
  626. package/dist/esm/jobs/pipes.min.mjs +0 -2
  627. package/dist/esm/jobs/pipes.min.mjs.map +0 -1
  628. package/dist/esm/jobs/pipes.mjs +0 -13
  629. package/dist/esm/jobs/pipes.mjs.map +0 -1
  630. package/dist/esm/jobs/types/redis.min.mjs +0 -2
  631. package/dist/esm/jobs/types/redis.min.mjs.map +0 -1
  632. package/dist/esm/jobs/types/redis.mjs.map +0 -1
  633. package/dist/esm/server/impls/base.min.mjs +0 -2
  634. package/dist/esm/server/impls/base.min.mjs.map +0 -1
  635. package/dist/esm/server/impls/base.mjs +0 -211
  636. package/dist/esm/server/impls/base.mjs.map +0 -1
  637. package/dist/esm/server/impls/express.min.mjs +0 -2
  638. package/dist/esm/server/impls/express.min.mjs.map +0 -1
  639. package/dist/esm/server/impls/express.mjs +0 -111
  640. package/dist/esm/server/impls/express.mjs.map +0 -1
  641. package/dist/esm/server/impls/fastify.min.mjs +0 -2
  642. package/dist/esm/server/impls/fastify.min.mjs.map +0 -1
  643. package/dist/esm/server/impls/fastify.mjs +0 -121
  644. package/dist/esm/server/impls/fastify.mjs.map +0 -1
  645. package/dist/esm/server/middlewares/index.min.mjs +0 -2
  646. package/dist/esm/server/middlewares/index.min.mjs.map +0 -1
  647. package/dist/esm/server/middlewares/index.mjs +0 -2
  648. package/dist/esm/server/middlewares/index.mjs.map +0 -1
  649. package/dist/esm/server/middlewares/requireAuthUser.min.mjs +0 -2
  650. package/dist/esm/server/middlewares/requireAuthUser.min.mjs.map +0 -1
  651. package/dist/esm/server/middlewares/requireAuthUser.mjs +0 -22
  652. package/dist/esm/server/middlewares/requireAuthUser.mjs.map +0 -1
  653. package/dist/esm/server/openapi.min.mjs +0 -30
  654. package/dist/esm/server/openapi.min.mjs.map +0 -1
  655. package/dist/esm/server/openapi.mjs +0 -191
  656. package/dist/esm/server/openapi.mjs.map +0 -1
  657. package/dist/esm/server/pipes.min.mjs +0 -2
  658. package/dist/esm/server/pipes.min.mjs.map +0 -1
  659. package/dist/esm/server/pipes.mjs +0 -67
  660. package/dist/esm/server/pipes.mjs.map +0 -1
  661. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs +0 -2
  662. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs.map +0 -1
  663. package/dist/esm/server/requests-auth-methods/apiKeys.mjs +0 -21
  664. package/dist/esm/server/requests-auth-methods/apiKeys.mjs.map +0 -1
  665. package/dist/esm/server/requests-auth-methods/base.min.mjs +0 -2
  666. package/dist/esm/server/requests-auth-methods/base.min.mjs.map +0 -1
  667. package/dist/esm/server/requests-auth-methods/base.mjs +0 -20
  668. package/dist/esm/server/requests-auth-methods/base.mjs.map +0 -1
  669. package/dist/esm/server/requests-auth-methods/index.min.mjs +0 -2
  670. package/dist/esm/server/requests-auth-methods/index.min.mjs.map +0 -1
  671. package/dist/esm/server/requests-auth-methods/index.mjs +0 -4
  672. package/dist/esm/server/requests-auth-methods/index.mjs.map +0 -1
  673. package/dist/esm/server/requests-auth-methods/jwt.min.mjs +0 -2
  674. package/dist/esm/server/requests-auth-methods/jwt.min.mjs.map +0 -1
  675. package/dist/esm/server/requests-auth-methods/jwt.mjs +0 -78
  676. package/dist/esm/server/requests-auth-methods/jwt.mjs.map +0 -1
  677. package/dist/esm/server/requests.min.mjs +0 -2
  678. package/dist/esm/server/requests.min.mjs.map +0 -1
  679. package/dist/esm/server/requests.mjs +0 -80
  680. package/dist/esm/server/requests.mjs.map +0 -1
  681. package/dist/esm/server/routes.min.mjs +0 -2
  682. package/dist/esm/server/routes.min.mjs.map +0 -1
  683. package/dist/esm/server/routes.mjs +0 -74
  684. package/dist/esm/server/routes.mjs.map +0 -1
  685. package/dist/esm/server/sockets.min.mjs +0 -2
  686. package/dist/esm/server/sockets.min.mjs.map +0 -1
  687. package/dist/esm/server/sockets.mjs +0 -126
  688. package/dist/esm/server/sockets.mjs.map +0 -1
  689. package/dist/esm/server/types.min.mjs +0 -2
  690. package/dist/esm/server/types.min.mjs.map +0 -1
  691. package/dist/esm/server/types.mjs +0 -34
  692. package/dist/esm/server/types.mjs.map +0 -1
  693. package/dist/esm/types/overrides.min.mjs +0 -1
  694. package/dist/esm/types/overrides.mjs +0 -1
  695. package/dist/esm/utilities/authProviders.min.mjs +0 -2
  696. package/dist/esm/utilities/authProviders.min.mjs.map +0 -1
  697. package/dist/esm/utilities/authProviders.mjs +0 -53
  698. package/dist/esm/utilities/authProviders.mjs.map +0 -1
  699. package/dist/esm/utilities/hash.min.mjs +0 -2
  700. package/dist/esm/utilities/hash.min.mjs.map +0 -1
  701. package/dist/esm/utilities/hash.mjs +0 -17
  702. package/dist/esm/utilities/hash.mjs.map +0 -1
  703. package/dist/esm/utilities/json.min.mjs +0 -2
  704. package/dist/esm/utilities/json.min.mjs.map +0 -1
  705. package/dist/esm/utilities/json.mjs +0 -16
  706. package/dist/esm/utilities/json.mjs.map +0 -1
  707. package/dist/esm/utilities/media.min.mjs +0 -2
  708. package/dist/esm/utilities/media.min.mjs.map +0 -1
  709. package/dist/esm/utilities/media.mjs +0 -13
  710. package/dist/esm/utilities/media.mjs.map +0 -1
  711. package/dist/esm/utilities/random.min.mjs +0 -2
  712. package/dist/esm/utilities/random.min.mjs.map +0 -1
  713. package/dist/esm/utilities/random.mjs +0 -12
  714. package/dist/esm/utilities/random.mjs.map +0 -1
  715. package/dist/esm/utilities/retry.min.mjs +0 -2
  716. package/dist/esm/utilities/retry.min.mjs.map +0 -1
  717. package/dist/esm/utilities/retry.mjs +0 -14
  718. package/dist/esm/utilities/retry.mjs.map +0 -1
  719. package/dist/esm/validations/valleyed.min.mjs +0 -2
  720. package/dist/esm/validations/valleyed.min.mjs.map +0 -1
  721. package/dist/esm/validations/valleyed.mjs +0 -43
  722. package/dist/esm/validations/valleyed.mjs.map +0 -1
  723. package/dist/types/audit/events.js +0 -100
  724. package/dist/types/audit/index.d.ts +0 -44
  725. package/dist/types/audit/index.js +0 -1
  726. package/dist/types/cache/base.js +0 -5
  727. package/dist/types/cache/pipes.js +0 -15
  728. package/dist/types/cache/types/in-memory.js +0 -46
  729. package/dist/types/cache/types/redis.js +0 -54
  730. package/dist/types/db-C8YY1yTO.d.ts +0 -14
  731. package/dist/types/db-Dj1SGto0.d.ts +0 -24
  732. package/dist/types/dbs/base/changes.js +0 -35
  733. package/dist/types/dbs/base/core.js +0 -0
  734. package/dist/types/dbs/base/db.js +0 -13
  735. package/dist/types/dbs/base/types.js +0 -1
  736. package/dist/types/dbs/mongo/changes.js +0 -80
  737. package/dist/types/dbs/mongo/db.js +0 -224
  738. package/dist/types/dbs/mongo/query.js +0 -65
  739. package/dist/types/dbs/pipes.js +0 -103
  740. package/dist/types/errors/equippedError.js +0 -11
  741. package/dist/types/errors/requestError.js +0 -11
  742. package/dist/types/errors/types/badRequestError.js +0 -11
  743. package/dist/types/errors/types/notAuthenticatedError.js +0 -11
  744. package/dist/types/errors/types/notAuthorizedError.js +0 -11
  745. package/dist/types/errors/types/notFoundError.js +0 -11
  746. package/dist/types/errors/types/tokenExpired.js +0 -11
  747. package/dist/types/errors/types/validationError.js +0 -15
  748. package/dist/types/events/base.js +0 -5
  749. package/dist/types/events/pipes.js +0 -27
  750. package/dist/types/events/types/rabbitmq.js +0 -53
  751. package/dist/types/instance/hooks.js +0 -25
  752. package/dist/types/instance/settings.js +0 -56
  753. package/dist/types/jobs/pipes.js +0 -12
  754. package/dist/types/kafka-Cf-TUJgv.d.ts +0 -54
  755. package/dist/types/server/impls/base.js +0 -210
  756. package/dist/types/server/impls/express.js +0 -110
  757. package/dist/types/server/impls/fastify.js +0 -120
  758. package/dist/types/server/middlewares/index.js +0 -1
  759. package/dist/types/server/middlewares/requireAuthUser.js +0 -21
  760. package/dist/types/server/openapi.js +0 -190
  761. package/dist/types/server/pipes.js +0 -66
  762. package/dist/types/server/requests-auth-methods/apiKeys.js +0 -20
  763. package/dist/types/server/requests-auth-methods/base.js +0 -19
  764. package/dist/types/server/requests-auth-methods/index.js +0 -3
  765. package/dist/types/server/requests-auth-methods/jwt.js +0 -77
  766. package/dist/types/server/requests.js +0 -79
  767. package/dist/types/server/routes.js +0 -73
  768. package/dist/types/server/sockets.js +0 -125
  769. package/dist/types/server/types.js +0 -33
  770. package/dist/types/types/overrides.js +0 -0
  771. package/dist/types/utilities/authProviders.js +0 -52
  772. package/dist/types/utilities/hash.js +0 -16
  773. package/dist/types/utilities/json.js +0 -15
  774. package/dist/types/utilities/media.js +0 -12
  775. package/dist/types/utilities/random.js +0 -11
  776. package/dist/types/utilities/retry.js +0 -13
  777. package/dist/types/validations/valleyed.js +0 -42
  778. /package/dist/esm/{dbs/base/core.min.mjs.map → cache/adapters/redis/index.min.mjs.map} +0 -0
  779. /package/dist/esm/{dbs/base/core.mjs.map → cache/adapters/redis/index.mjs.map} +0 -0
  780. /package/dist/esm/{types/overrides.min.mjs.map → chunk-AQY7QVYI.min.mjs.map} +0 -0
  781. /package/dist/esm/{types/overrides.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
@@ -0,0 +1,979 @@
1
+ import {
2
+ InMemoryAdapter
3
+ } from "../../../chunk-NJ2FHI3U.js";
4
+ import {
5
+ OrmAdapter
6
+ } from "../../../chunk-JQ2FWX4W.js";
7
+ import {
8
+ configurable
9
+ } from "../../../chunk-YTY3EFNB.js";
10
+ import "../../../chunk-KZKFYO4V.js";
11
+ import "../../../chunk-MLKGABMK.js";
12
+
13
+ // src/orm/adapters/json/index.ts
14
+ import { open, readFile, rename, unlink, writeFile } from "fs/promises";
15
+ import { v } from "valleyed";
16
+ var jsonConnectionPipe = () => v.object({
17
+ filePath: v.string()
18
+ });
19
+ var JsonAdapter = class extends configurable(jsonConnectionPipe, OrmAdapter) {
20
+ schemaConfigPipe = v.object({ table: v.string() });
21
+ #inMemory = InMemoryAdapter.create({});
22
+ supportedFieldTypes = this.#inMemory.supportedFieldTypes;
23
+ queryableOps = this.#inMemory.queryableOps;
24
+ updateOps = this.#inMemory.updateOps;
25
+ aggregateOps = this.#inMemory.aggregateOps;
26
+ #writeQueue = Promise.resolve();
27
+ constructor(config) {
28
+ super(config);
29
+ }
30
+ get stores() {
31
+ return this.#inMemory.stores;
32
+ }
33
+ #serialize() {
34
+ const obj = {};
35
+ const migrations = [...this.#inMemory.migrations.values()];
36
+ if (migrations.length > 0) obj["__migrations"] = migrations;
37
+ const tables = {};
38
+ for (const [name, meta] of this.#inMemory.tables.entries()) {
39
+ tables[name] = { pk: meta.pk, fields: Object.fromEntries(meta.fields.entries()) };
40
+ }
41
+ if (Object.keys(tables).length > 0) obj["__tables"] = tables;
42
+ const indexes = {};
43
+ for (const [name, meta] of this.#inMemory.indexes.entries()) {
44
+ indexes[name] = { table: meta.table, on: [...meta.on], unique: meta.unique };
45
+ }
46
+ if (Object.keys(indexes).length > 0) obj["__indexes"] = indexes;
47
+ const foreignKeys = {};
48
+ for (const [name, meta] of this.#inMemory.foreignKeys.entries()) {
49
+ foreignKeys[name] = {
50
+ table: meta.table,
51
+ on: meta.on,
52
+ references: meta.references,
53
+ ...meta.onDelete ? { onDelete: meta.onDelete } : {},
54
+ ...meta.onUpdate ? { onUpdate: meta.onUpdate } : {}
55
+ };
56
+ }
57
+ if (Object.keys(foreignKeys).length > 0) obj["__foreignKeys"] = foreignKeys;
58
+ for (const [name, store] of this.stores.entries()) {
59
+ const records = {};
60
+ for (const [pk, doc] of store.entries()) {
61
+ records[pk] = doc;
62
+ }
63
+ obj[name] = records;
64
+ }
65
+ return JSON.stringify(obj);
66
+ }
67
+ async #atomicWrite() {
68
+ const data = this.#serialize();
69
+ const tmpPath = this.config.filePath + ".tmp." + process.pid + "." + Date.now();
70
+ await writeFile(tmpPath, data, "utf-8");
71
+ await rename(tmpPath, this.config.filePath);
72
+ }
73
+ #persistToDisk() {
74
+ const next = this.#writeQueue.then(() => this.#atomicWrite());
75
+ this.#writeQueue = next.catch(() => {
76
+ });
77
+ return next;
78
+ }
79
+ async connect() {
80
+ let raw;
81
+ try {
82
+ raw = await readFile(this.config.filePath, "utf-8");
83
+ } catch {
84
+ return;
85
+ }
86
+ const data = JSON.parse(raw);
87
+ this.#inMemory.migrations.clear();
88
+ if (Array.isArray(data["__migrations"])) {
89
+ for (const m of data["__migrations"]) {
90
+ this.#inMemory.migrations.set(m.id, { id: m.id, appliedAt: m.appliedAt });
91
+ }
92
+ }
93
+ this.#inMemory.tables.clear();
94
+ if (data["__tables"] && typeof data["__tables"] === "object") {
95
+ for (const [name, meta] of Object.entries(data["__tables"])) {
96
+ const fields = /* @__PURE__ */ new Map();
97
+ if (meta.fields) {
98
+ for (const [fieldName, fspec] of Object.entries(meta.fields)) {
99
+ fields.set(fieldName, fspec);
100
+ }
101
+ }
102
+ this.#inMemory.tables.set(name, { pk: meta.pk, fields });
103
+ }
104
+ }
105
+ this.#inMemory.indexes.clear();
106
+ if (data["__indexes"] && typeof data["__indexes"] === "object") {
107
+ for (const [name, meta] of Object.entries(data["__indexes"])) {
108
+ this.#inMemory.indexes.set(name, { table: meta.table, on: meta.on, unique: meta.unique });
109
+ }
110
+ }
111
+ this.#inMemory.foreignKeys.clear();
112
+ if (data["__foreignKeys"] && typeof data["__foreignKeys"] === "object") {
113
+ for (const [name, meta] of Object.entries(data["__foreignKeys"])) {
114
+ this.#inMemory.foreignKeys.set(name, meta);
115
+ }
116
+ }
117
+ this.stores.clear();
118
+ for (const [name, records] of Object.entries(data)) {
119
+ if (name.startsWith("__")) continue;
120
+ const store = /* @__PURE__ */ new Map();
121
+ for (const [pk, doc] of Object.entries(records)) {
122
+ store.set(pk, doc);
123
+ }
124
+ this.stores.set(name, store);
125
+ }
126
+ }
127
+ async disconnect() {
128
+ await this.#persistToDisk();
129
+ }
130
+ async findByPk(schema, config, pk) {
131
+ return this.#inMemory.findByPk(schema, config, pk);
132
+ }
133
+ async createMany(schema, config, data) {
134
+ const result = await this.#inMemory.createMany(schema, config, data);
135
+ await this.#persistToDisk();
136
+ return result;
137
+ }
138
+ async updateByPk(schema, config, pk, ops) {
139
+ const result = await this.#inMemory.updateByPk(schema, config, pk, ops);
140
+ if (result) await this.#persistToDisk();
141
+ return result;
142
+ }
143
+ async deleteByPk(schema, config, pk) {
144
+ const result = await this.#inMemory.deleteByPk(schema, config, pk);
145
+ if (result) await this.#persistToDisk();
146
+ return result;
147
+ }
148
+ async findMany(schema, config, group, options) {
149
+ return this.#inMemory.findMany(schema, config, group, options);
150
+ }
151
+ async count(schema, config, group) {
152
+ return this.#inMemory.count(schema, config, group);
153
+ }
154
+ iterateMany(schema, config, group, options) {
155
+ return this.#inMemory.iterateMany(schema, config, group, options);
156
+ }
157
+ async updateMany(schema, config, group, data) {
158
+ const result = await this.#inMemory.updateMany(schema, config, group, data);
159
+ if (result.length) await this.#persistToDisk();
160
+ return result;
161
+ }
162
+ async deleteMany(schema, config, filter) {
163
+ const result = await this.#inMemory.deleteMany(schema, config, filter);
164
+ if (result.length) await this.#persistToDisk();
165
+ return result;
166
+ }
167
+ async upsertOne(schema, config, filter, create, ops) {
168
+ const result = await this.#inMemory.upsertOne(schema, config, filter, create, ops);
169
+ await this.#persistToDisk();
170
+ return result;
171
+ }
172
+ async aggregate(schema, config, spec) {
173
+ return this.#inMemory.aggregate(schema, config, spec);
174
+ }
175
+ async session(fn) {
176
+ return this.#inMemory.session(async () => {
177
+ const result = await fn();
178
+ await this.#persistToDisk();
179
+ return result;
180
+ });
181
+ }
182
+ async loadMigrations() {
183
+ await this.connect();
184
+ return this.#inMemory.loadMigrations();
185
+ }
186
+ async recordMigration(id, appliedAt) {
187
+ await this.#inMemory.recordMigration(id, appliedAt);
188
+ await this.#persistToDisk();
189
+ }
190
+ async acquireMigrationLock(fn) {
191
+ const lockPath = this.config.filePath + ".lock";
192
+ const deadline = Date.now() + 3e4;
193
+ while (true) {
194
+ try {
195
+ const handle = await open(lockPath, "wx");
196
+ await handle.close();
197
+ break;
198
+ } catch (err) {
199
+ if (err.code !== "EEXIST") throw err;
200
+ if (Date.now() > deadline) throw new Error("Timed out waiting for migration lock");
201
+ await new Promise((r) => setTimeout(r, 50));
202
+ }
203
+ }
204
+ try {
205
+ return await fn();
206
+ } finally {
207
+ await unlink(lockPath).catch(() => {
208
+ });
209
+ }
210
+ }
211
+ async applyCreateTable(change) {
212
+ await this.#inMemory.applyCreateTable(change);
213
+ await this.#persistToDisk();
214
+ }
215
+ async applyDropTable(change) {
216
+ await this.#inMemory.applyDropTable(change);
217
+ await this.#persistToDisk();
218
+ }
219
+ async applyAddField(change) {
220
+ await this.#inMemory.applyAddField(change);
221
+ await this.#persistToDisk();
222
+ }
223
+ async applyDropField(change) {
224
+ await this.#inMemory.applyDropField(change);
225
+ await this.#persistToDisk();
226
+ }
227
+ async applyModifyField(change) {
228
+ await this.#inMemory.applyModifyField(change);
229
+ await this.#persistToDisk();
230
+ }
231
+ async applyRenameTable(change) {
232
+ await this.#inMemory.applyRenameTable(change);
233
+ await this.#persistToDisk();
234
+ }
235
+ async applyRenameField(change) {
236
+ await this.#inMemory.applyRenameField(change);
237
+ await this.#persistToDisk();
238
+ }
239
+ async applyAddIndex(change) {
240
+ await this.#inMemory.applyAddIndex(change);
241
+ await this.#persistToDisk();
242
+ }
243
+ async applyDropIndex(change) {
244
+ await this.#inMemory.applyDropIndex(change);
245
+ await this.#persistToDisk();
246
+ }
247
+ async applyAddForeignKey(change) {
248
+ await this.#inMemory.applyAddForeignKey(change);
249
+ await this.#persistToDisk();
250
+ }
251
+ async applyDropForeignKey(change) {
252
+ await this.#inMemory.applyDropForeignKey(change);
253
+ await this.#persistToDisk();
254
+ }
255
+ async introspect() {
256
+ return this.#inMemory.introspect();
257
+ }
258
+ };
259
+ if (void 0) {
260
+ const { describe, test, expect, beforeEach, afterEach } = void 0;
261
+ const { FilterGroup } = await null;
262
+ const { OrderBy } = await null;
263
+ const { Schema } = await null;
264
+ const { IncOp, PatchOp, PullOp, PushOp } = await null;
265
+ const { v: v2 } = await null;
266
+ const { mkdtemp, rm } = await null;
267
+ const { tmpdir } = await null;
268
+ const { join } = await null;
269
+ const { Migrator } = await null;
270
+ const { Repo } = await null;
271
+ const { OrmMigrationError } = await null;
272
+ let tmpDir;
273
+ let filePath;
274
+ beforeEach(async () => {
275
+ tmpDir = await mkdtemp(join(tmpdir(), "json-adapter-"));
276
+ filePath = join(tmpDir, "test.json");
277
+ });
278
+ afterEach(async () => {
279
+ await rm(tmpDir, { recursive: true, force: true });
280
+ });
281
+ describe("json adapter \u2014 class construction", () => {
282
+ test("JsonAdapter.create({ filePath }) produces a working adapter", () => {
283
+ const adapter = JsonAdapter.create({ filePath });
284
+ expect(adapter).toBeInstanceOf(JsonAdapter);
285
+ expect(adapter.schemaConfigPipe).toBeDefined();
286
+ expect(adapter.supportedFieldTypes).toEqual(["string", "number", "boolean", "null", "object", "array", "date"]);
287
+ });
288
+ test("auto-wired Instance hooks register connect/disconnect keyed by class", async () => {
289
+ const { Instance: Inst } = await null;
290
+ const onSpy = (await null).vi.spyOn(Inst, "on").mockImplementation(() => {
291
+ });
292
+ JsonAdapter.create({ filePath });
293
+ expect(onSpy).toHaveBeenCalledWith("start", expect.any(Function), expect.objectContaining({ class: JsonAdapter }));
294
+ expect(onSpy).toHaveBeenCalledWith("close", expect.any(Function), expect.objectContaining({ class: JsonAdapter }));
295
+ onSpy.mockRestore();
296
+ });
297
+ });
298
+ describe("json adapter \u2014 surface parity with in-memory", () => {
299
+ test("CRUD: create, find, update, delete round-trip", async () => {
300
+ const schema = Schema.from("users").pk("id", v2.string(), () => "u").field("name", v2.string()).field("age", v2.number()).build();
301
+ const adapter = JsonAdapter.create({ filePath });
302
+ await adapter.connect();
303
+ const use = adapter.use(schema, { table: "users" });
304
+ const created = await use.createMany([
305
+ { id: "u1", name: "Alice", age: 30 },
306
+ { id: "u2", name: "Bob", age: 20 }
307
+ ]);
308
+ expect(created).toHaveLength(2);
309
+ const found = await use.findOne(FilterGroup.create().eq("id", "u1"));
310
+ expect(found).toEqual({ id: "u1", name: "Alice", age: 30 });
311
+ const many = await use.findMany(FilterGroup.create().gt("age", 19), {
312
+ orderBy: [new OrderBy("age", "asc")]
313
+ });
314
+ expect(many).toEqual([
315
+ { id: "u2", name: "Bob", age: 20 },
316
+ { id: "u1", name: "Alice", age: 30 }
317
+ ]);
318
+ await use.updateOne(FilterGroup.create().eq("id", "u1"), { age: 31 });
319
+ const updated = await use.findOne(FilterGroup.create().eq("id", "u1"));
320
+ expect(updated?.age).toBe(31);
321
+ const deleted = await use.deleteOne(FilterGroup.create().eq("id", "u2"));
322
+ expect(deleted).toEqual({ id: "u2", name: "Bob", age: 20 });
323
+ const remaining = await use.findMany(FilterGroup.create());
324
+ expect(remaining).toHaveLength(1);
325
+ await adapter.disconnect();
326
+ });
327
+ test("supports nested filters, ordering, select, offset and limit", async () => {
328
+ const schema = Schema.from("users").pk("id", v2.string(), () => "u").field("name", v2.string()).field("age", v2.number()).build();
329
+ const adapter = JsonAdapter.create({ filePath });
330
+ await adapter.connect();
331
+ const use = adapter.use(schema, { table: "users" });
332
+ await use.createMany([
333
+ { id: "u1", name: "Alice", age: 30 },
334
+ { id: "u2", name: "Bob", age: 20 },
335
+ { id: "u3", name: "Carol", age: 40 }
336
+ ]);
337
+ const builtGroup = FilterGroup.create().and([
338
+ (q) => q.gt("age", 19),
339
+ (q) => q.or([(g) => g.eq("name", "Alice"), (g) => g.eq("name", "Carol")])
340
+ ]);
341
+ const options = { orderBy: [new OrderBy("age", "desc")], offset: 1, limit: 1, select: ["id", "name"] };
342
+ const rows = await use.findMany(builtGroup, options);
343
+ expect(rows).toEqual([{ id: "u1", name: "Alice" }]);
344
+ await adapter.disconnect();
345
+ });
346
+ test("count delegates to the in-memory store and persists separately from query options", async () => {
347
+ const schema = Schema.from("count_users").pk("id", v2.string(), () => "u").field("name", v2.string()).build();
348
+ const adapter = JsonAdapter.create({ filePath });
349
+ await adapter.connect();
350
+ const use = adapter.use(schema, { table: "count_users" });
351
+ await use.createMany([
352
+ { id: "u1", name: "Alice" },
353
+ { id: "u2", name: "Bob" },
354
+ { id: "u3", name: "Alice" }
355
+ ]);
356
+ await expect(use.count(FilterGroup.create().eq("name", "Alice"))).resolves.toBe(2);
357
+ await adapter.disconnect();
358
+ });
359
+ test("iterateMany with batchSize matches findMany through in-memory delegation", async () => {
360
+ const schema = Schema.from("json_iter_users").pk("id", v2.string(), () => "u").field("name", v2.string()).field("age", v2.number()).build();
361
+ const adapter = JsonAdapter.create({ filePath });
362
+ await adapter.connect();
363
+ const use = adapter.use(schema, { table: "json_iter_users" });
364
+ await use.createMany([
365
+ { id: "u1", name: "Alice", age: 30 },
366
+ { id: "u2", name: "Bob", age: 20 },
367
+ { id: "u3", name: "Carol", age: 40 },
368
+ { id: "u4", name: "Dan", age: 50 }
369
+ ]);
370
+ const filter = FilterGroup.create().gt("age", 19);
371
+ const options = {
372
+ orderBy: [new OrderBy("age", "desc")],
373
+ offset: 1,
374
+ limit: 2,
375
+ select: ["id", "name"]
376
+ };
377
+ const expected = await use.findMany(filter, options);
378
+ const rows = [];
379
+ for await (const row of use.iterateMany(filter, { ...options, batchSize: 2 })) {
380
+ rows.push(row);
381
+ }
382
+ expect(rows).toEqual(expected);
383
+ expect(rows).toEqual([
384
+ { id: "u3", name: "Carol" },
385
+ { id: "u1", name: "Alice" }
386
+ ]);
387
+ await adapter.disconnect();
388
+ });
389
+ test("supports update operators and rollback on failed session", async () => {
390
+ const schema = Schema.from("docs").pk("id", v2.string(), () => "d1").field("count", v2.number()).field("tags", v2.array(v2.string())).field("meta", v2.object({ a: v2.number() })).build();
391
+ const adapter = JsonAdapter.create({ filePath });
392
+ await adapter.connect();
393
+ const use = adapter.use(schema, { table: "docs" });
394
+ await use.createOne({ id: "d1", count: 1, tags: ["x"], meta: { a: 1 } });
395
+ await adapter.session(async () => {
396
+ await use.updateOne(FilterGroup.create().eq("id", "d1"), {
397
+ count: new IncOp("count", 2),
398
+ tags: new PushOp("tags", "y"),
399
+ meta: new PatchOp("meta", { a: 9 })
400
+ });
401
+ });
402
+ await expect(
403
+ adapter.session(async () => {
404
+ await use.updateOne(FilterGroup.create().eq("id", "d1"), { tags: new PullOp("tags", "x") });
405
+ throw new Error("boom");
406
+ })
407
+ ).rejects.toThrow("boom");
408
+ const row = await use.findOne(FilterGroup.create().eq("id", "d1"));
409
+ expect(row).toEqual({ id: "d1", count: 3, tags: ["x", "y"], meta: { a: 9 } });
410
+ await adapter.disconnect();
411
+ });
412
+ test("upsertOne inserts when missing and updates when existing", async () => {
413
+ const schema = Schema.from("items").pk("id", v2.string(), () => "i").field("val", v2.number()).build();
414
+ const adapter = JsonAdapter.create({ filePath });
415
+ await adapter.connect();
416
+ const use = adapter.use(schema, { table: "items" });
417
+ const inserted = await use.upsertOne(FilterGroup.create().eq("id", "i1"), { id: "i1", val: 10 }, []);
418
+ expect(inserted).toEqual({ id: "i1", val: 10 });
419
+ const updated = await use.upsertOne(FilterGroup.create().eq("id", "i1"), { id: "i1", val: 10 }, [new IncOp("val", 5)]);
420
+ expect(updated).toEqual({ id: "i1", val: 15 });
421
+ await adapter.disconnect();
422
+ });
423
+ });
424
+ describe("json adapter \u2014 persistence", () => {
425
+ test("state persists across adapter restarts", async () => {
426
+ const schema = Schema.from("users").pk("id", v2.string(), () => "u").field("name", v2.string()).build();
427
+ const a1 = JsonAdapter.create({ filePath });
428
+ await a1.connect();
429
+ const use1 = a1.use(schema, { table: "users" });
430
+ await use1.createMany([
431
+ { id: "u1", name: "Alice" },
432
+ { id: "u2", name: "Bob" }
433
+ ]);
434
+ await a1.disconnect();
435
+ const a2 = JsonAdapter.create({ filePath });
436
+ await a2.connect();
437
+ const use2 = a2.use(schema, { table: "users" });
438
+ const rows = await use2.findMany(FilterGroup.create());
439
+ expect(rows).toHaveLength(2);
440
+ expect(rows.map((r) => r.name).sort()).toEqual(["Alice", "Bob"]);
441
+ await a2.disconnect();
442
+ });
443
+ test("failed session does not persist rolled-back state to disk", async () => {
444
+ const schema = Schema.from("docs").pk("id", v2.string(), () => "d").field("val", v2.number()).build();
445
+ const a1 = JsonAdapter.create({ filePath });
446
+ await a1.connect();
447
+ const use1 = a1.use(schema, { table: "docs" });
448
+ await use1.createOne({ id: "d1", val: 1 });
449
+ await a1.disconnect();
450
+ const a2 = JsonAdapter.create({ filePath });
451
+ await a2.connect();
452
+ const use2 = a2.use(schema, { table: "docs" });
453
+ await expect(
454
+ a2.session(async () => {
455
+ await use2.updateOne(FilterGroup.create().eq("id", "d1"), { val: 999 });
456
+ throw new Error("rollback");
457
+ })
458
+ ).rejects.toThrow("rollback");
459
+ await a2.disconnect();
460
+ const a3 = JsonAdapter.create({ filePath });
461
+ await a3.connect();
462
+ const use3 = a3.use(schema, { table: "docs" });
463
+ const row = await use3.findOne(FilterGroup.create().eq("id", "d1"));
464
+ expect(row?.val).toBe(1);
465
+ await a3.disconnect();
466
+ });
467
+ });
468
+ describe("json adapter \u2014 atomic writes", () => {
469
+ test("file is valid JSON after every write", async () => {
470
+ const { readFile: rf } = await null;
471
+ const schema = Schema.from("items").pk("id", v2.string(), () => "i").field("val", v2.number()).build();
472
+ const adapter = JsonAdapter.create({ filePath });
473
+ await adapter.connect();
474
+ const use = adapter.use(schema, { table: "items" });
475
+ for (let i = 0; i < 10; i++) {
476
+ await use.createOne({ id: `i${i}`, val: i });
477
+ const raw = await rf(filePath, "utf-8");
478
+ expect(() => JSON.parse(raw)).not.toThrow();
479
+ }
480
+ await adapter.disconnect();
481
+ });
482
+ test("no .tmp files remain after writes complete", async () => {
483
+ const { readdir } = await null;
484
+ const schema = Schema.from("items").pk("id", v2.string(), () => "i").field("val", v2.number()).build();
485
+ const adapter = JsonAdapter.create({ filePath });
486
+ await adapter.connect();
487
+ const use = adapter.use(schema, { table: "items" });
488
+ for (let i = 0; i < 5; i++) {
489
+ await use.createOne({ id: `i${i}`, val: i });
490
+ }
491
+ await adapter.disconnect();
492
+ const files = await readdir(tmpDir);
493
+ const tmpFiles = files.filter((f) => f.includes(".tmp."));
494
+ expect(tmpFiles).toHaveLength(0);
495
+ });
496
+ });
497
+ describe("json adapter \u2014 aggregate delegation", () => {
498
+ const orderSchema = Schema.from("orders").pk("id", v2.string(), () => "o").field("amount", v2.number()).field("region", v2.string()).build();
499
+ const orderSeed = [
500
+ { id: "o1", amount: 100, region: "us" },
501
+ { id: "o2", amount: 200, region: "eu" },
502
+ { id: "o3", amount: 150, region: "us" }
503
+ ];
504
+ async function makeSeededAdapter() {
505
+ const adapter = JsonAdapter.create({ filePath });
506
+ await adapter.connect();
507
+ const use = adapter.use(orderSchema, { table: "orders" });
508
+ await use.createMany(orderSeed);
509
+ return adapter;
510
+ }
511
+ test("aggregateOps matches in-memory adapter", () => {
512
+ const json = JsonAdapter.create({ filePath });
513
+ const inMem = InMemoryAdapter.create({});
514
+ expect(json.aggregateOps).toEqual(inMem.aggregateOps);
515
+ expect(json.aggregateOps).toEqual(["count", "countDistinct", "sum", "avg", "min", "max"]);
516
+ });
517
+ test("count returns identical result to in-memory", async () => {
518
+ const adapter = await makeSeededAdapter();
519
+ const result = await adapter.aggregate(orderSchema, { table: "orders" }, {
520
+ aggregates: [{ fn: "count", alias: "total" }],
521
+ groupBy: []
522
+ });
523
+ expect(result).toEqual([{ total: 3 }]);
524
+ await adapter.disconnect();
525
+ });
526
+ test("countDistinct returns identical result to in-memory", async () => {
527
+ const adapter = await makeSeededAdapter();
528
+ const result = await adapter.aggregate(orderSchema, { table: "orders" }, {
529
+ aggregates: [{ fn: "countDistinct", field: "region", alias: "uniqueRegions" }],
530
+ groupBy: []
531
+ });
532
+ expect(result).toEqual([{ uniqueRegions: 2 }]);
533
+ await adapter.disconnect();
534
+ });
535
+ test("sum, avg, min, max return identical results to in-memory", async () => {
536
+ const adapter = await makeSeededAdapter();
537
+ const result = await adapter.aggregate(orderSchema, { table: "orders" }, {
538
+ aggregates: [
539
+ { fn: "sum", field: "amount", alias: "totalAmount" },
540
+ { fn: "avg", field: "amount", alias: "avgAmount" },
541
+ { fn: "min", field: "amount", alias: "minAmount" },
542
+ { fn: "max", field: "amount", alias: "maxAmount" }
543
+ ],
544
+ groupBy: []
545
+ });
546
+ expect(result).toEqual([{ totalAmount: 450, avgAmount: 150, minAmount: 100, maxAmount: 200 }]);
547
+ await adapter.disconnect();
548
+ });
549
+ test("groupBy returns identical results to in-memory", async () => {
550
+ const adapter = await makeSeededAdapter();
551
+ const result = await adapter.aggregate(orderSchema, { table: "orders" }, {
552
+ aggregates: [
553
+ { fn: "count", alias: "cnt" },
554
+ { fn: "sum", field: "amount", alias: "total" }
555
+ ],
556
+ groupBy: ["region"]
557
+ });
558
+ const sorted = result.sort((a, b) => String(a.region).localeCompare(String(b.region)));
559
+ expect(sorted).toEqual([
560
+ { region: "eu", cnt: 1, total: 200 },
561
+ { region: "us", cnt: 2, total: 250 }
562
+ ]);
563
+ await adapter.disconnect();
564
+ });
565
+ test("where pre-filter returns identical results to in-memory", async () => {
566
+ const adapter = await makeSeededAdapter();
567
+ const result = await adapter.aggregate(orderSchema, { table: "orders" }, {
568
+ where: FilterGroup.create().gt("amount", 100),
569
+ aggregates: [{ fn: "count", alias: "cnt" }],
570
+ groupBy: []
571
+ });
572
+ expect(result).toEqual([{ cnt: 2 }]);
573
+ await adapter.disconnect();
574
+ });
575
+ test("having post-filter returns identical results to in-memory", async () => {
576
+ const adapter = await makeSeededAdapter();
577
+ const result = await adapter.aggregate(orderSchema, { table: "orders" }, {
578
+ aggregates: [{ fn: "count", alias: "cnt" }],
579
+ groupBy: ["region"],
580
+ having: FilterGroup.create().gt("cnt", 1)
581
+ });
582
+ expect(result).toEqual([{ region: "us", cnt: 2 }]);
583
+ await adapter.disconnect();
584
+ });
585
+ test("aggregate delegates to same in-memory instance used by CRUD", async () => {
586
+ const schema = Schema.from("items").pk("id", v2.string(), () => "i").field("val", v2.number()).build();
587
+ const adapter = JsonAdapter.create({ filePath });
588
+ await adapter.connect();
589
+ const use = adapter.use(schema, { table: "items" });
590
+ await use.createMany([
591
+ { id: "i1", val: 10 },
592
+ { id: "i2", val: 20 }
593
+ ]);
594
+ const spec = {
595
+ aggregates: [{ fn: "sum", field: "val", alias: "total" }],
596
+ groupBy: []
597
+ };
598
+ const result = await adapter.aggregate(schema, { table: "items" }, spec);
599
+ expect(result).toEqual([{ total: 30 }]);
600
+ await use.createOne({ id: "i3", val: 30 });
601
+ const result2 = await adapter.aggregate(schema, { table: "items" }, spec);
602
+ expect(result2).toEqual([{ total: 60 }]);
603
+ await adapter.disconnect();
604
+ });
605
+ });
606
+ describe("json adapter \u2014 concurrent writes serialize", () => {
607
+ test("parallel writes from same process all persist", async () => {
608
+ const schema = Schema.from("items").pk("id", v2.string(), () => "i").field("val", v2.number()).build();
609
+ const adapter = JsonAdapter.create({ filePath });
610
+ await adapter.connect();
611
+ const use = adapter.use(schema, { table: "items" });
612
+ await Promise.all(Array.from({ length: 20 }, (_, i) => use.createOne({ id: `i${i}`, val: i })));
613
+ const rows = await use.findMany(FilterGroup.create());
614
+ expect(rows).toHaveLength(20);
615
+ await adapter.disconnect();
616
+ const a2 = JsonAdapter.create({ filePath });
617
+ await a2.connect();
618
+ const use2 = a2.use(schema, { table: "items" });
619
+ const reloaded = await use2.findMany(FilterGroup.create());
620
+ expect(reloaded).toHaveLength(20);
621
+ await a2.disconnect();
622
+ });
623
+ });
624
+ describe("json adapter \u2014 migration storage", () => {
625
+ test("recordMigration + loadMigrations round-trip", async () => {
626
+ const adapter = JsonAdapter.create({ filePath });
627
+ await adapter.connect();
628
+ await adapter.recordMigration("m-001", 1e3);
629
+ await adapter.recordMigration("m-002", 2e3);
630
+ const loaded = await adapter.loadMigrations();
631
+ expect(loaded).toHaveLength(2);
632
+ expect(loaded).toEqual([
633
+ { id: "m-001", appliedAt: 1e3 },
634
+ { id: "m-002", appliedAt: 2e3 }
635
+ ]);
636
+ await adapter.disconnect();
637
+ });
638
+ test("migration tracker persists across adapter restarts", async () => {
639
+ const a1 = JsonAdapter.create({ filePath });
640
+ await a1.connect();
641
+ await a1.recordMigration("m-001", 1e3);
642
+ await a1.disconnect();
643
+ const a2 = JsonAdapter.create({ filePath });
644
+ await a2.connect();
645
+ const loaded = await a2.loadMigrations();
646
+ expect(loaded).toEqual([{ id: "m-001", appliedAt: 1e3 }]);
647
+ await a2.disconnect();
648
+ });
649
+ test("__migrations key in JSON file stores tracker data", async () => {
650
+ const { readFile: rf } = await null;
651
+ const adapter = JsonAdapter.create({ filePath });
652
+ await adapter.connect();
653
+ await adapter.recordMigration("m-001", 1e3);
654
+ await adapter.disconnect();
655
+ const raw = JSON.parse(await rf(filePath, "utf-8"));
656
+ expect(raw["__migrations"]).toEqual([{ id: "m-001", appliedAt: 1e3 }]);
657
+ });
658
+ });
659
+ describe("json adapter \u2014 apply* methods", () => {
660
+ test("applyCreateTable persists table metadata", async () => {
661
+ const adapter = JsonAdapter.create({ filePath });
662
+ await adapter.connect();
663
+ await adapter.applyCreateTable({
664
+ kind: "createTable",
665
+ name: "users",
666
+ pk: { name: "id", type: "string" },
667
+ fields: [{ name: "email", type: "string", unique: true }]
668
+ });
669
+ await adapter.disconnect();
670
+ const a2 = JsonAdapter.create({ filePath });
671
+ await a2.connect();
672
+ const schemas = await a2.introspect();
673
+ expect(schemas).toHaveLength(1);
674
+ expect(schemas[0].name).toBe("users");
675
+ expect(schemas[0].pk).toEqual({ name: "id", type: "string" });
676
+ expect(schemas[0].fields).toEqual([{ name: "email", type: "string", nullable: false, unique: true }]);
677
+ await a2.disconnect();
678
+ });
679
+ test("applyAddIndex and applyDropIndex persist across restarts", async () => {
680
+ const a1 = JsonAdapter.create({ filePath });
681
+ await a1.connect();
682
+ await a1.applyCreateTable({ kind: "createTable", name: "users", pk: { name: "id", type: "string" }, fields: [] });
683
+ await a1.applyAddIndex({ kind: "addIndex", table: "users", on: ["email"], unique: true });
684
+ await a1.disconnect();
685
+ const a2 = JsonAdapter.create({ filePath });
686
+ await a2.connect();
687
+ const schemas = await a2.introspect();
688
+ expect(schemas[0].indexes).toEqual([{ name: "users_email_idx", on: ["email"], unique: true }]);
689
+ await a2.applyDropIndex({ kind: "dropIndex", name: "users_email_idx" });
690
+ await a2.disconnect();
691
+ const a3 = JsonAdapter.create({ filePath });
692
+ await a3.connect();
693
+ const schemas2 = await a3.introspect();
694
+ expect(schemas2[0].indexes).toEqual([]);
695
+ await a3.disconnect();
696
+ });
697
+ test("applyAddForeignKey and applyDropForeignKey persist across restarts", async () => {
698
+ const a1 = JsonAdapter.create({ filePath });
699
+ await a1.connect();
700
+ await a1.applyCreateTable({ kind: "createTable", name: "users", pk: { name: "id", type: "string" }, fields: [] });
701
+ await a1.applyCreateTable({ kind: "createTable", name: "posts", pk: { name: "id", type: "string" }, fields: [] });
702
+ await a1.applyAddForeignKey({ kind: "addForeignKey", table: "posts", on: "authorId", references: { table: "users", column: "id" }, onDelete: "cascade" });
703
+ await a1.disconnect();
704
+ const a2 = JsonAdapter.create({ filePath });
705
+ await a2.connect();
706
+ const schemas = await a2.introspect();
707
+ const posts = schemas.find((s) => s.name === "posts");
708
+ expect(posts.foreignKeys).toEqual([{
709
+ name: "posts_authorId_fk",
710
+ on: "authorId",
711
+ references: { table: "users", column: "id" },
712
+ onDelete: "cascade"
713
+ }]);
714
+ await a2.applyDropForeignKey({ kind: "dropForeignKey", table: "posts", name: "posts_authorId_fk" });
715
+ await a2.disconnect();
716
+ const a3 = JsonAdapter.create({ filePath });
717
+ await a3.connect();
718
+ const schemas2 = await a3.introspect();
719
+ const posts2 = schemas2.find((s) => s.name === "posts");
720
+ expect(posts2.foreignKeys).toEqual([]);
721
+ await a3.disconnect();
722
+ });
723
+ });
724
+ describe("json adapter \u2014 acquireMigrationLock", () => {
725
+ test("file lock serialises concurrent calls", async () => {
726
+ const adapter = JsonAdapter.create({ filePath });
727
+ await adapter.connect();
728
+ const order = [];
729
+ let resolveGate;
730
+ const gate = new Promise((r) => {
731
+ resolveGate = r;
732
+ });
733
+ const p1 = adapter.acquireMigrationLock(async () => {
734
+ order.push("p1-start");
735
+ await gate;
736
+ order.push("p1-end");
737
+ });
738
+ await new Promise((r) => setTimeout(r, 100));
739
+ const p2 = adapter.acquireMigrationLock(async () => {
740
+ order.push("p2");
741
+ });
742
+ await new Promise((r) => setTimeout(r, 100));
743
+ expect(order).toEqual(["p1-start"]);
744
+ resolveGate();
745
+ await Promise.all([p1, p2]);
746
+ expect(order).toEqual(["p1-start", "p1-end", "p2"]);
747
+ await adapter.disconnect();
748
+ });
749
+ test("lock file is cleaned up after successful execution", async () => {
750
+ const { access } = await null;
751
+ const adapter = JsonAdapter.create({ filePath });
752
+ await adapter.connect();
753
+ await adapter.acquireMigrationLock(async () => {
754
+ });
755
+ await expect(access(filePath + ".lock")).rejects.toThrow();
756
+ await adapter.disconnect();
757
+ });
758
+ test("lock file is cleaned up after failed execution", async () => {
759
+ const { access } = await null;
760
+ const adapter = JsonAdapter.create({ filePath });
761
+ await adapter.connect();
762
+ await expect(
763
+ adapter.acquireMigrationLock(async () => {
764
+ throw new Error("boom");
765
+ })
766
+ ).rejects.toThrow("boom");
767
+ await expect(access(filePath + ".lock")).rejects.toThrow();
768
+ await adapter.disconnect();
769
+ });
770
+ });
771
+ describe("json adapter \u2014 end-to-end migrations via Migrator", () => {
772
+ const UserSchema = Schema.from("users").pk("id", v2.string(), () => `u-${Math.random().toString(36).slice(2)}`).field("email", v2.string()).build();
773
+ function makeEnv() {
774
+ const adapter = JsonAdapter.create({ filePath });
775
+ const repo = new Repo({ adapter, resolve: (s) => ({ table: s.name }) });
776
+ return { adapter, repo };
777
+ }
778
+ test("end-to-end migration run covering every declarative variant + execute", async () => {
779
+ const { adapter, repo } = makeEnv();
780
+ await adapter.connect();
781
+ const migrations = [
782
+ {
783
+ id: "0001-create",
784
+ changes: [
785
+ { kind: "createTable", name: "users", pk: { name: "id", type: "string" }, fields: [{ name: "email", type: "string" }] },
786
+ { kind: "createTable", name: "posts", pk: { name: "id", type: "string" }, fields: [{ name: "title", type: "string" }, { name: "authorId", type: "string" }] },
787
+ { kind: "addIndex", table: "users", on: ["email"], unique: true },
788
+ { kind: "addForeignKey", table: "posts", on: "authorId", references: { table: "users", column: "id" } }
789
+ ]
790
+ },
791
+ {
792
+ id: "0002-evolve",
793
+ changes: [
794
+ { kind: "addField", table: "users", field: { name: "age", type: "number", nullable: true } },
795
+ { kind: "modifyField", table: "users", name: "email", to: { name: "email", type: "string", unique: true, nullable: true } },
796
+ { kind: "renameField", table: "posts", from: "title", to: "headline" },
797
+ { kind: "renameTable", from: "posts", to: "articles" }
798
+ ]
799
+ },
800
+ {
801
+ id: "0003-cleanup",
802
+ changes: [
803
+ { kind: "dropField", table: "users", name: "age" },
804
+ { kind: "dropForeignKey", table: "posts", name: "posts_authorId_fk" },
805
+ { kind: "dropIndex", name: "users_email_idx" },
806
+ { kind: "dropTable", name: "articles" }
807
+ ]
808
+ },
809
+ {
810
+ id: "0004-seed",
811
+ changes: [{
812
+ kind: "execute",
813
+ up: async (r) => {
814
+ await r.on(UserSchema).one().create({ id: "seed-1", email: "test@example.com" });
815
+ }
816
+ }]
817
+ }
818
+ ];
819
+ const migrator = Migrator.from(repo, adapter).migrations(migrations).build();
820
+ const result = await migrator.up();
821
+ expect(result.ran).toEqual(["0001-create", "0002-evolve", "0003-cleanup", "0004-seed"]);
822
+ const recorded = await adapter.loadMigrations();
823
+ expect(recorded).toHaveLength(4);
824
+ const row = await repo.on(UserSchema).one().id("seed-1").find();
825
+ expect(row).not.toBeNull();
826
+ expect(row.email).toBe("test@example.com");
827
+ await adapter.disconnect();
828
+ const { adapter: a2, repo: r2 } = makeEnv();
829
+ await a2.connect();
830
+ const recorded2 = await a2.loadMigrations();
831
+ expect(recorded2).toHaveLength(4);
832
+ const row2 = await r2.on(UserSchema).one().id("seed-1").find();
833
+ expect(row2.email).toBe("test@example.com");
834
+ await a2.disconnect();
835
+ });
836
+ test("file lock serialises concurrent migrator.up() runs", async () => {
837
+ const order = [];
838
+ let resolveGate;
839
+ const gate = new Promise((r) => {
840
+ resolveGate = r;
841
+ });
842
+ const migrations = [
843
+ {
844
+ id: "0001",
845
+ changes: [{
846
+ kind: "execute",
847
+ up: async () => {
848
+ order.push("0001-start");
849
+ await gate;
850
+ order.push("0001-end");
851
+ }
852
+ }]
853
+ },
854
+ {
855
+ id: "0002",
856
+ changes: [{ kind: "execute", up: async () => {
857
+ order.push("0002");
858
+ } }]
859
+ }
860
+ ];
861
+ const adapter1 = JsonAdapter.create({ filePath });
862
+ await adapter1.connect();
863
+ const repo1 = new Repo({ adapter: adapter1, resolve: (s) => ({ table: s.name }) });
864
+ const migrator1 = Migrator.from(repo1, adapter1).migrations(migrations).build();
865
+ const adapter2 = JsonAdapter.create({ filePath });
866
+ await adapter2.connect();
867
+ const repo2 = new Repo({ adapter: adapter2, resolve: (s) => ({ table: s.name }) });
868
+ const migrator2 = Migrator.from(repo2, adapter2).migrations(migrations).build();
869
+ const p1 = migrator1.up();
870
+ const p2 = migrator2.up();
871
+ await new Promise((r) => setTimeout(r, 200));
872
+ expect(order).toEqual(["0001-start"]);
873
+ resolveGate();
874
+ await Promise.all([p1, p2]);
875
+ expect(order).toEqual(["0001-start", "0001-end", "0002"]);
876
+ await adapter1.disconnect();
877
+ await adapter2.disconnect();
878
+ });
879
+ test("tx:true rollback leaves file unchanged on failure", async () => {
880
+ const { adapter } = makeEnv();
881
+ await adapter.connect();
882
+ await adapter.applyCreateTable({ kind: "createTable", name: "users", pk: { name: "id", type: "string" }, fields: [] });
883
+ await adapter.disconnect();
884
+ const { adapter: a2, repo: r2 } = makeEnv();
885
+ await a2.connect();
886
+ const m = {
887
+ id: "0001-will-fail",
888
+ changes: [
889
+ { kind: "addIndex", table: "users", on: ["email"] },
890
+ {
891
+ kind: "execute",
892
+ up: async (r) => {
893
+ await r.on(UserSchema).one().create({ id: "partial", email: "fail@test.com" });
894
+ throw new Error("mid-migration boom");
895
+ }
896
+ }
897
+ ]
898
+ };
899
+ const migrator = Migrator.from(r2, a2).migrations([m]).build();
900
+ await expect(migrator.up()).rejects.toThrow(OrmMigrationError);
901
+ await a2.disconnect();
902
+ const { adapter: a3, repo: r3 } = makeEnv();
903
+ await a3.connect();
904
+ const recorded = await a3.loadMigrations();
905
+ expect(recorded).toHaveLength(0);
906
+ const schemas = await a3.introspect();
907
+ const users = schemas.find((s) => s.name === "users");
908
+ expect(users.indexes).toEqual([]);
909
+ const row = await r3.on(UserSchema).one().id("partial").find();
910
+ expect(row).toBeNull();
911
+ await a3.disconnect();
912
+ });
913
+ test("introspect() round-trip: apply* then introspect returns matching descriptors", async () => {
914
+ const adapter = JsonAdapter.create({ filePath });
915
+ await adapter.connect();
916
+ await adapter.applyCreateTable({
917
+ kind: "createTable",
918
+ name: "users",
919
+ pk: { name: "id", type: "string" },
920
+ fields: [
921
+ { name: "email", type: "string", unique: true },
922
+ { name: "age", type: "number", nullable: true }
923
+ ]
924
+ });
925
+ await adapter.applyAddIndex({ kind: "addIndex", table: "users", on: ["email"], unique: true });
926
+ await adapter.applyCreateTable({
927
+ kind: "createTable",
928
+ name: "posts",
929
+ pk: { name: "id", type: "string" },
930
+ fields: [{ name: "authorId", type: "string" }]
931
+ });
932
+ await adapter.applyAddForeignKey({
933
+ kind: "addForeignKey",
934
+ table: "posts",
935
+ on: "authorId",
936
+ references: { table: "users", column: "id" },
937
+ onDelete: "cascade"
938
+ });
939
+ await adapter.disconnect();
940
+ const a2 = JsonAdapter.create({ filePath });
941
+ await a2.connect();
942
+ const schemas = await a2.introspect();
943
+ const users = schemas.find((s) => s.name === "users");
944
+ expect(users.pk).toEqual({ name: "id", type: "string" });
945
+ expect(users.fields).toEqual([
946
+ { name: "email", type: "string", nullable: false, unique: true },
947
+ { name: "age", type: "number", nullable: true }
948
+ ]);
949
+ expect(users.indexes).toEqual([{ name: "users_email_idx", on: ["email"], unique: true }]);
950
+ const posts = schemas.find((s) => s.name === "posts");
951
+ expect(posts.pk).toEqual({ name: "id", type: "string" });
952
+ expect(posts.fields).toEqual([{ name: "authorId", type: "string", nullable: false }]);
953
+ expect(posts.foreignKeys).toEqual([{
954
+ name: "posts_authorId_fk",
955
+ on: "authorId",
956
+ references: { table: "users", column: "id" },
957
+ onDelete: "cascade"
958
+ }]);
959
+ await a2.disconnect();
960
+ });
961
+ test("metadata keys do not leak into data stores", async () => {
962
+ const adapter = JsonAdapter.create({ filePath });
963
+ await adapter.connect();
964
+ await adapter.recordMigration("m-001", 1e3);
965
+ await adapter.applyCreateTable({ kind: "createTable", name: "users", pk: { name: "id", type: "string" }, fields: [] });
966
+ expect(adapter.stores.has("__migrations")).toBe(false);
967
+ expect(adapter.stores.has("__tables")).toBe(false);
968
+ await adapter.disconnect();
969
+ const a2 = JsonAdapter.create({ filePath });
970
+ await a2.connect();
971
+ expect(a2.stores.has("__migrations")).toBe(false);
972
+ expect(a2.stores.has("__tables")).toBe(false);
973
+ await a2.disconnect();
974
+ });
975
+ });
976
+ }
977
+ export {
978
+ JsonAdapter
979
+ };