@klerick/json-api-nestjs 10.0.0-beta.10 → 10.0.0-beta.11
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/CHANGELOG.md +10 -0
- package/README.md +29 -2
- package/package.json +1 -1
- package/src/lib/json-api.module.js +3 -2
- package/src/lib/json-api.module.js.map +1 -1
- package/src/lib/modules/atomic-operation/atomic-operation.module.d.ts +1 -2
- package/src/lib/modules/atomic-operation/atomic-operation.module.js +6 -5
- package/src/lib/modules/atomic-operation/atomic-operation.module.js.map +1 -1
- package/src/lib/modules/atomic-operation/factory/map-controller-entity.d.ts +1 -2
- package/src/lib/modules/atomic-operation/factory/map-controller-entity.js +8 -7
- package/src/lib/modules/atomic-operation/factory/map-controller-entity.js.map +1 -1
- package/src/lib/types/module-options.types.d.ts +1 -0
- package/src/lib/utils/module-helper.js +1 -0
- package/src/lib/utils/module-helper.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## 10.0.0-beta.11 (2026-01-22)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **json-api-nestjs:** add support for excluding controllers during module initialization ([5e2de06](https://github.com/klerick/nestjs-json-api/commit/5e2de06))
|
|
6
|
+
|
|
7
|
+
### ❤️ Thank You
|
|
8
|
+
|
|
9
|
+
- Alex H
|
|
10
|
+
|
|
1
11
|
## 10.0.0-beta.10 (2026-01-21)
|
|
2
12
|
|
|
3
13
|
### 🚀 Features
|
package/README.md
CHANGED
|
@@ -79,8 +79,9 @@ The following interface is using for the configuration:
|
|
|
79
79
|
```typescript
|
|
80
80
|
export interface ModuleOptions {
|
|
81
81
|
entities: Entity[]; // List of typeOrm Entity
|
|
82
|
+
excludeControllers?: Entity[]; // List of entities to exclude from automatic controller generation
|
|
82
83
|
controllers?: NestController[]; // List of controller, if you need extend default present
|
|
83
|
-
connectionName?: string; // Type orm connection name: "default" is default name
|
|
84
|
+
connectionName?: string; // Type orm connection name: "default" is default name
|
|
84
85
|
providers?: NestProvider[]; // List of addition provider for useing in custom controller
|
|
85
86
|
imports?: NestImport[]; // List of addition module for useing in custom controller
|
|
86
87
|
options?: {
|
|
@@ -88,11 +89,37 @@ export interface ModuleOptions {
|
|
|
88
89
|
debug?: boolean; // Debug info in result object, like error message
|
|
89
90
|
pipeForId?: Type<PipeTransform> // Nestjs pipe for validate id params, by default ParseIntPipe
|
|
90
91
|
operationUrl?: string // Url for atomic operation https://jsonapi.org/ext/atomic/
|
|
91
|
-
// You can add params for MicroOrm or TypeOrm adapter
|
|
92
|
+
// You can add params for MicroOrm or TypeOrm adapter
|
|
92
93
|
} ;
|
|
93
94
|
}
|
|
94
95
|
```
|
|
95
96
|
|
|
97
|
+
### Excluding Controllers
|
|
98
|
+
|
|
99
|
+
If you need to register entities for relationships but don't want automatic controller generation for some of them, use `excludeControllers`:
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import {Module} from '@nestjs/common';
|
|
103
|
+
import {JsonApiModule} from '@klerick/json-api-nestjs';
|
|
104
|
+
import {TypeOrmJsonApiModule} from '@klerick/json-api-nestjs-typeorm';
|
|
105
|
+
import {Users, Roles, AuditLog} from 'database';
|
|
106
|
+
|
|
107
|
+
@Module({
|
|
108
|
+
imports: [
|
|
109
|
+
JsonApiModule.forRoot(TypeOrmJsonApiModule, {
|
|
110
|
+
entities: [Users, Roles, AuditLog],
|
|
111
|
+
excludeControllers: [AuditLog], // AuditLog entity will not have auto-generated controller
|
|
112
|
+
}),
|
|
113
|
+
],
|
|
114
|
+
})
|
|
115
|
+
export class AppModule {}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
This is useful when:
|
|
119
|
+
- You want to manage certain entities only through relationships
|
|
120
|
+
- You need custom controller implementation without the auto-generated one
|
|
121
|
+
- Some entities should be internal and not exposed via REST API
|
|
122
|
+
|
|
96
123
|
You can extend the default controller:
|
|
97
124
|
|
|
98
125
|
```typescript
|
package/package.json
CHANGED
|
@@ -17,7 +17,8 @@ let JsonApiModule = JsonApiModule_1 = class JsonApiModule {
|
|
|
17
17
|
if (!commonOrmModule.providers ||
|
|
18
18
|
!commonOrmModule.providers.find((i) => 'provide' in i && i.provide === constants_1.ENTITY_PARAM_MAP))
|
|
19
19
|
throw new Error(`The module ${module.name} should be provide ${constants_1.ENTITY_PARAM_MAP.description}`);
|
|
20
|
-
const
|
|
20
|
+
const entitiesForControllers = prepareOptions.entities.filter((entity) => !prepareOptions.excludeControllers.includes(entity));
|
|
21
|
+
const entitiesModules = entitiesForControllers.map((entityItem) => modules_1.MixinModule.forRoot({
|
|
21
22
|
entity: entityItem,
|
|
22
23
|
imports: [commonOrmModule, ...prepareOptions.imports],
|
|
23
24
|
ormModule: module,
|
|
@@ -25,7 +26,7 @@ let JsonApiModule = JsonApiModule_1 = class JsonApiModule {
|
|
|
25
26
|
config: prepareOptions,
|
|
26
27
|
}));
|
|
27
28
|
const atomicOperation = prepareOptions.options.operationUrl
|
|
28
|
-
? modules_1.AtomicOperationModule.forRoot(prepareOptions.options.operationUrl,
|
|
29
|
+
? modules_1.AtomicOperationModule.forRoot(prepareOptions.options.operationUrl, entitiesModules, commonOrmModule)
|
|
29
30
|
: [];
|
|
30
31
|
return {
|
|
31
32
|
module: JsonApiModule_1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-api.module.js","sourceRoot":"","sources":["../../../../../../libs/json-api/json-api-nestjs/src/lib/json-api.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuD;AAEvD,mCAAuD;AACvD,2CAA+C;AAC/C,uCAA+D;AAC/D,+DAGsC;AACtC,qDAA6D;AAGtD,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,OAAO,CACnB,MAAS,EACT,OAAwB;QAExB,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;QAC9C,cAAc,CAAC,SAAS,CAAC,IAAI,CAC3B,gCAAiB,EACjB,4BAAkB,EAClB,kCAAmB,CACpB,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEvD,IACE,CAAC,eAAe,CAAC,SAAS;YAC1B,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,4BAAgB,CACxD;YAED,MAAM,IAAI,KAAK,CACb,cAAc,MAAM,CAAC,IAAI,sBAAsB,4BAAgB,CAAC,WAAW,EAAE,CAC9E,CAAC;QAEJ,MAAM,
|
|
1
|
+
{"version":3,"file":"json-api.module.js","sourceRoot":"","sources":["../../../../../../libs/json-api/json-api-nestjs/src/lib/json-api.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuD;AAEvD,mCAAuD;AACvD,2CAA+C;AAC/C,uCAA+D;AAC/D,+DAGsC;AACtC,qDAA6D;AAGtD,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,OAAO,CACnB,MAAS,EACT,OAAwB;QAExB,MAAM,cAAc,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;QAC9C,cAAc,CAAC,SAAS,CAAC,IAAI,CAC3B,gCAAiB,EACjB,4BAAkB,EAClB,kCAAmB,CACpB,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEvD,IACE,CAAC,eAAe,CAAC,SAAS;YAC1B,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,4BAAgB,CACxD;YAED,MAAM,IAAI,KAAK,CACb,cAAc,MAAM,CAAC,IAAI,sBAAsB,4BAAgB,CAAC,WAAW,EAAE,CAC9E,CAAC;QAEJ,MAAM,sBAAsB,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAC3D,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAChE,CAAC;QAEF,MAAM,eAAe,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAChE,qBAAW,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,CAAC,eAAe,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;YACrD,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,IAAA,qBAAa,EAAC,UAAU,EAAE,cAAc,CAAC,WAAW,CAAC;YACjE,MAAM,EAAE,cAAc;SACvB,CAAC,CACH,CAAC;QAEF,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY;YACzD,CAAC,CAAC,+BAAqB,CAAC,OAAO,CAC3B,cAAc,CAAC,OAAO,CAAC,YAAY,EACnC,eAAe,EACf,eAAe,CAChB;YACH,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,OAAO,EAAE,CAAC,GAAG,eAAe,EAAE,GAAG,eAAe,CAAC;SAClD,CAAC;IACJ,CAAC;CACF,CAAA;AAlDY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAkDzB"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { DynamicModule, MiddlewareConsumer, NestModule } from '@nestjs/common';
|
|
2
|
-
import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared';
|
|
3
2
|
export declare class AtomicOperationModule implements NestModule {
|
|
4
|
-
static forRoot(operationUrl: string,
|
|
3
|
+
static forRoot(operationUrl: string, entityModules: DynamicModule[], commonModule: DynamicModule): DynamicModule[];
|
|
5
4
|
private static factoryModule;
|
|
6
5
|
private readonly als;
|
|
7
6
|
configure(consumer: MiddlewareConsumer): void;
|
|
@@ -12,9 +12,9 @@ const factory_1 = require("./factory");
|
|
|
12
12
|
const constants_1 = require("./constants");
|
|
13
13
|
const service_2 = require("../../modules/mixin/service");
|
|
14
14
|
let AtomicOperationModule = AtomicOperationModule_1 = class AtomicOperationModule {
|
|
15
|
-
static forRoot(operationUrl,
|
|
15
|
+
static forRoot(operationUrl, entityModules, commonModule) {
|
|
16
16
|
return [
|
|
17
|
-
AtomicOperationModule_1.factoryModule(
|
|
17
|
+
AtomicOperationModule_1.factoryModule(entityModules, commonModule),
|
|
18
18
|
core_1.RouterModule.register([
|
|
19
19
|
{
|
|
20
20
|
module: AtomicOperationModule_1,
|
|
@@ -23,11 +23,12 @@ let AtomicOperationModule = AtomicOperationModule_1 = class AtomicOperationModul
|
|
|
23
23
|
]),
|
|
24
24
|
];
|
|
25
25
|
}
|
|
26
|
-
static factoryModule(
|
|
26
|
+
static factoryModule(entityModules, commonModule) {
|
|
27
27
|
const errorFormat = (commonModule.providers || []).find(i => 'provide' in i && i.provide === service_2.ErrorFormatService);
|
|
28
28
|
if (!errorFormat) {
|
|
29
29
|
throw new Error('ErrorFormatService not found, should be provide in common orm module');
|
|
30
30
|
}
|
|
31
|
+
const mapControllerEntityProvider = (0, factory_1.MapControllerEntity)(entityModules);
|
|
31
32
|
return {
|
|
32
33
|
module: AtomicOperationModule_1,
|
|
33
34
|
controllers: [controllers_1.OperationController],
|
|
@@ -37,8 +38,8 @@ let AtomicOperationModule = AtomicOperationModule_1 = class AtomicOperationModul
|
|
|
37
38
|
service_1.ExecuteService,
|
|
38
39
|
service_1.SwaggerService,
|
|
39
40
|
factory_1.AsyncIterate,
|
|
40
|
-
|
|
41
|
-
(0, factory_1.MapEntityNameToEntity)(
|
|
41
|
+
mapControllerEntityProvider,
|
|
42
|
+
(0, factory_1.MapEntityNameToEntity)([...mapControllerEntityProvider.useValue.keys()]),
|
|
42
43
|
(0, factory_1.ZodInputOperation)(),
|
|
43
44
|
{
|
|
44
45
|
provide: constants_1.MAP_CONTROLLER_INTERCEPTORS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomic-operation.module.js","sourceRoot":"","sources":["../../../../../../../../libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/atomic-operation.module.ts"],"names":[],"mappings":";;;;;AAAA,6CAAgD;AAChD,2CAMwB;AACxB,uCAA6D;
|
|
1
|
+
{"version":3,"file":"atomic-operation.module.js","sourceRoot":"","sources":["../../../../../../../../libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/atomic-operation.module.ts"],"names":[],"mappings":";;;;;AAAA,6CAAgD;AAChD,2CAMwB;AACxB,uCAA6D;AAE7D,+CAAoD;AACpD,uCAA4E;AAE5E,uCAKmB;AACnB,2CAA0D;AAC1D,yDAAiE;AAG1D,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAChC,MAAM,CAAC,OAAO,CACZ,YAAoB,EACpB,aAA8B,EAC9B,YAA2B;QAE3B,OAAO;YACL,uBAAqB,CAAC,aAAa,CACjC,aAAa,EACb,YAAY,CACb;YACD,mBAAY,CAAC,QAAQ,CAAC;gBACpB;oBACE,MAAM,EAAE,uBAAqB;oBAC7B,IAAI,EAAE,YAAY;iBACnB;aACF,CAAC;SACH,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,aAA8B,EAC9B,YAA2B;QAG3B,MAAM,WAAW,GAAG,CAAC,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,4BAAkB,CAAE,CAAA;QACjH,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACzF,CAAC;QACD,MAAM,2BAA2B,GAAG,IAAA,6BAAmB,EAAC,aAAa,CAAC,CAAC;QACvE,OAAO;YACL,MAAM,EAAE,uBAAqB;YAC7B,WAAW,EAAE,CAAC,iCAAmB,CAAC;YAClC,SAAS,EAAE;gBACT,WAAW;gBACX,yBAAe;gBACf,wBAAc;gBACd,wBAAc;gBACd,sBAAY;gBACZ,2BAA2B;gBAC3B,IAAA,+BAAqB,EAAC,CAAC,GAAG,2BAA2B,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;gBACvE,IAAA,2BAAiB,GAAE;gBACnB;oBACE,OAAO,EAAE,uCAA2B;oBACpC,QAAQ,EAAE,IAAI,GAAG,EAAE;iBACpB;gBACD;oBACE,OAAO,EAAE,+BAAiB;oBAC1B,QAAQ,EAAE,IAAI,+BAAiB,EAAE;iBAClC;aACF;YACD,OAAO,EAAE,CAAC,sBAAe,EAAE,YAAY,CAAC;SACzC,CAAC;IACJ,CAAC;IAE2C,GAAG,CAA0B;IAEzE,SAAS,CAAC,QAA4B;QACpC,QAAQ;aACL,KAAK,CAAC,CAAC,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG;gBACZ,GAAG,EAAE,GAAG;gBACR,GAAG,EAAE,GAAG;gBACR,IAAI,EAAE,IAAI;aACX,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC;aACD,SAAS,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;CACF,CAAA;AArEY,sDAAqB;AAuDY;IAA3C,IAAA,eAAM,EAAC,+BAAiB,CAAC;sCAAwB,+BAAiB;kDAAM;gCAvD9D,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAqEjC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { DynamicModule, ValueProvider } from '@nestjs/common';
|
|
2
|
-
import { AnyEntity, EntityClass } from '@klerick/json-api-nestjs-shared';
|
|
3
2
|
import { MapController } from '../types';
|
|
4
|
-
export declare function MapControllerEntity(
|
|
3
|
+
export declare function MapControllerEntity(entityModules: DynamicModule[]): ValueProvider<MapController>;
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MapControllerEntity = MapControllerEntity;
|
|
4
4
|
const constants_1 = require("../constants");
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
const helpers_1 = require("../../mixin/helpers");
|
|
6
|
+
function MapControllerEntity(entityModules) {
|
|
7
|
+
const mapController = entityModules
|
|
8
|
+
.reduce((acum, entityModule) => {
|
|
9
|
+
const controller = entityModule.controllers?.at(0);
|
|
10
|
+
if (controller) {
|
|
11
|
+
const entity = (0, helpers_1.entityForClass)(controller);
|
|
12
|
+
acum.set(entity, controller);
|
|
12
13
|
}
|
|
13
14
|
return acum;
|
|
14
15
|
}, new Map());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-controller-entity.js","sourceRoot":"","sources":["../../../../../../../../../libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-controller-entity.ts"],"names":[],"mappings":";;AAMA,kDAkBC;
|
|
1
|
+
{"version":3,"file":"map-controller-entity.js","sourceRoot":"","sources":["../../../../../../../../../libs/json-api/json-api-nestjs/src/lib/modules/atomic-operation/factory/map-controller-entity.ts"],"names":[],"mappings":";;AAMA,kDAkBC;AArBD,4CAAqD;AACrD,iDAAqD;AAErD,SAAgB,mBAAmB,CACjC,aAA8B;IAG9B,MAAM,aAAa,GAAG,aAAa;SAChC,MAAM,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,IAAI,GAAG,EAAqC,CAAC,CAAC;IAEjD,OAAO;QACL,OAAO,EAAE,iCAAqB;QAC9B,QAAQ,EAAE,aAAa;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { NestController, NestImport, NestProvider, PipeMixin } from './common-ty
|
|
|
5
5
|
import { ExtractNestType, IfEquals } from './utils-type';
|
|
6
6
|
type ModuleCommonParams = {
|
|
7
7
|
entities: NonEmptyArray<EntityClass<AnyEntity>>;
|
|
8
|
+
excludeControllers?: EntityClass<AnyEntity>[];
|
|
8
9
|
connectionName?: string;
|
|
9
10
|
controllers?: NestController;
|
|
10
11
|
providers?: NestProvider;
|
|
@@ -12,6 +12,7 @@ function prepareConfig(moduleParams) {
|
|
|
12
12
|
providers: moduleParams['providers'] || [],
|
|
13
13
|
controllers: moduleParams['controllers'] || [],
|
|
14
14
|
entities: moduleParams['entities'],
|
|
15
|
+
excludeControllers: moduleParams['excludeControllers'] || [],
|
|
15
16
|
options: {
|
|
16
17
|
...options,
|
|
17
18
|
operationUrl: options['operationUrl'] || undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-helper.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts"],"names":[],"mappings":";;AAcA,
|
|
1
|
+
{"version":3,"file":"module-helper.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs/src/lib/utils/module-helper.ts"],"names":[],"mappings":";;AAcA,sCAwBC;AAED,sCAQC;AAhDD,2CAA8C;AAS9C,4CAGsB;AAEtB,SAAgB,aAAa,CAC3B,YAA+B;IAE/B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,IAAK,EAAgC,CAAC;IAE7E,OAAO;QACL,cAAc,EAAE,YAAY,CAAC,gBAAgB,CAAC,IAAI,mCAAuB;QACzE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;QACtC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;QAC1C,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE;QAC9C,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC;QAClC,kBAAkB,EAAE,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE;QAC5D,OAAO,EAAE;YACP,GAAG,OAAO;YACV,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS;YAClD,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC;YACrD,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;YACzB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,qBAAY;YAC/C,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;SACpC;QACD,KAAK,EAAE;YACL,qBAAqB,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;SACjH;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAC3B,MAA8B,EAC9B,WAA2B;IAE3B,OAAO,WAAW,CAAC,IAAI,CACrB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC,qCAAyB,EAAE,IAAI,CAAC,KAAK,MAAM,CAC1E,CAAC;AACJ,CAAC"}
|