@morojs/moro 1.6.2 → 1.6.3

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 (366) hide show
  1. package/dist/core/http/http-server.js +12 -9
  2. package/dist/core/http/http-server.js.map +1 -1
  3. package/dist/core/http/uws-http-server.js +1 -1
  4. package/dist/core/http/uws-http-server.js.map +1 -1
  5. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  6. package/dist/core/middleware/built-in/auth/core.js +358 -0
  7. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  8. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
  9. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  10. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  11. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  12. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  13. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  14. package/dist/core/middleware/built-in/auth/index.js +15 -0
  15. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  16. package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
  17. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  18. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  19. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  20. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  21. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  22. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
  23. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  24. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  25. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
  26. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  27. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
  28. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  29. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  30. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
  31. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  32. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
  33. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
  34. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  35. package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
  36. package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
  37. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  38. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  39. package/dist/core/middleware/built-in/cache/core.js +87 -0
  40. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  41. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  42. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
  43. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  44. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  45. package/dist/core/middleware/built-in/cache/index.js +9 -0
  46. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  47. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  48. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  49. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  50. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  51. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
  52. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  53. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  54. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
  55. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  56. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
  57. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
  58. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  59. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
  60. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  61. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  62. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
  63. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  64. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  65. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  66. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  67. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  68. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  69. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  70. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  71. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  72. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  73. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  74. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  75. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  76. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  77. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  78. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  79. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  80. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  81. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  82. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  83. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  84. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  85. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  86. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  87. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  88. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  89. package/dist/core/middleware/built-in/cors/core.js +51 -0
  90. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  91. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  92. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  93. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  94. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  95. package/dist/core/middleware/built-in/cors/index.js +9 -0
  96. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  97. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  98. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  99. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  100. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  101. package/dist/core/middleware/built-in/csp/core.js +88 -0
  102. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  103. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  104. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  105. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  106. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  107. package/dist/core/middleware/built-in/csp/index.js +9 -0
  108. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  109. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  110. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  111. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  112. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  113. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  114. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  115. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  116. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  117. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  118. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  119. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  120. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  121. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  122. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  123. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  124. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  125. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  126. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  127. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  128. package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
  129. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  130. package/dist/core/middleware/built-in/index.d.ts +25 -59
  131. package/dist/core/middleware/built-in/index.js +31 -31
  132. package/dist/core/middleware/built-in/index.js.map +1 -1
  133. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  134. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  135. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  136. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  137. package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
  138. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  139. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  140. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  141. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  142. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  143. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
  144. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  145. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  146. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  147. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  148. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  149. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  150. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  151. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  152. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  153. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  154. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  155. package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
  156. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  157. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  158. package/dist/core/middleware/built-in/session/core.js +227 -0
  159. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  160. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  161. package/dist/core/middleware/built-in/session/hook.js +53 -0
  162. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  163. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  164. package/dist/core/middleware/built-in/session/index.js +9 -0
  165. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  166. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  167. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  168. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  169. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  170. package/dist/core/middleware/built-in/sse/core.js +117 -0
  171. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  172. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  173. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  174. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  175. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  176. package/dist/core/middleware/built-in/sse/index.js +9 -0
  177. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  178. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  179. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  180. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  181. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  182. package/dist/core/middleware/built-in/validation/core.js +93 -0
  183. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  184. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  185. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
  186. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  187. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  188. package/dist/core/middleware/built-in/validation/index.js +9 -0
  189. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  190. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  191. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  192. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  193. package/dist/core/middleware/index.js +6 -0
  194. package/dist/core/middleware/index.js.map +1 -1
  195. package/dist/core/routing/unified-router.d.ts +4 -20
  196. package/dist/core/routing/unified-router.js +61 -106
  197. package/dist/core/routing/unified-router.js.map +1 -1
  198. package/dist/index.d.ts +3 -2
  199. package/dist/index.js +3 -2
  200. package/dist/index.js.map +1 -1
  201. package/dist/moro.js +12 -18
  202. package/dist/moro.js.map +1 -1
  203. package/dist/types/hooks.d.ts +3 -0
  204. package/package.json +2 -6
  205. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  206. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  207. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  208. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  209. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  210. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  211. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  212. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  213. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  214. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  215. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  216. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  217. package/dist/core/middleware/built-in/auth.js +0 -348
  218. package/dist/core/middleware/built-in/auth.js.map +0 -1
  219. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  220. package/dist/core/middleware/built-in/cache.js.map +0 -1
  221. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  222. package/dist/core/middleware/built-in/cdn.js +0 -109
  223. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  224. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  225. package/dist/core/middleware/built-in/cookie.js +0 -64
  226. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  227. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  228. package/dist/core/middleware/built-in/cors.js +0 -25
  229. package/dist/core/middleware/built-in/cors.js.map +0 -1
  230. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  231. package/dist/core/middleware/built-in/csp.js +0 -68
  232. package/dist/core/middleware/built-in/csp.js.map +0 -1
  233. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  234. package/dist/core/middleware/built-in/csrf.js +0 -60
  235. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  236. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  237. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  238. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  239. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  240. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  241. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  242. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  243. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  244. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  245. package/dist/core/middleware/built-in/session.d.ts +0 -41
  246. package/dist/core/middleware/built-in/session.js +0 -205
  247. package/dist/core/middleware/built-in/session.js.map +0 -1
  248. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  249. package/dist/core/middleware/built-in/sse.js +0 -69
  250. package/dist/core/middleware/built-in/sse.js.map +0 -1
  251. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  252. package/dist/core/middleware/built-in/validation.js.map +0 -1
  253. package/jest.config.mjs +0 -41
  254. package/src/core/auth/README.md +0 -339
  255. package/src/core/auth/morojs-adapter.ts +0 -415
  256. package/src/core/config/config-manager.ts +0 -133
  257. package/src/core/config/config-sources.ts +0 -600
  258. package/src/core/config/config-validator.ts +0 -1116
  259. package/src/core/config/file-loader.ts +0 -150
  260. package/src/core/config/index.ts +0 -109
  261. package/src/core/config/schema.ts +0 -164
  262. package/src/core/config/utils.ts +0 -244
  263. package/src/core/database/README.md +0 -238
  264. package/src/core/database/adapters/drizzle.ts +0 -415
  265. package/src/core/database/adapters/index.ts +0 -42
  266. package/src/core/database/adapters/mongodb.ts +0 -317
  267. package/src/core/database/adapters/mysql.ts +0 -235
  268. package/src/core/database/adapters/postgresql.ts +0 -226
  269. package/src/core/database/adapters/redis.ts +0 -379
  270. package/src/core/database/adapters/sqlite.ts +0 -263
  271. package/src/core/database/index.ts +0 -3
  272. package/src/core/docs/index.ts +0 -231
  273. package/src/core/docs/openapi-generator.ts +0 -576
  274. package/src/core/docs/schema-to-openapi.ts +0 -145
  275. package/src/core/docs/simple-docs.ts +0 -295
  276. package/src/core/docs/swagger-ui.ts +0 -354
  277. package/src/core/docs/zod-to-openapi.ts +0 -532
  278. package/src/core/events/event-bus.ts +0 -231
  279. package/src/core/events/index.ts +0 -12
  280. package/src/core/framework.ts +0 -885
  281. package/src/core/http/http-server.ts +0 -1847
  282. package/src/core/http/index.ts +0 -7
  283. package/src/core/http/uws-http-server.ts +0 -591
  284. package/src/core/logger/filters.ts +0 -153
  285. package/src/core/logger/index.ts +0 -21
  286. package/src/core/logger/logger.ts +0 -1033
  287. package/src/core/logger/outputs.ts +0 -132
  288. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  289. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  290. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  291. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
  292. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  293. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  294. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
  295. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  296. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  297. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  298. package/src/core/middleware/built-in/auth.ts +0 -410
  299. package/src/core/middleware/built-in/cache.ts +0 -213
  300. package/src/core/middleware/built-in/cdn.ts +0 -124
  301. package/src/core/middleware/built-in/cookie.ts +0 -85
  302. package/src/core/middleware/built-in/cors.ts +0 -38
  303. package/src/core/middleware/built-in/csp.ts +0 -101
  304. package/src/core/middleware/built-in/csrf.ts +0 -82
  305. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  306. package/src/core/middleware/built-in/index.ts +0 -87
  307. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  308. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  309. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  310. package/src/core/middleware/built-in/request-logger.ts +0 -16
  311. package/src/core/middleware/built-in/session.ts +0 -287
  312. package/src/core/middleware/built-in/sse.ts +0 -88
  313. package/src/core/middleware/built-in/validation.ts +0 -33
  314. package/src/core/middleware/index.ts +0 -177
  315. package/src/core/modules/auto-discovery.ts +0 -726
  316. package/src/core/modules/index.ts +0 -3
  317. package/src/core/modules/modules.ts +0 -135
  318. package/src/core/networking/adapters/index.ts +0 -17
  319. package/src/core/networking/adapters/socketio-adapter.ts +0 -254
  320. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  321. package/src/core/networking/adapters/ws-adapter.ts +0 -429
  322. package/src/core/networking/index.ts +0 -4
  323. package/src/core/networking/service-discovery.ts +0 -303
  324. package/src/core/networking/websocket-adapter.ts +0 -217
  325. package/src/core/networking/websocket-manager.ts +0 -308
  326. package/src/core/pooling/object-pool-manager.ts +0 -630
  327. package/src/core/routing/app-integration.ts +0 -164
  328. package/src/core/routing/index.ts +0 -261
  329. package/src/core/routing/path-matcher.ts +0 -222
  330. package/src/core/routing/router.ts +0 -97
  331. package/src/core/routing/unified-router.ts +0 -870
  332. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  333. package/src/core/runtime/base-adapter.ts +0 -130
  334. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  335. package/src/core/runtime/index.ts +0 -62
  336. package/src/core/runtime/node-adapter.ts +0 -202
  337. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  338. package/src/core/utilities/circuit-breaker.ts +0 -46
  339. package/src/core/utilities/container.ts +0 -736
  340. package/src/core/utilities/hooks.ts +0 -142
  341. package/src/core/utilities/index.ts +0 -17
  342. package/src/core/utilities/package-utils.ts +0 -59
  343. package/src/core/validation/adapters.ts +0 -147
  344. package/src/core/validation/index.ts +0 -258
  345. package/src/core/validation/schema-interface.ts +0 -100
  346. package/src/index.ts +0 -233
  347. package/src/moro.ts +0 -1728
  348. package/src/types/auth.ts +0 -440
  349. package/src/types/cache.ts +0 -38
  350. package/src/types/cdn.ts +0 -22
  351. package/src/types/config.ts +0 -229
  352. package/src/types/core.ts +0 -58
  353. package/src/types/database.ts +0 -32
  354. package/src/types/discovery.ts +0 -7
  355. package/src/types/events.ts +0 -82
  356. package/src/types/hooks.ts +0 -47
  357. package/src/types/http.ts +0 -89
  358. package/src/types/logger.ts +0 -102
  359. package/src/types/module.ts +0 -99
  360. package/src/types/runtime.ts +0 -76
  361. package/src/types/session.ts +0 -89
  362. package/tsconfig.json +0 -23
  363. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
  364. /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
  365. /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
  366. /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
@@ -1,576 +0,0 @@
1
- // OpenAPI Specification Generator for Moro Framework
2
- // Extracts route information from intelligent routing and generates OpenAPI 3.0 specs
3
-
4
- import { CompiledRoute, RouteSchema } from '../routing/index.js';
5
- import { OpenAPISchema } from './zod-to-openapi.js';
6
- import { schemaToOpenAPI, generateExampleFromValidationSchema } from './schema-to-openapi.js';
7
- import { createFrameworkLogger } from '../logger/index.js';
8
-
9
- const logger = createFrameworkLogger('OpenAPIGenerator');
10
-
11
- // OpenAPI 3.0 specification structure
12
- export interface OpenAPISpec {
13
- openapi: string;
14
- info: OpenAPIInfo;
15
- servers?: OpenAPIServer[];
16
- paths: Record<string, OpenAPIPath>;
17
- components?: OpenAPIComponents;
18
- tags?: OpenAPITag[];
19
- }
20
-
21
- export interface OpenAPIInfo {
22
- title: string;
23
- version: string;
24
- description?: string;
25
- contact?: {
26
- name?: string;
27
- url?: string;
28
- email?: string;
29
- };
30
- license?: {
31
- name: string;
32
- url?: string;
33
- };
34
- }
35
-
36
- export interface OpenAPIServer {
37
- url: string;
38
- description?: string;
39
- }
40
-
41
- export interface OpenAPIPath {
42
- [method: string]: OpenAPIOperation;
43
- }
44
-
45
- export interface OpenAPIOperation {
46
- summary?: string;
47
- description?: string;
48
- tags?: string[];
49
- parameters?: OpenAPIParameter[];
50
- requestBody?: OpenAPIRequestBody;
51
- responses: Record<string, OpenAPIResponse>;
52
- security?: OpenAPISecurityRequirement[];
53
- }
54
-
55
- export interface OpenAPIParameter {
56
- name: string;
57
- in: 'query' | 'path' | 'header' | 'cookie';
58
- required?: boolean;
59
- description?: string;
60
- schema: OpenAPISchema;
61
- example?: any;
62
- }
63
-
64
- export interface OpenAPIRequestBody {
65
- description?: string;
66
- required?: boolean;
67
- content: Record<string, OpenAPIMediaType>;
68
- }
69
-
70
- export interface OpenAPIMediaType {
71
- schema: OpenAPISchema;
72
- example?: any;
73
- examples?: Record<string, OpenAPIExample>;
74
- }
75
-
76
- export interface OpenAPIResponse {
77
- description: string;
78
- content?: Record<string, OpenAPIMediaType>;
79
- headers?: Record<string, OpenAPIHeader>;
80
- }
81
-
82
- export interface OpenAPIHeader {
83
- description?: string;
84
- schema: OpenAPISchema;
85
- }
86
-
87
- export interface OpenAPIExample {
88
- summary?: string;
89
- description?: string;
90
- value: any;
91
- }
92
-
93
- export interface OpenAPIComponents {
94
- schemas?: Record<string, OpenAPISchema>;
95
- responses?: Record<string, OpenAPIResponse>;
96
- parameters?: Record<string, OpenAPIParameter>;
97
- examples?: Record<string, OpenAPIExample>;
98
- securitySchemes?: Record<string, OpenAPISecurityScheme>;
99
- }
100
-
101
- export interface OpenAPISecurityScheme {
102
- type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
103
- description?: string;
104
- name?: string;
105
- in?: 'query' | 'header' | 'cookie';
106
- scheme?: string;
107
- bearerFormat?: string;
108
- }
109
-
110
- export interface OpenAPISecurityRequirement {
111
- [name: string]: string[];
112
- }
113
-
114
- export interface OpenAPITag {
115
- name: string;
116
- description?: string;
117
- }
118
-
119
- // Generation options
120
- export interface GenerationOptions {
121
- info: OpenAPIInfo;
122
- servers?: OpenAPIServer[];
123
- includeExamples?: boolean;
124
- includeSchemas?: boolean;
125
- groupByTags?: boolean;
126
- securitySchemes?: Record<string, OpenAPISecurityScheme>;
127
- }
128
-
129
- // OpenAPI generator class
130
- export class OpenAPIGenerator {
131
- private routes: CompiledRoute[] = [];
132
- private schemas = new Map<string, OpenAPISchema>();
133
- private tags = new Set<string>();
134
-
135
- constructor(private options: GenerationOptions) {
136
- logger.debug('OpenAPI Generator initialized', 'Initialization', {
137
- includeExamples: options.includeExamples,
138
- includeSchemas: options.includeSchemas,
139
- });
140
- }
141
-
142
- // Add routes to the generator
143
- addRoutes(routes: CompiledRoute[]): void {
144
- this.routes.push(...routes);
145
-
146
- // Extract tags from routes
147
- routes.forEach(route => {
148
- if (route.schema.tags) {
149
- route.schema.tags.forEach(tag => this.tags.add(tag));
150
- }
151
- });
152
-
153
- logger.debug(`Added ${routes.length} routes to documentation`, 'RouteAddition', {
154
- totalRoutes: this.routes.length,
155
- uniqueTags: this.tags.size,
156
- });
157
- }
158
-
159
- // Generate complete OpenAPI specification
160
- generate(): OpenAPISpec {
161
- logger.info('Generating OpenAPI specification', 'Generation', {
162
- routeCount: this.routes.length,
163
- tagCount: this.tags.size,
164
- });
165
-
166
- const spec: OpenAPISpec = {
167
- openapi: '3.0.3',
168
- info: this.options.info,
169
- servers: this.options.servers || [
170
- { url: 'http://localhost:3000', description: 'Development server' },
171
- ],
172
- paths: this.generatePaths(),
173
- tags: this.generateTags(),
174
- };
175
-
176
- // Add components if schemas are included
177
- if (this.options.includeSchemas && this.schemas.size > 0) {
178
- spec.components = {
179
- schemas: Object.fromEntries(this.schemas),
180
- securitySchemes: this.options.securitySchemes,
181
- };
182
- }
183
-
184
- logger.info('OpenAPI specification generated successfully', 'Generation', {
185
- pathCount: Object.keys(spec.paths).length,
186
- schemaCount: this.schemas.size,
187
- tagCount: spec.tags?.length || 0,
188
- });
189
-
190
- return spec;
191
- }
192
-
193
- // Generate paths from routes
194
- private generatePaths(): Record<string, OpenAPIPath> {
195
- const paths: Record<string, OpenAPIPath> = {};
196
-
197
- for (const route of this.routes) {
198
- const path = this.convertPathToOpenAPI(route.schema.path);
199
- const method = route.schema.method.toLowerCase();
200
-
201
- if (!paths[path]) {
202
- paths[path] = {};
203
- }
204
-
205
- paths[path][method] = this.generateOperation(route.schema);
206
- }
207
-
208
- return paths;
209
- }
210
-
211
- // Generate OpenAPI operation from route schema
212
- private generateOperation(route: RouteSchema): OpenAPIOperation {
213
- const operation: OpenAPIOperation = {
214
- summary: route.description || `${route.method} ${route.path}`,
215
- description: route.description,
216
- tags: route.tags,
217
- responses: this.generateResponses(route),
218
- };
219
-
220
- // Add parameters (query and path)
221
- const parameters = this.generateParameters(route);
222
- if (parameters.length > 0) {
223
- operation.parameters = parameters;
224
- }
225
-
226
- // Add request body (for POST, PUT, PATCH)
227
- if (['POST', 'PUT', 'PATCH'].includes(route.method) && route.validation?.body) {
228
- operation.requestBody = this.generateRequestBody(route);
229
- }
230
-
231
- // Add security if auth is required
232
- if (route.auth) {
233
- operation.security = this.generateSecurity(route);
234
- }
235
-
236
- return operation;
237
- }
238
-
239
- // Generate parameters from validation schemas
240
- private generateParameters(route: RouteSchema): OpenAPIParameter[] {
241
- const parameters: OpenAPIParameter[] = [];
242
-
243
- // Path parameters
244
- if (route.validation?.params) {
245
- const paramSchema = schemaToOpenAPI(route.validation.params, this.options);
246
- if (paramSchema.properties) {
247
- for (const [name, schema] of Object.entries(paramSchema.properties)) {
248
- parameters.push({
249
- name,
250
- in: 'path',
251
- required: true,
252
- schema,
253
- description: schema.description,
254
- example: this.options.includeExamples ? schema.example : undefined,
255
- });
256
- }
257
- }
258
- }
259
-
260
- // Query parameters
261
- if (route.validation?.query) {
262
- const querySchema = schemaToOpenAPI(route.validation.query, this.options);
263
- if (querySchema.properties) {
264
- for (const [name, schema] of Object.entries(querySchema.properties)) {
265
- const isRequired = querySchema.required?.includes(name) || false;
266
- parameters.push({
267
- name,
268
- in: 'query',
269
- required: isRequired,
270
- schema,
271
- description: schema.description,
272
- example: this.options.includeExamples ? schema.example : undefined,
273
- });
274
- }
275
- }
276
- }
277
-
278
- // Header parameters
279
- if (route.validation?.headers) {
280
- const headerSchema = schemaToOpenAPI(route.validation.headers, this.options);
281
- if (headerSchema.properties) {
282
- for (const [name, schema] of Object.entries(headerSchema.properties)) {
283
- const isRequired = headerSchema.required?.includes(name) || false;
284
- parameters.push({
285
- name,
286
- in: 'header',
287
- required: isRequired,
288
- schema,
289
- description: schema.description,
290
- example: this.options.includeExamples ? schema.example : undefined,
291
- });
292
- }
293
- }
294
- }
295
-
296
- return parameters;
297
- }
298
-
299
- // Generate request body from validation schema
300
- private generateRequestBody(route: RouteSchema): OpenAPIRequestBody {
301
- if (!route.validation?.body) {
302
- return {
303
- description: 'Request body',
304
- required: true,
305
- content: {
306
- 'application/json': {
307
- schema: { type: 'object' },
308
- },
309
- },
310
- };
311
- }
312
-
313
- const bodySchema = schemaToOpenAPI(route.validation.body, this.options);
314
- const example = this.options.includeExamples
315
- ? generateExampleFromValidationSchema(route.validation.body)
316
- : undefined;
317
-
318
- return {
319
- description: 'Request body',
320
- required: true,
321
- content: {
322
- 'application/json': {
323
- schema: bodySchema,
324
- example,
325
- },
326
- },
327
- };
328
- }
329
-
330
- // Generate responses
331
- private generateResponses(route: RouteSchema): Record<string, OpenAPIResponse> {
332
- const responses: Record<string, OpenAPIResponse> = {};
333
-
334
- // Success response
335
- responses['200'] = {
336
- description: 'Successful response',
337
- content: {
338
- 'application/json': {
339
- schema: {
340
- type: 'object',
341
- properties: {
342
- success: { type: 'boolean', example: true },
343
- data: { type: 'object', description: 'Response data' },
344
- message: { type: 'string', example: 'Operation successful' },
345
- },
346
- },
347
- },
348
- },
349
- };
350
-
351
- // Add 201 for POST requests
352
- if (route.method === 'POST') {
353
- responses['201'] = {
354
- description: 'Resource created successfully',
355
- content: {
356
- 'application/json': {
357
- schema: {
358
- type: 'object',
359
- properties: {
360
- success: { type: 'boolean', example: true },
361
- data: { type: 'object', description: 'Created resource' },
362
- message: {
363
- type: 'string',
364
- example: 'Resource created successfully',
365
- },
366
- },
367
- },
368
- },
369
- },
370
- };
371
- }
372
-
373
- // Validation error response
374
- if (route.validation) {
375
- responses['400'] = {
376
- description: 'Validation error',
377
- content: {
378
- 'application/json': {
379
- schema: {
380
- type: 'object',
381
- properties: {
382
- success: { type: 'boolean', example: false },
383
- error: { type: 'string', example: 'Validation failed' },
384
- details: {
385
- type: 'array',
386
- items: {
387
- type: 'object',
388
- properties: {
389
- field: { type: 'string', example: 'email' },
390
- message: {
391
- type: 'string',
392
- example: 'Invalid email address',
393
- },
394
- code: { type: 'string', example: 'invalid_format' },
395
- },
396
- },
397
- },
398
- requestId: { type: 'string', example: 'req_123456' },
399
- },
400
- },
401
- },
402
- },
403
- };
404
- }
405
-
406
- // Auth error response
407
- if (route.auth) {
408
- responses['401'] = {
409
- description: 'Authentication required',
410
- content: {
411
- 'application/json': {
412
- schema: {
413
- type: 'object',
414
- properties: {
415
- success: { type: 'boolean', example: false },
416
- error: { type: 'string', example: 'Authentication required' },
417
- requestId: { type: 'string', example: 'req_123456' },
418
- },
419
- },
420
- },
421
- },
422
- };
423
-
424
- responses['403'] = {
425
- description: 'Insufficient permissions',
426
- content: {
427
- 'application/json': {
428
- schema: {
429
- type: 'object',
430
- properties: {
431
- success: { type: 'boolean', example: false },
432
- error: { type: 'string', example: 'Insufficient permissions' },
433
- requestId: { type: 'string', example: 'req_123456' },
434
- },
435
- },
436
- },
437
- },
438
- };
439
- }
440
-
441
- // Rate limit error response
442
- if (route.rateLimit) {
443
- responses['429'] = {
444
- description: 'Rate limit exceeded',
445
- content: {
446
- 'application/json': {
447
- schema: {
448
- type: 'object',
449
- properties: {
450
- success: { type: 'boolean', example: false },
451
- error: { type: 'string', example: 'Rate limit exceeded' },
452
- retryAfter: { type: 'number', example: 60 },
453
- requestId: { type: 'string', example: 'req_123456' },
454
- },
455
- },
456
- },
457
- },
458
- };
459
- }
460
-
461
- // Server error response
462
- responses['500'] = {
463
- description: 'Internal server error',
464
- content: {
465
- 'application/json': {
466
- schema: {
467
- type: 'object',
468
- properties: {
469
- success: { type: 'boolean', example: false },
470
- error: { type: 'string', example: 'Internal server error' },
471
- requestId: { type: 'string', example: 'req_123456' },
472
- },
473
- },
474
- },
475
- },
476
- };
477
-
478
- return responses;
479
- }
480
-
481
- // Generate security requirements
482
- private generateSecurity(route: RouteSchema): OpenAPISecurityRequirement[] {
483
- if (!route.auth) return [];
484
-
485
- const security: OpenAPISecurityRequirement[] = [];
486
-
487
- // Default to bearer token if no specific scheme is defined
488
- security.push({
489
- bearerAuth: route.auth.roles || [],
490
- });
491
-
492
- return security;
493
- }
494
-
495
- // Generate tags
496
- private generateTags(): OpenAPITag[] {
497
- return Array.from(this.tags).map(tag => ({
498
- name: tag,
499
- description: `Operations related to ${tag}`,
500
- }));
501
- }
502
-
503
- // Convert Moro path format to OpenAPI path format
504
- private convertPathToOpenAPI(path: string): string {
505
- // Convert :param to {param} format
506
- return path.replace(/:([^/]+)/g, '{$1}');
507
- }
508
-
509
- // Generate JSON representation
510
- generateJSON(): string {
511
- return JSON.stringify(this.generate(), null, 2);
512
- }
513
-
514
- // Generate YAML representation (basic implementation)
515
- generateYAML(): string {
516
- const spec = this.generate();
517
- return this.objectToYAML(spec, 0);
518
- }
519
-
520
- // Simple YAML converter (basic implementation)
521
- private objectToYAML(obj: any, indent: number = 0): string {
522
- const spaces = ' '.repeat(indent);
523
- let yaml = '';
524
-
525
- for (const [key, value] of Object.entries(obj)) {
526
- if (value === null || value === undefined) continue;
527
-
528
- yaml += `${spaces}${key}:`;
529
-
530
- if (typeof value === 'object' && !Array.isArray(value)) {
531
- yaml += '\n' + this.objectToYAML(value, indent + 1);
532
- } else if (Array.isArray(value)) {
533
- yaml += '\n';
534
- for (const item of value) {
535
- if (typeof item === 'object') {
536
- yaml += `${spaces} -\n` + this.objectToYAML(item, indent + 2);
537
- } else {
538
- yaml += `${spaces} - ${item}\n`;
539
- }
540
- }
541
- } else if (typeof value === 'string') {
542
- yaml += ` "${value}"\n`;
543
- } else {
544
- yaml += ` ${value}\n`;
545
- }
546
- }
547
-
548
- return yaml;
549
- }
550
- }
551
-
552
- // Convenience function to generate OpenAPI from routes
553
- export function generateOpenAPIFromRoutes(
554
- routes: CompiledRoute[],
555
- options: GenerationOptions
556
- ): OpenAPISpec {
557
- const generator = new OpenAPIGenerator(options);
558
- generator.addRoutes(routes);
559
- return generator.generate();
560
- }
561
-
562
- // Default security schemes
563
- export const defaultSecuritySchemes: Record<string, OpenAPISecurityScheme> = {
564
- bearerAuth: {
565
- type: 'http',
566
- scheme: 'bearer',
567
- bearerFormat: 'JWT',
568
- description: 'Bearer token authentication',
569
- },
570
- apiKey: {
571
- type: 'apiKey',
572
- in: 'header',
573
- name: 'X-API-Key',
574
- description: 'API key authentication',
575
- },
576
- };
@@ -1,145 +0,0 @@
1
- // Universal Schema to OpenAPI Converter
2
- // Converts ValidationSchema (Zod, Joi, etc.) to OpenAPI 3.0 schema definitions
3
-
4
- import { ValidationSchema } from '../validation/schema-interface.js';
5
- import { OpenAPISchema, zodToOpenAPI, generateExampleFromSchema } from './zod-to-openapi.js';
6
- import { createFrameworkLogger } from '../logger/index.js';
7
-
8
- const logger = createFrameworkLogger('SchemaToOpenAPI');
9
-
10
- // Check if a schema is a Zod schema
11
- function isZodSchema(schema: any): boolean {
12
- return (
13
- schema && typeof schema === 'object' && schema._def && typeof schema.parseAsync === 'function'
14
- );
15
- }
16
-
17
- // Check if schema is Joi
18
- function isJoiSchema(schema: any): boolean {
19
- return (
20
- schema &&
21
- typeof schema === 'object' &&
22
- schema.type &&
23
- typeof schema.validateAsync === 'function'
24
- );
25
- }
26
-
27
- // Convert any ValidationSchema to OpenAPI
28
- export function schemaToOpenAPI(
29
- schema: ValidationSchema,
30
- options: { includeExamples?: boolean; includeDescriptions?: boolean } = {}
31
- ): OpenAPISchema {
32
- // If it's a Zod schema, use the existing zod converter
33
- if (isZodSchema(schema)) {
34
- try {
35
- return zodToOpenAPI(schema, options);
36
- } catch (error) {
37
- logger.warn('Zod converter not available, using fallback', String(error));
38
- }
39
- }
40
-
41
- // If it's a Joi schema, convert from Joi
42
- if (isJoiSchema(schema)) {
43
- return convertJoiToOpenAPI(schema as any, options);
44
- }
45
-
46
- // For other schemas (custom validators, etc.), return a generic object schema
47
- logger.debug('Using generic schema conversion for unknown validation type');
48
- return {
49
- type: 'object',
50
- description: options.includeDescriptions ? 'Validated object' : undefined,
51
- additionalProperties: true,
52
- };
53
- }
54
-
55
- // Generate example from any ValidationSchema
56
- export function generateExampleFromValidationSchema(schema: ValidationSchema): any {
57
- // If it's a Zod schema, use existing example generator
58
- if (isZodSchema(schema)) {
59
- try {
60
- return generateExampleFromSchema(schema);
61
- } catch (error) {
62
- logger.warn('Zod example generator not available', String(error));
63
- }
64
- }
65
-
66
- // For other schemas, return a generic example
67
- return {
68
- example: 'Validated data structure',
69
- };
70
- }
71
-
72
- // Convert Joi schema to OpenAPI (basic implementation)
73
- function convertJoiToOpenAPI(
74
- joiSchema: any,
75
- options: { includeDescriptions?: boolean }
76
- ): OpenAPISchema {
77
- const schemaType = joiSchema.type;
78
-
79
- switch (schemaType) {
80
- case 'string':
81
- return {
82
- type: 'string',
83
- description: options.includeDescriptions ? joiSchema._description : undefined,
84
- minLength: joiSchema._rules?.find((r: any) => r.name === 'min')?.args?.limit,
85
- maxLength: joiSchema._rules?.find((r: any) => r.name === 'max')?.args?.limit,
86
- pattern: joiSchema._rules?.find((r: any) => r.name === 'pattern')?.args?.regex?.source,
87
- };
88
-
89
- case 'number':
90
- return {
91
- type: 'number',
92
- description: options.includeDescriptions ? joiSchema._description : undefined,
93
- minimum: joiSchema._rules?.find((r: any) => r.name === 'min')?.args?.limit,
94
- maximum: joiSchema._rules?.find((r: any) => r.name === 'max')?.args?.limit,
95
- };
96
-
97
- case 'boolean':
98
- return {
99
- type: 'boolean',
100
- description: options.includeDescriptions ? joiSchema._description : undefined,
101
- };
102
-
103
- case 'object': {
104
- const properties: Record<string, OpenAPISchema> = {};
105
- const required: string[] = [];
106
-
107
- if (joiSchema._inner?.children) {
108
- for (const child of joiSchema._inner.children) {
109
- const key = child.key;
110
- properties[key] = convertJoiToOpenAPI(child.schema, options);
111
-
112
- if (child.schema._flags?.presence === 'required') {
113
- required.push(key);
114
- }
115
- }
116
- }
117
-
118
- return {
119
- type: 'object',
120
- properties,
121
- required: required.length > 0 ? required : undefined,
122
- description: options.includeDescriptions ? joiSchema._description : undefined,
123
- };
124
- }
125
-
126
- case 'array':
127
- return {
128
- type: 'array',
129
- items: joiSchema._inner?.items?.[0]
130
- ? convertJoiToOpenAPI(joiSchema._inner.items[0], options)
131
- : { type: 'object' },
132
- description: options.includeDescriptions ? joiSchema._description : undefined,
133
- minItems: joiSchema._rules?.find((r: any) => r.name === 'min')?.args?.limit,
134
- maxItems: joiSchema._rules?.find((r: any) => r.name === 'max')?.args?.limit,
135
- };
136
-
137
- default:
138
- logger.warn(`Unsupported Joi schema type: ${schemaType}`);
139
- return {
140
- type: 'object',
141
- additionalProperties: true,
142
- description: options.includeDescriptions ? 'Complex validation schema' : undefined,
143
- };
144
- }
145
- }