@morojs/moro 1.0.0

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 (345) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/core/config/index.d.ts +19 -0
  4. package/dist/core/config/index.js +59 -0
  5. package/dist/core/config/index.js.map +1 -0
  6. package/dist/core/config/loader.d.ts +6 -0
  7. package/dist/core/config/loader.js +288 -0
  8. package/dist/core/config/loader.js.map +1 -0
  9. package/dist/core/config/schema.d.ts +335 -0
  10. package/dist/core/config/schema.js +286 -0
  11. package/dist/core/config/schema.js.map +1 -0
  12. package/dist/core/config/utils.d.ts +50 -0
  13. package/dist/core/config/utils.js +185 -0
  14. package/dist/core/config/utils.js.map +1 -0
  15. package/dist/core/database/adapters/drizzle.d.ts +29 -0
  16. package/dist/core/database/adapters/drizzle.js +366 -0
  17. package/dist/core/database/adapters/drizzle.js.map +1 -0
  18. package/dist/core/database/adapters/index.d.ts +8 -0
  19. package/dist/core/database/adapters/index.js +48 -0
  20. package/dist/core/database/adapters/index.js.map +1 -0
  21. package/dist/core/database/adapters/mongodb.d.ts +35 -0
  22. package/dist/core/database/adapters/mongodb.js +215 -0
  23. package/dist/core/database/adapters/mongodb.js.map +1 -0
  24. package/dist/core/database/adapters/mysql.d.ts +23 -0
  25. package/dist/core/database/adapters/mysql.js +149 -0
  26. package/dist/core/database/adapters/mysql.js.map +1 -0
  27. package/dist/core/database/adapters/postgresql.d.ts +24 -0
  28. package/dist/core/database/adapters/postgresql.js +160 -0
  29. package/dist/core/database/adapters/postgresql.js.map +1 -0
  30. package/dist/core/database/adapters/redis.d.ts +50 -0
  31. package/dist/core/database/adapters/redis.js +266 -0
  32. package/dist/core/database/adapters/redis.js.map +1 -0
  33. package/dist/core/database/adapters/sqlite.d.ts +23 -0
  34. package/dist/core/database/adapters/sqlite.js +194 -0
  35. package/dist/core/database/adapters/sqlite.js.map +1 -0
  36. package/dist/core/database/index.d.ts +2 -0
  37. package/dist/core/database/index.js +20 -0
  38. package/dist/core/database/index.js.map +1 -0
  39. package/dist/core/docs/index.d.ts +63 -0
  40. package/dist/core/docs/index.js +170 -0
  41. package/dist/core/docs/index.js.map +1 -0
  42. package/dist/core/docs/openapi-generator.d.ts +124 -0
  43. package/dist/core/docs/openapi-generator.js +413 -0
  44. package/dist/core/docs/openapi-generator.js.map +1 -0
  45. package/dist/core/docs/simple-docs.d.ts +21 -0
  46. package/dist/core/docs/simple-docs.js +268 -0
  47. package/dist/core/docs/simple-docs.js.map +1 -0
  48. package/dist/core/docs/swagger-ui.d.ts +28 -0
  49. package/dist/core/docs/swagger-ui.js +317 -0
  50. package/dist/core/docs/swagger-ui.js.map +1 -0
  51. package/dist/core/docs/zod-to-openapi.d.ts +29 -0
  52. package/dist/core/docs/zod-to-openapi.js +414 -0
  53. package/dist/core/docs/zod-to-openapi.js.map +1 -0
  54. package/dist/core/events/event-bus.d.ts +27 -0
  55. package/dist/core/events/event-bus.js +193 -0
  56. package/dist/core/events/event-bus.js.map +1 -0
  57. package/dist/core/events/index.d.ts +2 -0
  58. package/dist/core/events/index.js +7 -0
  59. package/dist/core/events/index.js.map +1 -0
  60. package/dist/core/framework.d.ts +57 -0
  61. package/dist/core/framework.js +432 -0
  62. package/dist/core/framework.js.map +1 -0
  63. package/dist/core/http/http-server.d.ts +114 -0
  64. package/dist/core/http/http-server.js +1154 -0
  65. package/dist/core/http/http-server.js.map +1 -0
  66. package/dist/core/http/index.d.ts +3 -0
  67. package/dist/core/http/index.js +10 -0
  68. package/dist/core/http/index.js.map +1 -0
  69. package/dist/core/http/router.d.ts +14 -0
  70. package/dist/core/http/router.js +113 -0
  71. package/dist/core/http/router.js.map +1 -0
  72. package/dist/core/logger/filters.d.ts +9 -0
  73. package/dist/core/logger/filters.js +134 -0
  74. package/dist/core/logger/filters.js.map +1 -0
  75. package/dist/core/logger/index.d.ts +3 -0
  76. package/dist/core/logger/index.js +26 -0
  77. package/dist/core/logger/index.js.map +1 -0
  78. package/dist/core/logger/logger.d.ts +49 -0
  79. package/dist/core/logger/logger.js +332 -0
  80. package/dist/core/logger/logger.js.map +1 -0
  81. package/dist/core/logger/outputs.d.ts +42 -0
  82. package/dist/core/logger/outputs.js +110 -0
  83. package/dist/core/logger/outputs.js.map +1 -0
  84. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +15 -0
  85. package/dist/core/middleware/built-in/adapters/cache/file.js +128 -0
  86. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -0
  87. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +5 -0
  88. package/dist/core/middleware/built-in/adapters/cache/index.js +28 -0
  89. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -0
  90. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +11 -0
  91. package/dist/core/middleware/built-in/adapters/cache/memory.js +65 -0
  92. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -0
  93. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +17 -0
  94. package/dist/core/middleware/built-in/adapters/cache/redis.js +91 -0
  95. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -0
  96. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +21 -0
  97. package/dist/core/middleware/built-in/adapters/cdn/azure.js +40 -0
  98. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -0
  99. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +14 -0
  100. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +77 -0
  101. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -0
  102. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +15 -0
  103. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +73 -0
  104. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -0
  105. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +5 -0
  106. package/dist/core/middleware/built-in/adapters/cdn/index.js +28 -0
  107. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -0
  108. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -0
  109. package/dist/core/middleware/built-in/adapters/index.js +26 -0
  110. package/dist/core/middleware/built-in/adapters/index.js.map +1 -0
  111. package/dist/core/middleware/built-in/auth.d.ts +2 -0
  112. package/dist/core/middleware/built-in/auth.js +38 -0
  113. package/dist/core/middleware/built-in/auth.js.map +1 -0
  114. package/dist/core/middleware/built-in/cache.d.ts +3 -0
  115. package/dist/core/middleware/built-in/cache.js +188 -0
  116. package/dist/core/middleware/built-in/cache.js.map +1 -0
  117. package/dist/core/middleware/built-in/cdn.d.ts +3 -0
  118. package/dist/core/middleware/built-in/cdn.js +115 -0
  119. package/dist/core/middleware/built-in/cdn.js.map +1 -0
  120. package/dist/core/middleware/built-in/cookie.d.ts +14 -0
  121. package/dist/core/middleware/built-in/cookie.js +68 -0
  122. package/dist/core/middleware/built-in/cookie.js.map +1 -0
  123. package/dist/core/middleware/built-in/cors.d.ts +2 -0
  124. package/dist/core/middleware/built-in/cors.js +29 -0
  125. package/dist/core/middleware/built-in/cors.js.map +1 -0
  126. package/dist/core/middleware/built-in/csp.d.ts +22 -0
  127. package/dist/core/middleware/built-in/csp.js +74 -0
  128. package/dist/core/middleware/built-in/csp.js.map +1 -0
  129. package/dist/core/middleware/built-in/csrf.d.ts +9 -0
  130. package/dist/core/middleware/built-in/csrf.js +66 -0
  131. package/dist/core/middleware/built-in/csrf.js.map +1 -0
  132. package/dist/core/middleware/built-in/error-tracker.d.ts +1 -0
  133. package/dist/core/middleware/built-in/error-tracker.js +19 -0
  134. package/dist/core/middleware/built-in/error-tracker.js.map +1 -0
  135. package/dist/core/middleware/built-in/index.d.ts +70 -0
  136. package/dist/core/middleware/built-in/index.js +70 -0
  137. package/dist/core/middleware/built-in/index.js.map +1 -0
  138. package/dist/core/middleware/built-in/performance-monitor.d.ts +1 -0
  139. package/dist/core/middleware/built-in/performance-monitor.js +22 -0
  140. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -0
  141. package/dist/core/middleware/built-in/rate-limit.d.ts +6 -0
  142. package/dist/core/middleware/built-in/rate-limit.js +47 -0
  143. package/dist/core/middleware/built-in/rate-limit.js.map +1 -0
  144. package/dist/core/middleware/built-in/request-logger.d.ts +1 -0
  145. package/dist/core/middleware/built-in/request-logger.js +15 -0
  146. package/dist/core/middleware/built-in/request-logger.js.map +1 -0
  147. package/dist/core/middleware/built-in/session.d.ts +41 -0
  148. package/dist/core/middleware/built-in/session.js +209 -0
  149. package/dist/core/middleware/built-in/session.js.map +1 -0
  150. package/dist/core/middleware/built-in/sse.d.ts +6 -0
  151. package/dist/core/middleware/built-in/sse.js +73 -0
  152. package/dist/core/middleware/built-in/sse.js.map +1 -0
  153. package/dist/core/middleware/built-in/validation.d.ts +2 -0
  154. package/dist/core/middleware/built-in/validation.js +31 -0
  155. package/dist/core/middleware/built-in/validation.js.map +1 -0
  156. package/dist/core/middleware/index.d.ts +21 -0
  157. package/dist/core/middleware/index.js +152 -0
  158. package/dist/core/middleware/index.js.map +1 -0
  159. package/dist/core/modules/auto-discovery.d.ts +27 -0
  160. package/dist/core/modules/auto-discovery.js +255 -0
  161. package/dist/core/modules/auto-discovery.js.map +1 -0
  162. package/dist/core/modules/index.d.ts +2 -0
  163. package/dist/core/modules/index.js +11 -0
  164. package/dist/core/modules/index.js.map +1 -0
  165. package/dist/core/modules/modules.d.ts +10 -0
  166. package/dist/core/modules/modules.js +137 -0
  167. package/dist/core/modules/modules.js.map +1 -0
  168. package/dist/core/networking/index.d.ts +2 -0
  169. package/dist/core/networking/index.js +9 -0
  170. package/dist/core/networking/index.js.map +1 -0
  171. package/dist/core/networking/service-discovery.d.ts +38 -0
  172. package/dist/core/networking/service-discovery.js +233 -0
  173. package/dist/core/networking/service-discovery.js.map +1 -0
  174. package/dist/core/networking/websocket-manager.d.ts +27 -0
  175. package/dist/core/networking/websocket-manager.js +211 -0
  176. package/dist/core/networking/websocket-manager.js.map +1 -0
  177. package/dist/core/routing/app-integration.d.ts +42 -0
  178. package/dist/core/routing/app-integration.js +152 -0
  179. package/dist/core/routing/app-integration.js.map +1 -0
  180. package/dist/core/routing/index.d.ts +106 -0
  181. package/dist/core/routing/index.js +343 -0
  182. package/dist/core/routing/index.js.map +1 -0
  183. package/dist/core/runtime/aws-lambda-adapter.d.ts +43 -0
  184. package/dist/core/runtime/aws-lambda-adapter.js +108 -0
  185. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -0
  186. package/dist/core/runtime/base-adapter.d.ts +16 -0
  187. package/dist/core/runtime/base-adapter.js +105 -0
  188. package/dist/core/runtime/base-adapter.js.map +1 -0
  189. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +18 -0
  190. package/dist/core/runtime/cloudflare-workers-adapter.js +131 -0
  191. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -0
  192. package/dist/core/runtime/index.d.ts +14 -0
  193. package/dist/core/runtime/index.js +56 -0
  194. package/dist/core/runtime/index.js.map +1 -0
  195. package/dist/core/runtime/node-adapter.d.ts +15 -0
  196. package/dist/core/runtime/node-adapter.js +204 -0
  197. package/dist/core/runtime/node-adapter.js.map +1 -0
  198. package/dist/core/runtime/vercel-edge-adapter.d.ts +10 -0
  199. package/dist/core/runtime/vercel-edge-adapter.js +106 -0
  200. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -0
  201. package/dist/core/utilities/circuit-breaker.d.ts +14 -0
  202. package/dist/core/utilities/circuit-breaker.js +42 -0
  203. package/dist/core/utilities/circuit-breaker.js.map +1 -0
  204. package/dist/core/utilities/container.d.ts +116 -0
  205. package/dist/core/utilities/container.js +529 -0
  206. package/dist/core/utilities/container.js.map +1 -0
  207. package/dist/core/utilities/hooks.d.ts +24 -0
  208. package/dist/core/utilities/hooks.js +131 -0
  209. package/dist/core/utilities/hooks.js.map +1 -0
  210. package/dist/core/utilities/index.d.ts +4 -0
  211. package/dist/core/utilities/index.js +22 -0
  212. package/dist/core/utilities/index.js.map +1 -0
  213. package/dist/core/validation/index.d.ts +30 -0
  214. package/dist/core/validation/index.js +144 -0
  215. package/dist/core/validation/index.js.map +1 -0
  216. package/dist/index.d.ts +30 -0
  217. package/dist/index.js +72 -0
  218. package/dist/index.js.map +1 -0
  219. package/dist/moro.d.ts +82 -0
  220. package/dist/moro.js +679 -0
  221. package/dist/moro.js.map +1 -0
  222. package/dist/types/cache.d.ts +34 -0
  223. package/dist/types/cache.js +3 -0
  224. package/dist/types/cache.js.map +1 -0
  225. package/dist/types/cdn.d.ts +19 -0
  226. package/dist/types/cdn.js +3 -0
  227. package/dist/types/cdn.js.map +1 -0
  228. package/dist/types/core.d.ts +13 -0
  229. package/dist/types/core.js +3 -0
  230. package/dist/types/core.js.map +1 -0
  231. package/dist/types/database.d.ts +29 -0
  232. package/dist/types/database.js +3 -0
  233. package/dist/types/database.js.map +1 -0
  234. package/dist/types/discovery.d.ts +6 -0
  235. package/dist/types/discovery.js +3 -0
  236. package/dist/types/discovery.js.map +1 -0
  237. package/dist/types/events.d.ts +116 -0
  238. package/dist/types/events.js +3 -0
  239. package/dist/types/events.js.map +1 -0
  240. package/dist/types/hooks.d.ts +38 -0
  241. package/dist/types/hooks.js +3 -0
  242. package/dist/types/hooks.js.map +1 -0
  243. package/dist/types/http.d.ts +51 -0
  244. package/dist/types/http.js +3 -0
  245. package/dist/types/http.js.map +1 -0
  246. package/dist/types/logger.d.ts +77 -0
  247. package/dist/types/logger.js +3 -0
  248. package/dist/types/logger.js.map +1 -0
  249. package/dist/types/module.d.ts +91 -0
  250. package/dist/types/module.js +3 -0
  251. package/dist/types/module.js.map +1 -0
  252. package/dist/types/runtime.d.ts +48 -0
  253. package/dist/types/runtime.js +3 -0
  254. package/dist/types/runtime.js.map +1 -0
  255. package/dist/types/session.d.ts +66 -0
  256. package/dist/types/session.js +3 -0
  257. package/dist/types/session.js.map +1 -0
  258. package/package.json +176 -0
  259. package/src/core/config/index.ts +47 -0
  260. package/src/core/config/loader.ts +366 -0
  261. package/src/core/config/schema.ts +346 -0
  262. package/src/core/config/utils.ts +220 -0
  263. package/src/core/database/README.md +228 -0
  264. package/src/core/database/adapters/drizzle.ts +425 -0
  265. package/src/core/database/adapters/index.ts +45 -0
  266. package/src/core/database/adapters/mongodb.ts +292 -0
  267. package/src/core/database/adapters/mysql.ts +217 -0
  268. package/src/core/database/adapters/postgresql.ts +211 -0
  269. package/src/core/database/adapters/redis.ts +331 -0
  270. package/src/core/database/adapters/sqlite.ts +255 -0
  271. package/src/core/database/index.ts +3 -0
  272. package/src/core/docs/index.ts +245 -0
  273. package/src/core/docs/openapi-generator.ts +588 -0
  274. package/src/core/docs/simple-docs.ts +305 -0
  275. package/src/core/docs/swagger-ui.ts +370 -0
  276. package/src/core/docs/zod-to-openapi.ts +532 -0
  277. package/src/core/events/event-bus.ts +249 -0
  278. package/src/core/events/index.ts +12 -0
  279. package/src/core/framework.ts +621 -0
  280. package/src/core/http/http-server.ts +1421 -0
  281. package/src/core/http/index.ts +11 -0
  282. package/src/core/http/router.ts +153 -0
  283. package/src/core/logger/filters.ts +148 -0
  284. package/src/core/logger/index.ts +20 -0
  285. package/src/core/logger/logger.ts +434 -0
  286. package/src/core/logger/outputs.ts +136 -0
  287. package/src/core/middleware/built-in/adapters/cache/file.ts +106 -0
  288. package/src/core/middleware/built-in/adapters/cache/index.ts +26 -0
  289. package/src/core/middleware/built-in/adapters/cache/memory.ts +73 -0
  290. package/src/core/middleware/built-in/adapters/cache/redis.ts +103 -0
  291. package/src/core/middleware/built-in/adapters/cdn/azure.ts +68 -0
  292. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +100 -0
  293. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +92 -0
  294. package/src/core/middleware/built-in/adapters/cdn/index.ts +23 -0
  295. package/src/core/middleware/built-in/adapters/index.ts +7 -0
  296. package/src/core/middleware/built-in/auth.ts +39 -0
  297. package/src/core/middleware/built-in/cache.ts +228 -0
  298. package/src/core/middleware/built-in/cdn.ts +151 -0
  299. package/src/core/middleware/built-in/cookie.ts +90 -0
  300. package/src/core/middleware/built-in/cors.ts +38 -0
  301. package/src/core/middleware/built-in/csp.ts +107 -0
  302. package/src/core/middleware/built-in/csrf.ts +87 -0
  303. package/src/core/middleware/built-in/error-tracker.ts +16 -0
  304. package/src/core/middleware/built-in/index.ts +57 -0
  305. package/src/core/middleware/built-in/performance-monitor.ts +25 -0
  306. package/src/core/middleware/built-in/rate-limit.ts +60 -0
  307. package/src/core/middleware/built-in/request-logger.ts +14 -0
  308. package/src/core/middleware/built-in/session.ts +311 -0
  309. package/src/core/middleware/built-in/sse.ts +91 -0
  310. package/src/core/middleware/built-in/validation.ts +33 -0
  311. package/src/core/middleware/index.ts +188 -0
  312. package/src/core/modules/auto-discovery.ts +265 -0
  313. package/src/core/modules/index.ts +6 -0
  314. package/src/core/modules/modules.ts +125 -0
  315. package/src/core/networking/index.ts +7 -0
  316. package/src/core/networking/service-discovery.ts +309 -0
  317. package/src/core/networking/websocket-manager.ts +259 -0
  318. package/src/core/routing/app-integration.ts +229 -0
  319. package/src/core/routing/index.ts +519 -0
  320. package/src/core/runtime/aws-lambda-adapter.ts +157 -0
  321. package/src/core/runtime/base-adapter.ts +140 -0
  322. package/src/core/runtime/cloudflare-workers-adapter.ts +166 -0
  323. package/src/core/runtime/index.ts +74 -0
  324. package/src/core/runtime/node-adapter.ts +210 -0
  325. package/src/core/runtime/vercel-edge-adapter.ts +125 -0
  326. package/src/core/utilities/circuit-breaker.ts +46 -0
  327. package/src/core/utilities/container.ts +760 -0
  328. package/src/core/utilities/hooks.ts +148 -0
  329. package/src/core/utilities/index.ts +16 -0
  330. package/src/core/validation/index.ts +216 -0
  331. package/src/index.ts +120 -0
  332. package/src/moro.ts +842 -0
  333. package/src/types/cache.ts +38 -0
  334. package/src/types/cdn.ts +22 -0
  335. package/src/types/core.ts +17 -0
  336. package/src/types/database.ts +40 -0
  337. package/src/types/discovery.ts +7 -0
  338. package/src/types/events.ts +90 -0
  339. package/src/types/hooks.ts +47 -0
  340. package/src/types/http.ts +70 -0
  341. package/src/types/logger.ts +109 -0
  342. package/src/types/module.ts +87 -0
  343. package/src/types/runtime.ts +91 -0
  344. package/src/types/session.ts +89 -0
  345. package/tsconfig.json +21 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Moro Framework Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,233 @@
1
+ # Moro
2
+
3
+ <div align="center">
4
+
5
+ ![Moro Logo](https://img.shields.io/badge/MoroJS-2563eb?style=for-the-badge&logo=typescript&logoColor=white)
6
+
7
+ **High-performance multi-runtime framework with intelligent routing**
8
+ *Functional • Type-safe • Multi-environment • Production-ready*
9
+
10
+ [![npm version](https://badge.fury.io/js/@morojs%2Fmoro.svg)](https://badge.fury.io/js/@morojs%2Fmoro)
11
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
+ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org/)
13
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue)](https://www.typescriptlang.org/)
14
+
15
+ [**Documentation**](./docs/) • [**Quick Start**](#quick-start) • [**Examples**](#examples) • [**API Reference**](./docs/API.md)
16
+
17
+ </div>
18
+
19
+ ---
20
+
21
+ ## Why Moro?
22
+
23
+ Moro eliminates the pain points of traditional Node.js frameworks with **intelligent routing** and **automatic middleware ordering**. No more debugging middleware order issues or wrestling with type safety!
24
+
25
+ - **Multi-Runtime Support** - Deploy to Node.js, Vercel Edge, AWS Lambda, Cloudflare Workers
26
+ - **Intelligent Routing** - Chainable + schema-first APIs with automatic middleware ordering
27
+ - **Zod Validation** - Type-safe, functional validation with full TypeScript inference
28
+ - **Native Performance** - Zero framework overhead, optimized for each runtime
29
+ - **Functional Architecture** - No decorators, pure functional patterns
30
+ - **Zero Order Dependencies** - Framework handles optimal middleware execution
31
+
32
+ ## Superior Performance
33
+
34
+ | Framework | Req/sec | Latency | Memory |
35
+ |-----------|---------|---------|--------|
36
+ | **Moro** | **52,400** | **1.8ms** | **24MB** |
37
+ | Express | 28,540 | 3.8ms | 45MB |
38
+ | Fastify | 38,120 | 2.9ms | 35MB |
39
+ | NestJS | 22,100 | 4.5ms | 58MB |
40
+
41
+ ## Quick Start
42
+
43
+ ### Installation
44
+
45
+ ```bash
46
+ npm install @morojs/moro
47
+ # or
48
+ yarn add @morojs/moro
49
+ ```
50
+
51
+ ### Hello World
52
+
53
+ ```typescript
54
+ import { createApp, z } from 'moro';
55
+
56
+ const app = createApp();
57
+
58
+ // Intelligent routing - order doesn't matter!
59
+ app.post('/users')
60
+ .body(z.object({
61
+ name: z.string().min(2).max(50),
62
+ email: z.string().email()
63
+ }))
64
+ .rateLimit({ requests: 10, window: 60000 })
65
+ .describe('Create a new user')
66
+ .handler((req, res) => {
67
+ // req.body is fully typed and validated!
68
+ return { success: true, data: req.body };
69
+ });
70
+
71
+ app.get('/health', () => ({ status: 'healthy' }));
72
+
73
+ app.listen(3000, () => {
74
+ console.log('Moro server running on http://localhost:3000');
75
+ });
76
+ ```
77
+
78
+ ### Multi-Runtime Support
79
+
80
+ Deploy the **same code** everywhere:
81
+
82
+ ```typescript
83
+ // Node.js (default)
84
+ import { createApp } from 'moro';
85
+ const app = createApp();
86
+ app.listen(3000);
87
+
88
+ // Vercel Edge Functions
89
+ import { createAppEdge } from 'moro';
90
+ const app = createAppEdge();
91
+ export default app.getHandler();
92
+
93
+ // AWS Lambda
94
+ import { createAppLambda } from 'moro';
95
+ const app = createAppLambda();
96
+ export const handler = app.getHandler();
97
+
98
+ // Cloudflare Workers
99
+ import { createAppWorker } from 'moro';
100
+ const app = createAppWorker();
101
+ export default { fetch: app.getHandler() };
102
+ ```
103
+
104
+ ## What Makes Moro Different?
105
+
106
+ ### **No More Middleware Order Hell**
107
+
108
+ **Traditional frameworks:**
109
+ ```typescript
110
+ // Express - Order matters, easy to break
111
+ app.use(cors()); // Must be first
112
+ app.use(helmet()); // Must be early
113
+ app.use(bodyParser()); // Must be before validation
114
+ app.use(rateLimit()); // Must be before routes
115
+ app.use(validation()); // Must be before handler
116
+ app.post('/users', handler); // Must be last
117
+ ```
118
+
119
+ **Moro - Order independent:**
120
+ ```typescript
121
+ // Moro - Framework handles optimal ordering
122
+ app.post('/users')
123
+ .body(UserSchema) // Framework places in validation phase
124
+ .rateLimit({ requests: 10, window: 60000 }) // Rate limit phase
125
+ .auth({ roles: ['user'] }) // Auth phase
126
+ .handler(createUser); // Always executed last
127
+ ```
128
+
129
+ ### **Full Type Safety with Zod**
130
+
131
+ ```typescript
132
+ const UserSchema = z.object({
133
+ name: z.string().min(2).max(50),
134
+ email: z.string().email(),
135
+ age: z.number().min(18).optional()
136
+ });
137
+
138
+ app.post('/users')
139
+ .body(UserSchema)
140
+ .handler((req, res) => {
141
+ // req.body is typed as z.infer<typeof UserSchema>
142
+ // Full IDE support, no type assertions needed!
143
+ const user = req.body; // ✨ Fully typed
144
+ return { success: true, data: user };
145
+ });
146
+ ```
147
+
148
+ ## Examples
149
+
150
+ ### API Styles
151
+
152
+ ```typescript
153
+ // Chainable API (complex routes)
154
+ app.post('/orders')
155
+ .body(OrderSchema)
156
+ .auth({ roles: ['user'] })
157
+ .rateLimit({ requests: 5, window: 60000 })
158
+ .cache({ ttl: 300 })
159
+ .handler(createOrder);
160
+
161
+ // Schema-first (simple routes)
162
+ app.route({
163
+ method: 'GET',
164
+ path: '/users/:id',
165
+ validation: { params: z.object({ id: z.string().uuid() }) },
166
+ handler: getUserById
167
+ });
168
+ ```
169
+
170
+ ### Functional Modules
171
+
172
+ ```typescript
173
+ export default defineModule({
174
+ name: 'users',
175
+ routes: [
176
+ {
177
+ method: 'GET',
178
+ path: '/',
179
+ validation: {
180
+ query: z.object({ limit: z.coerce.number().default(10) })
181
+ },
182
+ handler: async (req, res) => {
183
+ return { users: await getUsers(req.query) };
184
+ }
185
+ }
186
+ ]
187
+ });
188
+
189
+ await app.loadModule(UsersModule);
190
+ ```
191
+
192
+ ## Documentation
193
+
194
+ ### **Complete Guides**
195
+ - [**Getting Started**](./docs/GETTING_STARTED.md) - Detailed setup and first app
196
+ - [**API Reference**](./docs/API.md) - Complete framework API documentation
197
+ - [**Migration Guide**](./docs/MIGRATION.md) - From Express, Fastify, NestJS
198
+ - [**Performance Guide**](./docs/PERFORMANCE.md) - Optimization and benchmarks
199
+ - [**Runtime System**](./docs/RUNTIME.md) - Multi-runtime deployment guide
200
+ - [**Examples Repository**](../MoroJS%20Examples/) - Working examples
201
+
202
+ ### **Key Concepts**
203
+ - **Multi-Runtime Support** - Same API works on Node.js, Edge, Lambda, and Workers
204
+ - **Intelligent Routing** - Automatic middleware ordering eliminates Express.js pain points
205
+ - **Functional Architecture** - No decorators, pure functions, better performance
206
+ - **Type Safety** - Zod provides compile-time and runtime type safety
207
+
208
+ ## Why Choose Moro?
209
+
210
+ **Same API everywhere** - Write once, deploy to any runtime
211
+ **No middleware dependencies** - Framework handles optimal ordering
212
+ **Full type safety** - Zod provides end-to-end TypeScript inference
213
+ **Clean APIs** - Chainable and schema-first approaches
214
+ **Production ready** - Circuit breakers, rate limiting, events
215
+ **Performance optimized** - Runtime-specific adapters
216
+
217
+ ## Contributing
218
+
219
+ We welcome contributions! See our [Contributing Guide](./docs/CONTRIBUTING.md) for details.
220
+
221
+ ## License
222
+
223
+ MIT © [Moro Framework Team](https://morojs.com)
224
+
225
+ ---
226
+
227
+ <div align="center">
228
+
229
+ **Ready to deploy everywhere with one codebase?**
230
+
231
+ [Get Started](./docs/GETTING_STARTED.md) • [GitHub](https://github.com/MoroJS/moro) • [npm](https://www.npmjs.com/package/@morojs/moro)
232
+
233
+ </div>
@@ -0,0 +1,19 @@
1
+ export * from "./schema";
2
+ export * from "./loader";
3
+ export * from "./utils";
4
+ export { z } from "zod";
5
+ import type { AppConfig } from "./schema";
6
+ /**
7
+ * Initialize and load the global application configuration
8
+ * This should be called once at application startup
9
+ */
10
+ export declare function initializeConfig(): AppConfig;
11
+ /**
12
+ * Get the current global configuration
13
+ * Throws if configuration hasn't been initialized
14
+ */
15
+ export declare function getGlobalConfig(): AppConfig;
16
+ /**
17
+ * Check if configuration has been initialized
18
+ */
19
+ export declare function isConfigInitialized(): boolean;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.z = void 0;
18
+ exports.initializeConfig = initializeConfig;
19
+ exports.getGlobalConfig = getGlobalConfig;
20
+ exports.isConfigInitialized = isConfigInitialized;
21
+ // Configuration System - Main Exports and Utilities
22
+ __exportStar(require("./schema"), exports);
23
+ __exportStar(require("./loader"), exports);
24
+ __exportStar(require("./utils"), exports);
25
+ // Re-export common Zod utilities for configuration
26
+ var zod_1 = require("zod");
27
+ Object.defineProperty(exports, "z", { enumerable: true, get: function () { return zod_1.z; } });
28
+ // Main configuration loading function
29
+ const loader_1 = require("./loader");
30
+ // Global configuration instance
31
+ let globalConfig = null;
32
+ /**
33
+ * Initialize and load the global application configuration
34
+ * This should be called once at application startup
35
+ */
36
+ function initializeConfig() {
37
+ if (globalConfig) {
38
+ return globalConfig;
39
+ }
40
+ globalConfig = (0, loader_1.loadConfig)();
41
+ return globalConfig;
42
+ }
43
+ /**
44
+ * Get the current global configuration
45
+ * Throws if configuration hasn't been initialized
46
+ */
47
+ function getGlobalConfig() {
48
+ if (!globalConfig) {
49
+ throw new Error("Configuration not initialized. Call initializeConfig() first.");
50
+ }
51
+ return globalConfig;
52
+ }
53
+ /**
54
+ * Check if configuration has been initialized
55
+ */
56
+ function isConfigInitialized() {
57
+ return globalConfig !== null;
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmBA,4CAOC;AAMD,0CAOC;AAKD,kDAEC;AA9CD,oDAAoD;AACpD,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AAExB,mDAAmD;AACnD,2BAAwB;AAAf,wFAAA,CAAC,OAAA;AAEV,sCAAsC;AACtC,qCAAsC;AAGtC,gCAAgC;AAChC,IAAI,YAAY,GAAqB,IAAI,CAAC;AAE1C;;;GAGG;AACH,SAAgB,gBAAgB;IAC9B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YAAY,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,YAAY,KAAK,IAAI,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AppConfig } from "./schema";
2
+ /**
3
+ * Load and validate configuration from environment variables
4
+ * @returns Validated and typed application configuration
5
+ */
6
+ export declare function loadConfig(): AppConfig;
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadConfig = loadConfig;
4
+ // Configuration Loader - Environment Variable Mapping and Validation
5
+ const zod_1 = require("zod");
6
+ const schema_1 = require("./schema");
7
+ const logger_1 = require("../logger");
8
+ const logger = (0, logger_1.createFrameworkLogger)("Config");
9
+ /**
10
+ * Load and validate configuration from environment variables
11
+ * @returns Validated and typed application configuration
12
+ */
13
+ function loadConfig() {
14
+ logger.debug("Loading configuration from environment variables");
15
+ // Map environment variables to configuration structure
16
+ const envConfig = {
17
+ server: {
18
+ port: process.env.PORT || process.env.MORO_PORT,
19
+ host: process.env.HOST || process.env.MORO_HOST,
20
+ environment: process.env.NODE_ENV || process.env.MORO_ENV,
21
+ maxConnections: process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS,
22
+ timeout: process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT,
23
+ },
24
+ serviceDiscovery: {
25
+ enabled: process.env.SERVICE_DISCOVERY_ENABLED ||
26
+ process.env.MORO_SERVICE_DISCOVERY,
27
+ type: process.env.DISCOVERY_TYPE || process.env.MORO_DISCOVERY_TYPE,
28
+ consulUrl: process.env.CONSUL_URL || process.env.MORO_CONSUL_URL,
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 ||
32
+ process.env.MORO_DISCOVERY_RETRIES,
33
+ },
34
+ database: {
35
+ url: process.env.DATABASE_URL || process.env.MORO_DATABASE_URL,
36
+ redis: {
37
+ url: process.env.REDIS_URL || process.env.MORO_REDIS_URL,
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,
41
+ },
42
+ mysql: process.env.MYSQL_HOST
43
+ ? {
44
+ host: process.env.MYSQL_HOST || process.env.MORO_MYSQL_HOST,
45
+ port: process.env.MYSQL_PORT || process.env.MORO_MYSQL_PORT,
46
+ database: process.env.MYSQL_DATABASE || process.env.MORO_MYSQL_DB,
47
+ username: process.env.MYSQL_USERNAME || process.env.MORO_MYSQL_USER,
48
+ password: process.env.MYSQL_PASSWORD || process.env.MORO_MYSQL_PASS,
49
+ connectionLimit: process.env.MYSQL_CONNECTION_LIMIT ||
50
+ process.env.MORO_MYSQL_CONNECTIONS,
51
+ acquireTimeout: process.env.MYSQL_ACQUIRE_TIMEOUT ||
52
+ process.env.MORO_MYSQL_ACQUIRE_TIMEOUT,
53
+ timeout: process.env.MYSQL_TIMEOUT || process.env.MORO_MYSQL_TIMEOUT,
54
+ }
55
+ : undefined,
56
+ },
57
+ modules: {
58
+ cache: {
59
+ enabled: process.env.CACHE_ENABLED || process.env.MORO_CACHE_ENABLED,
60
+ defaultTtl: process.env.DEFAULT_CACHE_TTL || process.env.MORO_CACHE_TTL,
61
+ maxSize: process.env.CACHE_MAX_SIZE || process.env.MORO_CACHE_SIZE,
62
+ strategy: process.env.CACHE_STRATEGY || process.env.MORO_CACHE_STRATEGY,
63
+ },
64
+ rateLimit: {
65
+ enabled: process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED,
66
+ defaultRequests: process.env.DEFAULT_RATE_LIMIT_REQUESTS ||
67
+ process.env.MORO_RATE_LIMIT_REQUESTS,
68
+ defaultWindow: process.env.DEFAULT_RATE_LIMIT_WINDOW ||
69
+ process.env.MORO_RATE_LIMIT_WINDOW,
70
+ skipSuccessfulRequests: process.env.RATE_LIMIT_SKIP_SUCCESS ||
71
+ process.env.MORO_RATE_LIMIT_SKIP_SUCCESS,
72
+ skipFailedRequests: process.env.RATE_LIMIT_SKIP_FAILED ||
73
+ process.env.MORO_RATE_LIMIT_SKIP_FAILED,
74
+ },
75
+ validation: {
76
+ enabled: process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED,
77
+ stripUnknown: process.env.VALIDATION_STRIP_UNKNOWN ||
78
+ process.env.MORO_VALIDATION_STRIP,
79
+ abortEarly: process.env.VALIDATION_ABORT_EARLY ||
80
+ process.env.MORO_VALIDATION_ABORT,
81
+ },
82
+ },
83
+ logging: {
84
+ level: process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL,
85
+ format: process.env.LOG_FORMAT || process.env.MORO_LOG_FORMAT,
86
+ enableColors: process.env.NO_COLOR
87
+ ? false
88
+ : process.env.LOG_COLORS !== "false",
89
+ enableTimestamp: process.env.LOG_TIMESTAMP !== "false",
90
+ enableContext: process.env.LOG_CONTEXT !== "false",
91
+ outputs: {
92
+ console: process.env.LOG_CONSOLE !== "false",
93
+ file: {
94
+ enabled: process.env.LOG_FILE_ENABLED === "true" ||
95
+ process.env.MORO_LOG_FILE === "true",
96
+ path: process.env.LOG_FILE_PATH || process.env.MORO_LOG_PATH,
97
+ maxSize: process.env.LOG_FILE_MAX_SIZE || process.env.MORO_LOG_MAX_SIZE,
98
+ maxFiles: process.env.LOG_FILE_MAX_FILES || process.env.MORO_LOG_MAX_FILES,
99
+ },
100
+ webhook: {
101
+ enabled: process.env.LOG_WEBHOOK_ENABLED === "true" ||
102
+ process.env.MORO_LOG_WEBHOOK === "true",
103
+ url: process.env.LOG_WEBHOOK_URL || process.env.MORO_LOG_WEBHOOK_URL,
104
+ headers: parseJsonEnv(process.env.LOG_WEBHOOK_HEADERS ||
105
+ process.env.MORO_LOG_WEBHOOK_HEADERS, {}),
106
+ },
107
+ },
108
+ },
109
+ security: {
110
+ cors: {
111
+ enabled: process.env.CORS_ENABLED !== "false",
112
+ origin: parseArrayOrString(process.env.CORS_ORIGIN || process.env.MORO_CORS_ORIGIN),
113
+ methods: parseArrayEnv(process.env.CORS_METHODS || process.env.MORO_CORS_METHODS),
114
+ allowedHeaders: parseArrayEnv(process.env.CORS_HEADERS || process.env.MORO_CORS_HEADERS),
115
+ credentials: process.env.CORS_CREDENTIALS === "true",
116
+ },
117
+ helmet: {
118
+ enabled: process.env.HELMET_ENABLED !== "false",
119
+ contentSecurityPolicy: process.env.HELMET_CSP !== "false",
120
+ hsts: process.env.HELMET_HSTS !== "false",
121
+ noSniff: process.env.HELMET_NO_SNIFF !== "false",
122
+ frameguard: process.env.HELMET_FRAMEGUARD !== "false",
123
+ },
124
+ rateLimit: {
125
+ global: {
126
+ enabled: process.env.GLOBAL_RATE_LIMIT_ENABLED === "true",
127
+ requests: process.env.GLOBAL_RATE_LIMIT_REQUESTS ||
128
+ process.env.MORO_GLOBAL_RATE_REQUESTS,
129
+ window: process.env.GLOBAL_RATE_LIMIT_WINDOW ||
130
+ process.env.MORO_GLOBAL_RATE_WINDOW,
131
+ },
132
+ },
133
+ },
134
+ external: {
135
+ stripe: process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET
136
+ ? {
137
+ secretKey: process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET,
138
+ publishableKey: process.env.STRIPE_PUBLISHABLE_KEY ||
139
+ process.env.MORO_STRIPE_PUBLIC,
140
+ webhookSecret: process.env.STRIPE_WEBHOOK_SECRET ||
141
+ process.env.MORO_STRIPE_WEBHOOK,
142
+ apiVersion: process.env.STRIPE_API_VERSION ||
143
+ process.env.MORO_STRIPE_VERSION,
144
+ }
145
+ : undefined,
146
+ paypal: process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT
147
+ ? {
148
+ clientId: process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT,
149
+ clientSecret: process.env.PAYPAL_CLIENT_SECRET ||
150
+ process.env.MORO_PAYPAL_SECRET,
151
+ webhookId: process.env.PAYPAL_WEBHOOK_ID ||
152
+ process.env.MORO_PAYPAL_WEBHOOK,
153
+ environment: process.env.PAYPAL_ENVIRONMENT || process.env.MORO_PAYPAL_ENV,
154
+ }
155
+ : undefined,
156
+ smtp: process.env.SMTP_HOST || process.env.MORO_SMTP_HOST
157
+ ? {
158
+ host: process.env.SMTP_HOST || process.env.MORO_SMTP_HOST,
159
+ port: process.env.SMTP_PORT || process.env.MORO_SMTP_PORT,
160
+ secure: process.env.SMTP_SECURE === "true",
161
+ username: process.env.SMTP_USERNAME || process.env.MORO_SMTP_USER,
162
+ password: process.env.SMTP_PASSWORD || process.env.MORO_SMTP_PASS,
163
+ }
164
+ : undefined,
165
+ },
166
+ performance: {
167
+ compression: {
168
+ enabled: process.env.COMPRESSION_ENABLED !== "false",
169
+ level: process.env.COMPRESSION_LEVEL || process.env.MORO_COMPRESSION_LEVEL,
170
+ threshold: process.env.COMPRESSION_THRESHOLD ||
171
+ process.env.MORO_COMPRESSION_THRESHOLD,
172
+ },
173
+ circuitBreaker: {
174
+ enabled: process.env.CIRCUIT_BREAKER_ENABLED !== "false",
175
+ failureThreshold: process.env.CIRCUIT_BREAKER_THRESHOLD ||
176
+ process.env.MORO_CB_THRESHOLD,
177
+ resetTimeout: process.env.CIRCUIT_BREAKER_RESET || process.env.MORO_CB_RESET,
178
+ monitoringPeriod: process.env.CIRCUIT_BREAKER_MONITOR || process.env.MORO_CB_MONITOR,
179
+ },
180
+ clustering: {
181
+ enabled: process.env.CLUSTERING_ENABLED === "true",
182
+ workers: process.env.CLUSTER_WORKERS || process.env.MORO_WORKERS,
183
+ },
184
+ },
185
+ };
186
+ // Validate and transform configuration using Zod
187
+ try {
188
+ const validatedConfig = schema_1.ConfigSchema.parse(envConfig);
189
+ logger.info("Configuration loaded and validated successfully");
190
+ logger.debug("Configuration details:", JSON.stringify({
191
+ server: {
192
+ port: validatedConfig.server.port,
193
+ environment: validatedConfig.server.environment,
194
+ },
195
+ serviceDiscovery: {
196
+ enabled: validatedConfig.serviceDiscovery.enabled,
197
+ type: validatedConfig.serviceDiscovery.type,
198
+ },
199
+ modules: {
200
+ cacheEnabled: validatedConfig.modules.cache.enabled,
201
+ rateLimitEnabled: validatedConfig.modules.rateLimit.enabled,
202
+ },
203
+ }));
204
+ return validatedConfig;
205
+ }
206
+ catch (error) {
207
+ logger.error("❌ Configuration validation failed");
208
+ if (error instanceof zod_1.ZodError) {
209
+ logger.error("Configuration errors:");
210
+ error.issues.forEach((err) => {
211
+ const path = err.path.join(".");
212
+ logger.error(` - ${path}: ${err.message}`);
213
+ // Provide helpful hints for common errors
214
+ if (path.includes("port") && err.code === "invalid_type") {
215
+ logger.error(` Hint: PORT must be a number between 1 and 65535`);
216
+ }
217
+ if (path.includes("url") && err.code === "invalid_string") {
218
+ logger.error(` Hint: URLs must include protocol (http:// or https://)`);
219
+ }
220
+ if (path.includes("environment") && err.code === "invalid_enum_value") {
221
+ logger.error(` Hint: NODE_ENV must be one of: development, staging, production`);
222
+ }
223
+ });
224
+ logger.error("\nConfiguration Help:");
225
+ logger.error(" - Use MORO_* prefixed environment variables for framework-specific config");
226
+ logger.error(" - Check .env.example for available configuration options");
227
+ logger.error(" - See documentation for detailed configuration guide");
228
+ }
229
+ else {
230
+ logger.error("Unexpected configuration error:", String(error));
231
+ }
232
+ process.exit(1);
233
+ }
234
+ }
235
+ /**
236
+ * Parse JSON environment variable safely
237
+ */
238
+ function parseJsonEnv(value, defaultValue) {
239
+ if (!value)
240
+ return defaultValue;
241
+ try {
242
+ return JSON.parse(value);
243
+ }
244
+ catch {
245
+ logger.warn(`Invalid JSON in environment variable, using default:`, value);
246
+ return defaultValue;
247
+ }
248
+ }
249
+ /**
250
+ * Parse comma-separated array environment variable
251
+ */
252
+ function parseArrayEnv(value) {
253
+ if (!value)
254
+ return undefined;
255
+ return value
256
+ .split(",")
257
+ .map((item) => item.trim())
258
+ .filter(Boolean);
259
+ }
260
+ /**
261
+ * Parse array or string environment variable
262
+ */
263
+ function parseArrayOrString(value) {
264
+ if (!value)
265
+ return undefined;
266
+ // If it contains commas, treat as array
267
+ if (value.includes(",")) {
268
+ return parseArrayEnv(value);
269
+ }
270
+ // Special boolean values
271
+ if (value === "true")
272
+ return true;
273
+ if (value === "false")
274
+ return false;
275
+ return value;
276
+ }
277
+ /**
278
+ * Get environment variable with multiple possible names
279
+ */
280
+ function getEnvVar(...names) {
281
+ for (const name of names) {
282
+ if (name && process.env[name]) {
283
+ return process.env[name];
284
+ }
285
+ }
286
+ return undefined;
287
+ }
288
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":";;AAWA,gCAySC;AApTD,qEAAqE;AACrE,6BAA+B;AAC/B,qCAAmD;AACnD,sCAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,8BAAqB,EAAC,QAAQ,CAAC,CAAC;AAE/C;;;GAGG;AACH,SAAgB,UAAU;IACxB,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEjE,uDAAuD;IACvD,MAAM,SAAS,GAAG;QAChB,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;YAC/C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;YAC/C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YACzD,cAAc,EACZ,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACjE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;SACjE;QAED,gBAAgB,EAAE;YAChB,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,yBAAyB;gBACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB;YACpC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;YACnE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;YAChE,mBAAmB,EACjB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;YAC7D,mBAAmB,EACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;YACvE,aAAa,EACX,OAAO,CAAC,GAAG,CAAC,wBAAwB;gBACpC,OAAO,CAAC,GAAG,CAAC,sBAAsB;SACrC;QAED,QAAQ,EAAE;YACR,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC9D,KAAK,EAAE;gBACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;gBACxD,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBACjE,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBAC/D,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;aAChE;YACD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;gBAC3B,CAAC,CAAC;oBACE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;oBAC3D,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;oBAC3D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;oBACjE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;oBACnE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;oBACnE,eAAe,EACb,OAAO,CAAC,GAAG,CAAC,sBAAsB;wBAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBACpC,cAAc,EACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB;wBACjC,OAAO,CAAC,GAAG,CAAC,0BAA0B;oBACxC,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;iBAC9D;gBACH,CAAC,CAAC,SAAS;SACd;QAED,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBACpE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;gBACvE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;gBAClE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB;aACxE;YACD,SAAS,EAAE;gBACT,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB;gBACvE,eAAe,EACb,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB;gBACtC,aAAa,EACX,OAAO,CAAC,GAAG,CAAC,yBAAyB;oBACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB;gBACpC,sBAAsB,EACpB,OAAO,CAAC,GAAG,CAAC,uBAAuB;oBACnC,OAAO,CAAC,GAAG,CAAC,4BAA4B;gBAC1C,kBAAkB,EAChB,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B;aAC1C;YACD,UAAU,EAAE;gBACV,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB;gBACvE,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,wBAAwB;oBACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB;gBACnC,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBAClC,OAAO,CAAC,GAAG,CAAC,qBAAqB;aACpC;SACF;QAED,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;YAC7D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;gBAChC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;YACtC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO;YACtD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO;YAClD,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO;gBAC5C,IAAI,EAAE;oBACJ,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM;wBACvC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;oBACtC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;oBAC5D,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;oBAChE,QAAQ,EACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;iBACnE;gBACD,OAAO,EAAE;oBACP,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM;wBAC1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM;oBACzC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB;oBACpE,OAAO,EAAE,YAAY,CACnB,OAAO,CAAC,GAAG,CAAC,mBAAmB;wBAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,EACtC,EAAE,CACH;iBACF;aACF;SACF;QAED,QAAQ,EAAE;YACR,IAAI,EAAE;gBACJ,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO;gBAC7C,MAAM,EAAE,kBAAkB,CACxB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CACxD;gBACD,OAAO,EAAE,aAAa,CACpB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAC1D;gBACD,cAAc,EAAE,aAAa,CAC3B,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAC1D;gBACD,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM;aACrD;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,OAAO;gBAC/C,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,OAAO;gBACzD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO;gBACzC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,OAAO;gBAChD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,OAAO;aACtD;YACD,SAAS,EAAE;gBACT,MAAM,EAAE;oBACN,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,MAAM;oBACzD,QAAQ,EACN,OAAO,CAAC,GAAG,CAAC,0BAA0B;wBACtC,OAAO,CAAC,GAAG,CAAC,yBAAyB;oBACvC,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,wBAAwB;wBACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB;iBACtC;aACF;SACF;QAED,QAAQ,EAAE;YACR,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBAC7D,CAAC,CAAC;oBACE,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;oBACjE,cAAc,EACZ,OAAO,CAAC,GAAG,CAAC,sBAAsB;wBAClC,OAAO,CAAC,GAAG,CAAC,kBAAkB;oBAChC,aAAa,EACX,OAAO,CAAC,GAAG,CAAC,qBAAqB;wBACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB;oBACjC,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,kBAAkB;wBAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB;iBAClC;gBACH,CAAC,CAAC,SAAS;YAEf,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBAC5D,CAAC,CAAC;oBACE,QAAQ,EACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;oBAChE,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,oBAAoB;wBAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB;oBAChC,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,iBAAiB;wBAC7B,OAAO,CAAC,GAAG,CAAC,mBAAmB;oBACjC,WAAW,EACT,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;iBAChE;gBACH,CAAC,CAAC,SAAS;YAEf,IAAI,EACF,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;gBACjD,CAAC,CAAC;oBACE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;oBACzD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;oBACzD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;oBAC1C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;oBACjE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;iBAClE;gBACH,CAAC,CAAC,SAAS;SAChB;QAED,WAAW,EAAE;YACX,WAAW,EAAE;gBACX,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,OAAO;gBACpD,KAAK,EACH,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB;gBACrE,SAAS,EACP,OAAO,CAAC,GAAG,CAAC,qBAAqB;oBACjC,OAAO,CAAC,GAAG,CAAC,0BAA0B;aACzC;YACD,cAAc,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO;gBACxD,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,yBAAyB;oBACrC,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC/B,YAAY,EACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa;gBAChE,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;aACrE;YACD,UAAU,EAAE;gBACV,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM;gBAClD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;aACjE;SACF;KACF,CAAC;IAEF,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,qBAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEtD,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CACV,wBAAwB,EACxB,IAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE;gBACN,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI;gBACjC,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW;aAChD;YACD,gBAAgB,EAAE;gBAChB,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC,OAAO;gBACjD,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,IAAI;aAC5C;YACD,OAAO,EAAE;gBACP,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;gBACnD,gBAAgB,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO;aAC5D;SACF,CAAC,CACH,CAAC;QAEF,OAAO,eAAe,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAElD,IAAI,KAAK,YAAY,cAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACtC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,EAAE;gBAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE5C,0CAA0C;gBAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACzD,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBAC1D,MAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBACtE,MAAM,CAAC,KAAK,CACV,qEAAqE,CACtE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACtC,MAAM,CAAC,KAAK,CACV,6EAA6E,CAC9E,CAAC;YACF,MAAM,CAAC,KAAK,CACV,4DAA4D,CAC7D,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAyB,EAAE,YAAiB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAEhC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,sDAAsD,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAyB;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,KAAyB;IAEzB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,wCAAwC;IACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAEpC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,GAAG,KAA6B;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}