xcally-nest-library 0.0.29 → 0.0.30

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 (31) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.js +6 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/src/core/application/base.interface.d.ts +16 -0
  5. package/dist/src/core/application/base.interface.js +3 -0
  6. package/dist/src/core/application/base.interface.js.map +1 -0
  7. package/dist/src/core/application/base.service.d.ts +20 -0
  8. package/dist/src/core/application/base.service.js +51 -0
  9. package/dist/src/core/application/base.service.js.map +1 -0
  10. package/dist/src/core/domain/interfaces/base.repository.interface.d.ts +10 -0
  11. package/dist/src/core/domain/interfaces/base.repository.interface.js +3 -0
  12. package/dist/src/core/domain/interfaces/base.repository.interface.js.map +1 -0
  13. package/dist/src/core/infrastracture/databases/base.entity.d.ts +13 -0
  14. package/dist/src/core/infrastracture/databases/base.entity.interface.d.ts +5 -0
  15. package/dist/src/core/infrastracture/databases/base.entity.interface.js +3 -0
  16. package/dist/src/core/infrastracture/databases/base.entity.interface.js.map +1 -0
  17. package/dist/src/core/infrastracture/databases/base.entity.js +54 -0
  18. package/dist/src/core/infrastracture/databases/base.entity.js.map +1 -0
  19. package/dist/src/core/infrastracture/databases/base.repository.d.ts +9 -0
  20. package/dist/src/core/infrastracture/databases/base.repository.js +37 -0
  21. package/dist/src/core/infrastracture/databases/base.repository.js.map +1 -0
  22. package/dist/tsconfig.tsbuildinfo +1 -1
  23. package/index.ts +6 -0
  24. package/package.json +7 -2
  25. package/src/core/application/base.interface.ts +16 -0
  26. package/src/core/application/base.service.ts +97 -0
  27. package/src/core/domain/interfaces/base.repository.interface.ts +11 -0
  28. package/src/core/infrastracture/databases/base.entity.interface.ts +5 -0
  29. package/src/core/infrastracture/databases/base.entity.ts +44 -0
  30. package/src/core/infrastracture/databases/base.repository.ts +53 -0
  31. package/tsconfig.json +17 -1
package/dist/index.d.ts CHANGED
@@ -1,3 +1,9 @@
1
1
  export * from './src/modules/logger/pino/logger.service';
2
2
  export * from './src/modules/logger/pino/logger.module';
3
3
  export * from './src/modules/logger/pino/logger.default';
4
+ export * from './src/core/application/base.interface';
5
+ export * from './src/core/application/base.service';
6
+ export * from './src/core/domain/interfaces/base.repository.interface';
7
+ export * from './src/core/infrastracture/databases/base.entity';
8
+ export * from './src/core/infrastracture/databases/base.entity.interface';
9
+ export * from './src/core/infrastracture/databases/base.repository';
package/dist/index.js CHANGED
@@ -17,4 +17,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./src/modules/logger/pino/logger.service"), exports);
18
18
  __exportStar(require("./src/modules/logger/pino/logger.module"), exports);
19
19
  __exportStar(require("./src/modules/logger/pino/logger.default"), exports);
20
+ __exportStar(require("./src/core/application/base.interface"), exports);
21
+ __exportStar(require("./src/core/application/base.service"), exports);
22
+ __exportStar(require("./src/core/domain/interfaces/base.repository.interface"), exports);
23
+ __exportStar(require("./src/core/infrastracture/databases/base.entity"), exports);
24
+ __exportStar(require("./src/core/infrastracture/databases/base.entity.interface"), exports);
25
+ __exportStar(require("./src/core/infrastracture/databases/base.repository"), exports);
20
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,0EAAwD;AACxD,2EAAyD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,0EAAwD;AACxD,2EAAyD;AACzD,wEAAsD;AACtD,sEAAoD;AACpD,yFAAuE;AACvE,kFAAgE;AAChE,4FAA0E;AAC1E,sFAAoE"}
@@ -0,0 +1,16 @@
1
+ import { Paginated, PaginateQuery } from 'nestjs-paginate';
2
+ export interface IBaseService<Entity, CreateMessage extends Partial<Entity>, UpdateMessage extends Partial<Entity> & {
3
+ id: number;
4
+ }, Message> {
5
+ findOne(id: number): Promise<Message>;
6
+ findAll(): Promise<{
7
+ data: Message[];
8
+ }>;
9
+ getMany(query?: PaginateQuery): Promise<Paginated<Message>>;
10
+ create(createDTO: CreateMessage): Promise<Message>;
11
+ update(updateDTO: UpdateMessage): Promise<Message>;
12
+ remove(id: number): Promise<void>;
13
+ count(options?: any): Promise<{
14
+ count: number;
15
+ }>;
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=base.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.interface.js","sourceRoot":"","sources":["../../../../src/core/application/base.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { Paginated, PaginateQuery } from 'nestjs-paginate';
2
+ import { IBaseRepository } from '@domain/interfaces/base.repository.interface';
3
+ import { IBaseService } from './base.interface';
4
+ export declare class BaseService<Entity, CreateMessage extends Partial<Entity>, UpdateMessage extends Partial<Entity> & {
5
+ id: number;
6
+ }, Message> implements IBaseService<Entity, CreateMessage, UpdateMessage, Message> {
7
+ private readonly repository;
8
+ constructor(repository: IBaseRepository<Entity>);
9
+ findOne(id: number): Promise<Message>;
10
+ findAll(): Promise<{
11
+ data: Message[];
12
+ }>;
13
+ getMany(query?: PaginateQuery): Promise<Paginated<Message>>;
14
+ create(createDTO: CreateMessage): Promise<Message>;
15
+ update(updateDTO: UpdateMessage): Promise<Message>;
16
+ remove(id: number): Promise<void>;
17
+ count(options?: any): Promise<{
18
+ count: number;
19
+ }>;
20
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseService = void 0;
4
+ const nestjs_grpc_exceptions_1 = require("nestjs-grpc-exceptions");
5
+ const class_transformer_1 = require("class-transformer");
6
+ class BaseService {
7
+ constructor(repository) {
8
+ this.repository = repository;
9
+ }
10
+ async findOne(id) {
11
+ const entity = await this.repository.findById(id);
12
+ if (!entity) {
13
+ throw new nestjs_grpc_exceptions_1.GrpcNotFoundException(`${this.constructor.name.replace('Service', '')} not found`);
14
+ }
15
+ return entity;
16
+ }
17
+ async findAll() {
18
+ const entities = await this.repository.find();
19
+ return {
20
+ data: entities,
21
+ };
22
+ }
23
+ async getMany(query) {
24
+ const entities = await this.repository.getMany(query);
25
+ return entities;
26
+ }
27
+ async create(createDTO) {
28
+ const plain = (0, class_transformer_1.instanceToPlain)(createDTO);
29
+ const entity = this.repository.create(plain);
30
+ await this.repository.save(entity);
31
+ return entity;
32
+ }
33
+ async update(updateDTO) {
34
+ const entity = await this.repository.findById(updateDTO.id);
35
+ if (!entity) {
36
+ throw new nestjs_grpc_exceptions_1.GrpcNotFoundException(`${this.constructor.name.replace('Service', '')} not found`);
37
+ }
38
+ await this.repository.update(updateDTO.id, (0, class_transformer_1.instanceToPlain)(updateDTO));
39
+ const updatedEntity = await this.repository.findById(updateDTO.id);
40
+ return updatedEntity;
41
+ }
42
+ async remove(id) {
43
+ await this.repository.delete(id);
44
+ }
45
+ async count(options) {
46
+ const count = await this.repository.count(options || {});
47
+ return { count };
48
+ }
49
+ }
50
+ exports.BaseService = BaseService;
51
+ //# sourceMappingURL=base.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../../../src/core/application/base.service.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAG/D,yDAAoD;AAGpD,MAAa,WAAW;IAOtB,YAA6B,UAAmC;QAAnC,eAAU,GAAV,UAAU,CAAyB;IAAG,CAAC;IAQpE,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,8CAAqB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,MAAiB,CAAC;IAC3B,CAAC;IAMD,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAa,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,QAAgC;SACvC,CAAC;IACJ,CAAC;IAOD,KAAK,CAAC,OAAO,CAAC,KAAqB;QACjC,MAAM,QAAQ,GAAsB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzE,OAAO,QAAyC,CAAC;IACnD,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,SAAwB;QACnC,MAAM,KAAK,GAAG,IAAA,mCAAe,EAAC,SAAS,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAe,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,MAA4B,CAAC;IACtC,CAAC;IAQD,KAAK,CAAC,MAAM,CAAC,SAAwB;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,8CAAqB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAA,mCAAe,EAAC,SAAS,CAAQ,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAW,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC3E,OAAO,aAAmC,CAAC;IAC7C,CAAC;IAOD,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAOD,KAAK,CAAC,KAAK,CAAC,OAAa;QACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;CACF;AA1FD,kCA0FC"}
@@ -0,0 +1,10 @@
1
+ import { PaginateQuery, Paginated } from 'nestjs-paginate';
2
+ import { Repository } from 'typeorm';
3
+ export interface IId {
4
+ id: number;
5
+ }
6
+ export interface IBaseRepository<E> extends Repository<E> {
7
+ getMany(query: PaginateQuery): Promise<Paginated<E>>;
8
+ findById(id: number): Promise<E>;
9
+ find(options?: any): Promise<E[]>;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=base.repository.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.repository.interface.js","sourceRoot":"","sources":["../../../../../src/core/domain/interfaces/base.repository.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { UpdateEvent } from 'typeorm';
2
+ import { EntitySubscriberInterface, InsertEvent } from 'typeorm';
3
+ import { IBaseEntity } from './base.entity.interface';
4
+ export declare class BaseEntity implements IBaseEntity {
5
+ id: number;
6
+ createdAt: Date;
7
+ updatedAt: Date;
8
+ }
9
+ export declare class BaseEntitySubscriber implements EntitySubscriberInterface<BaseEntity> {
10
+ listenTo(): typeof BaseEntity;
11
+ beforeInsert(event: InsertEvent<BaseEntity>): void;
12
+ beforeUpdate(event: UpdateEvent<BaseEntity>): void | Promise<any>;
13
+ }
@@ -0,0 +1,5 @@
1
+ export interface IBaseEntity {
2
+ id: number;
3
+ createdAt: Date;
4
+ updatedAt: Date;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=base.entity.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.entity.interface.js","sourceRoot":"","sources":["../../../../../src/core/infrastracture/databases/base.entity.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
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.BaseEntitySubscriber = exports.BaseEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const typeorm_2 = require("typeorm");
15
+ class BaseEntity {
16
+ }
17
+ exports.BaseEntity = BaseEntity;
18
+ __decorate([
19
+ (0, typeorm_1.PrimaryGeneratedColumn)(),
20
+ __metadata("design:type", Number)
21
+ ], BaseEntity.prototype, "id", void 0);
22
+ __decorate([
23
+ (0, typeorm_1.CreateDateColumn)({
24
+ type: 'datetime',
25
+ }),
26
+ __metadata("design:type", Date)
27
+ ], BaseEntity.prototype, "createdAt", void 0);
28
+ __decorate([
29
+ (0, typeorm_1.UpdateDateColumn)({
30
+ type: 'datetime',
31
+ }),
32
+ __metadata("design:type", Date)
33
+ ], BaseEntity.prototype, "updatedAt", void 0);
34
+ let BaseEntitySubscriber = class BaseEntitySubscriber {
35
+ listenTo() {
36
+ return BaseEntity;
37
+ }
38
+ beforeInsert(event) {
39
+ const now = new Date();
40
+ now.setMilliseconds((now.getMilliseconds() + 1) % 1000);
41
+ event.entity.createdAt = now;
42
+ event.entity.updatedAt = now;
43
+ }
44
+ beforeUpdate(event) {
45
+ const now = new Date();
46
+ now.setMilliseconds((now.getMilliseconds() + 1) % 1000);
47
+ event.entity.updatedAt = now;
48
+ }
49
+ };
50
+ exports.BaseEntitySubscriber = BaseEntitySubscriber;
51
+ exports.BaseEntitySubscriber = BaseEntitySubscriber = __decorate([
52
+ (0, typeorm_2.EventSubscriber)()
53
+ ], BaseEntitySubscriber);
54
+ //# sourceMappingURL=base.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.entity.js","sourceRoot":"","sources":["../../../../../src/core/infrastracture/databases/base.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAkG;AAClG,qCAAkF;AAGlF,MAAa,UAAU;CAatB;AAbD,gCAaC;AAXC;IADC,IAAA,gCAAsB,GAAE;;sCACd;AAKX;IAHC,IAAA,0BAAgB,EAAC;QAChB,IAAI,EAAE,UAAU;KACjB,CAAC;8BACS,IAAI;6CAAC;AAKhB;IAHC,IAAA,0BAAgB,EAAC;QAChB,IAAI,EAAE,UAAU;KACjB,CAAC;8BACS,IAAI;6CAAC;AAIX,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAIxB,QAAQ;QACb,OAAO,UAAU,CAAC;IACpB,CAAC;IAKM,YAAY,CAAC,KAA8B;QAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;IAC/B,CAAC;IAEM,YAAY,CAAC,KAA8B;QAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;IAC/B,CAAC;CACF,CAAA;AAvBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,yBAAe,GAAE;GACL,oBAAoB,CAuBhC"}
@@ -0,0 +1,9 @@
1
+ import { Repository, EntityManager, ObjectLiteral } from 'typeorm';
2
+ import { PaginateConfig, PaginateQuery, Paginated } from 'nestjs-paginate';
3
+ import { IBaseRepository } from '@domain/interfaces/base.repository.interface';
4
+ export declare class BaseRepository<E extends ObjectLiteral> extends Repository<E> implements IBaseRepository<E> {
5
+ protected paginateConfig: PaginateConfig<E>;
6
+ constructor(manager: EntityManager, entityCls: new () => E, paginateConfig?: PaginateConfig<E>);
7
+ getMany(query: PaginateQuery): Promise<Paginated<E>>;
8
+ findById(id: number): Promise<E>;
9
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseRepository = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const nestjs_paginate_1 = require("nestjs-paginate");
6
+ class BaseRepository extends typeorm_1.Repository {
7
+ constructor(manager, entityCls, paginateConfig) {
8
+ super(entityCls, manager);
9
+ this.paginateConfig = paginateConfig || {
10
+ sortableColumns: [],
11
+ };
12
+ }
13
+ async getMany(query) {
14
+ if (query.select) {
15
+ if (typeof query.select === 'string') {
16
+ const selectArray = query.select.split(',');
17
+ if (!selectArray.includes('id')) {
18
+ selectArray.unshift('id');
19
+ query.select = selectArray;
20
+ }
21
+ }
22
+ else if (Array.isArray(query.select)) {
23
+ if (!query.select.includes('id')) {
24
+ query.select.unshift('id');
25
+ }
26
+ }
27
+ }
28
+ return (0, nestjs_paginate_1.paginate)(query, this, this.paginateConfig);
29
+ }
30
+ async findById(id) {
31
+ return await this.findOneBy({
32
+ id: (0, typeorm_1.Equal)(id),
33
+ });
34
+ }
35
+ }
36
+ exports.BaseRepository = BaseRepository;
37
+ //# sourceMappingURL=base.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.repository.js","sourceRoot":"","sources":["../../../../../src/core/infrastracture/databases/base.repository.ts"],"names":[],"mappings":";;;AAAA,qCAA4F;AAC5F,qDAAqF;AAMrF,MAAa,cAAwC,SAAQ,oBAAa;IAGxE,YAAY,OAAsB,EAAE,SAAsB,EAAE,cAAkC;QAC5F,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI;YACtC,eAAe,EAAE,EAAE;SACpB,CAAC;IACJ,CAAC;IAQD,KAAK,CAAC,OAAO,CAAC,KAAoB;QAChC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAI,KAAK,CAAC,MAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC1B,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC7B,CAAC;YAEH,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAA,0BAAQ,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAQD,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC;YAC1B,EAAE,EAAE,IAAA,eAAK,EAAC,EAAE,CAAC;SACoB,CAAC,CAAC;IACvC,CAAC;CACF;AA7CD,wCA6CC"}