@nest-toolbox/response-envelope 1.8.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiBH,0BAyBC;AAiBD,sBAmBC;AAiBD,8BAoBC;AAjHD,2CAA8C;AAG9C;;;;;;;;;;;GAWG;AACH,SAAgB,OAAO,CACrB,IAAO,EACP,UAKI,EAAE;;IAEN,MAAM,IAAI,GAAiB;QACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,MAAA,OAAO,CAAC,IAAI,mCAAI,EAAE;QACxB,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,GAAG;KACtC,CAAC;IAEF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI;QACJ,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,2BAAe;QAC3C,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,KAAK,CACnB,OAAe,EACf,UAII,EAAE;;IAEN,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,IAAI;QACV,OAAO;QACP,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE;QAC5B,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,IAAI,EAAE,MAAA,OAAO,CAAC,IAAI,mCAAI,EAAE;YACxB,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,GAAG;SACtC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,SAAS,CACvB,IAAS,EACT,UAA0D,EAC1D,UAII,EAAE;IAEN,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,OAAO,OAAO,CAAC,IAAI,kCACd,OAAO,KACV,UAAU,EAAE;YACV,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,UAAU;SACX,IACD,CAAC;AACL,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @nest-toolbox/response-envelope
3
+ *
4
+ * Standard API response envelope with interceptor, exception filter, and helpers for NestJS.
5
+ */
6
+ export * from './constants';
7
+ export * from './decorators';
8
+ export * from './envelope-exception.filter';
9
+ export * from './helpers';
10
+ export * from './response-envelope.interceptor';
11
+ export * from './response-envelope.module';
12
+ export * from './types';
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * @nest-toolbox/response-envelope
4
+ *
5
+ * Standard API response envelope with interceptor, exception filter, and helpers for NestJS.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./constants"), exports);
23
+ __exportStar(require("./decorators"), exports);
24
+ __exportStar(require("./envelope-exception.filter"), exports);
25
+ __exportStar(require("./helpers"), exports);
26
+ __exportStar(require("./response-envelope.interceptor"), exports);
27
+ __exportStar(require("./response-envelope.module"), exports);
28
+ __exportStar(require("./types"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,+CAA6B;AAC7B,8DAA4C;AAC5C,4CAA0B;AAC1B,kEAAgD;AAChD,6DAA2C;AAC3C,0CAAwB"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Interceptor that auto-wraps controller responses in the standard envelope.
3
+ *
4
+ * Respects @SkipEnvelope() and @ApiMessage() decorators.
5
+ * Already-wrapped responses (objects with a `success` boolean property) are passed through.
6
+ */
7
+ import { type CallHandler, type ExecutionContext, type NestInterceptor } from '@nestjs/common';
8
+ import type { Reflector } from '@nestjs/core';
9
+ import { type Observable } from 'rxjs';
10
+ import type { ResponseEnvelopeOptions } from './types';
11
+ export declare class ResponseEnvelopeInterceptor implements NestInterceptor {
12
+ private readonly reflector;
13
+ private readonly options?;
14
+ constructor(reflector: Reflector, options?: ResponseEnvelopeOptions | undefined);
15
+ intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
16
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * Interceptor that auto-wraps controller responses in the standard envelope.
4
+ *
5
+ * Respects @SkipEnvelope() and @ApiMessage() decorators.
6
+ * Already-wrapped responses (objects with a `success` boolean property) are passed through.
7
+ */
8
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ 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;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
+ };
17
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
+ return function (target, key) { decorator(target, key, paramIndex); }
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.ResponseEnvelopeInterceptor = void 0;
22
+ const common_1 = require("@nestjs/common");
23
+ const rxjs_1 = require("rxjs");
24
+ const constants_1 = require("./constants");
25
+ let ResponseEnvelopeInterceptor = class ResponseEnvelopeInterceptor {
26
+ constructor(reflector, options) {
27
+ this.reflector = reflector;
28
+ this.options = options;
29
+ }
30
+ intercept(context, next) {
31
+ const shouldSkip = this.reflector.getAllAndOverride(constants_1.SKIP_ENVELOPE_KEY, [context.getHandler(), context.getClass()]);
32
+ if (shouldSkip) {
33
+ return next.handle();
34
+ }
35
+ const customMessage = this.reflector.getAllAndOverride(constants_1.API_MESSAGE_KEY, [context.getHandler(), context.getClass()]);
36
+ const request = context.switchToHttp().getRequest();
37
+ const response = context.switchToHttp().getResponse();
38
+ return next.handle().pipe((0, rxjs_1.map)((data) => {
39
+ var _a, _b, _c, _d, _e, _f, _g, _h;
40
+ // Pass through if already wrapped
41
+ if (isAlreadyWrapped(data)) {
42
+ return data;
43
+ }
44
+ const defaultMsg = (_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.defaultMessage) !== null && _b !== void 0 ? _b : constants_1.DEFAULT_MESSAGE;
45
+ const includePath = (_d = (_c = this.options) === null || _c === void 0 ? void 0 : _c.includePath) !== null && _d !== void 0 ? _d : true;
46
+ const includeTimestamp = (_f = (_e = this.options) === null || _e === void 0 ? void 0 : _e.includeTimestamp) !== null && _f !== void 0 ? _f : true;
47
+ const meta = {
48
+ timestamp: includeTimestamp ? new Date().toISOString() : '',
49
+ path: includePath ? ((_g = request.url) !== null && _g !== void 0 ? _g : '') : '',
50
+ statusCode: (_h = response.statusCode) !== null && _h !== void 0 ? _h : 200,
51
+ };
52
+ return {
53
+ success: true,
54
+ data: data !== null && data !== void 0 ? data : null,
55
+ message: customMessage !== null && customMessage !== void 0 ? customMessage : defaultMsg,
56
+ meta,
57
+ };
58
+ }));
59
+ }
60
+ };
61
+ exports.ResponseEnvelopeInterceptor = ResponseEnvelopeInterceptor;
62
+ exports.ResponseEnvelopeInterceptor = ResponseEnvelopeInterceptor = __decorate([
63
+ (0, common_1.Injectable)(),
64
+ __param(1, (0, common_1.Optional)()),
65
+ __param(1, (0, common_1.Inject)(constants_1.RESPONSE_ENVELOPE_OPTIONS)),
66
+ __metadata("design:paramtypes", [Function, Object])
67
+ ], ResponseEnvelopeInterceptor);
68
+ /**
69
+ * Check if the response is already wrapped in our envelope format.
70
+ * A wrapped response has a boolean `success` field and a `meta` object.
71
+ */
72
+ function isAlreadyWrapped(data) {
73
+ if (data === null || data === undefined || typeof data !== 'object') {
74
+ return false;
75
+ }
76
+ const obj = data;
77
+ return typeof obj.success === 'boolean' && typeof obj.meta === 'object' && obj.meta !== null;
78
+ }
79
+ //# sourceMappingURL=response-envelope.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-envelope.interceptor.js","sourceRoot":"","sources":["../src/response-envelope.interceptor.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;AAEH,2CAA6H;AAE7H,+BAA4C;AAC5C,2CAA6G;AAItG,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACtC,YACmB,SAAoB,EAGpB,OAAiC;QAHjC,cAAS,GAAT,SAAS,CAAW;QAGpB,YAAO,GAAP,OAAO,CAA0B;IACjD,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,6BAAiB,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE5H,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAS,2BAAe,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE5H,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;QAEtD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,CAAC,IAAa,EAAE,EAAE;;YACpB,kCAAkC;YAClC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,cAAc,mCAAI,2BAAe,CAAC;YACnE,MAAM,WAAW,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,mCAAI,IAAI,CAAC;YACtD,MAAM,gBAAgB,GAAG,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,gBAAgB,mCAAI,IAAI,CAAC;YAEhE,MAAM,IAAI,GAAiB;gBACzB,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;gBAC3D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAA,OAAO,CAAC,GAAG,mCAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC5C,UAAU,EAAE,MAAA,QAAQ,CAAC,UAAU,mCAAI,GAAG;aACvC,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAa;gBACtB,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,IAAI;gBAClB,OAAO,EAAE,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,UAAU;gBACpC,IAAI;aACL,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AA9CY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,qCAAyB,CAAC,CAAA;;GAJzB,2BAA2B,CA8CvC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * NestJS module for response-envelope.
3
+ *
4
+ * Registers the interceptor and exception filter globally.
5
+ * Supports forRoot() with static options and forRootAsync() with factory injection.
6
+ */
7
+ import { type DynamicModule } from '@nestjs/common';
8
+ import type { ResponseEnvelopeAsyncOptions, ResponseEnvelopeOptions } from './types';
9
+ export declare class ResponseEnvelopeModule {
10
+ /**
11
+ * Register the module with static options.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * @Module({
16
+ * imports: [
17
+ * ResponseEnvelopeModule.forRoot({ defaultMessage: 'Success' }),
18
+ * ],
19
+ * })
20
+ * export class AppModule {}
21
+ * ```
22
+ */
23
+ static forRoot(options?: ResponseEnvelopeOptions): DynamicModule;
24
+ /**
25
+ * Register the module with async options (factory, class, or existing provider).
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * @Module({
30
+ * imports: [
31
+ * ResponseEnvelopeModule.forRootAsync({
32
+ * imports: [ConfigModule],
33
+ * useFactory: (config: ConfigService) => ({
34
+ * defaultMessage: config.get('API_DEFAULT_MESSAGE'),
35
+ * }),
36
+ * inject: [ConfigService],
37
+ * }),
38
+ * ],
39
+ * })
40
+ * export class AppModule {}
41
+ * ```
42
+ */
43
+ static forRootAsync(options: ResponseEnvelopeAsyncOptions): DynamicModule;
44
+ }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * NestJS module for response-envelope.
4
+ *
5
+ * Registers the interceptor and exception filter globally.
6
+ * Supports forRoot() with static options and forRootAsync() with factory injection.
7
+ */
8
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ 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;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var ResponseEnvelopeModule_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ResponseEnvelopeModule = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const core_1 = require("@nestjs/core");
19
+ const constants_1 = require("./constants");
20
+ const envelope_exception_filter_1 = require("./envelope-exception.filter");
21
+ const response_envelope_interceptor_1 = require("./response-envelope.interceptor");
22
+ let ResponseEnvelopeModule = ResponseEnvelopeModule_1 = class ResponseEnvelopeModule {
23
+ /**
24
+ * Register the module with static options.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * @Module({
29
+ * imports: [
30
+ * ResponseEnvelopeModule.forRoot({ defaultMessage: 'Success' }),
31
+ * ],
32
+ * })
33
+ * export class AppModule {}
34
+ * ```
35
+ */
36
+ static forRoot(options = {}) {
37
+ return {
38
+ module: ResponseEnvelopeModule_1,
39
+ global: true,
40
+ providers: [
41
+ {
42
+ provide: constants_1.RESPONSE_ENVELOPE_OPTIONS,
43
+ useValue: options,
44
+ },
45
+ {
46
+ provide: core_1.APP_INTERCEPTOR,
47
+ useClass: response_envelope_interceptor_1.ResponseEnvelopeInterceptor,
48
+ },
49
+ {
50
+ provide: core_1.APP_FILTER,
51
+ useClass: envelope_exception_filter_1.EnvelopeExceptionFilter,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ /**
57
+ * Register the module with async options (factory, class, or existing provider).
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * @Module({
62
+ * imports: [
63
+ * ResponseEnvelopeModule.forRootAsync({
64
+ * imports: [ConfigModule],
65
+ * useFactory: (config: ConfigService) => ({
66
+ * defaultMessage: config.get('API_DEFAULT_MESSAGE'),
67
+ * }),
68
+ * inject: [ConfigService],
69
+ * }),
70
+ * ],
71
+ * })
72
+ * export class AppModule {}
73
+ * ```
74
+ */
75
+ static forRootAsync(options) {
76
+ var _a, _b, _c;
77
+ return {
78
+ module: ResponseEnvelopeModule_1,
79
+ global: true,
80
+ imports: (_a = options.imports) !== null && _a !== void 0 ? _a : [],
81
+ providers: [
82
+ {
83
+ provide: constants_1.RESPONSE_ENVELOPE_OPTIONS,
84
+ useFactory: (_b = options.useFactory) !== null && _b !== void 0 ? _b : (() => ({})),
85
+ inject: (_c = options.inject) !== null && _c !== void 0 ? _c : [],
86
+ },
87
+ {
88
+ provide: core_1.APP_INTERCEPTOR,
89
+ useClass: response_envelope_interceptor_1.ResponseEnvelopeInterceptor,
90
+ },
91
+ {
92
+ provide: core_1.APP_FILTER,
93
+ useClass: envelope_exception_filter_1.EnvelopeExceptionFilter,
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ };
99
+ exports.ResponseEnvelopeModule = ResponseEnvelopeModule;
100
+ exports.ResponseEnvelopeModule = ResponseEnvelopeModule = ResponseEnvelopeModule_1 = __decorate([
101
+ (0, common_1.Module)({})
102
+ ], ResponseEnvelopeModule);
103
+ //# sourceMappingURL=response-envelope.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-envelope.module.js","sourceRoot":"","sources":["../src/response-envelope.module.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;AAEH,2CAA4D;AAC5D,uCAA2D;AAC3D,2CAAwD;AACxD,2EAAsE;AACtE,mFAA8E;AAIvE,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IACjC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,OAAO,CAAC,UAAmC,EAAE;QAClD,OAAO;YACL,MAAM,EAAE,wBAAsB;YAC9B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qCAAyB;oBAClC,QAAQ,EAAE,OAAO;iBAClB;gBACD;oBACE,OAAO,EAAE,sBAAe;oBACxB,QAAQ,EAAE,2DAA2B;iBACtC;gBACD;oBACE,OAAO,EAAE,iBAAU;oBACnB,QAAQ,EAAE,mDAAuB;iBAClC;aACF;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAqC;;QACvD,OAAO;YACL,MAAM,EAAE,wBAAsB;YAC9B,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,EAAE;YAC9B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qCAAyB;oBAClC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC9C,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE;iBAC7B;gBACD;oBACE,OAAO,EAAE,sBAAe;oBACxB,QAAQ,EAAE,2DAA2B;iBACtC;gBACD;oBACE,OAAO,EAAE,iBAAU;oBACnB,QAAQ,EAAE,mDAAuB;iBAClC;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5EY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,sBAAsB,CA4ElC"}