@webiny/handler-graphql 6.0.0-rc.7 → 6.1.0-beta.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.
- package/createRequestBody.js +3 -3
- package/createRequestBody.js.map +1 -1
- package/graphql/abstractions.public.d.ts +2 -3
- package/graphql/abstractions.public.js +2 -3
- package/graphql/abstractions.public.js.map +1 -1
- package/package.json +13 -13
- package/responses.d.ts +11 -1
- package/responses.js +10 -0
- package/responses.js.map +1 -1
package/createRequestBody.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import zod from "zod";
|
|
2
2
|
import { WebinyError } from "@webiny/error";
|
|
3
3
|
import { createZodError } from "@webiny/utils/createZodError.js";
|
|
4
|
-
const requestBodySchema = zod.
|
|
4
|
+
const requestBodySchema = zod.looseObject({
|
|
5
5
|
query: zod.string(),
|
|
6
|
-
variables: zod.record(zod.any()).nullish().optional(),
|
|
6
|
+
variables: zod.record(zod.string(), zod.any()).nullish().optional(),
|
|
7
7
|
operationName: zod.string().nullish().optional().transform(value => {
|
|
8
8
|
return value || undefined;
|
|
9
9
|
})
|
|
10
|
-
})
|
|
10
|
+
});
|
|
11
11
|
const schema = zod.union([requestBodySchema, zod.array(requestBodySchema)]);
|
|
12
12
|
export const createRequestBody = input => {
|
|
13
13
|
const body = typeof input === "string" ? JSON.parse(input) : input;
|
package/createRequestBody.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["zod","WebinyError","createZodError","requestBodySchema","
|
|
1
|
+
{"version":3,"names":["zod","WebinyError","createZodError","requestBodySchema","looseObject","query","string","variables","record","any","nullish","optional","operationName","transform","value","undefined","schema","union","array","createRequestBody","input","body","JSON","parse","result","safeParse","success","error","message","code","data"],"sources":["createRequestBody.ts"],"sourcesContent":["import zod from \"zod\";\nimport { WebinyError } from \"@webiny/error\";\nimport { createZodError } from \"@webiny/utils/createZodError.js\";\nimport type { GraphQLRequestBody } from \"~/types.js\";\n\nconst requestBodySchema = zod.looseObject({\n query: zod.string(),\n variables: zod.record(zod.string(), zod.any()).nullish().optional(),\n operationName: zod\n .string()\n .nullish()\n .optional()\n .transform(value => {\n return value || undefined;\n })\n});\n\nconst schema = zod.union([requestBodySchema, zod.array(requestBodySchema)]);\n\nexport const createRequestBody = (input: unknown): GraphQLRequestBody | GraphQLRequestBody[] => {\n const body = typeof input === \"string\" ? JSON.parse(input) : input;\n\n const result = schema.safeParse(body);\n if (!result.success) {\n const error = createZodError(result.error);\n throw new WebinyError({\n message: \"Invalid GraphQL request! Check your query and variables.\",\n code: \"GRAPHQL_REQUEST_INVALID\",\n data: error.data\n });\n }\n return result.data;\n};\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AACrB,SAASC,WAAW,QAAQ,eAAe;AAC3C,SAASC,cAAc,QAAQ,iCAAiC;AAGhE,MAAMC,iBAAiB,GAAGH,GAAG,CAACI,WAAW,CAAC;EACtCC,KAAK,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC;EACnBC,SAAS,EAAEP,GAAG,CAACQ,MAAM,CAACR,GAAG,CAACM,MAAM,CAAC,CAAC,EAAEN,GAAG,CAACS,GAAG,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnEC,aAAa,EAAEZ,GAAG,CACbM,MAAM,CAAC,CAAC,CACRI,OAAO,CAAC,CAAC,CACTC,QAAQ,CAAC,CAAC,CACVE,SAAS,CAACC,KAAK,IAAI;IAChB,OAAOA,KAAK,IAAIC,SAAS;EAC7B,CAAC;AACT,CAAC,CAAC;AAEF,MAAMC,MAAM,GAAGhB,GAAG,CAACiB,KAAK,CAAC,CAACd,iBAAiB,EAAEH,GAAG,CAACkB,KAAK,CAACf,iBAAiB,CAAC,CAAC,CAAC;AAE3E,OAAO,MAAMgB,iBAAiB,GAAIC,KAAc,IAAgD;EAC5F,MAAMC,IAAI,GAAG,OAAOD,KAAK,KAAK,QAAQ,GAAGE,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC,GAAGA,KAAK;EAElE,MAAMI,MAAM,GAAGR,MAAM,CAACS,SAAS,CAACJ,IAAI,CAAC;EACrC,IAAI,CAACG,MAAM,CAACE,OAAO,EAAE;IACjB,MAAMC,KAAK,GAAGzB,cAAc,CAACsB,MAAM,CAACG,KAAK,CAAC;IAC1C,MAAM,IAAI1B,WAAW,CAAC;MAClB2B,OAAO,EAAE,0DAA0D;MACnEC,IAAI,EAAE,yBAAyB;MAC/BC,IAAI,EAAEH,KAAK,CAACG;IAChB,CAAC,CAAC;EACN;EACA,OAAON,MAAM,CAACM,IAAI;AACtB,CAAC","ignoreList":[]}
|
|
@@ -5,12 +5,11 @@ export interface IGraphQLSchema {
|
|
|
5
5
|
resolvers?: IResolvers<any>;
|
|
6
6
|
resolverDecorators?: IResolverDecorators;
|
|
7
7
|
}
|
|
8
|
-
/**
|
|
9
|
-
* GraphQLSchemaFactory
|
|
10
|
-
*/
|
|
8
|
+
/** Define custom GraphQL schema extensions. */
|
|
11
9
|
export interface IGraphQLSchemaFactory {
|
|
12
10
|
execute(builder: GraphQLSchemaBuilder.Interface): Promise<GraphQLSchemaBuilder.Interface>;
|
|
13
11
|
}
|
|
12
|
+
/** Define custom GraphQL schema extensions. */
|
|
14
13
|
export declare const GraphQLSchemaFactory: import("@webiny/di").Abstraction<IGraphQLSchemaFactory>;
|
|
15
14
|
export declare namespace GraphQLSchemaFactory {
|
|
16
15
|
type Interface = IGraphQLSchemaFactory;
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { createAbstraction } from "@webiny/feature/api";
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
* GraphQLSchemaFactory
|
|
8
|
-
*/
|
|
6
|
+
/** Define custom GraphQL schema extensions. */
|
|
9
7
|
|
|
8
|
+
/** Define custom GraphQL schema extensions. */
|
|
10
9
|
export const GraphQLSchemaFactory = createAbstraction("GraphQLSchemaFactory");
|
|
11
10
|
|
|
12
11
|
//# sourceMappingURL=abstractions.public.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","GraphQLSchemaFactory"],"sources":["abstractions.public.ts"],"sourcesContent":["/**\n * This file contains abstraction for use by third party developers.\n */\nimport { createAbstraction } from \"@webiny/feature/api\";\nimport type {\n Resolvers as IResolvers,\n TypeDefs as ITypeDefs,\n ResolverDecorators as IResolverDecorators\n} from \"~/types.js\";\nimport type { GraphQLSchemaBuilder } from \"~/features/GraphQLSchemaBuilder/abstractions.js\";\n\nexport interface IGraphQLSchema {\n typeDefs?: ITypeDefs;\n resolvers?: IResolvers<any>;\n resolverDecorators?: IResolverDecorators;\n}\n\n
|
|
1
|
+
{"version":3,"names":["createAbstraction","GraphQLSchemaFactory"],"sources":["abstractions.public.ts"],"sourcesContent":["/**\n * This file contains abstraction for use by third party developers.\n */\nimport { createAbstraction } from \"@webiny/feature/api\";\nimport type {\n Resolvers as IResolvers,\n TypeDefs as ITypeDefs,\n ResolverDecorators as IResolverDecorators\n} from \"~/types.js\";\nimport type { GraphQLSchemaBuilder } from \"~/features/GraphQLSchemaBuilder/abstractions.js\";\n\nexport interface IGraphQLSchema {\n typeDefs?: ITypeDefs;\n resolvers?: IResolvers<any>;\n resolverDecorators?: IResolverDecorators;\n}\n\n/** Define custom GraphQL schema extensions. */\nexport interface IGraphQLSchemaFactory {\n execute(builder: GraphQLSchemaBuilder.Interface): Promise<GraphQLSchemaBuilder.Interface>;\n}\n\n/** Define custom GraphQL schema extensions. */\nexport const GraphQLSchemaFactory =\n createAbstraction<IGraphQLSchemaFactory>(\"GraphQLSchemaFactory\");\n\nexport namespace GraphQLSchemaFactory {\n export type Interface = IGraphQLSchemaFactory;\n export type SchemaBuilder = GraphQLSchemaBuilder.Interface;\n export type Return = Promise<GraphQLSchemaBuilder.Interface>;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,iBAAiB,QAAQ,qBAAqB;;AAcvD;;AAKA;AACA,OAAO,MAAMC,oBAAoB,GAC7BD,iBAAiB,CAAwB,sBAAsB,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/handler-graphql",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.1.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -19,29 +19,29 @@
|
|
|
19
19
|
"@graphql-tools/resolvers-composition": "7.0.28",
|
|
20
20
|
"@graphql-tools/schema": "10.0.31",
|
|
21
21
|
"@graphql-tools/utils": "11.0.0",
|
|
22
|
-
"@webiny/api": "6.
|
|
22
|
+
"@webiny/api": "6.1.0-beta.0",
|
|
23
23
|
"@webiny/di": "0.2.3",
|
|
24
|
-
"@webiny/error": "6.
|
|
25
|
-
"@webiny/feature": "6.
|
|
26
|
-
"@webiny/handler": "6.
|
|
27
|
-
"@webiny/plugins": "6.
|
|
28
|
-
"@webiny/utils": "6.
|
|
24
|
+
"@webiny/error": "6.1.0-beta.0",
|
|
25
|
+
"@webiny/feature": "6.1.0-beta.0",
|
|
26
|
+
"@webiny/handler": "6.1.0-beta.0",
|
|
27
|
+
"@webiny/plugins": "6.1.0-beta.0",
|
|
28
|
+
"@webiny/utils": "6.1.0-beta.0",
|
|
29
29
|
"boolean": "3.2.0",
|
|
30
|
-
"graphql": "16.13.
|
|
30
|
+
"graphql": "16.13.2",
|
|
31
31
|
"graphql-scalars": "1.25.0",
|
|
32
32
|
"graphql-tag": "2.12.6",
|
|
33
|
-
"zod": "3.
|
|
33
|
+
"zod": "4.3.6"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@webiny/build-tools": "6.
|
|
37
|
-
"@webiny/handler-aws": "6.
|
|
36
|
+
"@webiny/build-tools": "6.1.0-beta.0",
|
|
37
|
+
"@webiny/handler-aws": "6.1.0-beta.0",
|
|
38
38
|
"rimraf": "6.1.3",
|
|
39
39
|
"typescript": "5.9.3",
|
|
40
|
-
"vitest": "4.
|
|
40
|
+
"vitest": "4.1.2"
|
|
41
41
|
},
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public",
|
|
44
44
|
"directory": "dist"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "a3bd3695c66c79238e380d7360d9731b5fcf9c87"
|
|
47
47
|
}
|
package/responses.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
export interface IMeta {
|
|
2
|
+
hasMoreItems: boolean;
|
|
3
|
+
totalCount: number;
|
|
4
|
+
cursor?: string | null;
|
|
5
|
+
}
|
|
1
6
|
export interface ErrorResponseParams {
|
|
2
7
|
message: string;
|
|
3
8
|
code?: string;
|
|
4
9
|
data?: any;
|
|
5
10
|
stack?: string | null;
|
|
6
11
|
}
|
|
12
|
+
/** GraphQL error response helper. */
|
|
7
13
|
export declare class ErrorResponse {
|
|
8
14
|
readonly data: null;
|
|
9
15
|
readonly error: {
|
|
@@ -14,9 +20,11 @@ export declare class ErrorResponse {
|
|
|
14
20
|
};
|
|
15
21
|
constructor(params: ErrorResponseParams);
|
|
16
22
|
}
|
|
23
|
+
/** GraphQL not-found response helper. */
|
|
17
24
|
export declare class NotFoundResponse extends ErrorResponse {
|
|
18
25
|
constructor(message: string);
|
|
19
26
|
}
|
|
27
|
+
/** GraphQL list error response helper. */
|
|
20
28
|
export declare class ListErrorResponse {
|
|
21
29
|
readonly data: null;
|
|
22
30
|
readonly meta: null;
|
|
@@ -28,12 +36,14 @@ export declare class ListErrorResponse {
|
|
|
28
36
|
};
|
|
29
37
|
constructor(params: ErrorResponseParams);
|
|
30
38
|
}
|
|
39
|
+
/** GraphQL response helper. */
|
|
31
40
|
export declare class Response<T = any> {
|
|
32
41
|
readonly data: T;
|
|
33
42
|
readonly error: null;
|
|
34
43
|
constructor(data: T);
|
|
35
44
|
}
|
|
36
|
-
|
|
45
|
+
/** GraphQL list response helper. */
|
|
46
|
+
export declare class ListResponse<T, M = IMeta> {
|
|
37
47
|
readonly data: Array<T>;
|
|
38
48
|
readonly meta: M;
|
|
39
49
|
readonly error: null;
|
package/responses.js
CHANGED
|
@@ -4,6 +4,8 @@ const defaultParams = {
|
|
|
4
4
|
data: null,
|
|
5
5
|
stack: null
|
|
6
6
|
};
|
|
7
|
+
|
|
8
|
+
/** GraphQL error response helper. */
|
|
7
9
|
export class ErrorResponse {
|
|
8
10
|
constructor(params) {
|
|
9
11
|
this.data = null;
|
|
@@ -22,6 +24,8 @@ export class ErrorResponse {
|
|
|
22
24
|
};
|
|
23
25
|
}
|
|
24
26
|
}
|
|
27
|
+
|
|
28
|
+
/** GraphQL not-found response helper. */
|
|
25
29
|
export class NotFoundResponse extends ErrorResponse {
|
|
26
30
|
constructor(message) {
|
|
27
31
|
super({
|
|
@@ -30,6 +34,8 @@ export class NotFoundResponse extends ErrorResponse {
|
|
|
30
34
|
});
|
|
31
35
|
}
|
|
32
36
|
}
|
|
37
|
+
|
|
38
|
+
/** GraphQL list error response helper. */
|
|
33
39
|
export class ListErrorResponse {
|
|
34
40
|
constructor(params) {
|
|
35
41
|
this.meta = null;
|
|
@@ -49,12 +55,16 @@ export class ListErrorResponse {
|
|
|
49
55
|
};
|
|
50
56
|
}
|
|
51
57
|
}
|
|
58
|
+
|
|
59
|
+
/** GraphQL response helper. */
|
|
52
60
|
export class Response {
|
|
53
61
|
constructor(data) {
|
|
54
62
|
this.data = data;
|
|
55
63
|
this.error = null;
|
|
56
64
|
}
|
|
57
65
|
}
|
|
66
|
+
|
|
67
|
+
/** GraphQL list response helper. */
|
|
58
68
|
export class ListResponse {
|
|
59
69
|
constructor(data, meta) {
|
|
60
70
|
this.data = Array.isArray(data) ? data : [];
|
package/responses.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defaultParams","code","message","data","stack","ErrorResponse","constructor","params","debug","process","env","DEBUG","error","NotFoundResponse","ListErrorResponse","meta","Response","ListResponse","Array","isArray"],"sources":["responses.ts"],"sourcesContent":["export interface ErrorResponseParams {\n message: string;\n code?: string;\n data?: any;\n stack?: string | null;\n}\n\nconst defaultParams: Required<ErrorResponseParams> = {\n code: \"\",\n message: \"\",\n data: null,\n stack: null\n};\n\nexport class ErrorResponse {\n public readonly data: null;\n public readonly error: {\n code: string;\n message: string;\n data: any;\n stack: string | null;\n };\n\n constructor(params: ErrorResponseParams) {\n this.data = null;\n\n const debug = process.env.DEBUG === \"true\";\n\n // Ensure `stack` is either `string` or `null`.\n let stack = defaultParams.stack;\n if (debug && params.stack) {\n stack = params.stack;\n }\n\n this.error = {\n code: params.code || defaultParams.code,\n message: params.message || defaultParams.message,\n data: params.data || defaultParams.data,\n stack: stack\n };\n }\n}\n\nexport class NotFoundResponse extends ErrorResponse {\n constructor(message: string) {\n super({\n code: \"NOT_FOUND\",\n message\n });\n }\n}\n\nexport class ListErrorResponse {\n public readonly data: null;\n public readonly meta: null;\n public readonly error: {\n code: string;\n message: string;\n data: any;\n stack: string | null;\n };\n\n constructor(params: ErrorResponseParams) {\n this.meta = null;\n this.data = null;\n\n const debug = process.env.DEBUG === \"true\";\n\n // Ensure `stack` is either `string` or `null`.\n let stack = defaultParams.stack;\n if (debug && params.stack) {\n stack = params.stack;\n }\n\n this.error = {\n code: params.code || defaultParams.code,\n message: params.message || defaultParams.message,\n data: params.data || defaultParams.data,\n stack: stack\n };\n }\n}\n\nexport class Response<T = any> {\n public readonly data: T;\n public readonly error: null;\n\n constructor(data: T) {\n this.data = data;\n this.error = null;\n }\n}\n\nexport class ListResponse<T, M> {\n public readonly data: Array<T>;\n public readonly meta: M;\n public readonly error: null;\n\n constructor(data: Array<T>, meta?: M) {\n this.data = Array.isArray(data) ? data : [];\n this.meta = meta || ({} as M);\n this.error = null;\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["defaultParams","code","message","data","stack","ErrorResponse","constructor","params","debug","process","env","DEBUG","error","NotFoundResponse","ListErrorResponse","meta","Response","ListResponse","Array","isArray"],"sources":["responses.ts"],"sourcesContent":["export interface IMeta {\n hasMoreItems: boolean;\n totalCount: number;\n cursor?: string | null;\n}\n\nexport interface ErrorResponseParams {\n message: string;\n code?: string;\n data?: any;\n stack?: string | null;\n}\n\nconst defaultParams: Required<ErrorResponseParams> = {\n code: \"\",\n message: \"\",\n data: null,\n stack: null\n};\n\n/** GraphQL error response helper. */\nexport class ErrorResponse {\n public readonly data: null;\n public readonly error: {\n code: string;\n message: string;\n data: any;\n stack: string | null;\n };\n\n constructor(params: ErrorResponseParams) {\n this.data = null;\n\n const debug = process.env.DEBUG === \"true\";\n\n // Ensure `stack` is either `string` or `null`.\n let stack = defaultParams.stack;\n if (debug && params.stack) {\n stack = params.stack;\n }\n\n this.error = {\n code: params.code || defaultParams.code,\n message: params.message || defaultParams.message,\n data: params.data || defaultParams.data,\n stack: stack\n };\n }\n}\n\n/** GraphQL not-found response helper. */\nexport class NotFoundResponse extends ErrorResponse {\n constructor(message: string) {\n super({\n code: \"NOT_FOUND\",\n message\n });\n }\n}\n\n/** GraphQL list error response helper. */\nexport class ListErrorResponse {\n public readonly data: null;\n public readonly meta: null;\n public readonly error: {\n code: string;\n message: string;\n data: any;\n stack: string | null;\n };\n\n constructor(params: ErrorResponseParams) {\n this.meta = null;\n this.data = null;\n\n const debug = process.env.DEBUG === \"true\";\n\n // Ensure `stack` is either `string` or `null`.\n let stack = defaultParams.stack;\n if (debug && params.stack) {\n stack = params.stack;\n }\n\n this.error = {\n code: params.code || defaultParams.code,\n message: params.message || defaultParams.message,\n data: params.data || defaultParams.data,\n stack: stack\n };\n }\n}\n\n/** GraphQL response helper. */\nexport class Response<T = any> {\n public readonly data: T;\n public readonly error: null;\n\n constructor(data: T) {\n this.data = data;\n this.error = null;\n }\n}\n\n/** GraphQL list response helper. */\nexport class ListResponse<T, M = IMeta> {\n public readonly data: Array<T>;\n public readonly meta: M;\n public readonly error: null;\n\n constructor(data: Array<T>, meta?: M) {\n this.data = Array.isArray(data) ? data : [];\n this.meta = meta || ({} as M);\n this.error = null;\n }\n}\n"],"mappings":"AAaA,MAAMA,aAA4C,GAAG;EACjDC,IAAI,EAAE,EAAE;EACRC,OAAO,EAAE,EAAE;EACXC,IAAI,EAAE,IAAI;EACVC,KAAK,EAAE;AACX,CAAC;;AAED;AACA,OAAO,MAAMC,aAAa,CAAC;EASvBC,WAAWA,CAACC,MAA2B,EAAE;IACrC,IAAI,CAACJ,IAAI,GAAG,IAAI;IAEhB,MAAMK,KAAK,GAAGC,OAAO,CAACC,GAAG,CAACC,KAAK,KAAK,MAAM;;IAE1C;IACA,IAAIP,KAAK,GAAGJ,aAAa,CAACI,KAAK;IAC/B,IAAII,KAAK,IAAID,MAAM,CAACH,KAAK,EAAE;MACvBA,KAAK,GAAGG,MAAM,CAACH,KAAK;IACxB;IAEA,IAAI,CAACQ,KAAK,GAAG;MACTX,IAAI,EAAEM,MAAM,CAACN,IAAI,IAAID,aAAa,CAACC,IAAI;MACvCC,OAAO,EAAEK,MAAM,CAACL,OAAO,IAAIF,aAAa,CAACE,OAAO;MAChDC,IAAI,EAAEI,MAAM,CAACJ,IAAI,IAAIH,aAAa,CAACG,IAAI;MACvCC,KAAK,EAAEA;IACX,CAAC;EACL;AACJ;;AAEA;AACA,OAAO,MAAMS,gBAAgB,SAASR,aAAa,CAAC;EAChDC,WAAWA,CAACJ,OAAe,EAAE;IACzB,KAAK,CAAC;MACFD,IAAI,EAAE,WAAW;MACjBC;IACJ,CAAC,CAAC;EACN;AACJ;;AAEA;AACA,OAAO,MAAMY,iBAAiB,CAAC;EAU3BR,WAAWA,CAACC,MAA2B,EAAE;IACrC,IAAI,CAACQ,IAAI,GAAG,IAAI;IAChB,IAAI,CAACZ,IAAI,GAAG,IAAI;IAEhB,MAAMK,KAAK,GAAGC,OAAO,CAACC,GAAG,CAACC,KAAK,KAAK,MAAM;;IAE1C;IACA,IAAIP,KAAK,GAAGJ,aAAa,CAACI,KAAK;IAC/B,IAAII,KAAK,IAAID,MAAM,CAACH,KAAK,EAAE;MACvBA,KAAK,GAAGG,MAAM,CAACH,KAAK;IACxB;IAEA,IAAI,CAACQ,KAAK,GAAG;MACTX,IAAI,EAAEM,MAAM,CAACN,IAAI,IAAID,aAAa,CAACC,IAAI;MACvCC,OAAO,EAAEK,MAAM,CAACL,OAAO,IAAIF,aAAa,CAACE,OAAO;MAChDC,IAAI,EAAEI,MAAM,CAACJ,IAAI,IAAIH,aAAa,CAACG,IAAI;MACvCC,KAAK,EAAEA;IACX,CAAC;EACL;AACJ;;AAEA;AACA,OAAO,MAAMY,QAAQ,CAAU;EAI3BV,WAAWA,CAACH,IAAO,EAAE;IACjB,IAAI,CAACA,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACS,KAAK,GAAG,IAAI;EACrB;AACJ;;AAEA;AACA,OAAO,MAAMK,YAAY,CAAe;EAKpCX,WAAWA,CAACH,IAAc,EAAEY,IAAQ,EAAE;IAClC,IAAI,CAACZ,IAAI,GAAGe,KAAK,CAACC,OAAO,CAAChB,IAAI,CAAC,GAAGA,IAAI,GAAG,EAAE;IAC3C,IAAI,CAACY,IAAI,GAAGA,IAAI,IAAK,CAAC,CAAO;IAC7B,IAAI,CAACH,KAAK,GAAG,IAAI;EACrB;AACJ","ignoreList":[]}
|