@morojs/moro 1.0.0 → 1.0.2

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 (284) hide show
  1. package/README.md +1 -1
  2. package/dist/core/config/index.d.ts +5 -5
  3. package/dist/core/config/index.js +1 -1
  4. package/dist/core/config/index.js.map +1 -1
  5. package/dist/core/config/loader.d.ts +1 -1
  6. package/dist/core/config/loader.js +58 -82
  7. package/dist/core/config/loader.js.map +1 -1
  8. package/dist/core/config/schema.d.ts +1 -1
  9. package/dist/core/config/schema.js +52 -111
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/config/utils.d.ts +2 -2
  12. package/dist/core/config/utils.js +18 -18
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  15. package/dist/core/database/adapters/drizzle.js +39 -55
  16. package/dist/core/database/adapters/drizzle.js.map +1 -1
  17. package/dist/core/database/adapters/index.d.ts +7 -7
  18. package/dist/core/database/adapters/index.js +11 -11
  19. package/dist/core/database/adapters/index.js.map +1 -1
  20. package/dist/core/database/adapters/mongodb.d.ts +1 -1
  21. package/dist/core/database/adapters/mongodb.js +19 -23
  22. package/dist/core/database/adapters/mongodb.js.map +1 -1
  23. package/dist/core/database/adapters/mysql.d.ts +1 -1
  24. package/dist/core/database/adapters/mysql.js +31 -27
  25. package/dist/core/database/adapters/mysql.js.map +1 -1
  26. package/dist/core/database/adapters/postgresql.d.ts +1 -1
  27. package/dist/core/database/adapters/postgresql.js +27 -35
  28. package/dist/core/database/adapters/postgresql.js.map +1 -1
  29. package/dist/core/database/adapters/redis.d.ts +1 -1
  30. package/dist/core/database/adapters/redis.js +24 -24
  31. package/dist/core/database/adapters/redis.js.map +1 -1
  32. package/dist/core/database/adapters/sqlite.d.ts +1 -1
  33. package/dist/core/database/adapters/sqlite.js +36 -36
  34. package/dist/core/database/adapters/sqlite.js.map +1 -1
  35. package/dist/core/database/index.d.ts +2 -2
  36. package/dist/core/docs/index.d.ts +7 -7
  37. package/dist/core/docs/index.js +13 -15
  38. package/dist/core/docs/index.js.map +1 -1
  39. package/dist/core/docs/openapi-generator.d.ts +5 -5
  40. package/dist/core/docs/openapi-generator.js +93 -94
  41. package/dist/core/docs/openapi-generator.js.map +1 -1
  42. package/dist/core/docs/simple-docs.d.ts +1 -1
  43. package/dist/core/docs/simple-docs.js +25 -28
  44. package/dist/core/docs/simple-docs.js.map +1 -1
  45. package/dist/core/docs/swagger-ui.d.ts +2 -2
  46. package/dist/core/docs/swagger-ui.js +46 -51
  47. package/dist/core/docs/swagger-ui.js.map +1 -1
  48. package/dist/core/docs/zod-to-openapi.d.ts +1 -1
  49. package/dist/core/docs/zod-to-openapi.js +115 -125
  50. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  51. package/dist/core/events/event-bus.d.ts +1 -1
  52. package/dist/core/events/event-bus.js +15 -21
  53. package/dist/core/events/event-bus.js.map +1 -1
  54. package/dist/core/events/index.d.ts +2 -2
  55. package/dist/core/framework.d.ts +5 -5
  56. package/dist/core/framework.js +55 -60
  57. package/dist/core/framework.js.map +1 -1
  58. package/dist/core/http/http-server.d.ts +2 -2
  59. package/dist/core/http/http-server.js +228 -261
  60. package/dist/core/http/http-server.js.map +1 -1
  61. package/dist/core/http/index.d.ts +3 -3
  62. package/dist/core/http/router.d.ts +1 -1
  63. package/dist/core/http/router.js +15 -17
  64. package/dist/core/http/router.js.map +1 -1
  65. package/dist/core/logger/filters.d.ts +1 -1
  66. package/dist/core/logger/filters.js +16 -16
  67. package/dist/core/logger/filters.js.map +1 -1
  68. package/dist/core/logger/index.d.ts +3 -3
  69. package/dist/core/logger/logger.d.ts +1 -1
  70. package/dist/core/logger/logger.js +48 -59
  71. package/dist/core/logger/logger.js.map +1 -1
  72. package/dist/core/logger/outputs.d.ts +4 -4
  73. package/dist/core/logger/outputs.js +16 -20
  74. package/dist/core/logger/outputs.js.map +1 -1
  75. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  76. package/dist/core/middleware/built-in/adapters/cache/file.js +19 -19
  77. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  78. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  79. package/dist/core/middleware/built-in/adapters/cache/index.js +3 -3
  80. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  81. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  82. package/dist/core/middleware/built-in/adapters/cache/memory.js +5 -5
  83. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  84. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -1
  85. package/dist/core/middleware/built-in/adapters/cache/redis.js +18 -18
  86. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  87. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  88. package/dist/core/middleware/built-in/adapters/cdn/azure.js +8 -8
  89. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  90. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  91. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +14 -14
  92. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  93. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -1
  94. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +13 -15
  95. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  97. package/dist/core/middleware/built-in/adapters/cdn/index.js +3 -3
  98. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  99. package/dist/core/middleware/built-in/auth.d.ts +1 -1
  100. package/dist/core/middleware/built-in/auth.js +14 -14
  101. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  102. package/dist/core/middleware/built-in/cache.js +43 -45
  103. package/dist/core/middleware/built-in/cache.js.map +1 -1
  104. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  105. package/dist/core/middleware/built-in/cdn.js +27 -29
  106. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  107. package/dist/core/middleware/built-in/cookie.d.ts +2 -2
  108. package/dist/core/middleware/built-in/cookie.js +17 -17
  109. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  110. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  111. package/dist/core/middleware/built-in/cors.js +13 -13
  112. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  113. package/dist/core/middleware/built-in/csp.js +22 -25
  114. package/dist/core/middleware/built-in/csp.js.map +1 -1
  115. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  116. package/dist/core/middleware/built-in/csrf.js +21 -24
  117. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  118. package/dist/core/middleware/built-in/error-tracker.js +2 -2
  119. package/dist/core/middleware/built-in/index.d.ts +14 -14
  120. package/dist/core/middleware/built-in/performance-monitor.js +2 -2
  121. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  122. package/dist/core/middleware/built-in/rate-limit.js +12 -12
  123. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  124. package/dist/core/middleware/built-in/session.d.ts +5 -5
  125. package/dist/core/middleware/built-in/session.js +35 -38
  126. package/dist/core/middleware/built-in/session.js.map +1 -1
  127. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  128. package/dist/core/middleware/built-in/sse.js +20 -22
  129. package/dist/core/middleware/built-in/sse.js.map +1 -1
  130. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  131. package/dist/core/middleware/built-in/validation.js +13 -13
  132. package/dist/core/middleware/index.d.ts +5 -5
  133. package/dist/core/middleware/index.js +16 -16
  134. package/dist/core/middleware/index.js.map +1 -1
  135. package/dist/core/modules/auto-discovery.d.ts +2 -2
  136. package/dist/core/modules/auto-discovery.js +12 -13
  137. package/dist/core/modules/auto-discovery.js.map +1 -1
  138. package/dist/core/modules/index.d.ts +2 -2
  139. package/dist/core/modules/index.js.map +1 -1
  140. package/dist/core/modules/modules.d.ts +3 -3
  141. package/dist/core/modules/modules.js +3 -6
  142. package/dist/core/modules/modules.js.map +1 -1
  143. package/dist/core/networking/index.d.ts +2 -2
  144. package/dist/core/networking/index.js.map +1 -1
  145. package/dist/core/networking/service-discovery.d.ts +2 -2
  146. package/dist/core/networking/service-discovery.js +27 -27
  147. package/dist/core/networking/service-discovery.js.map +1 -1
  148. package/dist/core/networking/websocket-manager.d.ts +3 -3
  149. package/dist/core/networking/websocket-manager.js +15 -16
  150. package/dist/core/networking/websocket-manager.js.map +1 -1
  151. package/dist/core/routing/app-integration.d.ts +2 -2
  152. package/dist/core/routing/app-integration.js +13 -13
  153. package/dist/core/routing/app-integration.js.map +1 -1
  154. package/dist/core/routing/index.d.ts +3 -3
  155. package/dist/core/routing/index.js +43 -52
  156. package/dist/core/routing/index.js.map +1 -1
  157. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  158. package/dist/core/runtime/aws-lambda-adapter.js +14 -16
  159. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  160. package/dist/core/runtime/base-adapter.d.ts +2 -2
  161. package/dist/core/runtime/base-adapter.js +11 -12
  162. package/dist/core/runtime/base-adapter.js.map +1 -1
  163. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  164. package/dist/core/runtime/cloudflare-workers-adapter.js +20 -21
  165. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  166. package/dist/core/runtime/index.d.ts +9 -9
  167. package/dist/core/runtime/index.js +4 -4
  168. package/dist/core/runtime/index.js.map +1 -1
  169. package/dist/core/runtime/node-adapter.d.ts +5 -5
  170. package/dist/core/runtime/node-adapter.js +35 -35
  171. package/dist/core/runtime/node-adapter.js.map +1 -1
  172. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  173. package/dist/core/runtime/vercel-edge-adapter.js +12 -15
  174. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  175. package/dist/core/utilities/circuit-breaker.js +6 -6
  176. package/dist/core/utilities/container.d.ts +1 -1
  177. package/dist/core/utilities/container.js +17 -22
  178. package/dist/core/utilities/container.js.map +1 -1
  179. package/dist/core/utilities/hooks.d.ts +3 -3
  180. package/dist/core/utilities/hooks.js +11 -11
  181. package/dist/core/utilities/hooks.js.map +1 -1
  182. package/dist/core/utilities/index.d.ts +4 -4
  183. package/dist/core/validation/index.d.ts +3 -3
  184. package/dist/core/validation/index.js +15 -15
  185. package/dist/core/validation/index.js.map +1 -1
  186. package/dist/index.d.ts +41 -30
  187. package/dist/index.js +50 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/moro.d.ts +14 -14
  190. package/dist/moro.js +79 -88
  191. package/dist/moro.js.map +1 -1
  192. package/dist/types/cache.d.ts +1 -1
  193. package/dist/types/core.d.ts +2 -2
  194. package/dist/types/events.d.ts +19 -19
  195. package/dist/types/hooks.d.ts +1 -1
  196. package/dist/types/http.d.ts +2 -2
  197. package/dist/types/logger.d.ts +3 -3
  198. package/dist/types/module.d.ts +2 -2
  199. package/dist/types/runtime.d.ts +2 -2
  200. package/dist/types/session.d.ts +4 -4
  201. package/package.json +183 -165
  202. package/src/core/config/index.ts +7 -9
  203. package/src/core/config/loader.ts +86 -158
  204. package/src/core/config/schema.ts +59 -122
  205. package/src/core/config/utils.ts +27 -45
  206. package/src/core/database/adapters/drizzle.ts +53 -75
  207. package/src/core/database/adapters/index.ts +26 -29
  208. package/src/core/database/adapters/mongodb.ts +31 -54
  209. package/src/core/database/adapters/mysql.ts +40 -50
  210. package/src/core/database/adapters/postgresql.ts +32 -42
  211. package/src/core/database/adapters/redis.ts +31 -36
  212. package/src/core/database/adapters/sqlite.ts +43 -51
  213. package/src/core/database/index.ts +2 -2
  214. package/src/core/docs/index.ts +25 -39
  215. package/src/core/docs/openapi-generator.ts +104 -117
  216. package/src/core/docs/simple-docs.ts +29 -39
  217. package/src/core/docs/swagger-ui.ts +57 -76
  218. package/src/core/docs/zod-to-openapi.ts +121 -153
  219. package/src/core/events/event-bus.ts +22 -45
  220. package/src/core/events/index.ts +2 -2
  221. package/src/core/framework.ts +119 -197
  222. package/src/core/http/http-server.ts +260 -360
  223. package/src/core/http/index.ts +3 -8
  224. package/src/core/http/router.ts +19 -31
  225. package/src/core/logger/filters.ts +19 -22
  226. package/src/core/logger/index.ts +3 -3
  227. package/src/core/logger/logger.ts +59 -100
  228. package/src/core/logger/outputs.ts +23 -27
  229. package/src/core/middleware/built-in/adapters/cache/file.ts +21 -23
  230. package/src/core/middleware/built-in/adapters/cache/index.ts +11 -14
  231. package/src/core/middleware/built-in/adapters/cache/memory.ts +7 -7
  232. package/src/core/middleware/built-in/adapters/cache/redis.ts +21 -24
  233. package/src/core/middleware/built-in/adapters/cdn/azure.ts +10 -18
  234. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +19 -36
  235. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +17 -26
  236. package/src/core/middleware/built-in/adapters/cdn/index.ts +10 -10
  237. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  238. package/src/core/middleware/built-in/auth.ts +16 -16
  239. package/src/core/middleware/built-in/cache.ts +50 -67
  240. package/src/core/middleware/built-in/cdn.ts +34 -61
  241. package/src/core/middleware/built-in/cookie.ts +23 -28
  242. package/src/core/middleware/built-in/cors.ts +17 -17
  243. package/src/core/middleware/built-in/csp.ts +25 -31
  244. package/src/core/middleware/built-in/csrf.ts +24 -29
  245. package/src/core/middleware/built-in/error-tracker.ts +3 -3
  246. package/src/core/middleware/built-in/index.ts +28 -28
  247. package/src/core/middleware/built-in/performance-monitor.ts +4 -4
  248. package/src/core/middleware/built-in/rate-limit.ts +15 -15
  249. package/src/core/middleware/built-in/request-logger.ts +1 -3
  250. package/src/core/middleware/built-in/session.ts +47 -70
  251. package/src/core/middleware/built-in/sse.ts +23 -28
  252. package/src/core/middleware/built-in/validation.ts +15 -15
  253. package/src/core/middleware/index.ts +26 -37
  254. package/src/core/modules/auto-discovery.ts +21 -31
  255. package/src/core/modules/index.ts +2 -5
  256. package/src/core/modules/modules.ts +11 -20
  257. package/src/core/networking/index.ts +2 -6
  258. package/src/core/networking/service-discovery.ts +41 -61
  259. package/src/core/networking/websocket-manager.ts +27 -36
  260. package/src/core/routing/app-integration.ts +19 -32
  261. package/src/core/routing/index.ts +57 -88
  262. package/src/core/runtime/aws-lambda-adapter.ts +20 -30
  263. package/src/core/runtime/base-adapter.ts +17 -27
  264. package/src/core/runtime/cloudflare-workers-adapter.ts +28 -42
  265. package/src/core/runtime/index.ts +21 -33
  266. package/src/core/runtime/node-adapter.ts +59 -73
  267. package/src/core/runtime/vercel-edge-adapter.ts +18 -29
  268. package/src/core/utilities/circuit-breaker.ts +7 -7
  269. package/src/core/utilities/container.ts +52 -89
  270. package/src/core/utilities/hooks.ts +17 -23
  271. package/src/core/utilities/index.ts +4 -4
  272. package/src/core/validation/index.ts +25 -51
  273. package/src/index.ts +104 -60
  274. package/src/moro.ts +119 -191
  275. package/src/types/cache.ts +1 -1
  276. package/src/types/core.ts +2 -2
  277. package/src/types/database.ts +2 -10
  278. package/src/types/events.ts +23 -31
  279. package/src/types/hooks.ts +1 -1
  280. package/src/types/http.ts +5 -8
  281. package/src/types/logger.ts +7 -23
  282. package/src/types/module.ts +2 -2
  283. package/src/types/runtime.ts +6 -21
  284. package/src/types/session.ts +4 -4
@@ -1,13 +1,13 @@
1
1
  // Swagger UI Integration for Moro Framework
2
2
  // Serves interactive API documentation using Swagger UI
3
3
 
4
- import { readFileSync } from "fs";
5
- import { join } from "path";
6
- import { HttpRequest, HttpResponse } from "../http";
7
- import { OpenAPISpec } from "./openapi-generator";
8
- import { createFrameworkLogger } from "../logger";
4
+ import { readFileSync } from 'fs';
5
+ import { join } from 'path';
6
+ import { HttpRequest, HttpResponse } from '../http';
7
+ import { OpenAPISpec } from './openapi-generator';
8
+ import { createFrameworkLogger } from '../logger';
9
9
 
10
- const logger = createFrameworkLogger("SwaggerUI");
10
+ const logger = createFrameworkLogger('SwaggerUI');
11
11
 
12
12
  // Swagger UI configuration options
13
13
  export interface SwaggerUIOptions {
@@ -30,18 +30,15 @@ export class SwaggerUIMiddleware {
30
30
  constructor(openAPISpec: OpenAPISpec, options: SwaggerUIOptions = {}) {
31
31
  this.openAPISpec = openAPISpec;
32
32
  this.options = {
33
- title: "API Documentation",
33
+ title: 'API Documentation',
34
34
  enableTryItOut: true,
35
35
  enableFilter: true,
36
36
  enableDeepLinking: true,
37
37
  swaggerOptions: {
38
- dom_id: "#swagger-ui",
39
- presets: [
40
- "SwaggerUIBundle.presets.apis",
41
- "SwaggerUIBundle.presets.standalone",
42
- ],
43
- plugins: ["SwaggerUIBundle.plugins.DownloadUrl"],
44
- layout: "StandaloneLayout",
38
+ dom_id: '#swagger-ui',
39
+ presets: ['SwaggerUIBundle.presets.apis', 'SwaggerUIBundle.presets.standalone'],
40
+ plugins: ['SwaggerUIBundle.plugins.DownloadUrl'],
41
+ layout: 'StandaloneLayout',
45
42
  },
46
43
  ...options,
47
44
  };
@@ -49,17 +46,17 @@ export class SwaggerUIMiddleware {
49
46
  try {
50
47
  // Find swagger-ui-dist assets
51
48
  this.swaggerUIAssetPath = require
52
- .resolve("swagger-ui-dist/package.json")
53
- .replace("/package.json", "");
54
- logger.debug("Swagger UI assets found", "Initialization", {
49
+ .resolve('swagger-ui-dist/package.json')
50
+ .replace('/package.json', '');
51
+ logger.debug('Swagger UI assets found', 'Initialization', {
55
52
  assetPath: this.swaggerUIAssetPath,
56
53
  });
57
54
  } catch (error) {
58
- logger.error("Failed to locate Swagger UI assets", "Initialization", {
55
+ logger.error('Failed to locate Swagger UI assets', 'Initialization', {
59
56
  error: error instanceof Error ? error.message : String(error),
60
57
  });
61
58
  throw new Error(
62
- "swagger-ui-dist package not found. Install with: npm install swagger-ui-dist",
59
+ 'swagger-ui-dist package not found. Install with: npm install swagger-ui-dist'
63
60
  );
64
61
  }
65
62
  }
@@ -108,9 +105,9 @@ export class SwaggerUIMiddleware {
108
105
  font-family: monospace;
109
106
  color: #c62828;
110
107
  }
111
- ${this.options.customCss || ""}
108
+ ${this.options.customCss || ''}
112
109
  </style>
113
- ${this.options.favicon ? `<link rel="icon" type="image/png" href="${this.options.favicon}" sizes="32x32" />` : ""}
110
+ ${this.options.favicon ? `<link rel="icon" type="image/png" href="${this.options.favicon}" sizes="32x32" />` : ''}
114
111
  </head>
115
112
  <body>
116
113
  <div id="loading-message">
@@ -212,98 +209,87 @@ export class SwaggerUIMiddleware {
212
209
  }
213
210
 
214
211
  // Create middleware function that serves Swagger UI
215
- createMiddleware(basePath: string = "/docs") {
212
+ createMiddleware(basePath: string = '/docs') {
216
213
  return (req: HttpRequest, res: HttpResponse, next: () => void) => {
217
214
  const path = req.path;
218
215
 
219
- logger.debug(`Docs middleware handling: ${path}`, "DocsMiddleware", {
216
+ logger.debug(`Docs middleware handling: ${path}`, 'DocsMiddleware', {
220
217
  basePath,
221
218
  });
222
219
 
223
220
  // Serve the main HTML page
224
221
  if (path === basePath || path === `${basePath}/`) {
225
- logger.debug("Serving Swagger UI HTML", "DocsServing");
222
+ logger.debug('Serving Swagger UI HTML', 'DocsServing');
226
223
 
227
224
  // Set CSP headers to allow Swagger UI to work
228
225
  res.setHeader(
229
- "Content-Security-Policy",
226
+ 'Content-Security-Policy',
230
227
  "default-src 'self'; " +
231
228
  "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " +
232
229
  "style-src 'self' 'unsafe-inline'; " +
233
230
  "img-src 'self' data: https:; " +
234
231
  "font-src 'self' data:; " +
235
- "connect-src 'self'",
232
+ "connect-src 'self'"
236
233
  );
237
234
 
238
- res.setHeader("Content-Type", "text/html; charset=utf-8");
235
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
239
236
  res.send(this.generateHTML(basePath));
240
237
  return;
241
238
  }
242
239
 
243
240
  // Serve the OpenAPI JSON spec
244
241
  if (path === `${basePath}/openapi.json`) {
245
- logger.debug("Serving OpenAPI JSON spec", "DocsServing");
246
- res.setHeader("Content-Type", "application/json");
242
+ logger.debug('Serving OpenAPI JSON spec', 'DocsServing');
243
+ res.setHeader('Content-Type', 'application/json');
247
244
  res.json(this.openAPISpec);
248
245
  return;
249
246
  }
250
247
 
251
248
  // Serve Swagger UI assets
252
249
  if (path.startsWith(`${basePath}/`)) {
253
- const assetName = path.replace(`${basePath}/`, "");
250
+ const assetName = path.replace(`${basePath}/`, '');
254
251
 
255
- logger.debug(
256
- `Attempting to serve asset: ${assetName}`,
257
- "AssetServing",
258
- {
259
- fullPath: path,
260
- basePath,
261
- assetPath: this.swaggerUIAssetPath,
262
- },
263
- );
252
+ logger.debug(`Attempting to serve asset: ${assetName}`, 'AssetServing', {
253
+ fullPath: path,
254
+ basePath,
255
+ assetPath: this.swaggerUIAssetPath,
256
+ });
264
257
 
265
258
  // Security: only allow specific asset files
266
259
  const allowedAssets = [
267
- "swagger-ui-bundle.js",
268
- "swagger-ui.css",
269
- "swagger-ui-standalone-preset.js",
270
- "favicon-16x16.png",
271
- "favicon-32x32.png",
260
+ 'swagger-ui-bundle.js',
261
+ 'swagger-ui.css',
262
+ 'swagger-ui-standalone-preset.js',
263
+ 'favicon-16x16.png',
264
+ 'favicon-32x32.png',
272
265
  ];
273
266
 
274
267
  if (allowedAssets.includes(assetName)) {
275
268
  try {
276
269
  const assetPath = join(this.swaggerUIAssetPath, assetName);
277
- logger.debug(`Reading asset from: ${assetPath}`, "AssetServing");
270
+ logger.debug(`Reading asset from: ${assetPath}`, 'AssetServing');
278
271
 
279
272
  const content = readFileSync(assetPath);
280
273
 
281
274
  // Set appropriate content type
282
275
  const contentType = this.getContentType(assetName);
283
- res.setHeader("Content-Type", contentType);
284
- res.setHeader("Cache-Control", "public, max-age=86400"); // Cache for 1 day
276
+ res.setHeader('Content-Type', contentType);
277
+ res.setHeader('Cache-Control', 'public, max-age=86400'); // Cache for 1 day
285
278
 
286
- logger.debug(
287
- `Serving asset: ${assetName} (${content.length} bytes)`,
288
- "AssetServing",
289
- );
279
+ logger.debug(`Serving asset: ${assetName} (${content.length} bytes)`, 'AssetServing');
290
280
  res.send(content);
291
281
  return;
292
282
  } catch (error) {
293
- logger.error(
294
- `Failed to serve Swagger UI asset: ${assetName}`,
295
- "AssetServing",
296
- {
297
- error: error instanceof Error ? error.message : String(error),
298
- assetPath: join(this.swaggerUIAssetPath, assetName),
299
- },
300
- );
283
+ logger.error(`Failed to serve Swagger UI asset: ${assetName}`, 'AssetServing', {
284
+ error: error instanceof Error ? error.message : String(error),
285
+ assetPath: join(this.swaggerUIAssetPath, assetName),
286
+ });
301
287
  res.status(404);
302
288
  res.send(`Asset not found: ${assetName}`);
303
289
  return;
304
290
  }
305
291
  } else {
306
- logger.warn(`Asset not allowed: ${assetName}`, "AssetServing", {
292
+ logger.warn(`Asset not allowed: ${assetName}`, 'AssetServing', {
307
293
  allowedAssets,
308
294
  });
309
295
  res.status(404);
@@ -319,27 +305,24 @@ export class SwaggerUIMiddleware {
319
305
 
320
306
  // Get content type for asset files
321
307
  private getContentType(filename: string): string {
322
- if (filename.endsWith(".js")) return "application/javascript";
323
- if (filename.endsWith(".css")) return "text/css";
324
- if (filename.endsWith(".png")) return "image/png";
325
- if (filename.endsWith(".ico")) return "image/x-icon";
326
- return "text/plain";
308
+ if (filename.endsWith('.js')) return 'application/javascript';
309
+ if (filename.endsWith('.css')) return 'text/css';
310
+ if (filename.endsWith('.png')) return 'image/png';
311
+ if (filename.endsWith('.ico')) return 'image/x-icon';
312
+ return 'text/plain';
327
313
  }
328
314
 
329
315
  // Update the OpenAPI spec (useful for dynamic updates)
330
316
  updateSpec(newSpec: OpenAPISpec): void {
331
317
  this.openAPISpec = newSpec;
332
- logger.debug("OpenAPI specification updated", "SpecUpdate", {
318
+ logger.debug('OpenAPI specification updated', 'SpecUpdate', {
333
319
  pathCount: Object.keys(newSpec.paths).length,
334
320
  });
335
321
  }
336
322
  }
337
323
 
338
324
  // Convenience function to create documentation middleware
339
- export function createDocsMiddleware(
340
- openAPISpec: OpenAPISpec,
341
- options: SwaggerUIOptions = {},
342
- ) {
325
+ export function createDocsMiddleware(openAPISpec: OpenAPISpec, options: SwaggerUIOptions = {}) {
343
326
  const middleware = new SwaggerUIMiddleware(openAPISpec, options);
344
327
  return middleware.createMiddleware();
345
328
  }
@@ -348,20 +331,18 @@ export function createDocsMiddleware(
348
331
  export function generateDocsForApp(
349
332
  routes: any[],
350
333
  info: { title: string; version: string; description?: string },
351
- options: SwaggerUIOptions = {},
334
+ options: SwaggerUIOptions = {}
352
335
  ) {
353
336
  const openAPISpec: OpenAPISpec = {
354
- openapi: "3.0.3",
337
+ openapi: '3.0.3',
355
338
  info,
356
- servers: [
357
- { url: "http://localhost:3000", description: "Development server" },
358
- ],
339
+ servers: [{ url: 'http://localhost:3000', description: 'Development server' }],
359
340
  paths: {},
360
341
  tags: [],
361
342
  };
362
343
 
363
344
  // This will be enhanced when integrated with the routing system
364
- logger.info("Documentation generated for app", "AppDocumentation", {
345
+ logger.info('Documentation generated for app', 'AppDocumentation', {
365
346
  routeCount: routes.length,
366
347
  title: info.title,
367
348
  });