@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
  // Configuration Loader - Environment Variable Mapping and Validation
2
- import { ZodError } from "zod";
3
- import { ConfigSchema, AppConfig } from "./schema";
4
- import { createFrameworkLogger } from "../logger";
2
+ import { ZodError } from 'zod';
3
+ import { ConfigSchema, AppConfig } from './schema';
4
+ import { createFrameworkLogger } from '../logger';
5
5
 
6
- const logger = createFrameworkLogger("Config");
6
+ const logger = createFrameworkLogger('Config');
7
7
 
8
8
  /**
9
9
  * Load and validate configuration from environment variables
10
10
  * @returns Validated and typed application configuration
11
11
  */
12
12
  export function loadConfig(): AppConfig {
13
- logger.debug("Loading configuration from environment variables");
13
+ logger.debug('Loading configuration from environment variables');
14
14
 
15
15
  // Map environment variables to configuration structure
16
16
  const envConfig = {
@@ -18,36 +18,26 @@ export function loadConfig(): AppConfig {
18
18
  port: process.env.PORT || process.env.MORO_PORT,
19
19
  host: process.env.HOST || process.env.MORO_HOST,
20
20
  environment: process.env.NODE_ENV || process.env.MORO_ENV,
21
- maxConnections:
22
- process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS,
21
+ maxConnections: process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS,
23
22
  timeout: process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT,
24
23
  },
25
24
 
26
25
  serviceDiscovery: {
27
- enabled:
28
- process.env.SERVICE_DISCOVERY_ENABLED ||
29
- process.env.MORO_SERVICE_DISCOVERY,
26
+ enabled: process.env.SERVICE_DISCOVERY_ENABLED || process.env.MORO_SERVICE_DISCOVERY,
30
27
  type: process.env.DISCOVERY_TYPE || process.env.MORO_DISCOVERY_TYPE,
31
28
  consulUrl: process.env.CONSUL_URL || process.env.MORO_CONSUL_URL,
32
- kubernetesNamespace:
33
- process.env.K8S_NAMESPACE || process.env.MORO_K8S_NAMESPACE,
34
- healthCheckInterval:
35
- process.env.HEALTH_CHECK_INTERVAL || process.env.MORO_HEALTH_INTERVAL,
36
- retryAttempts:
37
- process.env.DISCOVERY_RETRY_ATTEMPTS ||
38
- process.env.MORO_DISCOVERY_RETRIES,
29
+ kubernetesNamespace: process.env.K8S_NAMESPACE || process.env.MORO_K8S_NAMESPACE,
30
+ healthCheckInterval: process.env.HEALTH_CHECK_INTERVAL || process.env.MORO_HEALTH_INTERVAL,
31
+ retryAttempts: process.env.DISCOVERY_RETRY_ATTEMPTS || process.env.MORO_DISCOVERY_RETRIES,
39
32
  },
40
33
 
41
34
  database: {
42
35
  url: process.env.DATABASE_URL || process.env.MORO_DATABASE_URL,
43
36
  redis: {
44
37
  url: process.env.REDIS_URL || process.env.MORO_REDIS_URL,
45
- maxRetries:
46
- process.env.REDIS_MAX_RETRIES || process.env.MORO_REDIS_RETRIES,
47
- retryDelay:
48
- process.env.REDIS_RETRY_DELAY || process.env.MORO_REDIS_DELAY,
49
- keyPrefix:
50
- process.env.REDIS_KEY_PREFIX || process.env.MORO_REDIS_PREFIX,
38
+ maxRetries: process.env.REDIS_MAX_RETRIES || process.env.MORO_REDIS_RETRIES,
39
+ retryDelay: process.env.REDIS_RETRY_DELAY || process.env.MORO_REDIS_DELAY,
40
+ keyPrefix: process.env.REDIS_KEY_PREFIX || process.env.MORO_REDIS_PREFIX,
51
41
  },
52
42
  mysql: process.env.MYSQL_HOST
53
43
  ? {
@@ -57,13 +47,10 @@ export function loadConfig(): AppConfig {
57
47
  username: process.env.MYSQL_USERNAME || process.env.MORO_MYSQL_USER,
58
48
  password: process.env.MYSQL_PASSWORD || process.env.MORO_MYSQL_PASS,
59
49
  connectionLimit:
60
- process.env.MYSQL_CONNECTION_LIMIT ||
61
- process.env.MORO_MYSQL_CONNECTIONS,
50
+ process.env.MYSQL_CONNECTION_LIMIT || process.env.MORO_MYSQL_CONNECTIONS,
62
51
  acquireTimeout:
63
- process.env.MYSQL_ACQUIRE_TIMEOUT ||
64
- process.env.MORO_MYSQL_ACQUIRE_TIMEOUT,
65
- timeout:
66
- process.env.MYSQL_TIMEOUT || process.env.MORO_MYSQL_TIMEOUT,
52
+ process.env.MYSQL_ACQUIRE_TIMEOUT || process.env.MORO_MYSQL_ACQUIRE_TIMEOUT,
53
+ timeout: process.env.MYSQL_TIMEOUT || process.env.MORO_MYSQL_TIMEOUT,
67
54
  }
68
55
  : undefined,
69
56
  },
@@ -76,62 +63,43 @@ export function loadConfig(): AppConfig {
76
63
  strategy: process.env.CACHE_STRATEGY || process.env.MORO_CACHE_STRATEGY,
77
64
  },
78
65
  rateLimit: {
79
- enabled:
80
- process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED,
66
+ enabled: process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED,
81
67
  defaultRequests:
82
- process.env.DEFAULT_RATE_LIMIT_REQUESTS ||
83
- process.env.MORO_RATE_LIMIT_REQUESTS,
84
- defaultWindow:
85
- process.env.DEFAULT_RATE_LIMIT_WINDOW ||
86
- process.env.MORO_RATE_LIMIT_WINDOW,
68
+ process.env.DEFAULT_RATE_LIMIT_REQUESTS || process.env.MORO_RATE_LIMIT_REQUESTS,
69
+ defaultWindow: process.env.DEFAULT_RATE_LIMIT_WINDOW || process.env.MORO_RATE_LIMIT_WINDOW,
87
70
  skipSuccessfulRequests:
88
- process.env.RATE_LIMIT_SKIP_SUCCESS ||
89
- process.env.MORO_RATE_LIMIT_SKIP_SUCCESS,
71
+ process.env.RATE_LIMIT_SKIP_SUCCESS || process.env.MORO_RATE_LIMIT_SKIP_SUCCESS,
90
72
  skipFailedRequests:
91
- process.env.RATE_LIMIT_SKIP_FAILED ||
92
- process.env.MORO_RATE_LIMIT_SKIP_FAILED,
73
+ process.env.RATE_LIMIT_SKIP_FAILED || process.env.MORO_RATE_LIMIT_SKIP_FAILED,
93
74
  },
94
75
  validation: {
95
- enabled:
96
- process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED,
97
- stripUnknown:
98
- process.env.VALIDATION_STRIP_UNKNOWN ||
99
- process.env.MORO_VALIDATION_STRIP,
100
- abortEarly:
101
- process.env.VALIDATION_ABORT_EARLY ||
102
- process.env.MORO_VALIDATION_ABORT,
76
+ enabled: process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED,
77
+ stripUnknown: process.env.VALIDATION_STRIP_UNKNOWN || process.env.MORO_VALIDATION_STRIP,
78
+ abortEarly: process.env.VALIDATION_ABORT_EARLY || process.env.MORO_VALIDATION_ABORT,
103
79
  },
104
80
  },
105
81
 
106
82
  logging: {
107
83
  level: process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL,
108
84
  format: process.env.LOG_FORMAT || process.env.MORO_LOG_FORMAT,
109
- enableColors: process.env.NO_COLOR
110
- ? false
111
- : process.env.LOG_COLORS !== "false",
112
- enableTimestamp: process.env.LOG_TIMESTAMP !== "false",
113
- enableContext: process.env.LOG_CONTEXT !== "false",
85
+ enableColors: process.env.NO_COLOR ? false : process.env.LOG_COLORS !== 'false',
86
+ enableTimestamp: process.env.LOG_TIMESTAMP !== 'false',
87
+ enableContext: process.env.LOG_CONTEXT !== 'false',
114
88
  outputs: {
115
- console: process.env.LOG_CONSOLE !== "false",
89
+ console: process.env.LOG_CONSOLE !== 'false',
116
90
  file: {
117
- enabled:
118
- process.env.LOG_FILE_ENABLED === "true" ||
119
- process.env.MORO_LOG_FILE === "true",
91
+ enabled: process.env.LOG_FILE_ENABLED === 'true' || process.env.MORO_LOG_FILE === 'true',
120
92
  path: process.env.LOG_FILE_PATH || process.env.MORO_LOG_PATH,
121
- maxSize:
122
- process.env.LOG_FILE_MAX_SIZE || process.env.MORO_LOG_MAX_SIZE,
123
- maxFiles:
124
- process.env.LOG_FILE_MAX_FILES || process.env.MORO_LOG_MAX_FILES,
93
+ maxSize: process.env.LOG_FILE_MAX_SIZE || process.env.MORO_LOG_MAX_SIZE,
94
+ maxFiles: process.env.LOG_FILE_MAX_FILES || process.env.MORO_LOG_MAX_FILES,
125
95
  },
126
96
  webhook: {
127
97
  enabled:
128
- process.env.LOG_WEBHOOK_ENABLED === "true" ||
129
- process.env.MORO_LOG_WEBHOOK === "true",
98
+ process.env.LOG_WEBHOOK_ENABLED === 'true' || process.env.MORO_LOG_WEBHOOK === 'true',
130
99
  url: process.env.LOG_WEBHOOK_URL || process.env.MORO_LOG_WEBHOOK_URL,
131
100
  headers: parseJsonEnv(
132
- process.env.LOG_WEBHOOK_HEADERS ||
133
- process.env.MORO_LOG_WEBHOOK_HEADERS,
134
- {},
101
+ process.env.LOG_WEBHOOK_HEADERS || process.env.MORO_LOG_WEBHOOK_HEADERS,
102
+ {}
135
103
  ),
136
104
  },
137
105
  },
@@ -139,34 +107,24 @@ export function loadConfig(): AppConfig {
139
107
 
140
108
  security: {
141
109
  cors: {
142
- enabled: process.env.CORS_ENABLED !== "false",
143
- origin: parseArrayOrString(
144
- process.env.CORS_ORIGIN || process.env.MORO_CORS_ORIGIN,
145
- ),
146
- methods: parseArrayEnv(
147
- process.env.CORS_METHODS || process.env.MORO_CORS_METHODS,
148
- ),
149
- allowedHeaders: parseArrayEnv(
150
- process.env.CORS_HEADERS || process.env.MORO_CORS_HEADERS,
151
- ),
152
- credentials: process.env.CORS_CREDENTIALS === "true",
110
+ enabled: process.env.CORS_ENABLED !== 'false',
111
+ origin: parseArrayOrString(process.env.CORS_ORIGIN || process.env.MORO_CORS_ORIGIN),
112
+ methods: parseArrayEnv(process.env.CORS_METHODS || process.env.MORO_CORS_METHODS),
113
+ allowedHeaders: parseArrayEnv(process.env.CORS_HEADERS || process.env.MORO_CORS_HEADERS),
114
+ credentials: process.env.CORS_CREDENTIALS === 'true',
153
115
  },
154
116
  helmet: {
155
- enabled: process.env.HELMET_ENABLED !== "false",
156
- contentSecurityPolicy: process.env.HELMET_CSP !== "false",
157
- hsts: process.env.HELMET_HSTS !== "false",
158
- noSniff: process.env.HELMET_NO_SNIFF !== "false",
159
- frameguard: process.env.HELMET_FRAMEGUARD !== "false",
117
+ enabled: process.env.HELMET_ENABLED !== 'false',
118
+ contentSecurityPolicy: process.env.HELMET_CSP !== 'false',
119
+ hsts: process.env.HELMET_HSTS !== 'false',
120
+ noSniff: process.env.HELMET_NO_SNIFF !== 'false',
121
+ frameguard: process.env.HELMET_FRAMEGUARD !== 'false',
160
122
  },
161
123
  rateLimit: {
162
124
  global: {
163
- enabled: process.env.GLOBAL_RATE_LIMIT_ENABLED === "true",
164
- requests:
165
- process.env.GLOBAL_RATE_LIMIT_REQUESTS ||
166
- process.env.MORO_GLOBAL_RATE_REQUESTS,
167
- window:
168
- process.env.GLOBAL_RATE_LIMIT_WINDOW ||
169
- process.env.MORO_GLOBAL_RATE_WINDOW,
125
+ enabled: process.env.GLOBAL_RATE_LIMIT_ENABLED === 'true',
126
+ requests: process.env.GLOBAL_RATE_LIMIT_REQUESTS || process.env.MORO_GLOBAL_RATE_REQUESTS,
127
+ window: process.env.GLOBAL_RATE_LIMIT_WINDOW || process.env.MORO_GLOBAL_RATE_WINDOW,
170
128
  },
171
129
  },
172
130
  },
@@ -175,33 +133,20 @@ export function loadConfig(): AppConfig {
175
133
  stripe:
176
134
  process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET
177
135
  ? {
178
- secretKey:
179
- process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET,
180
- publishableKey:
181
- process.env.STRIPE_PUBLISHABLE_KEY ||
182
- process.env.MORO_STRIPE_PUBLIC,
183
- webhookSecret:
184
- process.env.STRIPE_WEBHOOK_SECRET ||
185
- process.env.MORO_STRIPE_WEBHOOK,
186
- apiVersion:
187
- process.env.STRIPE_API_VERSION ||
188
- process.env.MORO_STRIPE_VERSION,
136
+ secretKey: process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET,
137
+ publishableKey: process.env.STRIPE_PUBLISHABLE_KEY || process.env.MORO_STRIPE_PUBLIC,
138
+ webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || process.env.MORO_STRIPE_WEBHOOK,
139
+ apiVersion: process.env.STRIPE_API_VERSION || process.env.MORO_STRIPE_VERSION,
189
140
  }
190
141
  : undefined,
191
142
 
192
143
  paypal:
193
144
  process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT
194
145
  ? {
195
- clientId:
196
- process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT,
197
- clientSecret:
198
- process.env.PAYPAL_CLIENT_SECRET ||
199
- process.env.MORO_PAYPAL_SECRET,
200
- webhookId:
201
- process.env.PAYPAL_WEBHOOK_ID ||
202
- process.env.MORO_PAYPAL_WEBHOOK,
203
- environment:
204
- process.env.PAYPAL_ENVIRONMENT || process.env.MORO_PAYPAL_ENV,
146
+ clientId: process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT,
147
+ clientSecret: process.env.PAYPAL_CLIENT_SECRET || process.env.MORO_PAYPAL_SECRET,
148
+ webhookId: process.env.PAYPAL_WEBHOOK_ID || process.env.MORO_PAYPAL_WEBHOOK,
149
+ environment: process.env.PAYPAL_ENVIRONMENT || process.env.MORO_PAYPAL_ENV,
205
150
  }
206
151
  : undefined,
207
152
 
@@ -210,7 +155,7 @@ export function loadConfig(): AppConfig {
210
155
  ? {
211
156
  host: process.env.SMTP_HOST || process.env.MORO_SMTP_HOST,
212
157
  port: process.env.SMTP_PORT || process.env.MORO_SMTP_PORT,
213
- secure: process.env.SMTP_SECURE === "true",
158
+ secure: process.env.SMTP_SECURE === 'true',
214
159
  username: process.env.SMTP_USERNAME || process.env.MORO_SMTP_USER,
215
160
  password: process.env.SMTP_PASSWORD || process.env.MORO_SMTP_PASS,
216
161
  }
@@ -219,25 +164,18 @@ export function loadConfig(): AppConfig {
219
164
 
220
165
  performance: {
221
166
  compression: {
222
- enabled: process.env.COMPRESSION_ENABLED !== "false",
223
- level:
224
- process.env.COMPRESSION_LEVEL || process.env.MORO_COMPRESSION_LEVEL,
225
- threshold:
226
- process.env.COMPRESSION_THRESHOLD ||
227
- process.env.MORO_COMPRESSION_THRESHOLD,
167
+ enabled: process.env.COMPRESSION_ENABLED !== 'false',
168
+ level: process.env.COMPRESSION_LEVEL || process.env.MORO_COMPRESSION_LEVEL,
169
+ threshold: process.env.COMPRESSION_THRESHOLD || process.env.MORO_COMPRESSION_THRESHOLD,
228
170
  },
229
171
  circuitBreaker: {
230
- enabled: process.env.CIRCUIT_BREAKER_ENABLED !== "false",
231
- failureThreshold:
232
- process.env.CIRCUIT_BREAKER_THRESHOLD ||
233
- process.env.MORO_CB_THRESHOLD,
234
- resetTimeout:
235
- process.env.CIRCUIT_BREAKER_RESET || process.env.MORO_CB_RESET,
236
- monitoringPeriod:
237
- process.env.CIRCUIT_BREAKER_MONITOR || process.env.MORO_CB_MONITOR,
172
+ enabled: process.env.CIRCUIT_BREAKER_ENABLED !== 'false',
173
+ failureThreshold: process.env.CIRCUIT_BREAKER_THRESHOLD || process.env.MORO_CB_THRESHOLD,
174
+ resetTimeout: process.env.CIRCUIT_BREAKER_RESET || process.env.MORO_CB_RESET,
175
+ monitoringPeriod: process.env.CIRCUIT_BREAKER_MONITOR || process.env.MORO_CB_MONITOR,
238
176
  },
239
177
  clustering: {
240
- enabled: process.env.CLUSTERING_ENABLED === "true",
178
+ enabled: process.env.CLUSTERING_ENABLED === 'true',
241
179
  workers: process.env.CLUSTER_WORKERS || process.env.MORO_WORKERS,
242
180
  },
243
181
  },
@@ -247,9 +185,9 @@ export function loadConfig(): AppConfig {
247
185
  try {
248
186
  const validatedConfig = ConfigSchema.parse(envConfig);
249
187
 
250
- logger.info("Configuration loaded and validated successfully");
188
+ logger.info('Configuration loaded and validated successfully');
251
189
  logger.debug(
252
- "Configuration details:",
190
+ 'Configuration details:',
253
191
  JSON.stringify({
254
192
  server: {
255
193
  port: validatedConfig.server.port,
@@ -263,45 +201,37 @@ export function loadConfig(): AppConfig {
263
201
  cacheEnabled: validatedConfig.modules.cache.enabled,
264
202
  rateLimitEnabled: validatedConfig.modules.rateLimit.enabled,
265
203
  },
266
- }),
204
+ })
267
205
  );
268
206
 
269
207
  return validatedConfig;
270
208
  } catch (error) {
271
- logger.error("❌ Configuration validation failed");
209
+ logger.error('❌ Configuration validation failed');
272
210
 
273
211
  if (error instanceof ZodError) {
274
- logger.error("Configuration errors:");
212
+ logger.error('Configuration errors:');
275
213
  error.issues.forEach((err: any) => {
276
- const path = err.path.join(".");
214
+ const path = err.path.join('.');
277
215
  logger.error(` - ${path}: ${err.message}`);
278
216
 
279
217
  // Provide helpful hints for common errors
280
- if (path.includes("port") && err.code === "invalid_type") {
218
+ if (path.includes('port') && err.code === 'invalid_type') {
281
219
  logger.error(` Hint: PORT must be a number between 1 and 65535`);
282
220
  }
283
- if (path.includes("url") && err.code === "invalid_string") {
284
- logger.error(
285
- ` Hint: URLs must include protocol (http:// or https://)`,
286
- );
221
+ if (path.includes('url') && err.code === 'invalid_string') {
222
+ logger.error(` Hint: URLs must include protocol (http:// or https://)`);
287
223
  }
288
- if (path.includes("environment") && err.code === "invalid_enum_value") {
289
- logger.error(
290
- ` Hint: NODE_ENV must be one of: development, staging, production`,
291
- );
224
+ if (path.includes('environment') && err.code === 'invalid_enum_value') {
225
+ logger.error(` Hint: NODE_ENV must be one of: development, staging, production`);
292
226
  }
293
227
  });
294
228
 
295
- logger.error("\nConfiguration Help:");
296
- logger.error(
297
- " - Use MORO_* prefixed environment variables for framework-specific config",
298
- );
299
- logger.error(
300
- " - Check .env.example for available configuration options",
301
- );
302
- logger.error(" - See documentation for detailed configuration guide");
229
+ logger.error('\nConfiguration Help:');
230
+ logger.error(' - Use MORO_* prefixed environment variables for framework-specific config');
231
+ logger.error(' - Check .env.example for available configuration options');
232
+ logger.error(' - See documentation for detailed configuration guide');
303
233
  } else {
304
- logger.error("Unexpected configuration error:", String(error));
234
+ logger.error('Unexpected configuration error:', String(error));
305
235
  }
306
236
 
307
237
  process.exit(1);
@@ -328,27 +258,25 @@ function parseJsonEnv(value: string | undefined, defaultValue: any): any {
328
258
  function parseArrayEnv(value: string | undefined): string[] | undefined {
329
259
  if (!value) return undefined;
330
260
  return value
331
- .split(",")
332
- .map((item) => item.trim())
261
+ .split(',')
262
+ .map(item => item.trim())
333
263
  .filter(Boolean);
334
264
  }
335
265
 
336
266
  /**
337
267
  * Parse array or string environment variable
338
268
  */
339
- function parseArrayOrString(
340
- value: string | undefined,
341
- ): string | string[] | boolean | undefined {
269
+ function parseArrayOrString(value: string | undefined): string | string[] | boolean | undefined {
342
270
  if (!value) return undefined;
343
271
 
344
272
  // If it contains commas, treat as array
345
- if (value.includes(",")) {
273
+ if (value.includes(',')) {
346
274
  return parseArrayEnv(value);
347
275
  }
348
276
 
349
277
  // Special boolean values
350
- if (value === "true") return true;
351
- if (value === "false") return false;
278
+ if (value === 'true') return true;
279
+ if (value === 'false') return false;
352
280
 
353
281
  return value;
354
282
  }