@steroidsjs/nest 1.0.2 → 1.0.3
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.
- package/infrastructure/decorators/fields/RelationField.d.ts +5 -3
- package/infrastructure/decorators/fields/RelationField.js +24 -6
- package/infrastructure/decorators/fields/RelationField.js.map +1 -1
- package/infrastructure/decorators/fields/index.d.ts +1 -0
- package/infrastructure/decorators/fields/index.js +3 -1
- package/infrastructure/decorators/fields/index.js.map +1 -1
- package/infrastructure/filters/ValidationExceptionFilter.d.ts +1 -0
- package/infrastructure/filters/ValidationExceptionFilter.js +17 -11
- package/infrastructure/filters/ValidationExceptionFilter.js.map +1 -1
- package/infrastructure/pipes/CreateDtoPipe.d.ts +4 -0
- package/infrastructure/pipes/CreateDtoPipe.js +21 -0
- package/infrastructure/pipes/CreateDtoPipe.js.map +1 -0
- package/infrastructure/repositories/CrudRepository.d.ts +1 -1
- package/infrastructure/repositories/CrudRepository.js +6 -9
- package/infrastructure/repositories/CrudRepository.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/usecases/services/CrudService.d.ts +1 -1
- package/usecases/services/CrudService.js +5 -6
- package/usecases/services/CrudService.js.map +1 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { IBaseFieldOptions } from './BaseField';
|
|
2
2
|
export interface IRelationFieldOptions extends IBaseFieldOptions {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
type: 'OneToOne' | 'ManyToMany' | 'ManyToOne' | 'OneToMany';
|
|
4
|
+
inverseSide?: string | ((object: any) => any);
|
|
5
|
+
isOwningSide?: boolean;
|
|
6
|
+
modelClass: any;
|
|
5
7
|
}
|
|
6
|
-
export declare function RelationField(options
|
|
8
|
+
export declare function RelationField(options: IRelationFieldOptions): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
@@ -4,13 +4,31 @@ exports.RelationField = void 0;
|
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const typeorm_1 = require("typeorm");
|
|
6
6
|
const class_validator_1 = require("class-validator");
|
|
7
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
8
|
const BaseField_1 = require("./BaseField");
|
|
8
|
-
function RelationField(options
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
function RelationField(options) {
|
|
10
|
+
const getRelationDecorator = (relation) => {
|
|
11
|
+
switch (relation) {
|
|
12
|
+
case 'OneToOne':
|
|
13
|
+
return typeorm_1.OneToOne;
|
|
14
|
+
case 'ManyToMany':
|
|
15
|
+
return typeorm_1.ManyToMany;
|
|
16
|
+
case 'OneToMany':
|
|
17
|
+
return typeorm_1.OneToMany;
|
|
18
|
+
case 'ManyToOne':
|
|
19
|
+
return typeorm_1.ManyToOne;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const getOwningDecorator = (relation, owningSide) => {
|
|
23
|
+
if (relation === 'ManyToMany' && owningSide) {
|
|
24
|
+
return typeorm_1.JoinTable;
|
|
25
|
+
}
|
|
26
|
+
if (relation === 'OneToOne' && owningSide) {
|
|
27
|
+
return typeorm_1.JoinColumn;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
return (0, common_1.applyDecorators)((0, BaseField_1.BaseField)(Object.assign(Object.assign({}, options), { decoratorName: 'RelationField', appType: 'integer' })), getRelationDecorator(options.type)(options.modelClass().name.replace(/Model$/, 'Table'), options.inverseSide, { cascade: true, onUpdate: 'CASCADE', onDelete: 'RESTRICT' }), getOwningDecorator(options.type, options.isOwningSide)(), (0, class_validator_1.ValidateNested)({ each: true }), (0, class_transformer_1.Type)(options.modelClass));
|
|
14
32
|
}
|
|
15
33
|
exports.RelationField = RelationField;
|
|
16
34
|
//# sourceMappingURL=RelationField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelationField.js","sourceRoot":"","sources":["../../../../src/infrastructure/decorators/fields/RelationField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"RelationField.js","sourceRoot":"","sources":["../../../../src/infrastructure/decorators/fields/RelationField.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,qCAA0F;AAC1F,qDAA+C;AAC/C,yDAAuC;AACvC,2CAAyD;AAUzD,SAAgB,aAAa,CAAC,OAA8B;IAExD,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,EAAE;QACtC,QAAQ,QAAQ,EAAE;YACd,KAAK,UAAU;gBACX,OAAO,kBAAQ,CAAC;YACpB,KAAK,YAAY;gBACb,OAAO,oBAAU,CAAC;YACtB,KAAK,WAAW;gBACZ,OAAO,mBAAS,CAAC;YACrB,KAAK,WAAW;gBACZ,OAAO,mBAAS,CAAC;SACxB;IACL,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE;QAChD,IAAI,QAAQ,KAAK,YAAY,IAAI,UAAU,EAAE;YACzC,OAAO,mBAAS,CAAC;SACpB;QACD,IAAI,QAAQ,KAAK,UAAU,IAAI,UAAU,EAAE;YACvC,OAAO,oBAAU,CAAC;SACrB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA;IAED,OAAO,IAAA,wBAAe,EAClB,IAAA,qBAAS,kCACF,OAAO,KACV,aAAa,EAAE,eAAe,EAC9B,OAAO,EAAE,SAAS,IACpB,EACF,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAE1B,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EACpD,OAAO,CAAC,WAAW,EACnB,EAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAC,CAC7D,EACL,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,EACxD,IAAA,gCAAc,EAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,EAC5B,IAAA,wBAAI,EAAC,OAAO,CAAC,UAAU,CAAC,CAC3B,CAAC;AACN,CAAC;AAzCD,sCAyCC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UpdateTimeField = exports.UidField = exports.TimeField = exports.TextField = exports.StringField = exports.PrimaryKeyField = exports.PhoneField = exports.PasswordField = exports.IntegerField = exports.HtmlField = exports.FileField = exports.EnumField = exports.EmailField = exports.DecimalField = exports.DateTimeField = exports.DateField = exports.CreateTimeField = exports.BooleanField = void 0;
|
|
3
|
+
exports.RelationField = exports.UpdateTimeField = exports.UidField = exports.TimeField = exports.TextField = exports.StringField = exports.PrimaryKeyField = exports.PhoneField = exports.PasswordField = exports.IntegerField = exports.HtmlField = exports.FileField = exports.EnumField = exports.EmailField = exports.DecimalField = exports.DateTimeField = exports.DateField = exports.CreateTimeField = exports.BooleanField = void 0;
|
|
4
4
|
var BooleanField_1 = require("./BooleanField");
|
|
5
5
|
Object.defineProperty(exports, "BooleanField", { enumerable: true, get: function () { return BooleanField_1.BooleanField; } });
|
|
6
6
|
var CreateTimeField_1 = require("./CreateTimeField");
|
|
@@ -37,4 +37,6 @@ var UidField_1 = require("./UidField");
|
|
|
37
37
|
Object.defineProperty(exports, "UidField", { enumerable: true, get: function () { return UidField_1.UidField; } });
|
|
38
38
|
var UpdateTimeField_1 = require("./UpdateTimeField");
|
|
39
39
|
Object.defineProperty(exports, "UpdateTimeField", { enumerable: true, get: function () { return UpdateTimeField_1.UpdateTimeField; } });
|
|
40
|
+
var RelationField_1 = require("./RelationField");
|
|
41
|
+
Object.defineProperty(exports, "RelationField", { enumerable: true, get: function () { return RelationField_1.RelationField; } });
|
|
40
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infrastructure/decorators/fields/index.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infrastructure/decorators/fields/index.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ExceptionFilter, ArgumentsHost } from '@nestjs/common';
|
|
2
2
|
import { ValidationException } from '../../usecases/exceptions/ValidationException';
|
|
3
3
|
export declare class ValidationExceptionFilter implements ExceptionFilter {
|
|
4
|
+
parseErrors(errors: any): any;
|
|
4
5
|
catch(exception: ValidationException, host: ArgumentsHost): void;
|
|
5
6
|
}
|
|
@@ -11,20 +11,26 @@ const common_1 = require("@nestjs/common");
|
|
|
11
11
|
const class_validator_1 = require("class-validator");
|
|
12
12
|
const ValidationException_1 = require("../../usecases/exceptions/ValidationException");
|
|
13
13
|
let ValidationExceptionFilter = class ValidationExceptionFilter {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
parseErrors(errors) {
|
|
15
|
+
if (Array.isArray(errors) && errors[0] instanceof class_validator_1.ValidationError) {
|
|
16
|
+
return errors.reduce((result, item) => {
|
|
17
|
+
var _a;
|
|
18
|
+
if (item.constraints) {
|
|
19
|
+
result[item.property] = [].concat(Object.values(item.constraints));
|
|
20
|
+
}
|
|
21
|
+
if (((_a = item.children) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
22
|
+
result[item.property] = this.parseErrors(item.children);
|
|
23
|
+
}
|
|
22
24
|
return result;
|
|
23
25
|
}, {});
|
|
24
26
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
return errors;
|
|
28
|
+
}
|
|
29
|
+
catch(exception, host) {
|
|
30
|
+
const ctx = host.switchToHttp();
|
|
31
|
+
const response = ctx.getResponse();
|
|
32
|
+
console.log(exception.errors);
|
|
33
|
+
const errors = this.parseErrors(exception.errors);
|
|
28
34
|
response
|
|
29
35
|
.status(common_1.HttpStatus.BAD_REQUEST)
|
|
30
36
|
.json({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationExceptionFilter.js","sourceRoot":"","sources":["../../../src/infrastructure/filters/ValidationExceptionFilter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAiF;AAEjF,qDAAgD;AAChD,uFAAkF;AAGlF,IAAa,yBAAyB,GAAtC,MAAa,yBAAyB;IAClC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ValidationExceptionFilter.js","sourceRoot":"","sources":["../../../src/infrastructure/filters/ValidationExceptionFilter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAiF;AAEjF,qDAAgD;AAChD,uFAAkF;AAGlF,IAAa,yBAAyB,GAAtC,MAAa,yBAAyB;IAClC,WAAW,CAAC,MAAM;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,iCAAe,EAAE;YAC/D,OAAO,MAAM,CAAC,MAAM,CAChB,CAAC,MAAW,EAAE,IAAI,EAAE,EAAE;;gBAClB,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;iBACtE;gBACD,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAAE;oBAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC3D;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC,EACD,EAAE,CACL,CAAC;SACL;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,SAA8B,EAAE,IAAmB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAElD,QAAQ;aACH,MAAM,CAAC,mBAAU,CAAC,WAAW,CAAC;aAC9B,IAAI,CAAC;YACF,UAAU,EAAE,mBAAU,CAAC,WAAW;YAClC,MAAM;SACT,CAAC,CAAC;IACX,CAAC;CACJ,CAAA;AAhCY,yBAAyB;IADrC,IAAA,cAAK,EAAC,yCAAmB,CAAC;GACd,yBAAyB,CAgCrC;AAhCY,8DAAyB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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.CreateDtoPipe = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const class_transformer_1 = require("class-transformer");
|
|
12
|
+
let CreateDtoPipe = class CreateDtoPipe {
|
|
13
|
+
async transform(value, metadata) {
|
|
14
|
+
return (0, class_transformer_1.plainToInstance)(metadata.metatype, value);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
CreateDtoPipe = __decorate([
|
|
18
|
+
(0, common_1.Injectable)()
|
|
19
|
+
], CreateDtoPipe);
|
|
20
|
+
exports.CreateDtoPipe = CreateDtoPipe;
|
|
21
|
+
//# sourceMappingURL=CreateDtoPipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateDtoPipe.js","sourceRoot":"","sources":["../../../src/infrastructure/pipes/CreateDtoPipe.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2E;AAC3E,yDAAkD;AAGlD,IAAa,aAAa,GAA1B,MAAa,aAAa;IACtB,KAAK,CAAC,SAAS,CAAC,KAAU,EAAE,QAA0B;QAClD,OAAO,IAAA,mCAAe,EAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;CACJ,CAAA;AAJY,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAIzB;AAJY,sCAAa"}
|
|
@@ -13,6 +13,6 @@ export declare class CrudRepository<TModel> implements ICrudRepository<TModel> {
|
|
|
13
13
|
create(model: TModel): Promise<TModel>;
|
|
14
14
|
update(id: number, model: TModel): Promise<TModel>;
|
|
15
15
|
remove(id: number): Promise<void>;
|
|
16
|
-
protected modelToEntity(model: any):
|
|
16
|
+
protected modelToEntity(model: any): any;
|
|
17
17
|
protected entityToModel(obj: any): TModel;
|
|
18
18
|
}
|
|
@@ -18,9 +18,9 @@ class CrudRepository {
|
|
|
18
18
|
return result;
|
|
19
19
|
}
|
|
20
20
|
async findOne(condition) {
|
|
21
|
-
const entity = await this.dbRepository.
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const entity = await this.dbRepository.findOne({
|
|
22
|
+
where: ConditionHelper_1.ConditionHelper.toTypeOrm(condition),
|
|
23
|
+
});
|
|
24
24
|
return this.entityToModel(entity);
|
|
25
25
|
}
|
|
26
26
|
async create(model) {
|
|
@@ -29,17 +29,14 @@ class CrudRepository {
|
|
|
29
29
|
}
|
|
30
30
|
async update(id, model) {
|
|
31
31
|
const prevModel = await this.findOne({ [this.primaryKey]: id });
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
return this.entityToModel(entity);
|
|
32
|
+
const savedEntity = await this.dbRepository.save(this.modelToEntity(Object.assign(Object.assign({}, prevModel), model)));
|
|
33
|
+
return this.entityToModel(savedEntity);
|
|
35
34
|
}
|
|
36
35
|
async remove(id) {
|
|
37
36
|
await this.dbRepository.delete(id);
|
|
38
37
|
}
|
|
39
38
|
modelToEntity(model) {
|
|
40
|
-
const
|
|
41
|
-
const entity = new EntityClass();
|
|
42
|
-
Object.assign(entity, (0, class_transformer_1.instanceToPlain)(model));
|
|
39
|
+
const entity = this.dbRepository.create(model);
|
|
43
40
|
return entity;
|
|
44
41
|
}
|
|
45
42
|
entityToModel(obj) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrudRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/CrudRepository.ts"],"names":[],"mappings":";;;AACA,yDAAkD;AAClD,sEAAiE;AAGjE,gEAAuE;AAMvE,MAAa,cAAc;IAA3B;QAIW,eAAU,GAAW,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"CrudRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/CrudRepository.ts"],"names":[],"mappings":";;;AACA,yDAAkD;AAClD,sEAAiE;AAGjE,gEAAuE;AAMvE,MAAa,cAAc;IAA3B;QAIW,eAAU,GAAW,IAAI,CAAC;IA6FrC,CAAC;IA/EU,IAAI,CAAC,YAAgC,EAAE,UAAe;QACzD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,GAAmB;QAC5B,MAAM,MAAM,GAAG,MAAM,2BAAY,CAAC,MAAM,CAAS,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACzE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IAClB,CAAC;IAMD,KAAK,CAAC,OAAO,CAAC,SAAqB;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC3C,KAAK,EAAE,iCAAe,CAAC,SAAS,CAAC,SAAS,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,KAAa;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAAa;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAC,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,iCAAK,SAAS,GAAK,KAAK,EAAE,CAAC,CAAC;QAC/F,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,EAAU;QACnB,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAOS,aAAa,CAAC,KAAK;QAIzB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAClB,CAAC;IAOS,aAAa,CAAC,GAAQ;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAiB,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAA,mCAAe,EAAC,GAAG,CAAC,CAAC,CAAC;QAE3C,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAjGD,wCAiGC"}
|