@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,99 +1,85 @@
1
1
  // Core Configuration Schema for Moro Framework
2
- import { z } from "zod";
2
+ import { z } from 'zod';
3
3
 
4
4
  // Server Configuration Schema
5
5
  const ServerConfigSchema = z.object({
6
6
  port: z.coerce
7
7
  .number()
8
- .min(1, "Port must be at least 1")
9
- .max(65535, "Port must be at most 65535")
8
+ .min(1, 'Port must be at least 1')
9
+ .max(65535, 'Port must be at most 65535')
10
10
  .default(3001)
11
- .describe("Server port to listen on"),
11
+ .describe('Server port to listen on'),
12
12
 
13
- host: z.string().default("localhost").describe("Server host to bind to"),
13
+ host: z.string().default('localhost').describe('Server host to bind to'),
14
14
 
15
15
  environment: z
16
- .enum(["development", "staging", "production"])
17
- .default("development")
18
- .describe("Application environment"),
16
+ .enum(['development', 'staging', 'production'])
17
+ .default('development')
18
+ .describe('Application environment'),
19
19
 
20
- maxConnections: z.coerce
21
- .number()
22
- .min(1)
23
- .default(1000)
24
- .describe("Maximum concurrent connections"),
20
+ maxConnections: z.coerce.number().min(1).default(1000).describe('Maximum concurrent connections'),
25
21
 
26
- timeout: z.coerce
27
- .number()
28
- .min(1000)
29
- .default(30000)
30
- .describe("Request timeout in milliseconds"),
22
+ timeout: z.coerce.number().min(1000).default(30000).describe('Request timeout in milliseconds'),
31
23
  });
32
24
 
33
25
  // Service Discovery Configuration Schema
34
26
  const ServiceDiscoveryConfigSchema = z.object({
35
- enabled: z.coerce
36
- .boolean()
37
- .default(false)
38
- .describe("Enable service discovery"),
27
+ enabled: z.coerce.boolean().default(false).describe('Enable service discovery'),
39
28
 
40
29
  type: z
41
- .enum(["memory", "consul", "kubernetes"])
42
- .default("memory")
43
- .describe("Service discovery backend type"),
30
+ .enum(['memory', 'consul', 'kubernetes'])
31
+ .default('memory')
32
+ .describe('Service discovery backend type'),
44
33
 
45
34
  consulUrl: z
46
35
  .string()
47
- .url("Must be a valid URL")
48
- .default("http://localhost:8500")
49
- .describe("Consul server URL"),
36
+ .url('Must be a valid URL')
37
+ .default('http://localhost:8500')
38
+ .describe('Consul server URL'),
50
39
 
51
40
  kubernetesNamespace: z
52
41
  .string()
53
- .default("default")
54
- .describe("Kubernetes namespace for service discovery"),
42
+ .default('default')
43
+ .describe('Kubernetes namespace for service discovery'),
55
44
 
56
45
  healthCheckInterval: z.coerce
57
46
  .number()
58
47
  .min(1000)
59
48
  .default(30000)
60
- .describe("Health check interval in milliseconds"),
49
+ .describe('Health check interval in milliseconds'),
61
50
 
62
51
  retryAttempts: z.coerce
63
52
  .number()
64
53
  .min(0)
65
54
  .default(3)
66
- .describe("Number of retry attempts for failed health checks"),
55
+ .describe('Number of retry attempts for failed health checks'),
67
56
  });
68
57
 
69
58
  // Database Configuration Schema
70
59
  const DatabaseConfigSchema = z.object({
71
- url: z.string().optional().describe("Primary database connection URL"),
60
+ url: z.string().optional().describe('Primary database connection URL'),
72
61
 
73
62
  redis: z.object({
74
- url: z
75
- .string()
76
- .default("redis://localhost:6379")
77
- .describe("Redis connection URL"),
63
+ url: z.string().default('redis://localhost:6379').describe('Redis connection URL'),
78
64
 
79
65
  maxRetries: z.coerce
80
66
  .number()
81
67
  .min(0)
82
68
  .default(3)
83
- .describe("Maximum Redis connection retry attempts"),
69
+ .describe('Maximum Redis connection retry attempts'),
84
70
 
85
71
  retryDelay: z.coerce
86
72
  .number()
87
73
  .min(100)
88
74
  .default(1000)
89
- .describe("Redis retry delay in milliseconds"),
75
+ .describe('Redis retry delay in milliseconds'),
90
76
 
91
- keyPrefix: z.string().default("moro:").describe("Redis key prefix"),
77
+ keyPrefix: z.string().default('moro:').describe('Redis key prefix'),
92
78
  }),
93
79
 
94
80
  mysql: z
95
81
  .object({
96
- host: z.string().default("localhost"),
82
+ host: z.string().default('localhost'),
97
83
  port: z.coerce.number().min(1).max(65535).default(3306),
98
84
  database: z.string().optional(),
99
85
  username: z.string().optional(),
@@ -108,109 +94,70 @@ const DatabaseConfigSchema = z.object({
108
94
  // Module Defaults Configuration Schema
109
95
  const ModuleDefaultsConfigSchema = z.object({
110
96
  cache: z.object({
111
- enabled: z.coerce
112
- .boolean()
113
- .default(true)
114
- .describe("Enable caching by default"),
97
+ enabled: z.coerce.boolean().default(true).describe('Enable caching by default'),
115
98
 
116
- defaultTtl: z.coerce
117
- .number()
118
- .min(0)
119
- .default(300)
120
- .describe("Default cache TTL in seconds"),
99
+ defaultTtl: z.coerce.number().min(0).default(300).describe('Default cache TTL in seconds'),
121
100
 
122
- maxSize: z.coerce
123
- .number()
124
- .min(1)
125
- .default(1000)
126
- .describe("Maximum cache entries"),
101
+ maxSize: z.coerce.number().min(1).default(1000).describe('Maximum cache entries'),
127
102
 
128
- strategy: z
129
- .enum(["lru", "lfu", "fifo"])
130
- .default("lru")
131
- .describe("Cache eviction strategy"),
103
+ strategy: z.enum(['lru', 'lfu', 'fifo']).default('lru').describe('Cache eviction strategy'),
132
104
  }),
133
105
 
134
106
  rateLimit: z.object({
135
- enabled: z.coerce
136
- .boolean()
137
- .default(true)
138
- .describe("Enable rate limiting by default"),
107
+ enabled: z.coerce.boolean().default(true).describe('Enable rate limiting by default'),
139
108
 
140
- defaultRequests: z.coerce
141
- .number()
142
- .min(1)
143
- .default(100)
144
- .describe("Default requests per window"),
109
+ defaultRequests: z.coerce.number().min(1).default(100).describe('Default requests per window'),
145
110
 
146
111
  defaultWindow: z.coerce
147
112
  .number()
148
113
  .min(1000)
149
114
  .default(60000)
150
- .describe("Default rate limit window in milliseconds"),
115
+ .describe('Default rate limit window in milliseconds'),
151
116
 
152
117
  skipSuccessfulRequests: z.coerce
153
118
  .boolean()
154
119
  .default(false)
155
- .describe("Skip successful requests in rate limit counting"),
120
+ .describe('Skip successful requests in rate limit counting'),
156
121
 
157
122
  skipFailedRequests: z.coerce
158
123
  .boolean()
159
124
  .default(false)
160
- .describe("Skip failed requests in rate limit counting"),
125
+ .describe('Skip failed requests in rate limit counting'),
161
126
  }),
162
127
 
163
128
  validation: z.object({
164
- enabled: z.coerce
165
- .boolean()
166
- .default(true)
167
- .describe("Enable validation by default"),
129
+ enabled: z.coerce.boolean().default(true).describe('Enable validation by default'),
168
130
 
169
131
  stripUnknown: z.coerce
170
132
  .boolean()
171
133
  .default(true)
172
- .describe("Strip unknown properties from validated data"),
134
+ .describe('Strip unknown properties from validated data'),
173
135
 
174
- abortEarly: z.coerce
175
- .boolean()
176
- .default(false)
177
- .describe("Stop validation on first error"),
136
+ abortEarly: z.coerce.boolean().default(false).describe('Stop validation on first error'),
178
137
  }),
179
138
  });
180
139
 
181
140
  // Logging Configuration Schema
182
141
  const LoggingConfigSchema = z.object({
183
142
  level: z
184
- .enum(["debug", "info", "warn", "error", "fatal"])
185
- .default("info")
186
- .describe("Minimum log level"),
187
-
188
- format: z
189
- .enum(["pretty", "json", "compact"])
190
- .default("pretty")
191
- .describe("Log output format"),
192
-
193
- enableColors: z.coerce
194
- .boolean()
195
- .default(true)
196
- .describe("Enable colored log output"),
197
-
198
- enableTimestamp: z.coerce
199
- .boolean()
200
- .default(true)
201
- .describe("Include timestamp in logs"),
202
-
203
- enableContext: z.coerce
204
- .boolean()
205
- .default(true)
206
- .describe("Include context information in logs"),
143
+ .enum(['debug', 'info', 'warn', 'error', 'fatal'])
144
+ .default('info')
145
+ .describe('Minimum log level'),
146
+
147
+ format: z.enum(['pretty', 'json', 'compact']).default('pretty').describe('Log output format'),
148
+
149
+ enableColors: z.coerce.boolean().default(true).describe('Enable colored log output'),
150
+
151
+ enableTimestamp: z.coerce.boolean().default(true).describe('Include timestamp in logs'),
152
+
153
+ enableContext: z.coerce.boolean().default(true).describe('Include context information in logs'),
207
154
 
208
155
  outputs: z.object({
209
156
  console: z.coerce.boolean().default(true),
210
157
  file: z.object({
211
158
  enabled: z.coerce.boolean().default(false),
212
- path: z.string().default("./logs/moro.log"),
213
- maxSize: z.string().default("10MB"),
159
+ path: z.string().default('./logs/moro.log'),
160
+ maxSize: z.string().default('10MB'),
214
161
  maxFiles: z.coerce.number().default(5),
215
162
  }),
216
163
  webhook: z.object({
@@ -225,15 +172,9 @@ const LoggingConfigSchema = z.object({
225
172
  const SecurityConfigSchema = z.object({
226
173
  cors: z.object({
227
174
  enabled: z.coerce.boolean().default(true),
228
- origin: z
229
- .union([z.string(), z.array(z.string()), z.boolean()])
230
- .default("*"),
231
- methods: z
232
- .array(z.string())
233
- .default(["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"]),
234
- allowedHeaders: z
235
- .array(z.string())
236
- .default(["Content-Type", "Authorization"]),
175
+ origin: z.union([z.string(), z.array(z.string()), z.boolean()]).default('*'),
176
+ methods: z.array(z.string()).default(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS']),
177
+ allowedHeaders: z.array(z.string()).default(['Content-Type', 'Authorization']),
237
178
  credentials: z.coerce.boolean().default(false),
238
179
  }),
239
180
 
@@ -261,7 +202,7 @@ const ExternalServicesConfigSchema = z.object({
261
202
  secretKey: z.string().optional(),
262
203
  publishableKey: z.string().optional(),
263
204
  webhookSecret: z.string().optional(),
264
- apiVersion: z.string().default("2023-10-16"),
205
+ apiVersion: z.string().default('2023-10-16'),
265
206
  })
266
207
  .optional(),
267
208
 
@@ -270,7 +211,7 @@ const ExternalServicesConfigSchema = z.object({
270
211
  clientId: z.string().optional(),
271
212
  clientSecret: z.string().optional(),
272
213
  webhookId: z.string().optional(),
273
- environment: z.enum(["sandbox", "production"]).default("sandbox"),
214
+ environment: z.enum(['sandbox', 'production']).default('sandbox'),
274
215
  })
275
216
  .optional(),
276
217
 
@@ -321,16 +262,12 @@ export const ConfigSchema = z.object({
321
262
  // Inferred TypeScript types
322
263
  export type AppConfig = z.infer<typeof ConfigSchema>;
323
264
  export type ServerConfig = z.infer<typeof ServerConfigSchema>;
324
- export type ServiceDiscoveryConfig = z.infer<
325
- typeof ServiceDiscoveryConfigSchema
326
- >;
265
+ export type ServiceDiscoveryConfig = z.infer<typeof ServiceDiscoveryConfigSchema>;
327
266
  export type DatabaseConfig = z.infer<typeof DatabaseConfigSchema>;
328
267
  export type ModuleDefaultsConfig = z.infer<typeof ModuleDefaultsConfigSchema>;
329
268
  export type LoggingConfig = z.infer<typeof LoggingConfigSchema>;
330
269
  export type SecurityConfig = z.infer<typeof SecurityConfigSchema>;
331
- export type ExternalServicesConfig = z.infer<
332
- typeof ExternalServicesConfigSchema
333
- >;
270
+ export type ExternalServicesConfig = z.infer<typeof ExternalServicesConfigSchema>;
334
271
  export type PerformanceConfig = z.infer<typeof PerformanceConfigSchema>;
335
272
 
336
273
  // Export individual schemas for module-specific configuration
@@ -1,9 +1,9 @@
1
1
  // Configuration Utilities for Modules and Environment Handling
2
- import { z } from "zod";
3
- import { AppConfig } from "./schema";
4
- import { createFrameworkLogger } from "../logger";
2
+ import { z } from 'zod';
3
+ import { AppConfig } from './schema';
4
+ import { createFrameworkLogger } from '../logger';
5
5
 
6
- const logger = createFrameworkLogger("ConfigUtils");
6
+ const logger = createFrameworkLogger('ConfigUtils');
7
7
 
8
8
  // Global configuration store
9
9
  let appConfig: AppConfig | null = null;
@@ -13,7 +13,7 @@ let appConfig: AppConfig | null = null;
13
13
  */
14
14
  export function setConfig(config: AppConfig): void {
15
15
  appConfig = config;
16
- logger.debug("Global configuration updated");
16
+ logger.debug('Global configuration updated');
17
17
  }
18
18
 
19
19
  /**
@@ -21,7 +21,7 @@ export function setConfig(config: AppConfig): void {
21
21
  */
22
22
  export function getConfig(): AppConfig {
23
23
  if (!appConfig) {
24
- throw new Error("Configuration not initialized. Call loadConfig() first.");
24
+ throw new Error('Configuration not initialized. Call loadConfig() first.');
25
25
  }
26
26
  return appConfig;
27
27
  }
@@ -32,7 +32,7 @@ export function getConfig(): AppConfig {
32
32
  export function createModuleConfig<T>(
33
33
  schema: z.ZodSchema<T>,
34
34
  defaultConfig: Partial<T>,
35
- envPrefix?: string,
35
+ envPrefix?: string
36
36
  ): T {
37
37
  const globalConfig = getConfig();
38
38
 
@@ -41,7 +41,7 @@ export function createModuleConfig<T>(
41
41
 
42
42
  if (envPrefix) {
43
43
  // Extract environment variables with the given prefix
44
- Object.keys(process.env).forEach((key) => {
44
+ Object.keys(process.env).forEach(key => {
45
45
  if (key.startsWith(envPrefix)) {
46
46
  const configKey = key
47
47
  .substring(envPrefix.length)
@@ -62,10 +62,7 @@ export function createModuleConfig<T>(
62
62
  try {
63
63
  return schema.parse(mergedConfig);
64
64
  } catch (error) {
65
- logger.error(
66
- `Module configuration validation failed for prefix ${envPrefix}:`,
67
- String(error),
68
- );
65
+ logger.error(`Module configuration validation failed for prefix ${envPrefix}:`, String(error));
69
66
  throw error;
70
67
  }
71
68
  }
@@ -73,11 +70,7 @@ export function createModuleConfig<T>(
73
70
  /**
74
71
  * Get environment variable with type conversion
75
72
  */
76
- export function getEnvVar<T>(
77
- key: string,
78
- defaultValue: T,
79
- converter?: (value: string) => T,
80
- ): T {
73
+ export function getEnvVar<T>(key: string, defaultValue: T, converter?: (value: string) => T): T {
81
74
  const value = process.env[key];
82
75
 
83
76
  if (value === undefined) {
@@ -88,20 +81,17 @@ export function getEnvVar<T>(
88
81
  try {
89
82
  return converter(value);
90
83
  } catch (error) {
91
- logger.warn(
92
- `Failed to convert environment variable ${key}:`,
93
- String(error),
94
- );
84
+ logger.warn(`Failed to convert environment variable ${key}:`, String(error));
95
85
  return defaultValue;
96
86
  }
97
87
  }
98
88
 
99
89
  // Default type conversions
100
- if (typeof defaultValue === "boolean") {
101
- return (value.toLowerCase() === "true") as T;
90
+ if (typeof defaultValue === 'boolean') {
91
+ return (value.toLowerCase() === 'true') as T;
102
92
  }
103
93
 
104
- if (typeof defaultValue === "number") {
94
+ if (typeof defaultValue === 'number') {
105
95
  const num = Number(value);
106
96
  return (isNaN(num) ? defaultValue : num) as T;
107
97
  }
@@ -112,10 +102,7 @@ export function getEnvVar<T>(
112
102
  /**
113
103
  * Parse comma-separated environment variable as array
114
104
  */
115
- export function getEnvArray(
116
- key: string,
117
- defaultValue: string[] = [],
118
- ): string[] {
105
+ export function getEnvArray(key: string, defaultValue: string[] = []): string[] {
119
106
  const value = process.env[key];
120
107
 
121
108
  if (!value) {
@@ -123,8 +110,8 @@ export function getEnvArray(
123
110
  }
124
111
 
125
112
  return value
126
- .split(",")
127
- .map((item) => item.trim())
113
+ .split(',')
114
+ .map(item => item.trim())
128
115
  .filter(Boolean);
129
116
  }
130
117
 
@@ -141,10 +128,7 @@ export function getEnvJson<T>(key: string, defaultValue: T): T {
141
128
  try {
142
129
  return JSON.parse(value);
143
130
  } catch (error) {
144
- logger.warn(
145
- `Failed to parse JSON environment variable ${key}:`,
146
- String(error),
147
- );
131
+ logger.warn(`Failed to parse JSON environment variable ${key}:`, String(error));
148
132
  return defaultValue;
149
133
  }
150
134
  }
@@ -155,16 +139,14 @@ export function getEnvJson<T>(key: string, defaultValue: T): T {
155
139
  export function requireEnvVars(...keys: string[]): void {
156
140
  const missing: string[] = [];
157
141
 
158
- keys.forEach((key) => {
142
+ keys.forEach(key => {
159
143
  if (!process.env[key]) {
160
144
  missing.push(key);
161
145
  }
162
146
  });
163
147
 
164
148
  if (missing.length > 0) {
165
- throw new Error(
166
- `Missing required environment variables: ${missing.join(", ")}`,
167
- );
149
+ throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
168
150
  }
169
151
  }
170
152
 
@@ -181,7 +163,7 @@ export function envVar(prefix: string, name: string): string {
181
163
  export function getConfigValue(path: string): any {
182
164
  const config = getConfig();
183
165
 
184
- return path.split(".").reduce((obj, key) => {
166
+ return path.split('.').reduce((obj, key) => {
185
167
  return obj && obj[key] !== undefined ? obj[key] : undefined;
186
168
  }, config as any);
187
169
  }
@@ -191,9 +173,9 @@ export function getConfigValue(path: string): any {
191
173
  */
192
174
  export function isDevelopment(): boolean {
193
175
  try {
194
- return getConfig().server.environment === "development";
176
+ return getConfig().server.environment === 'development';
195
177
  } catch {
196
- return process.env.NODE_ENV === "development";
178
+ return process.env.NODE_ENV === 'development';
197
179
  }
198
180
  }
199
181
 
@@ -202,9 +184,9 @@ export function isDevelopment(): boolean {
202
184
  */
203
185
  export function isProduction(): boolean {
204
186
  try {
205
- return getConfig().server.environment === "production";
187
+ return getConfig().server.environment === 'production';
206
188
  } catch {
207
- return process.env.NODE_ENV === "production";
189
+ return process.env.NODE_ENV === 'production';
208
190
  }
209
191
  }
210
192
 
@@ -213,8 +195,8 @@ export function isProduction(): boolean {
213
195
  */
214
196
  export function isStaging(): boolean {
215
197
  try {
216
- return getConfig().server.environment === "staging";
198
+ return getConfig().server.environment === 'staging';
217
199
  } catch {
218
- return process.env.NODE_ENV === "staging";
200
+ return process.env.NODE_ENV === 'staging';
219
201
  }
220
202
  }