wnodex 0.1.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 (183) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/dist/consts/cors.d.ts +15 -0
  4. package/dist/consts/cors.d.ts.map +1 -0
  5. package/dist/consts/cors.js +29 -0
  6. package/dist/consts/error-codes.d.ts +10 -0
  7. package/dist/consts/error-codes.d.ts.map +1 -0
  8. package/dist/consts/error-codes.js +12 -0
  9. package/dist/consts/index.d.ts +8 -0
  10. package/dist/consts/index.d.ts.map +1 -0
  11. package/dist/consts/index.js +10 -0
  12. package/dist/consts/log-levels.d.ts +8 -0
  13. package/dist/consts/log-levels.d.ts.map +1 -0
  14. package/dist/consts/log-levels.js +10 -0
  15. package/dist/consts/node-env.d.ts +7 -0
  16. package/dist/consts/node-env.d.ts.map +1 -0
  17. package/dist/consts/node-env.js +9 -0
  18. package/dist/consts/port.d.ts +6 -0
  19. package/dist/consts/port.d.ts.map +1 -0
  20. package/dist/consts/port.js +26 -0
  21. package/dist/consts/rate-limit.d.ts +9 -0
  22. package/dist/consts/rate-limit.d.ts.map +1 -0
  23. package/dist/consts/rate-limit.js +11 -0
  24. package/dist/consts/session.d.ts +6 -0
  25. package/dist/consts/session.d.ts.map +1 -0
  26. package/dist/consts/session.js +8 -0
  27. package/dist/errors/base-error.d.ts +57 -0
  28. package/dist/errors/base-error.d.ts.map +1 -0
  29. package/dist/errors/base-error.js +93 -0
  30. package/dist/errors/config-error.d.ts +20 -0
  31. package/dist/errors/config-error.d.ts.map +1 -0
  32. package/dist/errors/config-error.js +30 -0
  33. package/dist/errors/http-error.d.ts +17 -0
  34. package/dist/errors/http-error.d.ts.map +1 -0
  35. package/dist/errors/http-error.js +24 -0
  36. package/dist/errors/index.d.ts +5 -0
  37. package/dist/errors/index.d.ts.map +1 -0
  38. package/dist/errors/index.js +7 -0
  39. package/dist/errors/validation-error.d.ts +19 -0
  40. package/dist/errors/validation-error.d.ts.map +1 -0
  41. package/dist/errors/validation-error.js +29 -0
  42. package/dist/helpers/get-node-env.d.ts +13 -0
  43. package/dist/helpers/get-node-env.d.ts.map +1 -0
  44. package/dist/helpers/get-node-env.js +27 -0
  45. package/dist/helpers/index.d.ts +5 -0
  46. package/dist/helpers/index.d.ts.map +1 -0
  47. package/dist/helpers/index.js +7 -0
  48. package/dist/helpers/is-development.d.ts +9 -0
  49. package/dist/helpers/is-development.d.ts.map +1 -0
  50. package/dist/helpers/is-development.js +16 -0
  51. package/dist/helpers/setup-config.d.ts +12 -0
  52. package/dist/helpers/setup-config.d.ts.map +1 -0
  53. package/dist/helpers/setup-config.js +21 -0
  54. package/dist/helpers/setup-middlewares.d.ts +12 -0
  55. package/dist/helpers/setup-middlewares.d.ts.map +1 -0
  56. package/dist/helpers/setup-middlewares.js +45 -0
  57. package/dist/index.d.ts +39 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +41 -0
  60. package/dist/logger.d.ts +3 -0
  61. package/dist/logger.d.ts.map +1 -0
  62. package/dist/logger.js +21 -0
  63. package/dist/middlewares/compression.d.ts +18 -0
  64. package/dist/middlewares/compression.d.ts.map +1 -0
  65. package/dist/middlewares/compression.js +26 -0
  66. package/dist/middlewares/cookie-parser.ts.d.ts +20 -0
  67. package/dist/middlewares/cookie-parser.ts.d.ts.map +1 -0
  68. package/dist/middlewares/cookie-parser.ts.js +33 -0
  69. package/dist/middlewares/cors.d.ts +22 -0
  70. package/dist/middlewares/cors.d.ts.map +1 -0
  71. package/dist/middlewares/cors.js +34 -0
  72. package/dist/middlewares/error-handler.d.ts +21 -0
  73. package/dist/middlewares/error-handler.d.ts.map +1 -0
  74. package/dist/middlewares/error-handler.js +43 -0
  75. package/dist/middlewares/helmet.d.ts +16 -0
  76. package/dist/middlewares/helmet.d.ts.map +1 -0
  77. package/dist/middlewares/helmet.js +28 -0
  78. package/dist/middlewares/hpp.d.ts +18 -0
  79. package/dist/middlewares/hpp.d.ts.map +1 -0
  80. package/dist/middlewares/hpp.js +30 -0
  81. package/dist/middlewares/index.d.ts +10 -0
  82. package/dist/middlewares/index.d.ts.map +1 -0
  83. package/dist/middlewares/index.js +12 -0
  84. package/dist/middlewares/passport.d.ts +16 -0
  85. package/dist/middlewares/passport.d.ts.map +1 -0
  86. package/dist/middlewares/passport.js +27 -0
  87. package/dist/middlewares/rate-limit.d.ts +23 -0
  88. package/dist/middlewares/rate-limit.d.ts.map +1 -0
  89. package/dist/middlewares/rate-limit.js +35 -0
  90. package/dist/middlewares/session.d.ts +16 -0
  91. package/dist/middlewares/session.d.ts.map +1 -0
  92. package/dist/middlewares/session.js +23 -0
  93. package/dist/schemas/compression.d.ts +5 -0
  94. package/dist/schemas/compression.d.ts.map +1 -0
  95. package/dist/schemas/compression.js +5 -0
  96. package/dist/schemas/cookie-parser.d.ts +9 -0
  97. package/dist/schemas/cookie-parser.d.ts.map +1 -0
  98. package/dist/schemas/cookie-parser.js +14 -0
  99. package/dist/schemas/cors.d.ts +6 -0
  100. package/dist/schemas/cors.d.ts.map +1 -0
  101. package/dist/schemas/cors.js +9 -0
  102. package/dist/schemas/error-metadata.d.ts +18 -0
  103. package/dist/schemas/error-metadata.d.ts.map +1 -0
  104. package/dist/schemas/error-metadata.js +12 -0
  105. package/dist/schemas/helmet.d.ts +6 -0
  106. package/dist/schemas/helmet.d.ts.map +1 -0
  107. package/dist/schemas/helmet.js +8 -0
  108. package/dist/schemas/hpp.d.ts +5 -0
  109. package/dist/schemas/hpp.d.ts.map +1 -0
  110. package/dist/schemas/hpp.js +8 -0
  111. package/dist/schemas/index.d.ts +13 -0
  112. package/dist/schemas/index.d.ts.map +1 -0
  113. package/dist/schemas/index.js +15 -0
  114. package/dist/schemas/node-env.d.ts +16 -0
  115. package/dist/schemas/node-env.d.ts.map +1 -0
  116. package/dist/schemas/node-env.js +8 -0
  117. package/dist/schemas/passport.d.ts +6 -0
  118. package/dist/schemas/passport.d.ts.map +1 -0
  119. package/dist/schemas/passport.js +8 -0
  120. package/dist/schemas/port.d.ts +4 -0
  121. package/dist/schemas/port.d.ts.map +1 -0
  122. package/dist/schemas/port.js +16 -0
  123. package/dist/schemas/rate-limit.d.ts +9 -0
  124. package/dist/schemas/rate-limit.d.ts.map +1 -0
  125. package/dist/schemas/rate-limit.js +26 -0
  126. package/dist/schemas/session.d.ts +18 -0
  127. package/dist/schemas/session.d.ts.map +1 -0
  128. package/dist/schemas/session.js +32 -0
  129. package/dist/schemas/wnodex-config.d.ts +31 -0
  130. package/dist/schemas/wnodex-config.d.ts.map +1 -0
  131. package/dist/schemas/wnodex-config.js +24 -0
  132. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  133. package/dist/wnodex.d.ts +69 -0
  134. package/dist/wnodex.d.ts.map +1 -0
  135. package/dist/wnodex.js +131 -0
  136. package/package.json +54 -0
  137. package/src/consts/cors.ts +27 -0
  138. package/src/consts/error-codes.ts +9 -0
  139. package/src/consts/index.ts +7 -0
  140. package/src/consts/log-levels.ts +7 -0
  141. package/src/consts/node-env.ts +6 -0
  142. package/src/consts/port.ts +23 -0
  143. package/src/consts/rate-limit.ts +9 -0
  144. package/src/consts/session.ts +6 -0
  145. package/src/errors/base-error.ts +111 -0
  146. package/src/errors/config-error.ts +31 -0
  147. package/src/errors/http-error.ts +21 -0
  148. package/src/errors/index.ts +4 -0
  149. package/src/errors/validation-error.ts +30 -0
  150. package/src/helpers/get-node-env.ts +27 -0
  151. package/src/helpers/index.ts +4 -0
  152. package/src/helpers/is-development.ts +15 -0
  153. package/src/helpers/setup-config.ts +25 -0
  154. package/src/helpers/setup-middlewares.ts +56 -0
  155. package/src/index.ts +38 -0
  156. package/src/logger.ts +22 -0
  157. package/src/middlewares/compression.ts +32 -0
  158. package/src/middlewares/cookie-parser.ts.ts +37 -0
  159. package/src/middlewares/cors.ts +35 -0
  160. package/src/middlewares/error-handler.ts +54 -0
  161. package/src/middlewares/helmet.ts +29 -0
  162. package/src/middlewares/hpp.ts +31 -0
  163. package/src/middlewares/index.ts +9 -0
  164. package/src/middlewares/passport.ts +30 -0
  165. package/src/middlewares/rate-limit.ts +39 -0
  166. package/src/middlewares/session.ts +25 -0
  167. package/src/schemas/compression.ts +8 -0
  168. package/src/schemas/cookie-parser.ts +21 -0
  169. package/src/schemas/cors.ts +13 -0
  170. package/src/schemas/error-metadata.ts +15 -0
  171. package/src/schemas/helmet.ts +11 -0
  172. package/src/schemas/hpp.ts +9 -0
  173. package/src/schemas/index.ts +12 -0
  174. package/src/schemas/node-env.ts +11 -0
  175. package/src/schemas/passport.ts +11 -0
  176. package/src/schemas/port.ts +22 -0
  177. package/src/schemas/rate-limit.ts +33 -0
  178. package/src/schemas/session.ts +40 -0
  179. package/src/schemas/wnodex-config.ts +26 -0
  180. package/src/wnodex.ts +152 -0
  181. package/tsconfig.json +10 -0
  182. package/tsconfig.lib.json +13 -0
  183. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureHelmet = configureHelmet;
4
+ const tslib_1 = require("tslib");
5
+ const helmet_1 = tslib_1.__importDefault(require("helmet"));
6
+ /**
7
+ * Configures the Helmet middleware in an Express app.
8
+ * @param app The Express Application instance on which to apply Helmet.
9
+ * @param config Typed project configuration from which the Helmet option is read.
10
+ *
11
+ * @returns The Express Application instance (`app`) if Helmet is enable.
12
+ *
13
+ * @example
14
+ * private setupMiddlewares() {
15
+ * configureHelmet(this.app, this.config);
16
+ * }
17
+ */
18
+ function configureHelmet(app, config) {
19
+ const { helmet: options } = config;
20
+ if (typeof options === 'boolean') {
21
+ if (options === false || !options)
22
+ return;
23
+ return app.use((0, helmet_1.default)());
24
+ }
25
+ else {
26
+ return app.use((0, helmet_1.default)({ ...options }));
27
+ }
28
+ }
@@ -0,0 +1,18 @@
1
+ import type { Application } from 'express';
2
+ import type { WnodexConfigOutput } from '../schemas/wnodex-config.js';
3
+ /**
4
+ * Configures the hpp middleware protection against HTTP Parameter Pollution.
5
+ *
6
+ * Applies the hpp middleware to the Express application instance based on the
7
+ * provided configuration. If configuration is a boolean and true, applies with default.
8
+ * If configuration is an array, uses it as a whitelist of allowed duplicate parameters.
9
+ * @param app The Express application instance.
10
+ * @param config The normalized middleware configuration, specifying hpp options.
11
+ * @returns Void.
12
+ *
13
+ * @example
14
+ * configureHpp(app, { hpp: true });
15
+ * configureHpp(app, { hpp: ['param1', 'param2'] });
16
+ */
17
+ export declare function configureHpp(app: Application, config: WnodexConfigOutput): Application | undefined;
18
+ //# sourceMappingURL=hpp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hpp.d.ts","sourceRoot":"","sources":["../../src/middlewares/hpp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,2BAUxE"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureHpp = configureHpp;
4
+ const tslib_1 = require("tslib");
5
+ const hpp_1 = tslib_1.__importDefault(require("hpp"));
6
+ /**
7
+ * Configures the hpp middleware protection against HTTP Parameter Pollution.
8
+ *
9
+ * Applies the hpp middleware to the Express application instance based on the
10
+ * provided configuration. If configuration is a boolean and true, applies with default.
11
+ * If configuration is an array, uses it as a whitelist of allowed duplicate parameters.
12
+ * @param app The Express application instance.
13
+ * @param config The normalized middleware configuration, specifying hpp options.
14
+ * @returns Void.
15
+ *
16
+ * @example
17
+ * configureHpp(app, { hpp: true });
18
+ * configureHpp(app, { hpp: ['param1', 'param2'] });
19
+ */
20
+ function configureHpp(app, config) {
21
+ const { hpp: options } = config;
22
+ if (typeof options === 'boolean') {
23
+ if (options === false || !options)
24
+ return;
25
+ return app.use((0, hpp_1.default)());
26
+ }
27
+ else {
28
+ return app.use((0, hpp_1.default)({ whitelist: [...options] }));
29
+ }
30
+ }
@@ -0,0 +1,10 @@
1
+ export * from './compression.js';
2
+ export * from './cookie-parser.ts.js';
3
+ export * from './cors.js';
4
+ export * from './error-handler.js';
5
+ export * from './helmet.js';
6
+ export * from './hpp.js';
7
+ export * from './passport.js';
8
+ export * from './rate-limit.js';
9
+ export * from './session.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middlewares/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./compression.js"), exports);
5
+ tslib_1.__exportStar(require("./cookie-parser.ts.js"), exports);
6
+ tslib_1.__exportStar(require("./cors.js"), exports);
7
+ tslib_1.__exportStar(require("./error-handler.js"), exports);
8
+ tslib_1.__exportStar(require("./helmet.js"), exports);
9
+ tslib_1.__exportStar(require("./hpp.js"), exports);
10
+ tslib_1.__exportStar(require("./passport.js"), exports);
11
+ tslib_1.__exportStar(require("./rate-limit.js"), exports);
12
+ tslib_1.__exportStar(require("./session.js"), exports);
@@ -0,0 +1,16 @@
1
+ import type { Application } from 'express';
2
+ import type { WnodexConfigInput } from '../schemas/wnodex-config.js';
3
+ /**
4
+ * Configures the passport instance.
5
+ * @param app The express application instance.
6
+ * @param config The Wnodex raw config.
7
+ * @returns The passport instance.
8
+ * @example
9
+ * construction(config: WnodexConfigInput) {
10
+ * this.app = express();
11
+ * this.config = configureConfig(config);
12
+ * this.passport = configurePassport(this.app, this.config)
13
+ * }
14
+ */
15
+ export declare function configurePassport(app: Application, config: WnodexConfigInput): import("passport").PassportStatic | undefined;
16
+ //# sourceMappingURL=passport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport.d.ts","sourceRoot":"","sources":["../../src/middlewares/passport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,iDAa5E"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configurePassport = configurePassport;
4
+ /**
5
+ * Configures the passport instance.
6
+ * @param app The express application instance.
7
+ * @param config The Wnodex raw config.
8
+ * @returns The passport instance.
9
+ * @example
10
+ * construction(config: WnodexConfigInput) {
11
+ * this.app = express();
12
+ * this.config = configureConfig(config);
13
+ * this.passport = configurePassport(this.app, this.config)
14
+ * }
15
+ */
16
+ function configurePassport(app, config) {
17
+ const { passport } = config;
18
+ /**
19
+ * If config.passport is either undefined, true (invalid config), or false, passport won't be instantiated.
20
+ */
21
+ if (!passport || typeof passport === 'boolean')
22
+ return;
23
+ app.set('passport', passport);
24
+ app.use(passport.initialize());
25
+ app.use(passport.session());
26
+ return passport;
27
+ }
@@ -0,0 +1,23 @@
1
+ import type { Application } from 'express';
2
+ import type { WnodexConfigOutput } from '../schemas/wnodex-config.js';
3
+ /**
4
+ * Configures the rate limiting middleware to protect the application
5
+ * from excessive requests, mitigating abuse and denial of service attacks.
6
+ *
7
+ * It reads the `rateLimit` option from the provided config.
8
+ * If it's a boolean:
9
+ * - `false` disables rate limiting.
10
+ * - `true` enables rate limiting with default settings.
11
+ * If it's an object, it spreads the properties into the rateLimit options.
12
+ * @param app Express Application instance to apply the rate limiter to.
13
+ * @param config Typed application configuration object containing rateLimit option.
14
+ *
15
+ * @returns The result of `app.use(rateLimit())` if rate limiting is enabled, otherwise `undefined`.
16
+ *
17
+ * @example
18
+ * private setupMiddlewares() {
19
+ * configureHelmet(this.app, this.config);
20
+ * }
21
+ */
22
+ export declare function configureRateLimit(app: Application, config: WnodexConfigOutput): Application | undefined;
23
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middlewares/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,kBAAkB,2BAW3B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureRateLimit = configureRateLimit;
4
+ const tslib_1 = require("tslib");
5
+ const express_rate_limit_1 = tslib_1.__importDefault(require("express-rate-limit"));
6
+ /**
7
+ * Configures the rate limiting middleware to protect the application
8
+ * from excessive requests, mitigating abuse and denial of service attacks.
9
+ *
10
+ * It reads the `rateLimit` option from the provided config.
11
+ * If it's a boolean:
12
+ * - `false` disables rate limiting.
13
+ * - `true` enables rate limiting with default settings.
14
+ * If it's an object, it spreads the properties into the rateLimit options.
15
+ * @param app Express Application instance to apply the rate limiter to.
16
+ * @param config Typed application configuration object containing rateLimit option.
17
+ *
18
+ * @returns The result of `app.use(rateLimit())` if rate limiting is enabled, otherwise `undefined`.
19
+ *
20
+ * @example
21
+ * private setupMiddlewares() {
22
+ * configureHelmet(this.app, this.config);
23
+ * }
24
+ */
25
+ function configureRateLimit(app, config) {
26
+ const { rateLimit: options } = config;
27
+ if (typeof options === 'boolean') {
28
+ if (options === false || !options)
29
+ return;
30
+ return app.use((0, express_rate_limit_1.default)());
31
+ }
32
+ else {
33
+ return app.use((0, express_rate_limit_1.default)({ ...options }));
34
+ }
35
+ }
@@ -0,0 +1,16 @@
1
+ import type { Application } from 'express';
2
+ import type { WnodexConfigOutput } from '../schemas/wnodex-config.js';
3
+ /**
4
+ * Configures the Express session middleware with the provided options.
5
+ * Applies session management to the Express application, enabling
6
+ * stateful sessions with cookies.
7
+ * @param app The Express application instance.
8
+ * @param config The validated configuration object containing session options.
9
+ * @returns The Express Application instance with Session middleware applied,
10
+ * or undefined if ession is disabled.
11
+ *
12
+ * @example
13
+ * configureSession(app, { session: { secret: 'your-secret', resave: false, saveUninitialized: false } });
14
+ */
15
+ export declare function configureSession(app: Application, config: WnodexConfigOutput): Application | undefined;
16
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middlewares/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,2BAM5E"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configureSession = configureSession;
4
+ const tslib_1 = require("tslib");
5
+ const express_session_1 = tslib_1.__importDefault(require("express-session"));
6
+ /**
7
+ * Configures the Express session middleware with the provided options.
8
+ * Applies session management to the Express application, enabling
9
+ * stateful sessions with cookies.
10
+ * @param app The Express application instance.
11
+ * @param config The validated configuration object containing session options.
12
+ * @returns The Express Application instance with Session middleware applied,
13
+ * or undefined if ession is disabled.
14
+ *
15
+ * @example
16
+ * configureSession(app, { session: { secret: 'your-secret', resave: false, saveUninitialized: false } });
17
+ */
18
+ function configureSession(app, config) {
19
+ const { session: options } = config;
20
+ if (!options)
21
+ return;
22
+ return app.use((0, express_session_1.default)({ ...options }));
23
+ }
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ export declare const CompressionOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
3
+ export type CompressionOptionsInput = z.input<typeof CompressionOptionsSchema>;
4
+ export type CompressionOptionsOutput = z.output<typeof CompressionOptionsSchema>;
5
+ //# sourceMappingURL=compression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/schemas/compression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,wBAAwB,2CAAuC,CAAC;AAE7E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC/E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAC7C,OAAO,wBAAwB,CAChC,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompressionOptionsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.CompressionOptionsSchema = zod_1.z.boolean().optional().default(true);
@@ -0,0 +1,9 @@
1
+ import type { CookieParseOptions } from 'cookie-parser';
2
+ import { z } from 'zod';
3
+ export declare const CookieParserOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
4
+ secret: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
5
+ options: z.ZodOptional<z.ZodCustom<CookieParseOptions, CookieParseOptions>>;
6
+ }, z.core.$strip>]>>>;
7
+ export type CookieParserOptionsInput = z.input<typeof CookieParserOptionsSchema>;
8
+ export type CookieParserOptionsOutput = z.output<typeof CookieParserOptionsSchema>;
9
+ //# sourceMappingURL=cookie-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-parser.d.ts","sourceRoot":"","sources":["../../src/schemas/cookie-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,yBAAyB;;;qBAStB,CAAC;AAEjB,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAC5C,OAAO,yBAAyB,CACjC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAC9C,OAAO,yBAAyB,CACjC,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CookieParserOptionsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.CookieParserOptionsSchema = zod_1.z
6
+ .union([
7
+ zod_1.z.boolean(),
8
+ zod_1.z.object({
9
+ secret: zod_1.z.union([zod_1.z.string(), zod_1.z.array(zod_1.z.string())]),
10
+ options: zod_1.z.custom().optional(),
11
+ }),
12
+ ])
13
+ .optional()
14
+ .default(true);
@@ -0,0 +1,6 @@
1
+ import type { CorsOptions } from 'cors';
2
+ import { z } from 'zod';
3
+ export declare const CorsOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<CorsOptions, CorsOptions>]>>>;
4
+ export type CorsOptionsInput = z.input<typeof CorsOptionsSchema>;
5
+ export type CorsOptionsOutput = z.output<typeof CorsOptionsSchema>;
6
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/schemas/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB,yGAGE,CAAC;AAEjC,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACjE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CorsOptionsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const cors_js_1 = require("../consts/cors.js");
6
+ exports.CorsOptionsSchema = zod_1.z
7
+ .union([zod_1.z.boolean(), zod_1.z.custom()])
8
+ .optional()
9
+ .default(cors_js_1.DEFAULT_CORS_OPTIONS);
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ export declare const ErrorMetadataSchema: z.ZodObject<{
3
+ code: z.ZodEnum<{
4
+ VALIDATION_ERROR: "VALIDATION_ERROR";
5
+ CONFIG_ERROR: "CONFIG_ERROR";
6
+ INTERNAL_ERROR: "INTERNAL_ERROR";
7
+ NOT_FOUND: "NOT_FOUND";
8
+ UNAUTHORIZED: "UNAUTHORIZED";
9
+ FORBIDDEN: "FORBIDDEN";
10
+ BAD_REQUEST: "BAD_REQUEST";
11
+ }>;
12
+ cause: z.ZodOptional<z.ZodUnknown>;
13
+ context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
14
+ }, z.core.$strict>;
15
+ export type ErrorMetadata = z.infer<typeof ErrorMetadataSchema>;
16
+ export type ErrorMetadataInput = z.input<typeof ErrorMetadataSchema>;
17
+ export type ErrorMetadataOutput = z.output<typeof ErrorMetadataSchema>;
18
+ //# sourceMappingURL=error-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-metadata.d.ts","sourceRoot":"","sources":["../../src/schemas/error-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;kBAMrB,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorMetadataSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const error_codes_js_1 = require("../consts/error-codes.js");
6
+ exports.ErrorMetadataSchema = zod_1.z
7
+ .object({
8
+ code: zod_1.z.enum(Object.values(error_codes_js_1.ERROR_CODES)),
9
+ cause: zod_1.z.unknown().optional(),
10
+ context: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
11
+ })
12
+ .strict();
@@ -0,0 +1,6 @@
1
+ import type { HelmetOptions } from 'helmet';
2
+ import { z } from 'zod';
3
+ export declare const HelmetOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<HelmetOptions, HelmetOptions>]>>>;
4
+ export type HelmetOptionsInput = z.input<typeof HelmetOptionsSchema>;
5
+ export type HelmetOptionsOutput = z.output<typeof HelmetOptionsSchema>;
6
+ //# sourceMappingURL=helmet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helmet.d.ts","sourceRoot":"","sources":["../../src/schemas/helmet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB,6GAGf,CAAC;AAElB,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HelmetOptionsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.HelmetOptionsSchema = zod_1.z
6
+ .union([zod_1.z.boolean(), zod_1.z.custom()])
7
+ .optional()
8
+ .default(false);
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ export declare const HppOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>>>;
3
+ export type HppOptionsInput = z.input<typeof HppOptionsSchema>;
4
+ export type HppOptionsoutput = z.output<typeof HppOptionsSchema>;
5
+ //# sourceMappingURL=hpp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hpp.d.ts","sourceRoot":"","sources":["../../src/schemas/hpp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,2FAGb,CAAC;AAEjB,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HppOptionsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.HppOptionsSchema = zod_1.z
6
+ .union([zod_1.z.boolean(), zod_1.z.array(zod_1.z.string())])
7
+ .optional()
8
+ .default(true);
@@ -0,0 +1,13 @@
1
+ export * from './compression.js';
2
+ export * from './cookie-parser.js';
3
+ export * from './cors.js';
4
+ export * from './error-metadata.js';
5
+ export * from './helmet.js';
6
+ export * from './hpp.js';
7
+ export * from './node-env.js';
8
+ export * from './passport.js';
9
+ export * from './port.js';
10
+ export * from './rate-limit.js';
11
+ export * from './session.js';
12
+ export * from './wnodex-config.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./compression.js"), exports);
5
+ tslib_1.__exportStar(require("./cookie-parser.js"), exports);
6
+ tslib_1.__exportStar(require("./cors.js"), exports);
7
+ tslib_1.__exportStar(require("./error-metadata.js"), exports);
8
+ tslib_1.__exportStar(require("./helmet.js"), exports);
9
+ tslib_1.__exportStar(require("./hpp.js"), exports);
10
+ tslib_1.__exportStar(require("./node-env.js"), exports);
11
+ tslib_1.__exportStar(require("./passport.js"), exports);
12
+ tslib_1.__exportStar(require("./port.js"), exports);
13
+ tslib_1.__exportStar(require("./rate-limit.js"), exports);
14
+ tslib_1.__exportStar(require("./session.js"), exports);
15
+ tslib_1.__exportStar(require("./wnodex-config.js"), exports);
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const NODE_ENVS: ("production" | "development" | "test" | "staging")[];
3
+ export declare const NodeEnvSchema: z.ZodEnum<{
4
+ production: "production";
5
+ development: "development";
6
+ test: "test";
7
+ staging: "staging";
8
+ }>;
9
+ export declare const NodeEnvEnum: {
10
+ production: "production";
11
+ development: "development";
12
+ test: "test";
13
+ staging: "staging";
14
+ };
15
+ export type NodeEnv = z.infer<typeof NodeEnvSchema>;
16
+ //# sourceMappingURL=node-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-env.d.ts","sourceRoot":"","sources":["../../src/schemas/node-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,SAAS,uDAAiC,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;EAAyB,CAAC;AAEpD,eAAO,MAAM,WAAW;;;;;CAAqB,CAAC;AAE9C,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeEnvEnum = exports.NodeEnvSchema = exports.NODE_ENVS = void 0;
4
+ const zod_1 = require("zod");
5
+ const node_env_js_1 = require("../consts/node-env.js");
6
+ exports.NODE_ENVS = Object.values(node_env_js_1.NODE_ENV_VALUES);
7
+ exports.NodeEnvSchema = zod_1.z.enum([...exports.NODE_ENVS]);
8
+ exports.NodeEnvEnum = exports.NodeEnvSchema.enum;
@@ -0,0 +1,6 @@
1
+ import passport from 'passport';
2
+ import { z } from 'zod';
3
+ export declare const PassportSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodCustom<passport.PassportStatic, passport.PassportStatic>]>>>;
4
+ export type PassportInput = z.input<typeof PassportSchema>;
5
+ export type PassportOutput = z.output<typeof PassportSchema>;
6
+ //# sourceMappingURL=passport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport.d.ts","sourceRoot":"","sources":["../../src/schemas/passport.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,wIAGV,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PassportSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.PassportSchema = zod_1.z
6
+ .union([zod_1.z.literal(false), zod_1.z.custom()])
7
+ .optional()
8
+ .default(false);
@@ -0,0 +1,4 @@
1
+ import { z } from 'zod';
2
+ export declare const PortSchema: z.ZodDefault<z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodTransform<number, string | number>>>>;
3
+ export type PortInput = z.input<typeof PortSchema>;
4
+ //# sourceMappingURL=port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/schemas/port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,UAAU,kIAUC,CAAC;AAEzB,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PortSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const port_js_1 = require("../consts/port.js");
6
+ exports.PortSchema = zod_1.z
7
+ .union([
8
+ zod_1.z.string().regex(/^\d{4,5}$/),
9
+ zod_1.z.number().int().min(port_js_1.MIN_PORT).max(port_js_1.MAX_PORT),
10
+ ])
11
+ .transform((val) => (typeof val === 'string' ? Number(val) : val))
12
+ .refine((port) => !port_js_1.RESERVED_PORTS[port], {
13
+ message: 'The selected port is reserved for another application',
14
+ })
15
+ .optional()
16
+ .default(port_js_1.DEFAULT_PORT);
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ export declare const RateLimitOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
3
+ windowMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
4
+ max: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
+ message: z.ZodDefault<z.ZodOptional<z.ZodString>>;
6
+ }, z.core.$strip>]>>>;
7
+ export type RateLimitOptionsInput = z.input<typeof RateLimitOptionsSchema>;
8
+ export type RateLimitOptionsOutput = z.output<typeof RateLimitOptionsSchema>;
9
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/schemas/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,sBAAsB;;;;qBAoBU,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAC3E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateLimitOptionsSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const rate_limit_js_1 = require("../consts/rate-limit.js");
6
+ exports.RateLimitOptionsSchema = zod_1.z
7
+ .union([
8
+ zod_1.z.boolean(),
9
+ zod_1.z.object({
10
+ windowMs: zod_1.z
11
+ .number()
12
+ .int()
13
+ .positive()
14
+ .optional()
15
+ .default(rate_limit_js_1.DEFAULT_RATE_LIMIT_WINDOW_MS),
16
+ max: zod_1.z
17
+ .number()
18
+ .int()
19
+ .positive()
20
+ .optional()
21
+ .default(rate_limit_js_1.DEFAULT_RATE_LIMIT_MAX),
22
+ message: zod_1.z.string().optional().default(rate_limit_js_1.DEFAULT_RATE_LIMIT_MESSAGE),
23
+ }),
24
+ ])
25
+ .optional()
26
+ .default({ ...rate_limit_js_1.DEFAULT_RATE_LIMIT_OPTIONS });
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ export declare const SessionCookieSchema: z.ZodDefault<z.ZodOptional<z.ZodObject<{
3
+ secure: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
4
+ maxAge: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
+ httpOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
6
+ }, z.core.$strip>>>;
7
+ export declare const SessionOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodObject<{
8
+ secret: z.ZodString;
9
+ resave: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ saveUninitialized: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11
+ cookie: z.ZodDefault<z.ZodOptional<z.ZodObject<{
12
+ secure: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
13
+ maxAge: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
14
+ httpOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
15
+ }, z.core.$strip>>>;
16
+ }, z.core.$strip>]>>>;
17
+ export type SessionOptions = z.infer<typeof SessionOptionsSchema>;
18
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/schemas/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,mBAAmB;;;;mBAW5B,CAAC;AAEL,eAAO,MAAM,oBAAoB;;;;;;;;;qBAchB,CAAC;AAElB,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}