@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,16 +1,16 @@
1
1
  // Session Middleware
2
- import { MiddlewareInterface, HookContext } from "../../../types/hooks";
3
- import { createFrameworkLogger } from "../../logger";
4
- import { CacheAdapter } from "../../../types/cache";
5
- import { MemoryCacheAdapter } from "./adapters/cache/memory";
6
- import { RedisCacheAdapter } from "./adapters/cache/redis";
7
- import { FileCacheAdapter } from "./adapters/cache/file";
2
+ import { MiddlewareInterface, HookContext } from '../../../types/hooks';
3
+ import { createFrameworkLogger } from '../../logger';
4
+ import { CacheAdapter } from '../../../types/cache';
5
+ import { MemoryCacheAdapter } from './adapters/cache/memory';
6
+ import { RedisCacheAdapter } from './adapters/cache/redis';
7
+ import { FileCacheAdapter } from './adapters/cache/file';
8
8
 
9
- const logger = createFrameworkLogger("SessionMiddleware");
9
+ const logger = createFrameworkLogger('SessionMiddleware');
10
10
 
11
11
  export interface SessionOptions {
12
12
  // Session store configuration
13
- store?: "memory" | "redis" | "file" | CacheAdapter;
13
+ store?: 'memory' | 'redis' | 'file' | CacheAdapter;
14
14
  storeOptions?: {
15
15
  // Redis options
16
16
  host?: string;
@@ -37,14 +37,14 @@ export interface SessionOptions {
37
37
  expires?: Date; // Absolute expiry
38
38
  httpOnly?: boolean; // Prevent XSS access
39
39
  secure?: boolean; // HTTPS only
40
- sameSite?: "strict" | "lax" | "none";
40
+ sameSite?: 'strict' | 'lax' | 'none';
41
41
  domain?: string;
42
42
  path?: string;
43
43
  };
44
44
 
45
45
  // Security
46
46
  proxy?: boolean; // Trust proxy for secure cookies
47
- unset?: "destroy" | "keep"; // What to do when session is unset
47
+ unset?: 'destroy' | 'keep'; // What to do when session is unset
48
48
  }
49
49
 
50
50
  export interface SessionData {
@@ -66,12 +66,7 @@ class Session {
66
66
  private isNew: boolean = false;
67
67
  private isModified: boolean = false;
68
68
 
69
- constructor(
70
- id: string,
71
- store: CacheAdapter,
72
- options: SessionOptions,
73
- isNew: boolean = false,
74
- ) {
69
+ constructor(id: string, store: CacheAdapter, options: SessionOptions, isNew: boolean = false) {
75
70
  this.id = id;
76
71
  this.store = store;
77
72
  this.options = options;
@@ -84,7 +79,7 @@ class Session {
84
79
  store: CacheAdapter,
85
80
  options: SessionOptions,
86
81
  data: SessionData = {},
87
- isNew: boolean = false,
82
+ isNew: boolean = false
88
83
  ): Session {
89
84
  const session = new Session(id, store, options, isNew);
90
85
  session.data = data;
@@ -130,7 +125,7 @@ class Session {
130
125
  await this.store.set(this.id, this.data, ttl);
131
126
  this.isModified = false;
132
127
  this.isNew = false;
133
- logger.debug(`Session saved: ${this.id}`, "SessionSave");
128
+ logger.debug(`Session saved: ${this.id}`, 'SessionSave');
134
129
  }
135
130
  }
136
131
 
@@ -138,7 +133,7 @@ class Session {
138
133
  await this.store.del(this.id);
139
134
  this.data = {};
140
135
  this.isModified = false;
141
- logger.debug(`Session destroyed: ${this.id}`, "SessionDestroy");
136
+ logger.debug(`Session destroyed: ${this.id}`, 'SessionDestroy');
142
137
  }
143
138
 
144
139
  async regenerate(): Promise<string> {
@@ -146,7 +141,7 @@ class Session {
146
141
  this.id = this.generateId();
147
142
  this.isNew = true;
148
143
  this.isModified = true;
149
- logger.debug(`Session regenerated: ${this.id}`, "SessionRegenerate");
144
+ logger.debug(`Session regenerated: ${this.id}`, 'SessionRegenerate');
150
145
  return this.id;
151
146
  }
152
147
 
@@ -162,8 +157,8 @@ class Session {
162
157
  return this.options.genid();
163
158
  }
164
159
 
165
- const crypto = require("crypto");
166
- return crypto.randomBytes(24).toString("hex");
160
+ const crypto = require('crypto');
161
+ return crypto.randomBytes(24).toString('hex');
167
162
  }
168
163
 
169
164
  get sessionID(): string {
@@ -172,23 +167,23 @@ class Session {
172
167
  }
173
168
 
174
169
  export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
175
- name: "session",
176
- version: "1.0.0",
170
+ name: 'session',
171
+ version: '1.0.0',
177
172
  metadata: {
178
- name: "session",
179
- version: "1.0.0",
180
- description: "Session management middleware with multiple store adapters",
181
- author: "MoroJS Team",
173
+ name: 'session',
174
+ version: '1.0.0',
175
+ description: 'Session management middleware with multiple store adapters',
176
+ author: 'MoroJS Team',
182
177
  },
183
178
 
184
179
  install: async (hooks: any, middlewareOptions: any = {}) => {
185
- logger.debug("Installing session middleware", "Installation");
180
+ logger.debug('Installing session middleware', 'Installation');
186
181
 
187
182
  // Merge options
188
183
  const config: SessionOptions = {
189
- store: "memory",
190
- name: "connect.sid",
191
- secret: "moro-session-secret",
184
+ store: 'memory',
185
+ name: 'connect.sid',
186
+ secret: 'moro-session-secret',
192
187
  rolling: false,
193
188
  resave: false,
194
189
  saveUninitialized: false,
@@ -196,10 +191,10 @@ export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
196
191
  maxAge: 24 * 60 * 60 * 1000, // 24 hours
197
192
  httpOnly: true,
198
193
  secure: false,
199
- sameSite: "lax",
200
- path: "/",
194
+ sameSite: 'lax',
195
+ path: '/',
201
196
  },
202
- unset: "keep",
197
+ unset: 'keep',
203
198
  ...options,
204
199
  ...middlewareOptions,
205
200
  };
@@ -207,20 +202,20 @@ export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
207
202
  // Initialize store
208
203
  let store: CacheAdapter;
209
204
 
210
- if (typeof config.store === "string") {
205
+ if (typeof config.store === 'string') {
211
206
  switch (config.store) {
212
- case "redis":
207
+ case 'redis':
213
208
  store = new RedisCacheAdapter({
214
- keyPrefix: "sess:",
209
+ keyPrefix: 'sess:',
215
210
  ...config.storeOptions,
216
211
  });
217
212
  break;
218
- case "file":
213
+ case 'file':
219
214
  store = new FileCacheAdapter({
220
- cacheDir: config.storeOptions?.path || "./sessions",
215
+ cacheDir: config.storeOptions?.path || './sessions',
221
216
  });
222
217
  break;
223
- case "memory":
218
+ case 'memory':
224
219
  default:
225
220
  store = new MemoryCacheAdapter();
226
221
  break;
@@ -234,11 +229,11 @@ export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
234
229
  if (config.genid) {
235
230
  return config.genid();
236
231
  }
237
- const crypto = require("crypto");
238
- return crypto.randomBytes(24).toString("hex");
232
+ const crypto = require('crypto');
233
+ return crypto.randomBytes(24).toString('hex');
239
234
  };
240
235
 
241
- hooks.before("request", async (context: HookContext) => {
236
+ hooks.before('request', async (context: HookContext) => {
242
237
  const req = context.request as any;
243
238
  const res = context.response as any;
244
239
 
@@ -250,13 +245,9 @@ export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
250
245
  if (sessionId) {
251
246
  try {
252
247
  sessionData = (await store.get(sessionId)) || {};
253
- logger.debug(`Session loaded: ${sessionId}`, "SessionLoad");
248
+ logger.debug(`Session loaded: ${sessionId}`, 'SessionLoad');
254
249
  } catch (error) {
255
- logger.warn(
256
- `Failed to load session: ${sessionId}`,
257
- "SessionLoadError",
258
- { error },
259
- );
250
+ logger.warn(`Failed to load session: ${sessionId}`, 'SessionLoadError', { error });
260
251
  sessionId = generateSessionId();
261
252
  isNew = true;
262
253
  }
@@ -266,46 +257,32 @@ export const session = (options: SessionOptions = {}): MiddlewareInterface => ({
266
257
  }
267
258
 
268
259
  // Create session object
269
- req.session = Session.create(
270
- sessionId,
271
- store,
272
- config,
273
- sessionData,
274
- isNew,
275
- );
260
+ req.session = Session.create(sessionId, store, config, sessionData, isNew);
276
261
 
277
262
  // Set session cookie
278
263
  if (isNew || config.rolling) {
279
264
  res.cookie(config.name!, sessionId, {
280
265
  ...config.cookie,
281
266
  secure:
282
- config.cookie?.secure ||
283
- (config.proxy && req.headers["x-forwarded-proto"] === "https"),
267
+ config.cookie?.secure || (config.proxy && req.headers['x-forwarded-proto'] === 'https'),
284
268
  });
285
269
  }
286
270
  });
287
271
 
288
- hooks.after("response", async (context: HookContext) => {
272
+ hooks.after('response', async (context: HookContext) => {
289
273
  const req = context.request as any;
290
274
 
291
275
  if (req.session) {
292
276
  try {
293
- if (
294
- config.saveUninitialized ||
295
- !req.session.isNew ||
296
- req.session.isModified
297
- ) {
277
+ if (config.saveUninitialized || !req.session.isNew || req.session.isModified) {
298
278
  await req.session.save();
299
279
  }
300
280
  } catch (error) {
301
- logger.error("Failed to save session", "SessionSaveError", { error });
281
+ logger.error('Failed to save session', 'SessionSaveError', { error });
302
282
  }
303
283
  }
304
284
  });
305
285
 
306
- logger.info(
307
- `Session middleware installed with ${config.store} store`,
308
- "Installation",
309
- );
286
+ logger.info(`Session middleware installed with ${config.store} store`, 'Installation');
310
287
  },
311
288
  });
@@ -1,58 +1,53 @@
1
1
  // Server-Sent Events 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("SSEMiddleware");
5
+ const logger = createFrameworkLogger('SSEMiddleware');
6
6
 
7
7
  export const sse = (
8
8
  options: {
9
9
  heartbeat?: number;
10
10
  retry?: number;
11
11
  cors?: boolean;
12
- } = {},
12
+ } = {}
13
13
  ): MiddlewareInterface => ({
14
- name: "sse",
15
- version: "1.0.0",
14
+ name: 'sse',
15
+ version: '1.0.0',
16
16
  metadata: {
17
- name: "sse",
18
- version: "1.0.0",
19
- description:
20
- "Server-Sent Events middleware with heartbeat and retry support",
21
- author: "MoroJS Team",
17
+ name: 'sse',
18
+ version: '1.0.0',
19
+ description: 'Server-Sent Events middleware with heartbeat and retry support',
20
+ author: 'MoroJS Team',
22
21
  },
23
22
 
24
23
  install: async (hooks: any, middlewareOptions: any = {}) => {
25
- logger.debug("Installing SSE middleware", "Installation");
24
+ logger.debug('Installing SSE middleware', 'Installation');
26
25
 
27
- hooks.before("request", async (context: HookContext) => {
26
+ hooks.before('request', async (context: HookContext) => {
28
27
  const req = context.request as any;
29
28
  const res = context.response as any;
30
29
 
31
30
  // Only handle SSE requests
32
- if (!req.headers.accept?.includes("text/event-stream")) {
31
+ if (!req.headers.accept?.includes('text/event-stream')) {
33
32
  return;
34
33
  }
35
34
 
36
- logger.debug("Setting up SSE connection", "SSESetup");
35
+ logger.debug('Setting up SSE connection', 'SSESetup');
37
36
 
38
37
  // Set SSE headers
39
38
  res.writeHead(200, {
40
- "Content-Type": "text/event-stream",
41
- "Cache-Control": "no-cache",
42
- Connection: "keep-alive",
43
- "Access-Control-Allow-Origin": options.cors ? "*" : undefined,
44
- "Access-Control-Allow-Headers": options.cors
45
- ? "Cache-Control"
46
- : undefined,
39
+ 'Content-Type': 'text/event-stream',
40
+ 'Cache-Control': 'no-cache',
41
+ Connection: 'keep-alive',
42
+ 'Access-Control-Allow-Origin': options.cors ? '*' : undefined,
43
+ 'Access-Control-Allow-Headers': options.cors ? 'Cache-Control' : undefined,
47
44
  });
48
45
 
49
46
  // Add SSE methods to response
50
47
  res.sendEvent = (data: any, event?: string, id?: string) => {
51
48
  if (id) res.write(`id: ${id}\n`);
52
49
  if (event) res.write(`event: ${event}\n`);
53
- res.write(
54
- `data: ${typeof data === "string" ? data : JSON.stringify(data)}\n\n`,
55
- );
50
+ res.write(`data: ${typeof data === 'string' ? data : JSON.stringify(data)}\n\n`);
56
51
  };
57
52
 
58
53
  res.sendComment = (comment: string) => {
@@ -67,7 +62,7 @@ export const sse = (
67
62
  let heartbeatInterval: NodeJS.Timeout | null = null;
68
63
  if (options.heartbeat) {
69
64
  heartbeatInterval = setInterval(() => {
70
- res.sendComment("heartbeat");
65
+ res.sendComment('heartbeat');
71
66
  }, options.heartbeat);
72
67
  }
73
68
 
@@ -77,11 +72,11 @@ export const sse = (
77
72
  }
78
73
 
79
74
  // Clean up on close
80
- req.on("close", () => {
75
+ req.on('close', () => {
81
76
  if (heartbeatInterval) {
82
77
  clearInterval(heartbeatInterval);
83
78
  }
84
- logger.debug("SSE connection closed", "SSECleanup");
79
+ logger.debug('SSE connection closed', 'SSECleanup');
85
80
  });
86
81
 
87
82
  // Mark that this middleware handled the request
@@ -1,30 +1,30 @@
1
1
  // Validation 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("ValidationMiddleware");
5
+ const logger = createFrameworkLogger('ValidationMiddleware');
6
6
 
7
7
  export const validation = (): MiddlewareInterface => ({
8
- name: "validation",
9
- version: "1.0.0",
8
+ name: 'validation',
9
+ version: '1.0.0',
10
10
  metadata: {
11
- name: "validation",
12
- version: "1.0.0",
13
- description: "Request validation middleware with content type checking",
14
- author: "MoroJS Team",
11
+ name: 'validation',
12
+ version: '1.0.0',
13
+ description: 'Request validation middleware with content type checking',
14
+ author: 'MoroJS Team',
15
15
  },
16
16
 
17
17
  install: async (hooks: any, options: any = {}) => {
18
- logger.debug("Installing validation middleware", "Installation");
18
+ logger.debug('Installing validation middleware', 'Installation');
19
19
 
20
- hooks.before("request", async (context: HookContext) => {
20
+ hooks.before('request', async (context: HookContext) => {
21
21
  const request = context.request as any;
22
22
 
23
23
  // Basic content type validation
24
- if (request.method === "POST" || request.method === "PUT") {
25
- const contentType = request.headers["content-type"];
26
- if (contentType && contentType.includes("application/json")) {
27
- logger.debug("Validation: JSON content type verified", "ContentType");
24
+ if (request.method === 'POST' || request.method === 'PUT') {
25
+ const contentType = request.headers['content-type'];
26
+ if (contentType && contentType.includes('application/json')) {
27
+ logger.debug('Validation: JSON content type verified', 'ContentType');
28
28
  // Additional validation logic would go here
29
29
  }
30
30
  }
@@ -1,23 +1,23 @@
1
1
  // Middleware System for Moro
2
- import { EventEmitter } from "events";
3
- import { HookManager } from "../utilities";
2
+ import { EventEmitter } from 'events';
3
+ import { HookManager } from '../utilities';
4
4
  import {
5
5
  MiddlewareMetadata,
6
6
  MiddlewareContext,
7
7
  MiddlewareInterface,
8
8
  SimpleMiddlewareFunction,
9
9
  MoroMiddleware,
10
- } from "../../types/hooks";
11
- import { createFrameworkLogger } from "../logger";
10
+ } from '../../types/hooks';
11
+ import { createFrameworkLogger } from '../logger';
12
12
 
13
13
  // Export types needed by built-in middleware
14
- export type { MiddlewareInterface, MoroMiddleware } from "../../types/hooks";
14
+ export type { MiddlewareInterface, MoroMiddleware } from '../../types/hooks';
15
15
 
16
16
  export class MiddlewareManager extends EventEmitter {
17
17
  private middleware = new Map<string, MiddlewareInterface>();
18
18
  private simpleMiddleware = new Map<string, SimpleMiddlewareFunction>();
19
19
  private hooks: HookManager;
20
- private logger = createFrameworkLogger("Middleware");
20
+ private logger = createFrameworkLogger('Middleware');
21
21
 
22
22
  constructor() {
23
23
  super();
@@ -31,34 +31,25 @@ export class MiddlewareManager extends EventEmitter {
31
31
  }
32
32
 
33
33
  this.middleware.set(name, middleware);
34
- this.logger.debug(`Registered middleware: ${name}`, "Registration");
35
- this.emit("registered", { name, middleware });
34
+ this.logger.debug(`Registered middleware: ${name}`, 'Registration');
35
+ this.emit('registered', { name, middleware });
36
36
  }
37
37
 
38
38
  // Install simple function-style middleware
39
- install(
40
- middleware: SimpleMiddlewareFunction | MiddlewareInterface,
41
- options: any = {},
42
- ): void {
43
- if (typeof middleware === "function") {
39
+ install(middleware: SimpleMiddlewareFunction | MiddlewareInterface, options: any = {}): void {
40
+ if (typeof middleware === 'function') {
44
41
  // Simple function-style middleware
45
- const simpleName = middleware.name || "anonymous";
46
- this.logger.debug(
47
- `Installing simple middleware: ${simpleName}`,
48
- "Installation",
49
- );
42
+ const simpleName = middleware.name || 'anonymous';
43
+ this.logger.debug(`Installing simple middleware: ${simpleName}`, 'Installation');
50
44
 
51
45
  this.simpleMiddleware.set(simpleName, middleware);
52
- this.emit("installed", { name: simpleName, type: "simple" });
53
- this.logger.info(
54
- `Simple middleware installed: ${simpleName}`,
55
- "Installation",
56
- );
46
+ this.emit('installed', { name: simpleName, type: 'simple' });
47
+ this.logger.info(`Simple middleware installed: ${simpleName}`, 'Installation');
57
48
  return;
58
49
  }
59
50
 
60
51
  // Advanced middleware with dependencies and lifecycle
61
- const name = middleware.metadata?.name || "unknown";
52
+ const name = middleware.metadata?.name || 'unknown';
62
53
 
63
54
  if (this.middleware.has(name)) {
64
55
  throw new Error(`Middleware ${name} is already installed`);
@@ -76,15 +67,15 @@ export class MiddlewareManager extends EventEmitter {
76
67
  // Store middleware
77
68
  this.middleware.set(name, middleware);
78
69
 
79
- this.logger.debug(`Installing middleware: ${name}`, "Installation");
70
+ this.logger.debug(`Installing middleware: ${name}`, 'Installation');
80
71
 
81
72
  // Initialize middleware
82
73
  if (middleware.install) {
83
74
  middleware.install(this.hooks, options);
84
75
  }
85
76
 
86
- this.emit("installed", { name, middleware, options });
87
- this.logger.info(`Middleware installed: ${name}`, "Installation");
77
+ this.emit('installed', { name, middleware, options });
78
+ this.logger.info(`Middleware installed: ${name}`, 'Installation');
88
79
  }
89
80
 
90
81
  // Uninstall middleware and clean up
@@ -95,7 +86,7 @@ export class MiddlewareManager extends EventEmitter {
95
86
 
96
87
  const middleware = this.middleware.get(name)!;
97
88
 
98
- this.logger.debug(`Uninstalling middleware: ${name}`, "Uninstallation");
89
+ this.logger.debug(`Uninstalling middleware: ${name}`, 'Uninstallation');
99
90
 
100
91
  // Call cleanup if available
101
92
  if (middleware.uninstall) {
@@ -103,8 +94,8 @@ export class MiddlewareManager extends EventEmitter {
103
94
  }
104
95
 
105
96
  this.middleware.delete(name);
106
- this.emit("uninstalled", { name, middleware });
107
- this.logger.info(`Middleware uninstalled: ${name}`, "Uninstallation");
97
+ this.emit('uninstalled', { name, middleware });
98
+ this.logger.info(`Middleware uninstalled: ${name}`, 'Uninstallation');
108
99
  }
109
100
 
110
101
  // Get installed middleware
@@ -130,7 +121,7 @@ export class MiddlewareManager extends EventEmitter {
130
121
  // Dependency resolution with topological sorting for optimal middleware loading
131
122
  async installWithDependencies(
132
123
  middleware: MiddlewareInterface[],
133
- options?: Record<string, any>,
124
+ options?: Record<string, any>
134
125
  ): Promise<void> {
135
126
  // Advanced topological sort for dependency resolution
136
127
  const resolved = this.topologicalSort(middleware);
@@ -142,9 +133,7 @@ export class MiddlewareManager extends EventEmitter {
142
133
  }
143
134
 
144
135
  // Optimized topological sort implementation for middleware dependencies
145
- private topologicalSort(
146
- middleware: MiddlewareInterface[],
147
- ): MiddlewareInterface[] {
136
+ private topologicalSort(middleware: MiddlewareInterface[]): MiddlewareInterface[] {
148
137
  const visited = new Set<string>();
149
138
  const temp = new Set<string>();
150
139
  const result: MiddlewareInterface[] = [];
@@ -160,7 +149,7 @@ export class MiddlewareManager extends EventEmitter {
160
149
  // Visit dependencies first
161
150
  if (middlewareItem.dependencies) {
162
151
  for (const depName of middlewareItem.dependencies) {
163
- const dependency = middleware.find((m) => m.name === depName);
152
+ const dependency = middleware.find(m => m.name === depName);
164
153
  if (dependency) {
165
154
  visit(dependency);
166
155
  }
@@ -184,5 +173,5 @@ export class MiddlewareManager extends EventEmitter {
184
173
  }
185
174
 
186
175
  // Built-in middleware exports
187
- export { builtInMiddleware, simpleMiddleware } from "./built-in";
188
- export * from "./built-in";
176
+ export { builtInMiddleware, simpleMiddleware } from './built-in';
177
+ export * from './built-in';