bootifyjs 0.1.0 → 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 (261) hide show
  1. package/dist/api.d.ts +8 -27
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +68 -134
  4. package/dist/api.js.map +1 -1
  5. package/dist/cache/bootstrap.d.ts +6 -0
  6. package/dist/cache/bootstrap.d.ts.map +1 -0
  7. package/dist/cache/bootstrap.js +23 -0
  8. package/dist/cache/bootstrap.js.map +1 -0
  9. package/dist/cache/cache.service.d.ts +9 -0
  10. package/dist/cache/cache.service.d.ts.map +1 -0
  11. package/dist/cache/cache.service.js +40 -0
  12. package/dist/cache/cache.service.js.map +1 -0
  13. package/dist/cache/cache.types.d.ts +14 -0
  14. package/dist/cache/cache.types.d.ts.map +1 -0
  15. package/dist/cache/cache.types.js +8 -0
  16. package/dist/cache/cache.types.js.map +1 -0
  17. package/dist/cache/decorators.d.ts +12 -0
  18. package/dist/cache/decorators.d.ts.map +1 -0
  19. package/dist/cache/decorators.js +53 -0
  20. package/dist/cache/decorators.js.map +1 -0
  21. package/dist/cache/in-memory-cache.store.d.ts +8 -0
  22. package/dist/cache/in-memory-cache.store.d.ts.map +1 -0
  23. package/dist/cache/in-memory-cache.store.js +39 -0
  24. package/dist/cache/in-memory-cache.store.js.map +1 -0
  25. package/dist/cache/index.d.ts +5 -0
  26. package/dist/cache/index.d.ts.map +1 -0
  27. package/dist/cache/index.js +21 -0
  28. package/dist/cache/index.js.map +1 -0
  29. package/dist/core/component-registry.d.ts +7 -0
  30. package/dist/core/component-registry.d.ts.map +1 -0
  31. package/dist/core/component-registry.js +9 -0
  32. package/dist/core/component-registry.js.map +1 -0
  33. package/dist/core/decorators.d.ts +38 -22
  34. package/dist/core/decorators.d.ts.map +1 -0
  35. package/dist/core/decorators.js +155 -174
  36. package/dist/core/decorators.js.map +1 -1
  37. package/dist/core/di-container.d.ts +31 -0
  38. package/dist/core/di-container.d.ts.map +1 -0
  39. package/dist/core/di-container.js +219 -0
  40. package/dist/core/di-container.js.map +1 -0
  41. package/dist/core/index.d.ts +5 -0
  42. package/dist/core/index.d.ts.map +1 -0
  43. package/dist/core/index.js +21 -0
  44. package/dist/core/index.js.map +1 -0
  45. package/dist/core/request-context.service.d.ts +24 -0
  46. package/dist/core/request-context.service.d.ts.map +1 -0
  47. package/dist/core/request-context.service.js +52 -0
  48. package/dist/core/request-context.service.js.map +1 -0
  49. package/dist/core/router.d.ts +4 -32
  50. package/dist/core/router.d.ts.map +1 -0
  51. package/dist/core/router.js +81 -258
  52. package/dist/core/router.js.map +1 -1
  53. package/dist/events/bootstrap.d.ts +8 -0
  54. package/dist/events/bootstrap.d.ts.map +1 -0
  55. package/dist/events/bootstrap.js +37 -0
  56. package/dist/events/bootstrap.js.map +1 -0
  57. package/dist/events/decorators.d.ts +16 -0
  58. package/dist/events/decorators.d.ts.map +1 -0
  59. package/dist/events/decorators.js +37 -0
  60. package/dist/events/decorators.js.map +1 -0
  61. package/dist/events/event-bus.service.d.ts +21 -0
  62. package/dist/events/event-bus.service.d.ts.map +1 -0
  63. package/dist/events/event-bus.service.js +78 -0
  64. package/dist/events/event-bus.service.js.map +1 -0
  65. package/dist/events/event.types.d.ts +17 -0
  66. package/dist/events/event.types.d.ts.map +1 -0
  67. package/dist/events/event.types.js.map +1 -0
  68. package/dist/events/index.d.ts +5 -13
  69. package/dist/events/index.d.ts.map +1 -0
  70. package/dist/events/index.js +4 -54
  71. package/dist/events/index.js.map +1 -1
  72. package/dist/examples/controllers/health.controller.d.ts +7 -0
  73. package/dist/examples/controllers/health.controller.d.ts.map +1 -0
  74. package/dist/{events/examples/system.events.js → examples/controllers/health.controller.js} +16 -15
  75. package/dist/examples/controllers/health.controller.js.map +1 -0
  76. package/dist/examples/controllers/todo.controller.d.ts +31 -0
  77. package/dist/examples/controllers/todo.controller.d.ts.map +1 -0
  78. package/dist/examples/controllers/todo.controller.js +102 -0
  79. package/dist/examples/controllers/todo.controller.js.map +1 -0
  80. package/dist/examples/events/TodoEventHandler.d.ts +2 -0
  81. package/dist/examples/events/TodoEventHandler.d.ts.map +1 -0
  82. package/dist/examples/events/TodoEventHandler.js +31 -0
  83. package/dist/examples/events/TodoEventHandler.js.map +1 -0
  84. package/dist/examples/events/todo.events.d.ts +16 -0
  85. package/dist/examples/events/todo.events.d.ts.map +1 -0
  86. package/dist/examples/events/todo.events.js +13 -0
  87. package/dist/examples/events/todo.events.js.map +1 -0
  88. package/dist/examples/index.d.ts +2 -0
  89. package/dist/examples/index.d.ts.map +1 -0
  90. package/dist/examples/index.js +35 -0
  91. package/dist/examples/index.js.map +1 -0
  92. package/dist/examples/repositories/todo.repository.d.ts +20 -0
  93. package/dist/examples/repositories/todo.repository.d.ts.map +1 -0
  94. package/dist/examples/repositories/todo.repository.js +33 -0
  95. package/dist/examples/repositories/todo.repository.js.map +1 -0
  96. package/dist/examples/services/todo.service.d.ts +33 -0
  97. package/dist/examples/services/todo.service.d.ts.map +1 -0
  98. package/dist/examples/services/todo.service.js +80 -0
  99. package/dist/examples/services/todo.service.js.map +1 -0
  100. package/dist/examples/todos/schema.d.ts +54 -0
  101. package/dist/examples/todos/schema.d.ts.map +1 -0
  102. package/dist/examples/todos/schema.js +20 -0
  103. package/dist/examples/todos/schema.js.map +1 -0
  104. package/dist/index.d.ts +7 -17
  105. package/dist/index.d.ts.map +1 -0
  106. package/dist/index.js +20 -95
  107. package/dist/index.js.map +1 -1
  108. package/dist/logging/config/logging.config.d.ts +31 -3
  109. package/dist/logging/config/logging.config.d.ts.map +1 -0
  110. package/dist/logging/config/logging.config.js +43 -93
  111. package/dist/logging/config/logging.config.js.map +1 -1
  112. package/dist/logging/core/decorators.d.ts +16 -0
  113. package/dist/logging/core/decorators.d.ts.map +1 -0
  114. package/dist/logging/core/decorators.js +74 -0
  115. package/dist/logging/core/decorators.js.map +1 -0
  116. package/dist/logging/core/logger.provider.d.ts +4 -0
  117. package/dist/logging/core/logger.provider.d.ts.map +1 -0
  118. package/dist/logging/core/logger.provider.js +68 -0
  119. package/dist/logging/core/logger.provider.js.map +1 -0
  120. package/dist/logging/core/logger.service.d.ts +9 -27
  121. package/dist/logging/core/logger.service.d.ts.map +1 -0
  122. package/dist/logging/core/logger.service.js +34 -164
  123. package/dist/logging/core/logger.service.js.map +1 -1
  124. package/dist/logging/core/{startup-logger.service.d.ts → startup.logger.d.ts} +4 -6
  125. package/dist/logging/core/startup.logger.d.ts.map +1 -0
  126. package/dist/logging/core/{startup-logger.service.js → startup.logger.js} +36 -42
  127. package/dist/logging/core/startup.logger.js.map +1 -0
  128. package/dist/logging/index.d.ts +7 -14
  129. package/dist/logging/index.d.ts.map +1 -0
  130. package/dist/logging/index.js +17 -28
  131. package/dist/logging/index.js.map +1 -1
  132. package/dist/middleware/auth.middleware.d.ts +3 -0
  133. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  134. package/dist/middleware/auth.middleware.js +18 -0
  135. package/dist/middleware/auth.middleware.js.map +1 -0
  136. package/dist/middleware/context.middleware.d.ts +7 -0
  137. package/dist/middleware/context.middleware.d.ts.map +1 -0
  138. package/dist/middleware/context.middleware.js +25 -0
  139. package/dist/middleware/context.middleware.js.map +1 -0
  140. package/dist/middleware/index.d.ts +4 -0
  141. package/dist/middleware/index.d.ts.map +1 -0
  142. package/dist/middleware/index.js +20 -0
  143. package/dist/middleware/index.js.map +1 -0
  144. package/dist/middleware/request-logger.middleware.d.ts +4 -0
  145. package/dist/middleware/request-logger.middleware.d.ts.map +1 -0
  146. package/dist/middleware/request-logger.middleware.js +18 -0
  147. package/dist/middleware/request-logger.middleware.js.map +1 -0
  148. package/package.json +52 -47
  149. package/LICENSE +0 -21
  150. package/README.md +0 -173
  151. package/dist/config/app.config.d.ts +0 -29
  152. package/dist/config/app.config.js +0 -55
  153. package/dist/config/app.config.js.map +0 -1
  154. package/dist/controllers/config.controller.d.ts +0 -16
  155. package/dist/controllers/config.controller.js +0 -66
  156. package/dist/controllers/config.controller.js.map +0 -1
  157. package/dist/controllers/events.controller.d.ts +0 -66
  158. package/dist/controllers/events.controller.js +0 -145
  159. package/dist/controllers/events.controller.js.map +0 -1
  160. package/dist/controllers/health.controller.d.ts +0 -20
  161. package/dist/controllers/health.controller.js +0 -92
  162. package/dist/controllers/health.controller.js.map +0 -1
  163. package/dist/controllers/user.controller.d.ts +0 -13
  164. package/dist/controllers/user.controller.js +0 -209
  165. package/dist/controllers/user.controller.js.map +0 -1
  166. package/dist/core/application.d.ts +0 -21
  167. package/dist/core/application.js +0 -90
  168. package/dist/core/application.js.map +0 -1
  169. package/dist/core/config.d.ts +0 -3
  170. package/dist/core/config.js +0 -78
  171. package/dist/core/config.js.map +0 -1
  172. package/dist/core/container.d.ts +0 -17
  173. package/dist/core/container.js +0 -92
  174. package/dist/core/container.js.map +0 -1
  175. package/dist/core/errors.d.ts +0 -18
  176. package/dist/core/errors.js +0 -74
  177. package/dist/core/errors.js.map +0 -1
  178. package/dist/core/middleware.d.ts +0 -8
  179. package/dist/core/middleware.js +0 -23
  180. package/dist/core/middleware.js.map +0 -1
  181. package/dist/core/openapi.d.ts +0 -80
  182. package/dist/core/openapi.js +0 -189
  183. package/dist/core/openapi.js.map +0 -1
  184. package/dist/core/utils.d.ts +0 -7
  185. package/dist/core/utils.js +0 -75
  186. package/dist/core/utils.js.map +0 -1
  187. package/dist/core/validation.d.ts +0 -15
  188. package/dist/core/validation.js +0 -161
  189. package/dist/core/validation.js.map +0 -1
  190. package/dist/events/core/event-bus.d.ts +0 -26
  191. package/dist/events/core/event-bus.js +0 -253
  192. package/dist/events/core/event-bus.js.map +0 -1
  193. package/dist/events/core/event-registry.d.ts +0 -31
  194. package/dist/events/core/event-registry.js +0 -170
  195. package/dist/events/core/event-registry.js.map +0 -1
  196. package/dist/events/decorators/event.decorators.d.ts +0 -11
  197. package/dist/events/decorators/event.decorators.js +0 -123
  198. package/dist/events/decorators/event.decorators.js.map +0 -1
  199. package/dist/events/examples/system.events.d.ts +0 -15
  200. package/dist/events/examples/system.events.js.map +0 -1
  201. package/dist/events/examples/user.events.d.ts +0 -68
  202. package/dist/events/examples/user.events.js +0 -73
  203. package/dist/events/examples/user.events.js.map +0 -1
  204. package/dist/events/examples/user.handlers.d.ts +0 -20
  205. package/dist/events/examples/user.handlers.js +0 -157
  206. package/dist/events/examples/user.handlers.js.map +0 -1
  207. package/dist/events/middleware/logging.middleware.d.ts +0 -7
  208. package/dist/events/middleware/logging.middleware.js +0 -44
  209. package/dist/events/middleware/logging.middleware.js.map +0 -1
  210. package/dist/events/middleware/metrics.middleware.d.ts +0 -11
  211. package/dist/events/middleware/metrics.middleware.js +0 -87
  212. package/dist/events/middleware/metrics.middleware.js.map +0 -1
  213. package/dist/events/middleware/validation.middleware.d.ts +0 -8
  214. package/dist/events/middleware/validation.middleware.js +0 -63
  215. package/dist/events/middleware/validation.middleware.js.map +0 -1
  216. package/dist/events/store/memory-event-store.d.ts +0 -21
  217. package/dist/events/store/memory-event-store.js +0 -81
  218. package/dist/events/store/memory-event-store.js.map +0 -1
  219. package/dist/events/types/event.types.d.ts +0 -57
  220. package/dist/events/types/event.types.js.map +0 -1
  221. package/dist/examples/basic-api.d.ts +0 -1
  222. package/dist/examples/basic-api.js +0 -120
  223. package/dist/examples/basic-api.js.map +0 -1
  224. package/dist/logging/core/log-context.service.d.ts +0 -11
  225. package/dist/logging/core/log-context.service.js +0 -40
  226. package/dist/logging/core/log-context.service.js.map +0 -1
  227. package/dist/logging/core/startup-logger.service.js.map +0 -1
  228. package/dist/logging/decorators/log.decorator.d.ts +0 -11
  229. package/dist/logging/decorators/log.decorator.js +0 -80
  230. package/dist/logging/decorators/log.decorator.js.map +0 -1
  231. package/dist/logging/middleware/context.middleware.d.ts +0 -2
  232. package/dist/logging/middleware/context.middleware.js +0 -29
  233. package/dist/logging/middleware/context.middleware.js.map +0 -1
  234. package/dist/logging/middleware/request-logging.middleware.d.ts +0 -3
  235. package/dist/logging/middleware/request-logging.middleware.js +0 -78
  236. package/dist/logging/middleware/request-logging.middleware.js.map +0 -1
  237. package/dist/logging/types/logging.types.d.ts +0 -79
  238. package/dist/logging/types/logging.types.js +0 -3
  239. package/dist/logging/types/logging.types.js.map +0 -1
  240. package/dist/middlewares/auth.middleware.d.ts +0 -2
  241. package/dist/middlewares/auth.middleware.js +0 -20
  242. package/dist/middlewares/auth.middleware.js.map +0 -1
  243. package/dist/middlewares/cors.middleware.d.ts +0 -2
  244. package/dist/middlewares/cors.middleware.js +0 -16
  245. package/dist/middlewares/cors.middleware.js.map +0 -1
  246. package/dist/middlewares/swagger.middleware.d.ts +0 -6
  247. package/dist/middlewares/swagger.middleware.js +0 -84
  248. package/dist/middlewares/swagger.middleware.js.map +0 -1
  249. package/dist/repositories/user.repository.d.ts +0 -16
  250. package/dist/repositories/user.repository.js +0 -110
  251. package/dist/repositories/user.repository.js.map +0 -1
  252. package/dist/schemas/user.schemas.d.ts +0 -214
  253. package/dist/schemas/user.schemas.js +0 -71
  254. package/dist/schemas/user.schemas.js.map +0 -1
  255. package/dist/services/config-demo.service.d.ts +0 -10
  256. package/dist/services/config-demo.service.js +0 -88
  257. package/dist/services/config-demo.service.js.map +0 -1
  258. package/dist/services/user.service.d.ts +0 -21
  259. package/dist/services/user.service.js +0 -201
  260. package/dist/services/user.service.js.map +0 -1
  261. /package/dist/events/{types/event.types.js → event.types.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvD,eAAO,MAAM,cAAc,GAAU,SAAS,cAAc,EAAE,OAAO,YAAY,kBAchF,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authMiddleware = void 0;
4
+ // This is our example middleware function
5
+ const authMiddleware = async (request, reply) => {
6
+ console.log('🛡️ Running Auth Middleware...');
7
+ const apiKey = request.headers['authorization'];
8
+ console.log(apiKey);
9
+ if (apiKey !== 'Bearer my-secret-api-key') {
10
+ // Stop the request and send a 401 Unauthorized response
11
+ reply.code(401).send({ error: 'Unauthorized: Invalid API Key' });
12
+ return; // Important to stop further execution
13
+ }
14
+ // If authentication is successful, you can attach user info to the request
15
+ request.user = { id: 'user-123', roles: ['admin'] };
16
+ };
17
+ exports.authMiddleware = authMiddleware;
18
+ //# sourceMappingURL=auth.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.middleware.js","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":";;;AAEA,0CAA0C;AACnC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;IACjF,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAGpB,IAAI,MAAM,KAAK,0BAA0B,EAAE,CAAC;QACxC,wDAAwD;QACxD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,sCAAsC;IAClD,CAAC;IAED,2EAA2E;IAC1E,OAAe,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACjE,CAAC,CAAC;AAdW,QAAA,cAAc,kBAczB"}
@@ -0,0 +1,7 @@
1
+ import { FastifyRequest, FastifyReply, HookHandlerDoneFunction } from 'fastify';
2
+ /**
3
+ * This hook MUST be registered first. It creates a new AsyncLocalStorage
4
+ * context for each request and populates it with a unique request ID.
5
+ */
6
+ export declare const contextMiddleware: (req: FastifyRequest, res: FastifyReply, done: HookHandlerDoneFunction) => void;
7
+ //# sourceMappingURL=context.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/context.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,uBAAuB,EAAG,MAAM,SAAS,CAAC;AAIjF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,MAAM,uBAAuB,SAkBhC,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contextMiddleware = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const request_context_service_1 = require("../core/request-context.service");
6
+ /**
7
+ * This hook MUST be registered first. It creates a new AsyncLocalStorage
8
+ * context for each request and populates it with a unique request ID.
9
+ */
10
+ const contextMiddleware = (req, res, done) => {
11
+ // Run the rest of the request lifecycle within a new context
12
+ request_context_service_1.RequestContextService.run(() => {
13
+ const requestId = (0, crypto_1.randomUUID)();
14
+ const contextService = new request_context_service_1.RequestContextService();
15
+ // Set the request ID in the context for access anywhere in the app
16
+ contextService.set('requestId', requestId);
17
+ // Attach ID to the request object for easy access in other hooks/plugins
18
+ req.id = requestId;
19
+ // Attach ID to the response header for client-side tracing
20
+ res.header('X-Request-Id', requestId);
21
+ done();
22
+ });
23
+ };
24
+ exports.contextMiddleware = contextMiddleware;
25
+ //# sourceMappingURL=context.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.middleware.js","sourceRoot":"","sources":["../../src/middleware/context.middleware.ts"],"names":[],"mappings":";;;AACA,mCAAoC;AACpC,6EAAwE;AAExE;;;GAGG;AACI,MAAM,iBAAiB,GAAG,CAC7B,GAAmB,EACnB,GAAiB,EACjB,IAA6B,EAC/B,EAAE;IACA,6DAA6D;IAC7D,+CAAqB,CAAC,GAAG,CAAC,GAAG,EAAE;QAC3B,MAAM,SAAS,GAAG,IAAA,mBAAU,GAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,IAAI,+CAAqB,EAAE,CAAC;QAEnD,mEAAmE;QACnE,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAE3C,yEAAyE;QACxE,GAAW,CAAC,EAAE,GAAG,SAAS,CAAC;QAE5B,2DAA2D;QAC3D,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAEtC,IAAI,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B"}
@@ -0,0 +1,4 @@
1
+ export * from './auth.middleware';
2
+ export * from './context.middleware';
3
+ export * from './request-logger.middleware';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,20 @@
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
+ __exportStar(require("./auth.middleware"), exports);
18
+ __exportStar(require("./context.middleware"), exports);
19
+ __exportStar(require("./request-logger.middleware"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,uDAAoC;AACpC,8DAA2C"}
@@ -0,0 +1,4 @@
1
+ import { FastifyRequest, FastifyReply } from 'fastify';
2
+ export declare const requestLoggerOnRequest: (req: FastifyRequest, reply: FastifyReply, done: Function) => void;
3
+ export declare const requestLoggerOnResponse: (req: FastifyRequest, reply: FastifyReply, done: Function) => void;
4
+ //# sourceMappingURL=request-logger.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-logger.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/request-logger.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvD,eAAO,MAAM,sBAAsB,GAAI,KAAK,cAAc,EAAE,OAAO,YAAY,EAAE,MAAM,QAAQ,SAG9F,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,KAAK,cAAc,EAAE,OAAO,YAAY,EAAE,MAAM,QAAQ,SAU/F,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestLoggerOnResponse = exports.requestLoggerOnRequest = void 0;
4
+ const requestLoggerOnRequest = (req, reply, done) => {
5
+ req.log.info({ req }, `--> Inbound Request`);
6
+ done();
7
+ };
8
+ exports.requestLoggerOnRequest = requestLoggerOnRequest;
9
+ const requestLoggerOnResponse = (req, reply, done) => {
10
+ req.log.info({
11
+ url: req.raw.url,
12
+ statusCode: reply.raw.statusCode,
13
+ durationMs: reply.elapsedTime,
14
+ }, `<-- Outbound Response`);
15
+ done();
16
+ };
17
+ exports.requestLoggerOnResponse = requestLoggerOnResponse;
18
+ //# sourceMappingURL=request-logger.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-logger.middleware.js","sourceRoot":"","sources":["../../src/middleware/request-logger.middleware.ts"],"names":[],"mappings":";;;AAEO,MAAM,sBAAsB,GAAG,CAAC,GAAmB,EAAE,KAAmB,EAAE,IAAc,EAAE,EAAE;IAC/F,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAC7C,IAAI,EAAE,CAAC;AACX,CAAC,CAAC;AAHW,QAAA,sBAAsB,0BAGjC;AAEK,MAAM,uBAAuB,GAAG,CAAC,GAAmB,EAAE,KAAmB,EAAE,IAAc,EAAE,EAAE;IAChG,GAAG,CAAC,GAAG,CAAC,IAAI,CACR;QACI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG;QAChB,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU;QAChC,UAAU,EAAE,KAAK,CAAC,WAAW;KAChC,EACD,uBAAuB,CAC1B,CAAC;IACF,IAAI,EAAE,CAAC;AACX,CAAC,CAAC;AAVW,QAAA,uBAAuB,2BAUlC"}
package/package.json CHANGED
@@ -1,59 +1,64 @@
1
1
  {
2
2
  "name": "bootifyjs",
3
- "version": "0.1.0",
4
- "description": "Spring Boot inspired Node.js framework with custom DI",
3
+ "version": "1.0.0",
4
+ "keywords": [],
5
+ "author": "",
6
+ "license": "ISC",
7
+ "description": "",
5
8
  "main": "dist/index.js",
6
9
  "types": "dist/index.d.ts",
7
10
  "scripts": {
8
- "build": "tsc",
9
- "dev": "ts-node src/index.ts",
10
- "start": "node dist/index.js",
11
- "test": "vitest run",
12
- "test:watch": "vitest",
13
- "test:coverage": "vitest run --coverage",
14
- "test:benchmark": "ts-node tests/core/router.benchmark.ts",
15
- "prepublishOnly": "npm run build"
11
+ "clean": "rm -rf dist",
12
+ "build": "npm run clean && tsc",
13
+ "prepublishOnly": "npm run build",
14
+ "dev": "nodemon --watch src --exec ts-node src/examples/index.ts"
16
15
  },
17
16
  "files": [
18
- "dist",
19
- "README.md",
20
- "LICENSE"
17
+ "dist"
21
18
  ],
22
- "keywords": [
23
- "nodejs",
24
- "framework",
25
- "spring-boot",
26
- "dependency-injection",
27
- "typescript"
28
- ],
29
- "author": "BootifyJS",
30
- "license": "MIT",
31
- "devDependencies": {
32
- "@types/node": "^20.0.0",
33
- "@vitest/coverage-v8": "^3.2.4",
34
- "ts-node": "^10.9.0",
35
- "typescript": "^5.0.0",
36
- "vitest": "^3.2.4"
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/index.js",
22
+ "require": "./dist/index.js",
23
+ "types": "./dist/index.d.ts"
24
+ },
25
+ "./core": {
26
+ "import": "./dist/core/index.js",
27
+ "require": "./dist/core/index.js",
28
+ "types": "./dist/core/index.d.ts"
29
+ },
30
+ "./events": {
31
+ "import": "./dist/events/index.js",
32
+ "require": "./dist/events/index.js",
33
+ "types": "./dist/events/index.d.ts"
34
+ },
35
+ "./cache": {
36
+ "import": "./dist/core/cache/index.js",
37
+ "require": "./dist/core/cache/index.js",
38
+ "types": "./dist/core/cache/index.d.ts"
39
+ },
40
+ "./logging": {
41
+ "import": "./dist/logging/index.js",
42
+ "require": "./dist/logging/index.js",
43
+ "types": "./dist/logging/index.d.ts"
44
+ }
37
45
  },
38
46
  "dependencies": {
39
- "pino": "^9.7.0",
40
- "pino-pretty": "^13.0.0",
41
- "pino-roll": "^3.1.0",
42
- "reflect-metadata": "^0.1.13",
43
- "zod": "^3.22.4"
44
- },
45
- "peerDependencies": {
46
- "typescript": ">=4.5.0"
47
- },
48
- "engines": {
49
- "node": ">=16.0.0"
47
+ "fastify": "^5.4.0",
48
+ "inversify": "^7.6.1",
49
+ "reflect-metadata": "^0.2.2",
50
+ "sequelize": "^6.37.7",
51
+ "zod": "^3.25.76",
52
+ "zod-to-json-schema": "^3.24.6"
50
53
  },
51
- "repository": {
52
- "type": "git",
53
- "url": "https://github.com/bootifyjs/bootifyjs.git"
54
- },
55
- "bugs": {
56
- "url": "https://github.com/bootifyjs/bootifyjs/issues"
57
- },
58
- "homepage": "https://github.com/bootifyjs/bootifyjs"
54
+ "devDependencies": {
55
+ "@fastify/swagger": "^9.5.1",
56
+ "@fastify/swagger-ui": "^5.2.3",
57
+ "@types/dotenv": "^6.1.1",
58
+ "@types/node": "^24.1.0",
59
+ "nodemon": "^3.1.10",
60
+ "pino-pretty": "^13.0.0",
61
+ "ts-node": "^10.9.2",
62
+ "typescript": "^5.8.3"
63
+ }
59
64
  }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 BootifyJS
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 DELETED
@@ -1,173 +0,0 @@
1
- # BootifyJS
2
-
3
- A Spring Boot inspired Node.js framework with TypeScript, Dependency Injection, and Validation.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install bootifyjs
9
- ```
10
-
11
- ## Quick Start
12
-
13
- ```typescript
14
- import { createBootifyApp, Controller, Get, Service } from 'bootifyjs';
15
-
16
- @Service()
17
- class GreetingService {
18
- getGreeting(name: string) {
19
- return `Hello, ${name}!`;
20
- }
21
- }
22
-
23
- @Controller('/api')
24
- class GreetingController {
25
- constructor(private greetingService: GreetingService) {}
26
-
27
- @Get('/hello')
28
- sayHello() {
29
- return { message: this.greetingService.getGreeting('World') };
30
- }
31
- }
32
-
33
- async function main() {
34
- const { start } = await createBootifyApp({
35
- port: 3000,
36
- controllers: [GreetingController],
37
- enableSwagger: true
38
- });
39
-
40
- await start();
41
- console.log('Server running at http://localhost:3000');
42
- }
43
-
44
- main().catch(console.error);
45
- ```
46
-
47
- ## Simple Configuration Management
48
-
49
- The framework provides a very simple configuration management system that automatically maps environment variables to nested configuration properties.
50
-
51
- ### How It Works
52
-
53
- 1. **Single Configuration Class**: Define one `AppConfig` class with your configuration structure
54
- 2. **Automatic Mapping**: Environment variables with `BOOTIFY_` prefix are automatically mapped to nested properties
55
- 3. **Type Conversion**: Values are automatically converted to numbers and booleans when possible
56
-
57
- ### Usage
58
-
59
- **1. Define Your Configuration Structure:**
60
- ```typescript
61
- import { Config } from '../core/config';
62
-
63
- @Config('BOOTIFY')
64
- export class AppConfig {
65
- SERVICE_NAME: string = 'bootifyjs-app';
66
-
67
- server: {
68
- port: number;
69
- host: string;
70
- name?: string;
71
- } = {
72
- port: 3000,
73
- host: 'localhost'
74
- };
75
-
76
- database: {
77
- host: string;
78
- port: number;
79
- name: string;
80
- } = {
81
- host: 'localhost',
82
- port: 5432,
83
- name: 'myapp'
84
- };
85
- }
86
- ```
87
-
88
- **2. Set Environment Variables:**
89
- ```bash
90
- # Maps to appConfig.SERVICE_NAME
91
- BOOTIFY_SERVICE_NAME=my-awesome-app
92
-
93
- # Maps to appConfig.server.port
94
- BOOTIFY_SERVER_PORT=8080
95
-
96
- # Maps to appConfig.server.host
97
- BOOTIFY_SERVER_HOST=0.0.0.0
98
-
99
- # Maps to appConfig.server.name
100
- BOOTIFY_SERVER_NAME=my-server
101
-
102
- # Maps to appConfig.database.host
103
- BOOTIFY_DATABASE_HOST=postgres-server
104
-
105
- # Maps to appConfig.database.port
106
- BOOTIFY_DATABASE_PORT=5432
107
- ```
108
-
109
- **3. Access Configuration:**
110
- ```typescript
111
- import { getConfigInstance } from './core/config';
112
- import { AppConfig } from './config/app.config';
113
-
114
- const appConfig = getConfigInstance(AppConfig);
115
-
116
- console.log(appConfig.SERVICE_NAME); // 'my-awesome-app'
117
- console.log(appConfig.server.port); // 8080
118
- console.log(appConfig.server.host); // '0.0.0.0'
119
- console.log(appConfig.database.host); // 'postgres-server'
120
- ```
121
-
122
- **4. Inject into Services:**
123
- ```typescript
124
- import { InjectConfig } from './core/decorators';
125
-
126
- @Service()
127
- export class MyService {
128
- constructor(@InjectConfig(AppConfig) private config: AppConfig) {}
129
-
130
- doSomething() {
131
- console.log(`Service: ${this.config.SERVICE_NAME}`);
132
- console.log(`Running on port: ${this.config.server.port}`);
133
- }
134
- }
135
- ```
136
-
137
- ### Environment Variable Mapping Rules
138
-
139
- The system automatically converts environment variable names to nested property paths:
140
-
141
- - `BOOTIFY_SERVICE_NAME` → `appConfig.SERVICE_NAME`
142
- - `BOOTIFY_SERVER_PORT` → `appConfig.server.port`
143
- - `BOOTIFY_SERVER_HOST` → `appConfig.server.host`
144
- - `BOOTIFY_DATABASE_HOST` → `appConfig.database.host`
145
- - `BOOTIFY_DATABASE_PORT` → `appConfig.database.port`
146
-
147
- ### Automatic Type Conversion
148
-
149
- - **Numbers**: `"8080"` → `8080`
150
- - **Booleans**: `"true"` → `true`, `"false"` → `false`
151
- - **Strings**: Everything else remains as string
152
-
153
- ### Getting Started
154
-
155
- 1. Copy `example.env` to `.env` and modify values
156
- 2. Set your environment variables following the `BOOTIFY_*` pattern
157
- 3. Access your configuration using `getConfigInstance(AppConfig)`
158
-
159
- That's it! No complex setup, no manual property mapping - just define your structure and set your environment variables.
160
-
161
- ## Features
162
-
163
- - **Dependency Injection**: Automatic constructor injection with `@Injectable`, `@Service`, and `@Repository` decorators
164
- - **REST API**: Easy controller definition with `@Controller`, `@Get`, `@Post`, etc.
165
- - **Validation**: Request validation with Zod schemas
166
- - **Configuration**: Environment-based configuration with automatic mapping
167
- - **OpenAPI**: Automatic OpenAPI documentation generation
168
- - **Logging**: Comprehensive logging system with context tracking
169
- - **Event System**: Type-safe event system with middleware support
170
-
171
- ## Documentation
172
-
173
- For more detailed documentation, please visit our [GitHub repository](https://github.com/bootifyjs/bootifyjs).
@@ -1,29 +0,0 @@
1
- export declare class AppConfig {
2
- SERVICE_NAME: string;
3
- server: {
4
- port: number;
5
- host: string;
6
- name?: string;
7
- };
8
- database: {
9
- host: string;
10
- port: number;
11
- name: string;
12
- username: string;
13
- password: string;
14
- };
15
- logging: {
16
- level: string;
17
- enabled: boolean;
18
- };
19
- api: {
20
- version: string;
21
- };
22
- cors: {
23
- enabled: boolean;
24
- };
25
- jwt: {
26
- secret: string;
27
- expiresIn: number;
28
- };
29
- }
@@ -1,55 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.AppConfig = void 0;
10
- const config_1 = require("../core/config");
11
- let AppConfig = class AppConfig {
12
- constructor() {
13
- // Service configuration
14
- this.SERVICE_NAME = 'bootifyjs-app';
15
- // Server configuration - will be populated from BOOTIFY_SERVER_* env vars
16
- this.server = {
17
- port: 3000,
18
- host: 'localhost'
19
- };
20
- // Database configuration - will be populated from BOOTIFY_DATABASE_* env vars
21
- this.database = {
22
- host: 'localhost',
23
- port: 5432,
24
- name: 'bootifyjs',
25
- username: 'admin',
26
- password: 'password'
27
- };
28
- // Logging configuration - will be populated from BOOTIFY_LOGGING_* env vars
29
- this.logging = {
30
- level: 'info',
31
- enabled: true
32
- };
33
- // Any other configuration can be added here
34
- // The @Config decorator will automatically map environment variables
35
- // based on the property structure
36
- // API Configuration - will be populated from BOOTIFY_API_* env vars
37
- this.api = {
38
- version: 'v1'
39
- };
40
- // CORS Configuration - will be populated from BOOTIFY_CORS_* env vars
41
- this.cors = {
42
- enabled: true
43
- };
44
- // JWT Configuration - will be populated from BOOTIFY_JWT_* env vars
45
- this.jwt = {
46
- secret: 'default-secret',
47
- expiresIn: 3600
48
- };
49
- }
50
- };
51
- exports.AppConfig = AppConfig;
52
- exports.AppConfig = AppConfig = __decorate([
53
- (0, config_1.Config)('BOOTIFY')
54
- ], AppConfig);
55
- //# sourceMappingURL=app.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../src/config/app.config.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAGjC,IAAM,SAAS,GAAf,MAAM,SAAS;IAAf;QACL,wBAAwB;QACxB,iBAAY,GAAW,eAAe,CAAC;QAEvC,0EAA0E;QAC1E,WAAM,GAIF;YACF,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;SAClB,CAAC;QAEF,8EAA8E;QAC9E,aAAQ,GAMJ;YACF,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,OAAO;YACjB,QAAQ,EAAE,UAAU;SACrB,CAAC;QAEF,4EAA4E;QAC5E,YAAO,GAGH;YACF,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,4CAA4C;QAC5C,qEAAqE;QACrE,kCAAkC;QAElC,oEAAoE;QACpE,QAAG,GAEC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,sEAAsE;QACtE,SAAI,GAEA;YACF,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,oEAAoE;QACpE,QAAG,GAGC;YACF,MAAM,EAAE,gBAAgB;YACxB,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;CAAA,CAAA;AAhEY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,SAAS,CAAC;GACL,SAAS,CAgErB"}
@@ -1,16 +0,0 @@
1
- import { AppConfig } from '../config/app.config';
2
- import { ConfigDemoService } from '../services/config-demo.service';
3
- export declare class ConfigController {
4
- private config;
5
- private configDemoService;
6
- constructor(config: AppConfig, configDemoService: ConfigDemoService);
7
- getConfigInfo(): AppConfig;
8
- getServerUrl(): {
9
- url: string;
10
- message: string;
11
- };
12
- runConfigDemo(): {
13
- message: string;
14
- timestamp: string;
15
- };
16
- }
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ConfigController = void 0;
16
- const decorators_1 = require("../core/decorators");
17
- const app_config_1 = require("../config/app.config");
18
- const config_demo_service_1 = require("../services/config-demo.service");
19
- let ConfigController = class ConfigController {
20
- constructor(config, configDemoService) {
21
- this.config = config;
22
- this.configDemoService = configDemoService;
23
- }
24
- getConfigInfo() {
25
- return this.config;
26
- }
27
- getServerUrl() {
28
- return {
29
- url: this.configDemoService.getServerUrl(),
30
- message: 'Current server URL based on configuration'
31
- };
32
- }
33
- runConfigDemo() {
34
- this.configDemoService.demonstrateConfig();
35
- return {
36
- message: 'Configuration demo completed. Check the logs for details.',
37
- timestamp: new Date().toISOString()
38
- };
39
- }
40
- };
41
- exports.ConfigController = ConfigController;
42
- __decorate([
43
- (0, decorators_1.Get)('/info'),
44
- __metadata("design:type", Function),
45
- __metadata("design:paramtypes", []),
46
- __metadata("design:returntype", void 0)
47
- ], ConfigController.prototype, "getConfigInfo", null);
48
- __decorate([
49
- (0, decorators_1.Get)('/server-url'),
50
- __metadata("design:type", Function),
51
- __metadata("design:paramtypes", []),
52
- __metadata("design:returntype", void 0)
53
- ], ConfigController.prototype, "getServerUrl", null);
54
- __decorate([
55
- (0, decorators_1.Get)('/demo'),
56
- __metadata("design:type", Function),
57
- __metadata("design:paramtypes", []),
58
- __metadata("design:returntype", void 0)
59
- ], ConfigController.prototype, "runConfigDemo", null);
60
- exports.ConfigController = ConfigController = __decorate([
61
- (0, decorators_1.Controller)('/config'),
62
- __param(0, (0, decorators_1.InjectConfig)(app_config_1.AppConfig)),
63
- __metadata("design:paramtypes", [app_config_1.AppConfig,
64
- config_demo_service_1.ConfigDemoService])
65
- ], ConfigController);
66
- //# sourceMappingURL=config.controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.controller.js","sourceRoot":"","sources":["../../src/controllers/config.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mDAAmE;AACnE,qDAAiD;AACjD,yEAAoE;AAG7D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACmC,MAAiB,EAC1C,iBAAoC;QADX,WAAM,GAAN,MAAM,CAAW;QAC1C,sBAAiB,GAAjB,iBAAiB,CAAmB;IAC3C,CAAC;IAGJ,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAGD,YAAY;QACV,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;YAC1C,OAAO,EAAE,2CAA2C;SACrD,CAAC;IACJ,CAAC;IAGD,aAAa;QACX,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,2DAA2D;YACpE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAA;AA3BY,4CAAgB;AAO3B;IADC,IAAA,gBAAG,EAAC,OAAO,CAAC;;;;qDAGZ;AAGD;IADC,IAAA,gBAAG,EAAC,aAAa,CAAC;;;;oDAMlB;AAGD;IADC,IAAA,gBAAG,EAAC,OAAO,CAAC;;;;qDAOZ;2BA1BU,gBAAgB;IAD5B,IAAA,uBAAU,EAAC,SAAS,CAAC;IAGjB,WAAA,IAAA,yBAAY,EAAC,sBAAS,CAAC,CAAA;qCAAiB,sBAAS;QACvB,uCAAiB;GAHnC,gBAAgB,CA2B5B"}