@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,295 +0,0 @@
1
- // Simple Documentation Generator - Fallback for when Swagger UI has issues
2
- // Generates clean, readable API documentation from routes
3
-
4
- import { CompiledRoute, RouteSchema } from '../routing/index.js';
5
- import { createFrameworkLogger } from '../logger/index.js';
6
-
7
- const logger = createFrameworkLogger('SimpleDocs');
8
-
9
- export interface SimpleDocsOptions {
10
- title?: string;
11
- description?: string;
12
- basePath?: string;
13
- }
14
-
15
- export class SimpleDocsGenerator {
16
- private routes: CompiledRoute[] = [];
17
-
18
- constructor(private options: SimpleDocsOptions = {}) {
19
- this.options = {
20
- title: 'API Documentation',
21
- description: 'API documentation generated from intelligent routes',
22
- basePath: '/docs',
23
- ...options,
24
- };
25
- }
26
-
27
- addRoutes(routes: CompiledRoute[]): void {
28
- this.routes = routes;
29
- logger.debug(`Added ${routes.length} routes to simple docs`, 'RouteAddition');
30
- }
31
-
32
- generateHTML(): string {
33
- const routesByTag = this.groupRoutesByTag();
34
-
35
- return `<!DOCTYPE html>
36
- <html lang="en">
37
- <head>
38
- <meta charset="UTF-8">
39
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
40
- <title>${this.options.title}</title>
41
- <style>
42
- body {
43
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
44
- line-height: 1.6;
45
- margin: 0;
46
- padding: 20px;
47
- background: #f8f9fa;
48
- }
49
- .container {
50
- max-width: 1200px;
51
- margin: 0 auto;
52
- background: white;
53
- padding: 30px;
54
- border-radius: 8px;
55
- box-shadow: 0 2px 10px rgba(0,0,0,0.1);
56
- }
57
- h1 { color: #2563eb; margin-bottom: 10px; }
58
- h2 { color: #374151; border-bottom: 2px solid #e5e7eb; padding-bottom: 10px; }
59
- h3 { color: #6b7280; }
60
- .endpoint {
61
- background: #f3f4f6;
62
- border-left: 4px solid #2563eb;
63
- padding: 15px;
64
- margin: 15px 0;
65
- border-radius: 4px;
66
- }
67
- .method {
68
- display: inline-block;
69
- padding: 4px 8px;
70
- border-radius: 4px;
71
- font-weight: bold;
72
- margin-right: 10px;
73
- color: white;
74
- }
75
- .method.GET { background: #10b981; }
76
- .method.POST { background: #f59e0b; }
77
- .method.PUT { background: #3b82f6; }
78
- .method.DELETE { background: #ef4444; }
79
- .method.PATCH { background: #8b5cf6; }
80
- .path { font-family: monospace; font-size: 16px; font-weight: bold; }
81
- .description { color: #6b7280; margin: 8px 0; }
82
- .tags { margin: 8px 0; }
83
- .tag {
84
- display: inline-block;
85
- background: #e5e7eb;
86
- color: #374151;
87
- padding: 2px 8px;
88
- border-radius: 12px;
89
- font-size: 12px;
90
- margin-right: 5px;
91
- }
92
- .validation {
93
- background: #fef3c7;
94
- border: 1px solid #f59e0b;
95
- padding: 10px;
96
- border-radius: 4px;
97
- margin: 10px 0;
98
- }
99
- .auth {
100
- background: #fee2e2;
101
- border: 1px solid #ef4444;
102
- padding: 10px;
103
- border-radius: 4px;
104
- margin: 10px 0;
105
- }
106
- .rate-limit {
107
- background: #e0f2fe;
108
- border: 1px solid #0284c7;
109
- padding: 10px;
110
- border-radius: 4px;
111
- margin: 10px 0;
112
- }
113
- .example {
114
- background: #f3f4f6;
115
- border: 1px solid #d1d5db;
116
- padding: 10px;
117
- border-radius: 4px;
118
- margin: 10px 0;
119
- font-family: monospace;
120
- font-size: 14px;
121
- }
122
- .footer {
123
- margin-top: 40px;
124
- padding-top: 20px;
125
- border-top: 1px solid #e5e7eb;
126
- text-align: center;
127
- color: #6b7280;
128
- }
129
- </style>
130
- </head>
131
- <body>
132
- <div class="container">
133
- <h1>${this.options.title}</h1>
134
- <p>${this.options.description}</p>
135
-
136
- <div class="example">
137
- <strong>Interactive Swagger UI:</strong> <a href="${this.options.basePath}" target="_blank">${this.options.basePath}</a><br>
138
- <strong>OpenAPI JSON:</strong> <a href="${this.options.basePath}/openapi.json" target="_blank">${this.options.basePath}/openapi.json</a>
139
- </div>
140
-
141
- ${this.generateRouteDocumentation(routesByTag)}
142
-
143
- <div class="footer">
144
- <p>Generated automatically from Moro Framework intelligent routes</p>
145
- <p>Built with Moro Framework - Intelligent Routing + Type-Safe Validation</p>
146
- </div>
147
- </div>
148
- </body>
149
- </html>`;
150
- }
151
-
152
- private groupRoutesByTag(): Map<string, CompiledRoute[]> {
153
- const grouped = new Map<string, CompiledRoute[]>();
154
-
155
- for (const route of this.routes) {
156
- const tags = route.schema.tags || ['default'];
157
-
158
- for (const tag of tags) {
159
- if (!grouped.has(tag)) {
160
- grouped.set(tag, []);
161
- }
162
- grouped.get(tag)!.push(route);
163
- }
164
- }
165
-
166
- return grouped;
167
- }
168
-
169
- private generateRouteDocumentation(routesByTag: Map<string, CompiledRoute[]>): string {
170
- let html = '';
171
-
172
- for (const [tag, routes] of routesByTag) {
173
- html += `<h2>${tag.charAt(0).toUpperCase() + tag.slice(1)}</h2>`;
174
-
175
- for (const route of routes) {
176
- html += this.generateRouteSection(route.schema);
177
- }
178
- }
179
-
180
- return html;
181
- }
182
-
183
- private generateRouteSection(route: RouteSchema): string {
184
- const methodClass = route.method.toLowerCase();
185
-
186
- const html = `
187
- <div class="endpoint">
188
- <div>
189
- <span class="method ${route.method}">${route.method}</span>
190
- <span class="path">${route.path}</span>
191
- </div>
192
-
193
- ${route.description ? `<div class="description">${route.description}</div>` : ''}
194
-
195
- ${route.tags ? `<div class="tags">${route.tags.map(tag => `<span class="tag">${tag}</span>`).join('')}</div>` : ''}
196
-
197
- ${this.generateValidationInfo(route)}
198
- ${this.generateAuthInfo(route)}
199
- ${this.generateRateLimitInfo(route)}
200
- ${this.generateExamples(route)}
201
- </div>`;
202
-
203
- return html;
204
- }
205
-
206
- private generateValidationInfo(route: RouteSchema): string {
207
- if (!route.validation) return '';
208
-
209
- const validationTypes = [];
210
- if (route.validation.body) validationTypes.push('Body');
211
- if (route.validation.query) validationTypes.push('Query Parameters');
212
- if (route.validation.params) validationTypes.push('Path Parameters');
213
- if (route.validation.headers) validationTypes.push('Headers');
214
-
215
- return `
216
- <div class="validation">
217
- <strong>Validation:</strong> ${validationTypes.join(', ')}
218
- <br><small>Request will be validated with Validation schemas for type safety</small>
219
- </div>`;
220
- }
221
-
222
- private generateAuthInfo(route: RouteSchema): string {
223
- if (!route.auth) return '';
224
-
225
- const roles = route.auth.roles ? route.auth.roles.join(', ') : 'authenticated';
226
-
227
- return `
228
- <div class="auth">
229
- <strong>Authentication Required:</strong> ${roles}
230
- <br><small>Requires valid authentication token</small>
231
- </div>`;
232
- }
233
-
234
- private generateRateLimitInfo(route: RouteSchema): string {
235
- if (!route.rateLimit) return '';
236
-
237
- const { requests, window } = route.rateLimit;
238
- const windowSeconds = Math.round(window / 1000);
239
-
240
- return `
241
- <div class="rate-limit">
242
- <strong>Rate Limit:</strong> ${requests} requests per ${windowSeconds} seconds
243
- <br><small>Automatic protection against abuse</small>
244
- </div>`;
245
- }
246
-
247
- private generateExamples(route: RouteSchema): string {
248
- const baseUrl = 'http://localhost:3001';
249
- const fullPath = `${baseUrl}${route.path}`;
250
-
251
- let example = '';
252
-
253
- if (route.method === 'GET') {
254
- example = `curl "${fullPath}"`;
255
-
256
- // Add query parameter example if validation exists
257
- if (route.validation?.query) {
258
- example = `curl "${fullPath}?limit=10&search=example"`;
259
- }
260
- } else if (['POST', 'PUT', 'PATCH'].includes(route.method)) {
261
- example = `curl -X ${route.method} ${fullPath} \\
262
- -H "Content-Type: application/json" \\
263
- -d '{"example": "data"}'`;
264
- } else {
265
- example = `curl -X ${route.method} ${fullPath}`;
266
- }
267
-
268
- return `
269
- <div class="example">
270
- <strong>Example:</strong><br>
271
- <code>${example}</code>
272
- </div>`;
273
- }
274
- }
275
-
276
- // Create middleware for simple docs
277
- export function createSimpleDocsMiddleware(
278
- routes: CompiledRoute[],
279
- options: SimpleDocsOptions = {}
280
- ) {
281
- const generator = new SimpleDocsGenerator(options);
282
- generator.addRoutes(routes);
283
-
284
- const basePath = options.basePath || '/docs';
285
-
286
- return (req: any, res: any, next: () => void) => {
287
- if (req.path === `${basePath}/simple` || req.path === `${basePath}/simple/`) {
288
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
289
- res.send(generator.generateHTML());
290
- return;
291
- }
292
-
293
- next();
294
- };
295
- }
@@ -1,354 +0,0 @@
1
- // Swagger UI Integration for Moro Framework
2
- // Serves interactive API documentation using Swagger UI
3
-
4
- import { readFileSync } from 'fs';
5
- import { join } from 'path';
6
- import { createUserRequire } from '../utilities/package-utils.js';
7
- import { HttpRequest, HttpResponse } from '../http/index.js';
8
- import { OpenAPISpec } from './openapi-generator.js';
9
- import { createFrameworkLogger } from '../logger/index.js';
10
-
11
- const logger = createFrameworkLogger('SwaggerUI');
12
-
13
- // Swagger UI configuration options
14
- export interface SwaggerUIOptions {
15
- title?: string;
16
- favicon?: string;
17
- customCss?: string;
18
- customJs?: string;
19
- swaggerOptions?: Record<string, any>;
20
- enableTryItOut?: boolean;
21
- enableFilter?: boolean;
22
- enableDeepLinking?: boolean;
23
- }
24
-
25
- // Swagger UI middleware
26
- export class SwaggerUIMiddleware {
27
- private swaggerUIAssetPath: string;
28
- private openAPISpec: OpenAPISpec;
29
- private options: SwaggerUIOptions;
30
-
31
- constructor(openAPISpec: OpenAPISpec, options: SwaggerUIOptions = {}) {
32
- this.openAPISpec = openAPISpec;
33
- this.options = {
34
- title: 'API Documentation',
35
- enableTryItOut: true,
36
- enableFilter: true,
37
- enableDeepLinking: true,
38
- swaggerOptions: {
39
- dom_id: '#swagger-ui',
40
- presets: ['SwaggerUIBundle.presets.apis', 'SwaggerUIBundle.presets.standalone'],
41
- plugins: ['SwaggerUIBundle.plugins.DownloadUrl'],
42
- layout: 'StandaloneLayout',
43
- },
44
- ...options,
45
- };
46
-
47
- try {
48
- // Find swagger-ui-dist assets using ESM-compatible resolution
49
- // Create a require function from the user's working directory to find their installed packages
50
- const require = createUserRequire();
51
- this.swaggerUIAssetPath = require
52
- .resolve('swagger-ui-dist/package.json')
53
- .replace('/package.json', '');
54
- logger.debug('Swagger UI assets found', 'Initialization', {
55
- assetPath: this.swaggerUIAssetPath,
56
- });
57
- } catch (error) {
58
- logger.error('Failed to locate Swagger UI assets', 'Initialization', {
59
- error: error instanceof Error ? error.message : String(error),
60
- });
61
- throw new Error(
62
- 'swagger-ui-dist package not found. Install with: npm install swagger-ui-dist'
63
- );
64
- }
65
- }
66
-
67
- // Generate HTML page for Swagger UI
68
- private generateHTML(basePath: string): string {
69
- const swaggerOptions = {
70
- ...this.options.swaggerOptions,
71
- url: `${basePath}/openapi.json`, // Relative URL to the OpenAPI spec
72
- tryItOutEnabled: this.options.enableTryItOut,
73
- filter: this.options.enableFilter,
74
- deepLinking: this.options.enableDeepLinking,
75
- };
76
-
77
- return `<!DOCTYPE html>
78
- <html lang="en">
79
- <head>
80
- <meta charset="UTF-8">
81
- <title>${this.options.title}</title>
82
- <link rel="stylesheet" type="text/css" href="${basePath}/swagger-ui.css" />
83
- <style>
84
- html {
85
- box-sizing: border-box;
86
- overflow: -moz-scrollbars-vertical;
87
- overflow-y: scroll;
88
- }
89
- *, *:before, *:after {
90
- box-sizing: inherit;
91
- }
92
- body {
93
- margin:0;
94
- background: #fafafa;
95
- }
96
- #loading-message {
97
- padding: 20px;
98
- text-align: center;
99
- font-family: Arial, sans-serif;
100
- color: #666;
101
- }
102
- #error-display {
103
- display: none;
104
- padding: 20px;
105
- background: #ffebee;
106
- border-left: 4px solid #f44336;
107
- margin: 20px;
108
- font-family: monospace;
109
- color: #c62828;
110
- }
111
- ${this.options.customCss || ''}
112
- </style>
113
- ${this.options.favicon ? `<link rel="icon" type="image/png" href="${this.options.favicon}" sizes="32x32" />` : ''}
114
- </head>
115
- <body>
116
- <div id="loading-message">
117
- <h2>Loading Swagger UI...</h2>
118
- <p>Please wait while the API documentation loads.</p>
119
- </div>
120
- <div id="swagger-ui"></div>
121
- <div id="error-display">
122
- <h3>Failed to Load Swagger UI</h3>
123
- <div id="error-details"></div>
124
- </div>
125
-
126
- <script src="${basePath}/swagger-ui-bundle.js" charset="UTF-8"></script>
127
- <script src="${basePath}/swagger-ui-standalone-preset.js" charset="UTF-8"></script>
128
- <script>
129
- console.log('Starting Swagger UI initialization...');
130
-
131
- function showError(message, details) {
132
- console.error('Swagger UI Error:', message, details);
133
- document.getElementById('loading-message').style.display = 'none';
134
- document.getElementById('error-display').style.display = 'block';
135
- document.getElementById('error-details').innerHTML =
136
- '<p><strong>Error:</strong> ' + message + '</p>' +
137
- (details ? '<pre>' + JSON.stringify(details, null, 2) + '</pre>' : '');
138
- }
139
-
140
- function initializeSwaggerUI() {
141
- console.log('Initializing Swagger UI...');
142
-
143
- if (typeof SwaggerUIBundle === 'undefined') {
144
- showError('SwaggerUIBundle not loaded', { SwaggerUIBundle: typeof SwaggerUIBundle });
145
- return;
146
- }
147
-
148
- if (typeof SwaggerUIStandalonePreset === 'undefined') {
149
- showError('SwaggerUIStandalonePreset not loaded', { SwaggerUIStandalonePreset: typeof SwaggerUIStandalonePreset });
150
- return;
151
- }
152
-
153
- try {
154
- console.log('Creating SwaggerUIBundle...');
155
-
156
- const ui = SwaggerUIBundle({
157
- url: '${basePath}/openapi.json',
158
- dom_id: '#swagger-ui',
159
- deepLinking: ${this.options.enableDeepLinking},
160
- presets: [
161
- SwaggerUIBundle.presets.apis,
162
- SwaggerUIStandalonePreset
163
- ],
164
- plugins: [
165
- SwaggerUIBundle.plugins.DownloadUrl
166
- ],
167
- layout: "StandaloneLayout",
168
- tryItOutEnabled: ${this.options.enableTryItOut},
169
- filter: ${this.options.enableFilter},
170
- onComplete: function() {
171
- console.log('Swagger UI loaded successfully');
172
- document.getElementById('loading-message').style.display = 'none';
173
- },
174
- onFailure: function(error) {
175
- console.error('Swagger UI failed to load:', error);
176
- showError('Swagger UI initialization failed', error);
177
- }
178
- });
179
-
180
- window.ui = ui;
181
- console.log('SwaggerUIBundle created successfully');
182
-
183
- // Hide loading message after timeout if onComplete doesn't fire
184
- setTimeout(function() {
185
- var loadingEl = document.getElementById('loading-message');
186
- if (loadingEl && loadingEl.style.display !== 'none') {
187
- console.log('Hiding loading message after timeout');
188
- loadingEl.style.display = 'none';
189
- }
190
- }, 5000);
191
-
192
- } catch (error) {
193
- console.error('Error creating SwaggerUIBundle:', error);
194
- showError('Failed to create SwaggerUIBundle', {
195
- name: error.name,
196
- message: error.message
197
- });
198
- }
199
- }
200
-
201
- // Initialize when DOM is ready and scripts are loaded
202
- if (document.readyState === 'loading') {
203
- document.addEventListener('DOMContentLoaded', function() {
204
- setTimeout(initializeSwaggerUI, 100);
205
- });
206
- } else {
207
- setTimeout(initializeSwaggerUI, 100);
208
- }
209
- </script>
210
- </body>
211
- </html>`;
212
- }
213
-
214
- // Create middleware function that serves Swagger UI
215
- createMiddleware(basePath: string = '/docs') {
216
- return (req: HttpRequest, res: HttpResponse, next: () => void) => {
217
- const path = req.path;
218
-
219
- logger.debug(`Docs middleware handling: ${path}`, 'DocsMiddleware', {
220
- basePath,
221
- });
222
-
223
- // Serve the main HTML page
224
- if (path === basePath || path === `${basePath}/`) {
225
- logger.debug('Serving Swagger UI HTML', 'DocsServing');
226
-
227
- // Set CSP headers to allow Swagger UI to work
228
- res.setHeader(
229
- 'Content-Security-Policy',
230
- "default-src 'self'; " +
231
- "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " +
232
- "style-src 'self' 'unsafe-inline'; " +
233
- "img-src 'self' data: https:; " +
234
- "font-src 'self' data:; " +
235
- "connect-src 'self'"
236
- );
237
-
238
- res.setHeader('Content-Type', 'text/html; charset=utf-8');
239
- res.send(this.generateHTML(basePath));
240
- return;
241
- }
242
-
243
- // Serve the OpenAPI JSON spec
244
- if (path === `${basePath}/openapi.json`) {
245
- logger.debug('Serving OpenAPI JSON spec', 'DocsServing');
246
- res.setHeader('Content-Type', 'application/json');
247
- res.json(this.openAPISpec);
248
- return;
249
- }
250
-
251
- // Serve Swagger UI assets
252
- if (path.startsWith(`${basePath}/`)) {
253
- const assetName = path.replace(`${basePath}/`, '');
254
-
255
- logger.debug(`Attempting to serve asset: ${assetName}`, 'AssetServing', {
256
- fullPath: path,
257
- basePath,
258
- assetPath: this.swaggerUIAssetPath,
259
- });
260
-
261
- // Security: only allow specific asset files
262
- const allowedAssets = [
263
- 'swagger-ui-bundle.js',
264
- 'swagger-ui.css',
265
- 'swagger-ui-standalone-preset.js',
266
- 'favicon-16x16.png',
267
- 'favicon-32x32.png',
268
- ];
269
-
270
- if (allowedAssets.includes(assetName)) {
271
- try {
272
- const assetPath = join(this.swaggerUIAssetPath, assetName);
273
- logger.debug(`Reading asset from: ${assetPath}`, 'AssetServing');
274
-
275
- const content = readFileSync(assetPath);
276
-
277
- // Set appropriate content type
278
- const contentType = this.getContentType(assetName);
279
- res.setHeader('Content-Type', contentType);
280
- res.setHeader('Cache-Control', 'public, max-age=86400'); // Cache for 1 day
281
-
282
- logger.debug(`Serving asset: ${assetName} (${content.length} bytes)`, 'AssetServing');
283
- res.send(content);
284
- return;
285
- } catch (error) {
286
- logger.error(`Failed to serve Swagger UI asset: ${assetName}`, 'AssetServing', {
287
- error: error instanceof Error ? error.message : String(error),
288
- assetPath: join(this.swaggerUIAssetPath, assetName),
289
- });
290
- res.status(404);
291
- res.send(`Asset not found: ${assetName}`);
292
- return;
293
- }
294
- } else {
295
- logger.warn(`Asset not allowed: ${assetName}`, 'AssetServing', {
296
- allowedAssets,
297
- });
298
- res.status(404);
299
- res.send(`Asset not allowed: ${assetName}`);
300
- return;
301
- }
302
- }
303
-
304
- // Not a docs request, continue to next middleware
305
- next();
306
- };
307
- }
308
-
309
- // Get content type for asset files
310
- private getContentType(filename: string): string {
311
- if (filename.endsWith('.js')) return 'application/javascript';
312
- if (filename.endsWith('.css')) return 'text/css';
313
- if (filename.endsWith('.png')) return 'image/png';
314
- if (filename.endsWith('.ico')) return 'image/x-icon';
315
- return 'text/plain';
316
- }
317
-
318
- // Update the OpenAPI spec (useful for dynamic updates)
319
- updateSpec(newSpec: OpenAPISpec): void {
320
- this.openAPISpec = newSpec;
321
- logger.debug('OpenAPI specification updated', 'SpecUpdate', {
322
- pathCount: Object.keys(newSpec.paths).length,
323
- });
324
- }
325
- }
326
-
327
- // Convenience function to create documentation middleware
328
- export function createDocsMiddleware(openAPISpec: OpenAPISpec, options: SwaggerUIOptions = {}) {
329
- const middleware = new SwaggerUIMiddleware(openAPISpec, options);
330
- return middleware.createMiddleware();
331
- }
332
-
333
- // Helper function to generate documentation for an app
334
- export function generateDocsForApp(
335
- routes: any[],
336
- info: { title: string; version: string; description?: string },
337
- options: SwaggerUIOptions = {}
338
- ) {
339
- const openAPISpec: OpenAPISpec = {
340
- openapi: '3.0.3',
341
- info,
342
- servers: [{ url: 'http://localhost:3000', description: 'Development server' }],
343
- paths: {},
344
- tags: [],
345
- };
346
-
347
- // This will be enhanced when integrated with the routing system
348
- logger.info('Documentation generated for app', 'AppDocumentation', {
349
- routeCount: routes.length,
350
- title: info.title,
351
- });
352
-
353
- return createDocsMiddleware(openAPISpec, options);
354
- }