@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,8 +1,8 @@
1
1
  // AWS CloudFront CDN Adapter
2
- import { CDNAdapter } from "../../../../../types/cdn";
3
- import { createFrameworkLogger } from "../../../../logger";
2
+ import { CDNAdapter } from '../../../../../types/cdn';
3
+ import { createFrameworkLogger } from '../../../../logger';
4
4
 
5
- const logger = createFrameworkLogger("CloudFrontCDNAdapter");
5
+ const logger = createFrameworkLogger('CloudFrontCDNAdapter');
6
6
 
7
7
  export class CloudFrontCDNAdapter implements CDNAdapter {
8
8
  private cloudfront: any;
@@ -17,7 +17,7 @@ export class CloudFrontCDNAdapter implements CDNAdapter {
17
17
  this.distributionId = options.distributionId;
18
18
 
19
19
  try {
20
- const AWS = require("aws-sdk");
20
+ const AWS = require('aws-sdk');
21
21
  AWS.config.update({
22
22
  accessKeyId: options.accessKeyId,
23
23
  secretAccessKey: options.secretAccessKey,
@@ -25,10 +25,10 @@ export class CloudFrontCDNAdapter implements CDNAdapter {
25
25
  });
26
26
 
27
27
  this.cloudfront = new AWS.CloudFront();
28
- logger.info("CloudFront CDN adapter initialized", "CloudFront");
28
+ logger.info('CloudFront CDN adapter initialized', 'CloudFront');
29
29
  } catch (error) {
30
- logger.error("AWS SDK not available", "CloudFront");
31
- throw new Error("AWS SDK not installed. Run: npm install aws-sdk");
30
+ logger.error('AWS SDK not available', 'CloudFront');
31
+ throw new Error('AWS SDK not installed. Run: npm install aws-sdk');
32
32
  }
33
33
  }
34
34
 
@@ -40,39 +40,30 @@ export class CloudFrontCDNAdapter implements CDNAdapter {
40
40
  CallerReference: `moro-${Date.now()}`,
41
41
  Paths: {
42
42
  Quantity: urls.length,
43
- Items: urls.map((url) => (url.startsWith("/") ? url : `/${url}`)),
43
+ Items: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
44
44
  },
45
45
  },
46
46
  };
47
47
 
48
48
  const result = await this.cloudfront.createInvalidation(params).promise();
49
- logger.info(
50
- `CloudFront cache purged: ${urls.length} URLs`,
51
- "CloudFront",
52
- {
53
- invalidationId: result.Invalidation.Id,
54
- },
55
- );
49
+ logger.info(`CloudFront cache purged: ${urls.length} URLs`, 'CloudFront', {
50
+ invalidationId: result.Invalidation.Id,
51
+ });
56
52
  } catch (error) {
57
- logger.error("CloudFront purge failed", "CloudFront", { error, urls });
53
+ logger.error('CloudFront purge failed', 'CloudFront', { error, urls });
58
54
  throw error;
59
55
  }
60
56
  }
61
57
 
62
58
  async prefetch(urls: string[]): Promise<void> {
63
- logger.debug(
64
- `CloudFront prefetch requested for ${urls.length} URLs`,
65
- "CloudFront",
66
- );
59
+ logger.debug(`CloudFront prefetch requested for ${urls.length} URLs`, 'CloudFront');
67
60
  // CloudFront doesn't have direct prefetch, but we can simulate with requests
68
61
  }
69
62
 
70
63
  async getStats(): Promise<any> {
71
64
  try {
72
65
  const params = { Id: this.distributionId };
73
- const distribution = await this.cloudfront
74
- .getDistribution(params)
75
- .promise();
66
+ const distribution = await this.cloudfront.getDistribution(params).promise();
76
67
 
77
68
  return {
78
69
  status: distribution.Distribution.Status,
@@ -80,13 +71,13 @@ export class CloudFrontCDNAdapter implements CDNAdapter {
80
71
  enabled: distribution.Distribution.DistributionConfig.Enabled,
81
72
  };
82
73
  } catch (error) {
83
- logger.error("CloudFront stats failed", "CloudFront", { error });
74
+ logger.error('CloudFront stats failed', 'CloudFront', { error });
84
75
  return null;
85
76
  }
86
77
  }
87
78
 
88
79
  setHeaders(response: any): void {
89
- response.setHeader("Cache-Control", "public, max-age=3600");
90
- response.setHeader("CloudFront-Viewer-Country", "US");
80
+ response.setHeader('Cache-Control', 'public, max-age=3600');
81
+ response.setHeader('CloudFront-Viewer-Country', 'US');
91
82
  }
92
83
  }
@@ -1,21 +1,21 @@
1
1
  // CDN Adapters
2
- export { CloudflareCDNAdapter } from "./cloudflare";
3
- export { CloudFrontCDNAdapter } from "./cloudfront";
4
- export { AzureCDNAdapter } from "./azure";
2
+ export { CloudflareCDNAdapter } from './cloudflare';
3
+ export { CloudFrontCDNAdapter } from './cloudfront';
4
+ export { AzureCDNAdapter } from './azure';
5
5
 
6
- import { CloudflareCDNAdapter } from "./cloudflare";
7
- import { CloudFrontCDNAdapter } from "./cloudfront";
8
- import { AzureCDNAdapter } from "./azure";
9
- import { CDNAdapter } from "../../../../../types/cdn";
6
+ import { CloudflareCDNAdapter } from './cloudflare';
7
+ import { CloudFrontCDNAdapter } from './cloudfront';
8
+ import { AzureCDNAdapter } from './azure';
9
+ import { CDNAdapter } from '../../../../../types/cdn';
10
10
 
11
11
  // Adapter factory function for auto-loading
12
12
  export function createCDNAdapter(type: string, options: any = {}): CDNAdapter {
13
13
  switch (type.toLowerCase()) {
14
- case "cloudflare":
14
+ case 'cloudflare':
15
15
  return new CloudflareCDNAdapter(options);
16
- case "cloudfront":
16
+ case 'cloudfront':
17
17
  return new CloudFrontCDNAdapter(options);
18
- case "azure":
18
+ case 'azure':
19
19
  return new AzureCDNAdapter(options);
20
20
  default:
21
21
  throw new Error(`Unknown CDN adapter type: ${type}`);
@@ -1,7 +1,7 @@
1
1
  // Adapters Index
2
- export * from "./cache";
3
- export * from "./cdn";
2
+ export * from './cache';
3
+ export * from './cdn';
4
4
 
5
5
  // Re-export factory functions for convenience
6
- export { createCacheAdapter } from "./cache";
7
- export { createCDNAdapter } from "./cdn";
6
+ export { createCacheAdapter } from './cache';
7
+ export { createCDNAdapter } from './cdn';
@@ -1,37 +1,37 @@
1
1
  // Authentication Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
4
 
5
- const logger = createFrameworkLogger("AuthMiddleware");
5
+ const logger = createFrameworkLogger('AuthMiddleware');
6
6
 
7
7
  export const auth = (options: any = {}): MiddlewareInterface => ({
8
- name: "auth",
9
- version: "1.0.0",
8
+ name: 'auth',
9
+ version: '1.0.0',
10
10
  metadata: {
11
- name: "auth",
12
- version: "1.0.0",
13
- description: "JWT authentication middleware with token validation",
14
- author: "MoroJS Team",
11
+ name: 'auth',
12
+ version: '1.0.0',
13
+ description: 'JWT authentication middleware with token validation',
14
+ author: 'MoroJS Team',
15
15
  },
16
16
 
17
17
  install: async (hooks: any, options: any = {}) => {
18
- logger.debug(`Installing auth middleware with options`, "Installation", {
18
+ logger.debug(`Installing auth middleware with options`, 'Installation', {
19
19
  options,
20
20
  });
21
21
 
22
- hooks.before("request", async (context: HookContext) => {
22
+ hooks.before('request', async (context: HookContext) => {
23
23
  const req = context.request as any;
24
- const token = req.headers?.authorization?.replace("Bearer ", "");
24
+ const token = req.headers?.authorization?.replace('Bearer ', '');
25
25
 
26
26
  if (token) {
27
27
  try {
28
28
  // Simple token validation (in production, use proper JWT verification)
29
- if (token.startsWith("valid_")) {
30
- req.user = { id: 1, role: "user" };
31
- logger.debug(`Auth: Verified token for request`, "TokenValidation");
29
+ if (token.startsWith('valid_')) {
30
+ req.user = { id: 1, role: 'user' };
31
+ logger.debug(`Auth: Verified token for request`, 'TokenValidation');
32
32
  }
33
33
  } catch (error) {
34
- throw new Error("Invalid token");
34
+ throw new Error('Invalid token');
35
35
  }
36
36
  }
37
37
  });
@@ -1,50 +1,39 @@
1
1
  // Built-in Cache Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import {
4
- CacheAdapter,
5
- CacheOptions,
6
- CachedResponse,
7
- } from "../../../types/cache";
8
- import { createFrameworkLogger } from "../../logger";
9
- import { createCacheAdapter } from "./adapters/cache";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { CacheAdapter, CacheOptions, CachedResponse } from '../../../types/cache';
4
+ import { createFrameworkLogger } from '../../logger';
5
+ import { createCacheAdapter } from './adapters/cache';
10
6
 
11
- const logger = createFrameworkLogger("CacheMiddleware");
7
+ const logger = createFrameworkLogger('CacheMiddleware');
12
8
 
13
9
  export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
14
- name: "cache",
15
- version: "1.0.0",
10
+ name: 'cache',
11
+ version: '1.0.0',
16
12
  metadata: {
17
- name: "cache",
18
- version: "1.0.0",
19
- description: "Built-in cache middleware with pluggable storage adapters",
20
- author: "MoroJS Team",
13
+ name: 'cache',
14
+ version: '1.0.0',
15
+ description: 'Built-in cache middleware with pluggable storage adapters',
16
+ author: 'MoroJS Team',
21
17
  },
22
18
 
23
19
  install: async (hooks: any, middlewareOptions: any = {}) => {
24
- logger.debug("Installing cache middleware", "Installation");
20
+ logger.debug('Installing cache middleware', 'Installation');
25
21
 
26
22
  // Initialize storage adapter
27
23
  let storageAdapter: CacheAdapter;
28
24
 
29
- if (
30
- options.adapter &&
31
- typeof options.adapter === "object" &&
32
- "get" in options.adapter
33
- ) {
25
+ if (options.adapter && typeof options.adapter === 'object' && 'get' in options.adapter) {
34
26
  storageAdapter = options.adapter as CacheAdapter;
35
- } else if (typeof options.adapter === "string") {
36
- storageAdapter = createCacheAdapter(
37
- options.adapter,
38
- options.adapterOptions,
39
- );
27
+ } else if (typeof options.adapter === 'string') {
28
+ storageAdapter = createCacheAdapter(options.adapter, options.adapterOptions);
40
29
  } else {
41
30
  // Default to memory cache
42
- storageAdapter = createCacheAdapter("memory");
31
+ storageAdapter = createCacheAdapter('memory');
43
32
  }
44
33
 
45
34
  // Cache key generation
46
35
  const generateCacheKey = (req: any, strategy?: any): string => {
47
- const prefix = options.keyPrefix || "moro:cache:";
36
+ const prefix = options.keyPrefix || 'moro:cache:';
48
37
 
49
38
  if (strategy?.key) {
50
39
  return `${prefix}${strategy.key(req)}`;
@@ -52,7 +41,7 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
52
41
 
53
42
  // Default key: method + path + query
54
43
  const query = new URLSearchParams(req.query || {}).toString();
55
- return `${prefix}${req.method}:${req.path}${query ? `?${query}` : ""}`;
44
+ return `${prefix}${req.method}:${req.path}${query ? `?${query}` : ''}`;
56
45
  };
57
46
 
58
47
  // Find matching strategy
@@ -69,12 +58,12 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
69
58
  return undefined;
70
59
  };
71
60
 
72
- hooks.before("request", async (context: HookContext) => {
61
+ hooks.before('request', async (context: HookContext) => {
73
62
  const req = context.request as any;
74
63
  const res = context.response as any;
75
64
 
76
65
  // Only cache GET requests by default
77
- if (req.method !== "GET") {
66
+ if (req.method !== 'GET') {
78
67
  return;
79
68
  }
80
69
 
@@ -91,19 +80,19 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
91
80
  const cachedResponse = await storageAdapter.get(cacheKey);
92
81
 
93
82
  if (cachedResponse) {
94
- logger.debug(`Cache hit: ${cacheKey}`, "CacheHit");
83
+ logger.debug(`Cache hit: ${cacheKey}`, 'CacheHit');
95
84
 
96
85
  // Set cache headers
97
- res.setHeader("X-Cache", "HIT");
98
- res.setHeader("X-Cache-Key", cacheKey);
86
+ res.setHeader('X-Cache', 'HIT');
87
+ res.setHeader('X-Cache-Key', cacheKey);
99
88
 
100
89
  // Set HTTP cache headers
101
90
  if (options.maxAge) {
102
- res.setHeader("Cache-Control", `public, max-age=${options.maxAge}`);
91
+ res.setHeader('Cache-Control', `public, max-age=${options.maxAge}`);
103
92
  }
104
93
 
105
94
  if (options.vary && options.vary.length > 0) {
106
- res.setHeader("Vary", options.vary.join(", "));
95
+ res.setHeader('Vary', options.vary.join(', '));
107
96
  }
108
97
 
109
98
  // Send cached response
@@ -117,7 +106,7 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
117
106
  }
118
107
 
119
108
  if (cachedResponse.contentType) {
120
- res.setHeader("Content-Type", cachedResponse.contentType);
109
+ res.setHeader('Content-Type', cachedResponse.contentType);
121
110
  }
122
111
 
123
112
  res.send(cachedResponse.body);
@@ -127,11 +116,11 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
127
116
  return;
128
117
  }
129
118
 
130
- logger.debug(`Cache miss: ${cacheKey}`, "CacheMiss");
131
- res.setHeader("X-Cache", "MISS");
132
- res.setHeader("X-Cache-Key", cacheKey);
119
+ logger.debug(`Cache miss: ${cacheKey}`, 'CacheMiss');
120
+ res.setHeader('X-Cache', 'MISS');
121
+ res.setHeader('X-Cache-Key', cacheKey);
133
122
  } catch (error) {
134
- logger.error("Cache retrieval error", "CacheError", {
123
+ logger.error('Cache retrieval error', 'CacheError', {
135
124
  error,
136
125
  key: cacheKey,
137
126
  });
@@ -151,17 +140,14 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
151
140
  body,
152
141
  status: res.statusCode,
153
142
  headers: res.getHeaders ? res.getHeaders() : {},
154
- contentType: contentType || res.getHeader("Content-Type"),
143
+ contentType: contentType || res.getHeader('Content-Type'),
155
144
  timestamp: Date.now(),
156
145
  };
157
146
 
158
147
  await storageAdapter.set(cacheKey, cacheData, ttl);
159
- logger.debug(
160
- `Response cached: ${cacheKey} (TTL: ${ttl}s)`,
161
- "CacheSet",
162
- );
148
+ logger.debug(`Response cached: ${cacheKey} (TTL: ${ttl}s)`, 'CacheSet');
163
149
  } catch (error) {
164
- logger.error("Cache storage error", "CacheError", {
150
+ logger.error('Cache storage error', 'CacheError', {
165
151
  error,
166
152
  key: cacheKey,
167
153
  });
@@ -170,7 +156,7 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
170
156
 
171
157
  // Override response methods
172
158
  res.json = function (data: any) {
173
- cacheResponse(data, "application/json");
159
+ cacheResponse(data, 'application/json');
174
160
  return originalJson.call(this, data);
175
161
  };
176
162
 
@@ -190,38 +176,35 @@ export const cache = (options: CacheOptions = {}): MiddlewareInterface => ({
190
176
  res.cacheControl = (directives: any) => {
191
177
  const parts: string[] = [];
192
178
 
193
- if (directives.public) parts.push("public");
194
- if (directives.private) parts.push("private");
195
- if (directives.noCache) parts.push("no-cache");
196
- if (directives.noStore) parts.push("no-store");
197
- if (directives.mustRevalidate) parts.push("must-revalidate");
198
- if (directives.immutable) parts.push("immutable");
199
-
200
- if (typeof directives.maxAge === "number")
201
- parts.push(`max-age=${directives.maxAge}`);
202
- if (typeof directives.staleWhileRevalidate === "number") {
203
- parts.push(
204
- `stale-while-revalidate=${directives.staleWhileRevalidate}`,
205
- );
179
+ if (directives.public) parts.push('public');
180
+ if (directives.private) parts.push('private');
181
+ if (directives.noCache) parts.push('no-cache');
182
+ if (directives.noStore) parts.push('no-store');
183
+ if (directives.mustRevalidate) parts.push('must-revalidate');
184
+ if (directives.immutable) parts.push('immutable');
185
+
186
+ if (typeof directives.maxAge === 'number') parts.push(`max-age=${directives.maxAge}`);
187
+ if (typeof directives.staleWhileRevalidate === 'number') {
188
+ parts.push(`stale-while-revalidate=${directives.staleWhileRevalidate}`);
206
189
  }
207
190
 
208
- res.setHeader("Cache-Control", parts.join(", "));
191
+ res.setHeader('Cache-Control', parts.join(', '));
209
192
  return res;
210
193
  };
211
194
 
212
195
  // Add ETag generation
213
196
  if (options.etag !== false) {
214
197
  res.generateETag = (content: string | Buffer) => {
215
- const crypto = require("crypto");
216
- const hash = crypto.createHash("md5").update(content).digest("hex");
217
- const prefix = options.etag === "weak" ? "W/" : "";
198
+ const crypto = require('crypto');
199
+ const hash = crypto.createHash('md5').update(content).digest('hex');
200
+ const prefix = options.etag === 'weak' ? 'W/' : '';
218
201
  return `${prefix}"${hash}"`;
219
202
  };
220
203
  }
221
204
  });
222
205
 
223
- logger.info("Cache middleware installed", "Installation", {
224
- adapter: typeof options.adapter === "string" ? options.adapter : "custom",
206
+ logger.info('Cache middleware installed', 'Installation', {
207
+ adapter: typeof options.adapter === 'string' ? options.adapter : 'custom',
225
208
  strategies: Object.keys(options.strategies || {}).length,
226
209
  });
227
210
  },
@@ -1,46 +1,39 @@
1
1
  // Built-in CDN Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { CDNAdapter, CDNOptions } from "../../../types/cdn";
4
- import { createFrameworkLogger } from "../../logger";
5
- import { createCDNAdapter } from "./adapters/cdn";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { CDNAdapter, CDNOptions } from '../../../types/cdn';
4
+ import { createFrameworkLogger } from '../../logger';
5
+ import { createCDNAdapter } from './adapters/cdn';
6
6
 
7
- const logger = createFrameworkLogger("CDNMiddleware");
7
+ const logger = createFrameworkLogger('CDNMiddleware');
8
8
 
9
9
  export const cdn = (options: CDNOptions = {}): MiddlewareInterface => ({
10
- name: "cdn",
11
- version: "1.0.0",
10
+ name: 'cdn',
11
+ version: '1.0.0',
12
12
  metadata: {
13
- name: "cdn",
14
- version: "1.0.0",
15
- description: "Built-in CDN middleware with pluggable provider adapters",
16
- author: "MoroJS Team",
13
+ name: 'cdn',
14
+ version: '1.0.0',
15
+ description: 'Built-in CDN middleware with pluggable provider adapters',
16
+ author: 'MoroJS Team',
17
17
  },
18
18
 
19
19
  install: async (hooks: any, middlewareOptions: any = {}) => {
20
- logger.debug("Installing CDN middleware", "Installation");
20
+ logger.debug('Installing CDN middleware', 'Installation');
21
21
 
22
22
  // Initialize CDN adapter
23
23
  let cdnAdapter: CDNAdapter | null = null;
24
24
 
25
- if (
26
- options.adapter &&
27
- typeof options.adapter === "object" &&
28
- "purge" in options.adapter
29
- ) {
25
+ if (options.adapter && typeof options.adapter === 'object' && 'purge' in options.adapter) {
30
26
  cdnAdapter = options.adapter as CDNAdapter;
31
- } else if (typeof options.adapter === "string") {
27
+ } else if (typeof options.adapter === 'string') {
32
28
  cdnAdapter = createCDNAdapter(options.adapter, options.adapterOptions);
33
29
  }
34
30
 
35
31
  if (!cdnAdapter) {
36
- logger.warn(
37
- "No CDN adapter configured, CDN features will be disabled",
38
- "Installation",
39
- );
32
+ logger.warn('No CDN adapter configured, CDN features will be disabled', 'Installation');
40
33
  return;
41
34
  }
42
35
 
43
- hooks.before("request", async (context: HookContext) => {
36
+ hooks.before('request', async (context: HookContext) => {
44
37
  const req = context.request as any;
45
38
  const res = context.response as any;
46
39
 
@@ -52,61 +45,46 @@ export const cdn = (options: CDNOptions = {}): MiddlewareInterface => ({
52
45
  // Add CDN methods to response
53
46
  res.purgeCDN = async (urls?: string[]) => {
54
47
  if (!cdnAdapter) {
55
- logger.warn(
56
- "CDN purge requested but no adapter configured",
57
- "CDNPurge",
58
- );
48
+ logger.warn('CDN purge requested but no adapter configured', 'CDNPurge');
59
49
  return;
60
50
  }
61
51
 
62
52
  try {
63
53
  const urlsToPurge = urls || [req.path];
64
54
  await cdnAdapter.purge(urlsToPurge);
65
- logger.info(
66
- `CDN cache purged: ${urlsToPurge.join(", ")}`,
67
- "CDNPurge",
68
- );
55
+ logger.info(`CDN cache purged: ${urlsToPurge.join(', ')}`, 'CDNPurge');
69
56
  } catch (error) {
70
- logger.error("CDN purge failed", "CDNError", { error, urls });
57
+ logger.error('CDN purge failed', 'CDNError', { error, urls });
71
58
  throw error;
72
59
  }
73
60
  };
74
61
 
75
62
  res.prefetchCDN = async (urls: string[]) => {
76
63
  if (!cdnAdapter || !cdnAdapter.prefetch) {
77
- logger.warn(
78
- "CDN prefetch requested but not supported by adapter",
79
- "CDNPrefetch",
80
- );
64
+ logger.warn('CDN prefetch requested but not supported by adapter', 'CDNPrefetch');
81
65
  return;
82
66
  }
83
67
 
84
68
  try {
85
69
  await cdnAdapter.prefetch(urls);
86
- logger.info(
87
- `CDN prefetch requested: ${urls.join(", ")}`,
88
- "CDNPrefetch",
89
- );
70
+ logger.info(`CDN prefetch requested: ${urls.join(', ')}`, 'CDNPrefetch');
90
71
  } catch (error) {
91
- logger.error("CDN prefetch failed", "CDNError", { error, urls });
72
+ logger.error('CDN prefetch failed', 'CDNError', { error, urls });
92
73
  }
93
74
  };
94
75
 
95
76
  res.getCDNStats = async () => {
96
77
  if (!cdnAdapter || !cdnAdapter.getStats) {
97
- logger.warn(
98
- "CDN stats requested but not supported by adapter",
99
- "CDNStats",
100
- );
78
+ logger.warn('CDN stats requested but not supported by adapter', 'CDNStats');
101
79
  return null;
102
80
  }
103
81
 
104
82
  try {
105
83
  const stats = await cdnAdapter.getStats();
106
- logger.debug("CDN stats retrieved", "CDNStats");
84
+ logger.debug('CDN stats retrieved', 'CDNStats');
107
85
  return stats;
108
86
  } catch (error) {
109
- logger.error("CDN stats retrieval failed", "CDNError", { error });
87
+ logger.error('CDN stats retrieval failed', 'CDNError', { error });
110
88
  return null;
111
89
  }
112
90
  };
@@ -114,27 +92,22 @@ export const cdn = (options: CDNOptions = {}): MiddlewareInterface => ({
114
92
 
115
93
  // Auto-invalidation on certain patterns
116
94
  if (options.autoInvalidate && options.invalidationPatterns) {
117
- hooks.after("response", async (context: HookContext) => {
95
+ hooks.after('response', async (context: HookContext) => {
118
96
  const req = context.request as any;
119
97
  const res = context.response as any;
120
98
 
121
99
  // Check if this request matches invalidation patterns
122
- const shouldInvalidate = options.invalidationPatterns?.some(
123
- (pattern) => {
124
- const regex = new RegExp(pattern);
125
- return regex.test(req.path);
126
- },
127
- );
100
+ const shouldInvalidate = options.invalidationPatterns?.some(pattern => {
101
+ const regex = new RegExp(pattern);
102
+ return regex.test(req.path);
103
+ });
128
104
 
129
105
  if (shouldInvalidate && cdnAdapter) {
130
106
  try {
131
107
  await cdnAdapter.purge([req.path]);
132
- logger.debug(
133
- `Auto-invalidated CDN cache for: ${req.path}`,
134
- "CDNAutoInvalidate",
135
- );
108
+ logger.debug(`Auto-invalidated CDN cache for: ${req.path}`, 'CDNAutoInvalidate');
136
109
  } catch (error) {
137
- logger.error("CDN auto-invalidation failed", "CDNError", {
110
+ logger.error('CDN auto-invalidation failed', 'CDNError', {
138
111
  error,
139
112
  path: req.path,
140
113
  });
@@ -143,8 +116,8 @@ export const cdn = (options: CDNOptions = {}): MiddlewareInterface => ({
143
116
  });
144
117
  }
145
118
 
146
- logger.info("CDN middleware installed", "Installation", {
147
- adapter: typeof options.adapter === "string" ? options.adapter : "custom",
119
+ logger.info('CDN middleware installed', 'Installation', {
120
+ adapter: typeof options.adapter === 'string' ? options.adapter : 'custom',
148
121
  autoInvalidate: !!options.autoInvalidate,
149
122
  });
150
123
  },