@codylabs/nestjs-common 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/decorators/index.d.ts +8 -0
- package/dist/decorators/index.js +25 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/is-boolean-field.decorator.d.ts +2 -0
- package/dist/decorators/is-boolean-field.decorator.js +25 -0
- package/dist/decorators/is-boolean-field.decorator.js.map +1 -0
- package/dist/decorators/is-date-field.decorator.d.ts +2 -0
- package/dist/decorators/is-date-field.decorator.js +37 -0
- package/dist/decorators/is-date-field.decorator.js.map +1 -0
- package/dist/decorators/is-enum-field.decorator.d.ts +2 -0
- package/dist/decorators/is-enum-field.decorator.js +23 -0
- package/dist/decorators/is-enum-field.decorator.js.map +1 -0
- package/dist/decorators/is-nested-field.decorator.d.ts +2 -0
- package/dist/decorators/is-nested-field.decorator.js +25 -0
- package/dist/decorators/is-nested-field.decorator.js.map +1 -0
- package/dist/decorators/is-number-field.decorator.d.ts +2 -0
- package/dist/decorators/is-number-field.decorator.js +51 -0
- package/dist/decorators/is-number-field.decorator.js.map +1 -0
- package/dist/decorators/is-string-field.decorator.d.ts +2 -0
- package/dist/decorators/is-string-field.decorator.js +74 -0
- package/dist/decorators/is-string-field.decorator.js.map +1 -0
- package/dist/decorators/min-max-length.decorator.d.ts +2 -0
- package/dist/decorators/min-max-length.decorator.js +26 -0
- package/dist/decorators/min-max-length.decorator.js.map +1 -0
- package/dist/decorators/transform.decorator.d.ts +4 -0
- package/dist/decorators/transform.decorator.js +25 -0
- package/dist/decorators/transform.decorator.js.map +1 -0
- package/dist/filters/http-exception.filter.d.ts +4 -0
- package/dist/filters/http-exception.filter.js +30 -0
- package/dist/filters/http-exception.filter.js.map +1 -0
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/index.js +19 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/unprocessable-entity-exception.filter.d.ts +5 -0
- package/dist/filters/unprocessable-entity-exception.filter.js +43 -0
- package/dist/filters/unprocessable-entity-exception.filter.js.map +1 -0
- package/dist/guards/and.guard.d.ts +3 -0
- package/dist/guards/and.guard.js +43 -0
- package/dist/guards/and.guard.js.map +1 -0
- package/dist/guards/index.d.ts +3 -0
- package/dist/guards/index.js +20 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/or.guard.d.ts +3 -0
- package/dist/guards/or.guard.js +42 -0
- package/dist/guards/or.guard.js.map +1 -0
- package/dist/guards/sequential.guard.d.ts +3 -0
- package/dist/guards/sequential.guard.js +42 -0
- package/dist/guards/sequential.guard.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/index.d.ts +1 -0
- package/dist/interceptors/index.js +18 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/update-selective-validation.interceptor.d.ts +7 -0
- package/dist/interceptors/update-selective-validation.interceptor.js +52 -0
- package/dist/interceptors/update-selective-validation.interceptor.js.map +1 -0
- package/dist/interfaces/guard.interface.d.ts +10 -0
- package/dist/interfaces/guard.interface.js +3 -0
- package/dist/interfaces/guard.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +2 -0
- package/dist/interfaces/index.js +19 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/validator.interface.d.ts +38 -0
- package/dist/interfaces/validator.interface.js +3 -0
- package/dist/interfaces/validator.interface.js.map +1 -0
- package/dist/pipes/abstract-validation.pipe.d.ts +11 -0
- package/dist/pipes/abstract-validation.pipe.js +42 -0
- package/dist/pipes/abstract-validation.pipe.js.map +1 -0
- package/dist/pipes/index.d.ts +3 -0
- package/dist/pipes/index.js +20 -0
- package/dist/pipes/index.js.map +1 -0
- package/dist/pipes/required.pipe.d.ts +4 -0
- package/dist/pipes/required.pipe.js +30 -0
- package/dist/pipes/required.pipe.js.map +1 -0
- package/dist/pipes/snowflake-id-param-validation.pipe.d.ts +8 -0
- package/dist/pipes/snowflake-id-param-validation.pipe.js +45 -0
- package/dist/pipes/snowflake-id-param-validation.pipe.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utils/decorator.util.d.ts +1 -0
- package/dist/utils/decorator.util.js +36 -0
- package/dist/utils/decorator.util.js.map +1 -0
- package/dist/utils/guard.util.d.ts +6 -0
- package/dist/utils/guard.util.js +35 -0
- package/dist/utils/guard.util.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validators/index.d.ts +5 -0
- package/dist/validators/index.js +22 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/is-after.validator.d.ts +2 -0
- package/dist/validators/is-after.validator.js +43 -0
- package/dist/validators/is-after.validator.js.map +1 -0
- package/dist/validators/is-date-format.validator.d.ts +3 -0
- package/dist/validators/is-date-format.validator.js +54 -0
- package/dist/validators/is-date-format.validator.js.map +1 -0
- package/dist/validators/is-equal-to.validator.d.ts +2 -0
- package/dist/validators/is-equal-to.validator.js +36 -0
- package/dist/validators/is-equal-to.validator.js.map +1 -0
- package/dist/validators/is-greater-than.validator.d.ts +2 -0
- package/dist/validators/is-greater-than.validator.js +36 -0
- package/dist/validators/is-greater-than.validator.js.map +1 -0
- package/dist/validators/is-lower-than.validator.d.ts +2 -0
- package/dist/validators/is-lower-than.validator.js +36 -0
- package/dist/validators/is-lower-than.validator.js.map +1 -0
- package/package.json +36 -0
@@ -0,0 +1,42 @@
|
|
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.OrGuard = void 0;
|
16
|
+
const common_1 = require("@nestjs/common");
|
17
|
+
const core_1 = require("@nestjs/core");
|
18
|
+
const rxjs_1 = require("rxjs");
|
19
|
+
const operators_1 = require("rxjs/operators");
|
20
|
+
const utils_1 = require("../utils");
|
21
|
+
const OrGuard = (guards, orGuardOptions) => {
|
22
|
+
let OrMixinGuard = class OrMixinGuard {
|
23
|
+
moduleRef;
|
24
|
+
guards = [];
|
25
|
+
constructor(moduleRef) {
|
26
|
+
this.moduleRef = moduleRef;
|
27
|
+
}
|
28
|
+
canActivate(context) {
|
29
|
+
this.guards = guards.map((guard) => this.moduleRef.get(guard, { strict: false }));
|
30
|
+
const canActivateReturns = this.guards.map((guard) => (0, utils_1.deferGuard)(guard, context));
|
31
|
+
return (0, rxjs_1.from)(canActivateReturns).pipe((0, operators_1.mergeMap)((obs) => obs.pipe((0, utils_1.handleError)(orGuardOptions?.throwOnFirstError))), (0, operators_1.takeWhile)((val) => val === false, true), (0, operators_1.last)());
|
32
|
+
}
|
33
|
+
};
|
34
|
+
OrMixinGuard = __decorate([
|
35
|
+
__param(0, (0, common_1.Inject)(core_1.ModuleRef)),
|
36
|
+
__metadata("design:paramtypes", [core_1.ModuleRef])
|
37
|
+
], OrMixinGuard);
|
38
|
+
const Guard = (0, common_1.mixin)(OrMixinGuard);
|
39
|
+
return Guard;
|
40
|
+
};
|
41
|
+
exports.OrGuard = OrGuard;
|
42
|
+
//# sourceMappingURL=or.guard.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"or.guard.js","sourceRoot":"","sources":["../../src/guards/or.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoG;AACpG,uCAAyC;AACzC,+BAAwC;AACxC,8CAA2D;AAG3D,oCAAmD;AAE5C,MAAM,OAAO,GAAG,CAAC,MAAiD,EAAE,cAA+B,EAAE,EAAE;IAC5G,IAAM,YAAY,GAAlB,MAAM,YAAY;QAKG;QAJX,MAAM,GAAkB,EAAE,CAAC;QAEnC,YAEmB,SAAoB;YAApB,cAAS,GAAT,SAAS,CAAW;QACpC,CAAC;QAEJ,WAAW,CAAC,OAAyB;YACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAElF,MAAM,kBAAkB,GAA+B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YAE9G,OAAO,IAAA,WAAI,EAAC,kBAAkB,CAAC,CAAC,IAAI,CAClC,IAAA,oBAAQ,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAA,mBAAW,EAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3E,IAAA,qBAAS,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,EAAE,IAAI,CAAC,EACvC,IAAA,gBAAI,GAAE,CACP,CAAC;QACJ,CAAC;KACF,CAAA;IAnBK,YAAY;QAIb,WAAA,IAAA,eAAM,EAAC,gBAAS,CAAC,CAAA;yCACU,gBAAS;OALnC,YAAY,CAmBjB;IAED,MAAM,KAAK,GAAG,IAAA,cAAK,EAAC,YAAY,CAAC,CAAC;IAElC,OAAO,KAA0B,CAAC;AACpC,CAAC,CAAC;AAzBW,QAAA,OAAO,WAyBlB"}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import { CanActivate, InjectionToken, Type } from '@nestjs/common';
|
2
|
+
import { SequentialGuardOptions } from '../interfaces';
|
3
|
+
export declare const SequentialGuard: (guards: Array<Type<CanActivate> | InjectionToken>, sequentialGuardOptions?: SequentialGuardOptions) => Type<CanActivate>;
|
@@ -0,0 +1,42 @@
|
|
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.SequentialGuard = void 0;
|
16
|
+
const common_1 = require("@nestjs/common");
|
17
|
+
const core_1 = require("@nestjs/core");
|
18
|
+
const rxjs_1 = require("rxjs");
|
19
|
+
const operators_1 = require("rxjs/operators");
|
20
|
+
const utils_1 = require("../utils");
|
21
|
+
const SequentialGuard = (guards, sequentialGuardOptions) => {
|
22
|
+
let SequentialMixinGuard = class SequentialMixinGuard {
|
23
|
+
moduleRef;
|
24
|
+
guards = [];
|
25
|
+
constructor(moduleRef) {
|
26
|
+
this.moduleRef = moduleRef;
|
27
|
+
}
|
28
|
+
canActivate(context) {
|
29
|
+
this.guards = guards.map((guard) => this.moduleRef.get(guard, { strict: false }));
|
30
|
+
const canActivateReturns = this.guards.map((guard) => (0, utils_1.deferGuard)(guard, context));
|
31
|
+
return (0, rxjs_1.from)(canActivateReturns).pipe((0, operators_1.concatMap)((obs) => obs.pipe((0, utils_1.handleError)(sequentialGuardOptions?.throwOnError))), (0, operators_1.filter)((value) => value === true), (0, operators_1.defaultIfEmpty)(false), (0, operators_1.take)(1));
|
32
|
+
}
|
33
|
+
};
|
34
|
+
SequentialMixinGuard = __decorate([
|
35
|
+
__param(0, (0, common_1.Inject)(core_1.ModuleRef)),
|
36
|
+
__metadata("design:paramtypes", [core_1.ModuleRef])
|
37
|
+
], SequentialMixinGuard);
|
38
|
+
const Guard = (0, common_1.mixin)(SequentialMixinGuard);
|
39
|
+
return Guard;
|
40
|
+
};
|
41
|
+
exports.SequentialGuard = SequentialGuard;
|
42
|
+
//# sourceMappingURL=sequential.guard.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sequential.guard.js","sourceRoot":"","sources":["../../src/guards/sequential.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoG;AACpG,uCAAyC;AACzC,+BAAwC;AACxC,8CAAyE;AAGzE,oCAAmD;AAE5C,MAAM,eAAe,GAAG,CAC7B,MAAiD,EACjD,sBAA+C,EAC/C,EAAE;IACF,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;QAKL;QAJX,MAAM,GAAkB,EAAE,CAAC;QAEnC,YAEmB,SAAoB;YAApB,cAAS,GAAT,SAAS,CAAW;QACpC,CAAC;QAEJ,WAAW,CAAC,OAAyB;YACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAElF,MAAM,kBAAkB,GAA+B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YAE9G,OAAO,IAAA,WAAI,EAAC,kBAAkB,CAAC,CAAC,IAAI,CAClC,IAAA,qBAAS,EAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAA,mBAAW,EAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC,CAAC,EAC/E,IAAA,kBAAM,EAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EACjC,IAAA,0BAAc,EAAC,KAAK,CAAC,EACrB,IAAA,gBAAI,EAAC,CAAC,CAAC,CACR,CAAC;QACJ,CAAC;KACF,CAAA;IApBK,oBAAoB;QAIrB,WAAA,IAAA,eAAM,EAAC,gBAAS,CAAC,CAAA;yCACU,gBAAS;OALnC,oBAAoB,CAoBzB;IAED,MAAM,KAAK,GAAG,IAAA,cAAK,EAAC,oBAAoB,CAAC,CAAC;IAE1C,OAAO,KAA0B,CAAC;AACpC,CAAC,CAAC;AA7BW,QAAA,eAAe,mBA6B1B"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,25 @@
|
|
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("./decorators"), exports);
|
18
|
+
__exportStar(require("./filters"), exports);
|
19
|
+
__exportStar(require("./guards"), exports);
|
20
|
+
__exportStar(require("./interceptors"), exports);
|
21
|
+
__exportStar(require("./interfaces"), exports);
|
22
|
+
__exportStar(require("./pipes"), exports);
|
23
|
+
__exportStar(require("./utils"), exports);
|
24
|
+
__exportStar(require("./validators"), exports);
|
25
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,4CAA0B;AAC1B,2CAAyB;AACzB,iDAA+B;AAC/B,+CAA6B;AAC7B,0CAAwB;AACxB,0CAAwB;AACxB,+CAA6B"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './update-selective-validation.interceptor';
|
@@ -0,0 +1,18 @@
|
|
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("./update-selective-validation.interceptor"), exports);
|
18
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interceptors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4EAA0D"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
|
2
|
+
import { Observable } from 'rxjs';
|
3
|
+
export declare class UpdateSelectiveValidationInterceptor implements NestInterceptor {
|
4
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
|
5
|
+
private getValidFields;
|
6
|
+
private filterObject;
|
7
|
+
}
|
@@ -0,0 +1,52 @@
|
|
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.UpdateSelectiveValidationInterceptor = void 0;
|
10
|
+
const common_1 = require("@nestjs/common");
|
11
|
+
const rxjs_1 = require("rxjs");
|
12
|
+
let UpdateSelectiveValidationInterceptor = class UpdateSelectiveValidationInterceptor {
|
13
|
+
intercept(context, next) {
|
14
|
+
const request = context.switchToHttp().getRequest();
|
15
|
+
const { updateMask } = request.query;
|
16
|
+
const dto = request.body;
|
17
|
+
if (!updateMask || updateMask === '*' || !dto) {
|
18
|
+
return next.handle();
|
19
|
+
}
|
20
|
+
if (typeof updateMask !== 'string') {
|
21
|
+
throw new common_1.BadRequestException('updateMask must be a string');
|
22
|
+
}
|
23
|
+
const validFields = this.getValidFields(updateMask, dto);
|
24
|
+
request.body = this.filterObject(dto, validFields);
|
25
|
+
return next.handle().pipe((0, rxjs_1.map)((response) => {
|
26
|
+
if (!response || typeof response !== 'object') {
|
27
|
+
return response;
|
28
|
+
}
|
29
|
+
return this.filterObject(response, validFields);
|
30
|
+
}));
|
31
|
+
}
|
32
|
+
getValidFields(updateMask, dto) {
|
33
|
+
const fields = updateMask
|
34
|
+
.split(',')
|
35
|
+
.map((field) => field.trim())
|
36
|
+
.filter((field) => field && field in dto);
|
37
|
+
if (!fields.length) {
|
38
|
+
throw new common_1.BadRequestException('No valid fields specified in updateMask');
|
39
|
+
}
|
40
|
+
return new Set(fields);
|
41
|
+
}
|
42
|
+
filterObject(obj, fields) {
|
43
|
+
return Object.fromEntries(Array.from(fields)
|
44
|
+
.filter((field) => field in obj)
|
45
|
+
.map((field) => [field, obj[field]]));
|
46
|
+
}
|
47
|
+
};
|
48
|
+
exports.UpdateSelectiveValidationInterceptor = UpdateSelectiveValidationInterceptor;
|
49
|
+
exports.UpdateSelectiveValidationInterceptor = UpdateSelectiveValidationInterceptor = __decorate([
|
50
|
+
(0, common_1.Injectable)()
|
51
|
+
], UpdateSelectiveValidationInterceptor);
|
52
|
+
//# sourceMappingURL=update-selective-validation.interceptor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"update-selective-validation.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/update-selective-validation.interceptor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAiH;AACjH,+BAAuC;AAGhC,IAAM,oCAAoC,GAA1C,MAAM,oCAAoC;IAC/C,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,IAA+B,CAAC;QAEpD,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,4BAAmB,CAAC,6BAA6B,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,IAAA,UAAG,EAAC,CAAC,QAAQ,EAAE,EAAE;YACf,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9C,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,OAAO,IAAI,CAAC,YAAY,CAAC,QAAmC,EAAE,WAAW,CAAC,CAAC;QAC7E,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,UAAkB,EAAE,GAA4B;QACrE,MAAM,MAAM,GAAG,UAAU;aACtB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,4BAAmB,CAAC,yCAAyC,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAEO,YAAY,CAAC,GAA4B,EAAE,MAAmB;QACpE,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aACf,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC;aAC/B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CACvC,CAAC;IACJ,CAAC;CACF,CAAA;AAhDY,oFAAoC;+CAApC,oCAAoC;IADhD,IAAA,mBAAU,GAAE;GACA,oCAAoC,CAgDhD"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"guard.interface.js","sourceRoot":"","sources":["../../src/interfaces/guard.interface.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,19 @@
|
|
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("./guard.interface"), exports);
|
18
|
+
__exportStar(require("./validator.interface"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,wDAAsC"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
export interface BaseValidator {
|
2
|
+
required?: boolean;
|
3
|
+
message?: string;
|
4
|
+
}
|
5
|
+
export interface BaseArrayValidator {
|
6
|
+
arrayMaxSize?: number;
|
7
|
+
arrayMinSize?: number;
|
8
|
+
each?: boolean;
|
9
|
+
}
|
10
|
+
export interface DateFieldOptions extends BaseValidator, BaseArrayValidator {
|
11
|
+
greaterThan?: boolean;
|
12
|
+
lessThan?: boolean;
|
13
|
+
date?: Date;
|
14
|
+
}
|
15
|
+
export interface NumberFieldOptions extends BaseValidator, BaseArrayValidator {
|
16
|
+
min?: number;
|
17
|
+
max?: number;
|
18
|
+
int?: boolean;
|
19
|
+
positive?: boolean;
|
20
|
+
}
|
21
|
+
export interface StringFieldOptions extends BaseValidator, BaseArrayValidator {
|
22
|
+
trim?: boolean;
|
23
|
+
regex?: RegExp;
|
24
|
+
minLength?: number;
|
25
|
+
maxLength?: number;
|
26
|
+
numberString?: boolean;
|
27
|
+
base64?: boolean;
|
28
|
+
url?: boolean;
|
29
|
+
email?: boolean;
|
30
|
+
}
|
31
|
+
export interface MinMaxLengthOptions extends Pick<StringFieldOptions, 'each' | 'minLength' | 'maxLength'> {
|
32
|
+
}
|
33
|
+
export interface EnumFieldOptions extends BaseValidator, BaseArrayValidator {
|
34
|
+
}
|
35
|
+
export interface BooleanFieldOptions extends BaseValidator, BaseArrayValidator {
|
36
|
+
}
|
37
|
+
export interface NestedFieldOptions extends BaseValidator, BaseArrayValidator {
|
38
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validator.interface.js","sourceRoot":"","sources":["../../src/interfaces/validator.interface.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { ArgumentMetadata, Type, ValidationPipe } from '@nestjs/common';
|
2
|
+
export declare class AbstractValidationPipe extends ValidationPipe {
|
3
|
+
private readonly targetTypes;
|
4
|
+
constructor(targetTypes: {
|
5
|
+
body?: Type<any>;
|
6
|
+
query?: Type<any>;
|
7
|
+
param?: Type<any>;
|
8
|
+
custom?: Type<any>;
|
9
|
+
});
|
10
|
+
transform(value: any, metadata: ArgumentMetadata): Promise<any>;
|
11
|
+
}
|
@@ -0,0 +1,42 @@
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.AbstractValidationPipe = void 0;
|
13
|
+
const common_1 = require("@nestjs/common");
|
14
|
+
let AbstractValidationPipe = class AbstractValidationPipe extends common_1.ValidationPipe {
|
15
|
+
targetTypes;
|
16
|
+
constructor(targetTypes) {
|
17
|
+
super({
|
18
|
+
whitelist: true,
|
19
|
+
transform: true,
|
20
|
+
forbidUnknownValues: false,
|
21
|
+
validateCustomDecorators: true,
|
22
|
+
enableDebugMessages: true,
|
23
|
+
});
|
24
|
+
this.targetTypes = targetTypes;
|
25
|
+
}
|
26
|
+
async transform(value, metadata) {
|
27
|
+
const targetType = this.targetTypes[metadata.type];
|
28
|
+
if (!targetType) {
|
29
|
+
return super.transform(value, metadata);
|
30
|
+
}
|
31
|
+
return super.transform(value, {
|
32
|
+
...metadata,
|
33
|
+
metatype: targetType,
|
34
|
+
});
|
35
|
+
}
|
36
|
+
};
|
37
|
+
exports.AbstractValidationPipe = AbstractValidationPipe;
|
38
|
+
exports.AbstractValidationPipe = AbstractValidationPipe = __decorate([
|
39
|
+
(0, common_1.Injectable)(),
|
40
|
+
__metadata("design:paramtypes", [Object])
|
41
|
+
], AbstractValidationPipe);
|
42
|
+
//# sourceMappingURL=abstract-validation.pipe.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"abstract-validation.pipe.js","sourceRoot":"","sources":["../../src/pipes/abstract-validation.pipe.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoF;AAG7E,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,uBAAc;IAErC;IADnB,YACmB,WAKhB;QAED,KAAK,CAAC;YACJ,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,mBAAmB,EAAE,KAAK;YAC1B,wBAAwB,EAAE,IAAI;YAC9B,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;QAbc,gBAAW,GAAX,WAAW,CAK3B;IASH,CAAC;IAEQ,KAAK,CAAC,SAAS,CAAC,KAAU,EAAE,QAA0B;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAc,CAAC;QAEhE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YAC5B,GAAG,QAAQ;YACX,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA9BY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;;GACA,sBAAsB,CA8BlC"}
|
@@ -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("./abstract-validation.pipe"), exports);
|
18
|
+
__exportStar(require("./required.pipe"), exports);
|
19
|
+
__exportStar(require("./snowflake-id-param-validation.pipe"), exports);
|
20
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,kDAAgC;AAChC,uEAAqD"}
|
@@ -0,0 +1,30 @@
|
|
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.RequiredPipe = void 0;
|
10
|
+
const common_1 = require("@nestjs/common");
|
11
|
+
let RequiredPipe = class RequiredPipe {
|
12
|
+
transform(value, metadata) {
|
13
|
+
if (value === null || value === undefined) {
|
14
|
+
throw new common_1.UnprocessableEntityException([
|
15
|
+
{
|
16
|
+
property: metadata.data,
|
17
|
+
constraints: {
|
18
|
+
isNotEmpty: 'This field is required',
|
19
|
+
},
|
20
|
+
},
|
21
|
+
]);
|
22
|
+
}
|
23
|
+
return value;
|
24
|
+
}
|
25
|
+
};
|
26
|
+
exports.RequiredPipe = RequiredPipe;
|
27
|
+
exports.RequiredPipe = RequiredPipe = __decorate([
|
28
|
+
(0, common_1.Injectable)()
|
29
|
+
], RequiredPipe);
|
30
|
+
//# sourceMappingURL=required.pipe.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"required.pipe.js","sourceRoot":"","sources":["../../src/pipes/required.pipe.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2G;AAGpG,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,SAAS,CAAC,KAAQ,EAAE,QAA0B;QAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,qCAA4B,CAAC;gBACrC;oBACE,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,WAAW,EAAE;wBACX,UAAU,EAAE,wBAAwB;qBACrC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAfY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CAexB"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { ArgumentMetadata, PipeTransform } from '@nestjs/common';
|
2
|
+
export declare class SnowflakeIdParamValidationPipe<T> implements PipeTransform {
|
3
|
+
transform(value: T, metadata: ArgumentMetadata): T;
|
4
|
+
private isEmpty;
|
5
|
+
private isNumber;
|
6
|
+
private isNumberString;
|
7
|
+
private throwException;
|
8
|
+
}
|
@@ -0,0 +1,45 @@
|
|
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.SnowflakeIdParamValidationPipe = void 0;
|
10
|
+
const common_1 = require("@nestjs/common");
|
11
|
+
let SnowflakeIdParamValidationPipe = class SnowflakeIdParamValidationPipe {
|
12
|
+
transform(value, metadata) {
|
13
|
+
if (this.isEmpty(value)) {
|
14
|
+
this.throwException(metadata.data, 'This field is required');
|
15
|
+
}
|
16
|
+
if (!this.isNumber(value)) {
|
17
|
+
this.throwException(metadata.data, 'The value must be a number');
|
18
|
+
}
|
19
|
+
return value;
|
20
|
+
}
|
21
|
+
isEmpty(value) {
|
22
|
+
return value === null || value === undefined;
|
23
|
+
}
|
24
|
+
isNumber(value) {
|
25
|
+
return typeof value === 'number' || this.isNumberString(String(value));
|
26
|
+
}
|
27
|
+
isNumberString(value) {
|
28
|
+
return !Number.isNaN(Number(value)) && value.trim() !== '';
|
29
|
+
}
|
30
|
+
throwException(property, message) {
|
31
|
+
throw new common_1.UnprocessableEntityException([
|
32
|
+
{
|
33
|
+
property,
|
34
|
+
constraints: {
|
35
|
+
isNotEmpty: message,
|
36
|
+
},
|
37
|
+
},
|
38
|
+
]);
|
39
|
+
}
|
40
|
+
};
|
41
|
+
exports.SnowflakeIdParamValidationPipe = SnowflakeIdParamValidationPipe;
|
42
|
+
exports.SnowflakeIdParamValidationPipe = SnowflakeIdParamValidationPipe = __decorate([
|
43
|
+
(0, common_1.Injectable)()
|
44
|
+
], SnowflakeIdParamValidationPipe);
|
45
|
+
//# sourceMappingURL=snowflake-id-param-validation.pipe.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"snowflake-id-param-validation.pipe.js","sourceRoot":"","sources":["../../src/pipes/snowflake-id-param-validation.pipe.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2G;AAGpG,IAAM,8BAA8B,GAApC,MAAM,8BAA8B;IACzC,SAAS,CAAC,KAAQ,EAAE,QAA0B;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,OAAO,CAAC,KAAQ;QACtB,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;IAC/C,CAAC;IAEO,QAAQ,CAAC,KAAQ;QACvB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,OAAe;QACtD,MAAM,IAAI,qCAA4B,CAAC;YACrC;gBACE,QAAQ;gBACR,WAAW,EAAE;oBACX,UAAU,EAAE,OAAO;iBACpB;aACF;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAnCY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;GACA,8BAA8B,CAmC1C"}
|