@nest-boot/graphql 5.11.0 → 5.13.0

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,8 @@
1
+ import { NestMiddleware } from "@nestjs/common";
2
+ import { Request, Response } from "express";
3
+ import { GraphQLModuleOptions } from "./interfaces";
4
+ export declare class GraphiQLMiddleware implements NestMiddleware {
5
+ private readonly options;
6
+ constructor(options: GraphQLModuleOptions);
7
+ use(req: Request, res: Response): void;
8
+ }
@@ -0,0 +1,128 @@
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.GraphiQLMiddleware = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const graphql_module_definition_1 = require("./graphql.module-definition");
18
+ let GraphiQLMiddleware = class GraphiQLMiddleware {
19
+ constructor(options) {
20
+ this.options = options;
21
+ }
22
+ use(req, res) {
23
+ res.send(/* html */ `
24
+ <!doctype html>
25
+ <html lang="en">
26
+ <head>
27
+ <title>GraphiQL</title>
28
+ <style>
29
+ body {
30
+ height: 100%;
31
+ margin: 0;
32
+ width: 100%;
33
+ overflow: hidden;
34
+ }
35
+
36
+ #graphiql {
37
+ height: 100vh;
38
+ }
39
+ </style>
40
+ <!--
41
+ This GraphiQL example depends on Promise and fetch, which are available in
42
+ modern browsers, but can be "polyfilled" for older browsers.
43
+ GraphiQL itself depends on React DOM.
44
+ If you do not want to rely on a CDN, you can host these files locally or
45
+ include them directly in your favored resource bundler.
46
+ -->
47
+ <script
48
+ crossorigin
49
+ src="https://unpkg.com/react@18/umd/react.development.js"
50
+ ></script>
51
+ <script
52
+ crossorigin
53
+ src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
54
+ ></script>
55
+ <!--
56
+ These two files can be found in the npm module, however you may wish to
57
+ copy them directly into your environment, or perhaps include them in your
58
+ favored resource bundler.
59
+ -->
60
+ <script
61
+ src="https://unpkg.com/graphiql/graphiql.min.js"
62
+ type="application/javascript"
63
+ ></script>
64
+ <link rel="stylesheet" href="https://unpkg.com/graphiql/graphiql.min.css" />
65
+ <!--
66
+ These are imports for the GraphIQL Explorer plugin.
67
+ -->
68
+ <script
69
+ src="https://unpkg.com/@graphiql/plugin-explorer/dist/index.umd.js"
70
+ crossorigin
71
+ ></script>
72
+
73
+ <link
74
+ rel="stylesheet"
75
+ href="https://unpkg.com/@graphiql/plugin-explorer/dist/style.css"
76
+ />
77
+
78
+ <script
79
+ src="https://unpkg.com/graphql-ws/umd/graphql-ws.min.js"
80
+ crossorigin
81
+ ></script>
82
+ </head>
83
+
84
+ <body>
85
+ <div id="graphiql">Loading...</div>
86
+ <script>
87
+ const fetcher = GraphiQL.createFetcher({
88
+ url: "${this.options.path ?? "/graphql"}",
89
+ headers: {},
90
+ ${typeof this.options.subscriptions !== "undefined"
91
+ ? `wsClient: graphqlWs.createClient({
92
+ url: (() => {
93
+ const url = new URL(window.location.href);
94
+ url.protocol = url.protocol.replace("http", "ws");
95
+ url.pathname = "${this.options.subscriptions.path ?? "/graphql"}";
96
+ return url.href;
97
+ })(),
98
+ lazy: false,
99
+ }),`
100
+ : ``}
101
+ });
102
+
103
+
104
+
105
+
106
+
107
+
108
+ const root = ReactDOM.createRoot(document.getElementById('graphiql'));
109
+ const explorerPlugin = GraphiQLPluginExplorer.explorerPlugin();
110
+ root.render(
111
+ React.createElement(GraphiQL, {
112
+ fetcher,
113
+ defaultEditorToolsVisibility: true,
114
+ plugins: [explorerPlugin],
115
+ }),
116
+ );
117
+ </script>
118
+ </body>
119
+ </html>`);
120
+ }
121
+ };
122
+ exports.GraphiQLMiddleware = GraphiQLMiddleware;
123
+ exports.GraphiQLMiddleware = GraphiQLMiddleware = __decorate([
124
+ (0, common_1.Injectable)(),
125
+ __param(0, (0, common_1.Inject)(graphql_module_definition_1.MODULE_OPTIONS_TOKEN)),
126
+ __metadata("design:paramtypes", [Object])
127
+ ], GraphiQLMiddleware);
128
+ //# sourceMappingURL=graphiql.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphiql.middleware.js","sourceRoot":"","sources":["../src/graphiql.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoE;AAGpE,2EAAmE;AAI5D,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAEmB,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;IAC7C,CAAC;IAEJ,GAAG,CAAC,GAAY,EAAE,GAAa;QAC7B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAiER,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU;;UAGrC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,WAAW;YAC/C,CAAC,CAAC;;;;8BAIgB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,UAAU;;;;YAI/D;YACA,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;;QAmBA,CAAC,CAAC;IACR,CAAC;CACF,CAAA;AA3GY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,gDAAoB,CAAC,CAAA;;GAFpB,kBAAkB,CA2G9B"}
@@ -1,7 +1,11 @@
1
- import { type DynamicModule } from "@nestjs/common";
1
+ import { type DynamicModule, MiddlewareConsumer, NestModule } from "@nestjs/common";
2
2
  import { type ASYNC_OPTIONS_TYPE, ConfigurableModuleClass, type OPTIONS_TYPE } from "./graphql.module-definition";
3
- export declare class GraphQLModule extends ConfigurableModuleClass {
3
+ import { type GraphQLModuleOptions } from "./interfaces";
4
+ export declare class GraphQLModule extends ConfigurableModuleClass implements NestModule {
5
+ private readonly options;
4
6
  static forRoot(options: typeof OPTIONS_TYPE): DynamicModule;
5
7
  static forRootAsync(options: typeof ASYNC_OPTIONS_TYPE): DynamicModule;
6
8
  private static withBaseGraphQLModule;
9
+ constructor(options: GraphQLModuleOptions);
10
+ configure(consumer: MiddlewareConsumer): void;
7
11
  }
@@ -5,6 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
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
+ };
8
14
  Object.defineProperty(exports, "__esModule", { value: true });
9
15
  exports.GraphQLModule = void 0;
10
16
  const apollo_1 = require("@nestjs/apollo");
@@ -12,9 +18,11 @@ const common_1 = require("@nestjs/common");
12
18
  const core_1 = require("@nestjs/core");
13
19
  const graphql_1 = require("@nestjs/graphql");
14
20
  const connection_service_1 = require("./connection.service");
21
+ const graphiql_middleware_1 = require("./graphiql.middleware");
15
22
  const graphql_exception_filter_1 = require("./graphql.exception-filter");
16
23
  const graphql_module_definition_1 = require("./graphql.module-definition");
17
24
  const plugins_1 = require("./plugins");
25
+ const logging_plugin_1 = require("./plugins/logging.plugin");
18
26
  let GraphQLModule = class GraphQLModule extends graphql_module_definition_1.ConfigurableModuleClass {
19
27
  static forRoot(options) {
20
28
  return this.withBaseGraphQLModule(super.forRoot(options));
@@ -28,8 +36,8 @@ let GraphQLModule = class GraphQLModule extends graphql_module_definition_1.Conf
28
36
  inject: [graphql_module_definition_1.MODULE_OPTIONS_TOKEN],
29
37
  useFactory: (options) => {
30
38
  return {
31
- playground: false,
32
39
  ...options,
40
+ playground: false,
33
41
  ...(typeof options.subscriptions !== "undefined"
34
42
  ? {
35
43
  subscriptions: {
@@ -46,6 +54,18 @@ let GraphQLModule = class GraphQLModule extends graphql_module_definition_1.Conf
46
54
  ];
47
55
  return dynamicModule;
48
56
  }
57
+ constructor(options) {
58
+ super();
59
+ this.options = options;
60
+ }
61
+ configure(consumer) {
62
+ if (this.options.playground === true) {
63
+ consumer.apply(graphiql_middleware_1.GraphiQLMiddleware).forRoutes({
64
+ method: common_1.RequestMethod.GET,
65
+ path: this.options.path ?? "/graphql",
66
+ });
67
+ }
68
+ }
49
69
  };
50
70
  exports.GraphQLModule = GraphQLModule;
51
71
  exports.GraphQLModule = GraphQLModule = __decorate([
@@ -54,12 +74,15 @@ exports.GraphQLModule = GraphQLModule = __decorate([
54
74
  providers: [
55
75
  connection_service_1.ConnectionService,
56
76
  plugins_1.ComplexityPlugin,
77
+ logging_plugin_1.LoggingPlugin,
57
78
  {
58
79
  provide: core_1.APP_FILTER,
59
80
  useClass: graphql_exception_filter_1.GraphQLExceptionFilter,
60
81
  },
61
82
  ],
62
83
  exports: [graphql_module_definition_1.MODULE_OPTIONS_TOKEN, connection_service_1.ConnectionService],
63
- })
84
+ }),
85
+ __param(0, (0, common_1.Inject)(graphql_module_definition_1.MODULE_OPTIONS_TOKEN)),
86
+ __metadata("design:paramtypes", [Object])
64
87
  ], GraphQLModule);
65
88
  //# sourceMappingURL=graphql.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.module.js","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA8C;AAC9C,2CAAoE;AACpE,uCAA0C;AAC1C,6CAAqE;AAErE,6DAAyD;AACzD,yEAAoE;AACpE,2EAKqC;AAErC,uCAA6C;AActC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,mDAAuB;IACxD,MAAM,CAAC,OAAO,CAAC,OAA4B;QACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAkC;QACpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAClC,aAA4B;QAE5B,MAAM,wBAAwB,GAAG,uBAAiB,CAAC,YAAY,CAAC;YAC9D,MAAM,EAAE,qBAAY;YACpB,MAAM,EAAE,CAAC,gDAAoB,CAAC;YAC9B,UAAU,EAAE,CAAC,OAA6B,EAAE,EAAE;gBAC5C,OAAO;oBACL,UAAU,EAAE,KAAK;oBACjB,GAAG,OAAO;oBACV,GAAG,CAAC,OAAO,OAAO,CAAC,aAAa,KAAK,WAAW;wBAC9C,CAAC,CAAC;4BACE,aAAa,EAAE;gCACb,YAAY,EAAE,OAAO,CAAC,aAAa;6BACpC;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,aAAa,CAAC,OAAO,GAAG;YACtB,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;YAChC,wBAAwB;SACzB,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC;CACF,CAAA;AArCY,sCAAa;wBAAb,aAAa;IAZzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,sCAAiB;YACjB,0BAAgB;YAChB;gBACE,OAAO,EAAE,iBAAU;gBACnB,QAAQ,EAAE,iDAAsB;aACjC;SACF;QACD,OAAO,EAAE,CAAC,gDAAoB,EAAE,sCAAiB,CAAC;KACnD,CAAC;GACW,aAAa,CAqCzB"}
1
+ {"version":3,"file":"graphql.module.js","sourceRoot":"","sources":["../src/graphql.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA8C;AAC9C,2CAQwB;AACxB,uCAA0C;AAC1C,6CAAqE;AAErE,6DAAyD;AACzD,+DAA2D;AAC3D,yEAAoE;AACpE,2EAKqC;AAErC,uCAA6C;AAC7C,6DAAyD;AAelD,IAAM,aAAa,GAAnB,MAAM,aACX,SAAQ,mDAAuB;IAG/B,MAAM,CAAC,OAAO,CAAC,OAA4B;QACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAkC;QACpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAClC,aAA4B;QAE5B,MAAM,wBAAwB,GAAG,uBAAiB,CAAC,YAAY,CAAC;YAC9D,MAAM,EAAE,qBAAY;YACpB,MAAM,EAAE,CAAC,gDAAoB,CAAC;YAC9B,UAAU,EAAE,CAAC,OAA6B,EAAE,EAAE;gBAC5C,OAAO;oBACL,GAAG,OAAO;oBACV,UAAU,EAAE,KAAK;oBACjB,GAAG,CAAC,OAAO,OAAO,CAAC,aAAa,KAAK,WAAW;wBAC9C,CAAC,CAAC;4BACE,aAAa,EAAE;gCACb,YAAY,EAAE,OAAO,CAAC,aAAa;6BACpC;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,aAAa,CAAC,OAAO,GAAG;YACtB,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC;YAChC,wBAAwB;SACzB,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,YAEmB,OAA6B;QAE9C,KAAK,EAAE,CAAC;QAFS,YAAO,GAAP,OAAO,CAAsB;IAGhD,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE;YACpC,QAAQ,CAAC,KAAK,CAAC,wCAAkB,CAAC,CAAC,SAAS,CAAC;gBAC3C,MAAM,EAAE,sBAAa,CAAC,GAAG;gBACzB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,UAAU;aACtC,CAAC,CAAC;SACJ;IACH,CAAC;CACF,CAAA;AAxDY,sCAAa;wBAAb,aAAa;IAbzB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,sCAAiB;YACjB,0BAAgB;YAChB,8BAAa;YACb;gBACE,OAAO,EAAE,iBAAU;gBACnB,QAAQ,EAAE,iDAAsB;aACjC;SACF;QACD,OAAO,EAAE,CAAC,gDAAoB,EAAE,sCAAiB,CAAC;KACnD,CAAC;IA2CG,WAAA,IAAA,eAAM,EAAC,gDAAoB,CAAC,CAAA;;GA1CpB,aAAa,CAwDzB"}
@@ -1,5 +1,4 @@
1
1
  import { BaseContext, GraphQLRequestContext } from "@apollo/server";
2
- import { ApolloServerPluginLandingPageGraphQLPlaygroundOptions } from "@apollo/server-plugin-landing-page-graphql-playground";
3
2
  import { type ApolloDriverConfig } from "@nestjs/apollo";
4
3
  import { type GraphQLWsSubscriptionsConfig } from "@nestjs/graphql";
5
4
  import { RedisOptions } from "ioredis";
@@ -16,10 +15,7 @@ export interface GraphQLModuleComplexityOptions {
16
15
  rateLimit?: GraphQLModuleComplexityRateLimitOptions;
17
16
  }
18
17
  export interface GraphQLModuleOptions extends Omit<ApolloDriverConfig, "playground" | "subscriptions"> {
19
- /**
20
- * @deprecated GraphQL Playground 项目已停止使用,推荐使用 ApolloServerPluginLandingPageLocalDefault 插件来替代。
21
- */
22
- playground?: boolean | ApolloServerPluginLandingPageGraphQLPlaygroundOptions;
18
+ playground?: boolean;
23
19
  subscriptions?: GraphQLWsSubscriptionsConfig;
24
20
  complexity?: GraphQLModuleComplexityOptions;
25
21
  }
@@ -0,0 +1,7 @@
1
+ import { type ApolloServerPlugin, type BaseContext, type GraphQLRequestListener } from "@apollo/server";
2
+ import { Logger } from "@nest-boot/logger";
3
+ export declare class LoggingPlugin implements ApolloServerPlugin {
4
+ private readonly logger?;
5
+ constructor(logger?: Logger | undefined);
6
+ requestDidStart(): Promise<GraphQLRequestListener<BaseContext>>;
7
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/require-await */
3
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
4
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6
+ 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;
7
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
8
+ };
9
+ var __metadata = (this && this.__metadata) || function (k, v) {
10
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
11
+ };
12
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
+ return function (target, key) { decorator(target, key, paramIndex); }
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.LoggingPlugin = void 0;
17
+ const logger_1 = require("@nest-boot/logger");
18
+ const apollo_1 = require("@nestjs/apollo");
19
+ const common_1 = require("@nestjs/common");
20
+ let LoggingPlugin = class LoggingPlugin {
21
+ constructor(logger) {
22
+ this.logger = logger;
23
+ }
24
+ async requestDidStart() {
25
+ const logger = this.logger;
26
+ if (typeof logger !== "undefined") {
27
+ const startTime = Date.now();
28
+ return {
29
+ didResolveOperation: async (ctx) => {
30
+ if (typeof this.logger !== "undefined") {
31
+ logger.assign({
32
+ operation: {
33
+ id: ctx.queryHash,
34
+ name: ctx.operationName,
35
+ type: ctx.operation?.operation?.toUpperCase(),
36
+ },
37
+ });
38
+ }
39
+ },
40
+ willSendResponse: async (ctx) => {
41
+ const executionTime = Date.now() - startTime;
42
+ if (ctx.errors) {
43
+ ctx.errors.forEach((err) => {
44
+ logger.error(err.message, { err });
45
+ });
46
+ }
47
+ logger.log("resolve operation completed", { executionTime });
48
+ },
49
+ };
50
+ }
51
+ return {};
52
+ }
53
+ };
54
+ exports.LoggingPlugin = LoggingPlugin;
55
+ exports.LoggingPlugin = LoggingPlugin = __decorate([
56
+ (0, apollo_1.Plugin)(),
57
+ __param(0, (0, common_1.Optional)()),
58
+ __metadata("design:paramtypes", [logger_1.Logger])
59
+ ], LoggingPlugin);
60
+ //# sourceMappingURL=logging.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.plugin.js","sourceRoot":"","sources":["../../src/plugins/logging.plugin.ts"],"names":[],"mappings":";AAAA,qDAAqD;;;;;;;;;;;;;;;AAOrD,8CAA2C;AAC3C,2CAAwC;AACxC,2CAA0C;AAGnC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAEmB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAC/B,CAAC;IAEJ,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,OAAO;gBACL,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;oBACjC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE;wBACtC,MAAM,CAAC,MAAM,CAAC;4BACZ,SAAS,EAAE;gCACT,EAAE,EAAE,GAAG,CAAC,SAAS;gCACjB,IAAI,EAAE,GAAG,CAAC,aAAa;gCACvB,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE;6BAC9C;yBACF,CAAC,CAAC;qBACJ;gBACH,CAAC;gBACD,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBAE7C,IAAI,GAAG,CAAC,MAAM,EAAE;wBACd,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;4BACzB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;wBACrC,CAAC,CAAC,CAAC;qBACJ;oBAED,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC/D,CAAC;aACF,CAAC;SACH;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AAxCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,GAAE;IAGJ,WAAA,IAAA,iBAAQ,GAAE,CAAA;qCACe,eAAM;GAHvB,aAAa,CAwCzB"}