@kubb/plugin-oas 0.0.0-canary-20251103125929 → 0.0.0-canary-20251103132818

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/dist/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_SchemaGenerator = require('./SchemaGenerator-B8Reay1m.cjs');
2
+ const require_SchemaGenerator = require('./SchemaGenerator-RnBn6EoD.cjs');
3
3
  const require_generators = require('./generators-udGOxdUV.cjs');
4
4
  require('./getFooter-DPh4lxBH.cjs');
5
5
  const require_SchemaMapper = require('./SchemaMapper-BUV8vhg0.cjs');
6
- require('./getSchemas-CP_YS4_2.cjs');
6
+ require('./getSchemas-Cl0TZ4XY.cjs');
7
7
  const require_parseFromConfig = require('./parseFromConfig-EjsCZ0-8.cjs');
8
8
  let __kubb_core = require("@kubb/core");
9
9
  __kubb_core = require_chunk.__toESM(__kubb_core);
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { a as pLimit, i as buildSchema, n as buildOperation, r as buildOperations, t as SchemaGenerator } from "./SchemaGenerator-ChoBQWm5.js";
1
+ import { a as pLimit, i as buildSchema, n as buildOperation, r as buildOperations, t as SchemaGenerator } from "./SchemaGenerator-bd3P5CUh.js";
2
2
  import { t as jsonGenerator } from "./generators-CJDEf8Kn.js";
3
3
  import "./getFooter-CV73pVXj.js";
4
4
  import { n as schemaKeywords, t as isKeyword } from "./SchemaMapper-D30tqRoX.js";
5
- import "./getSchemas-CTi8zYew.js";
5
+ import "./getSchemas-32BHoMO-.js";
6
6
  import { t as parseFromConfig } from "./parseFromConfig-BkUoWC2U.js";
7
7
  import { BaseGenerator, createPlugin, getMode } from "@kubb/core";
8
8
  import transformers, { camelCase } from "@kubb/core/transformers";
package/dist/utils.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  const require_getFooter = require('./getFooter-DPh4lxBH.cjs');
3
- const require_getSchemas = require('./getSchemas-CP_YS4_2.cjs');
3
+ const require_getSchemas = require('./getSchemas-Cl0TZ4XY.cjs');
4
4
  const require_parseFromConfig = require('./parseFromConfig-EjsCZ0-8.cjs');
5
5
  let __kubb_core_transformers = require("@kubb/core/transformers");
6
6
  __kubb_core_transformers = require_chunk.__toESM(__kubb_core_transformers);
package/dist/utils.d.cts CHANGED
@@ -105,6 +105,10 @@ type GetSchemasProps = {
105
105
  contentType?: contentType;
106
106
  includes?: Mode[];
107
107
  };
108
+ /**
109
+ * Collect schemas from OpenAPI components (schemas, responses, requestBodies)
110
+ * and return them in dependency order.
111
+ */
108
112
  declare function getSchemas({
109
113
  oas,
110
114
  contentType,
package/dist/utils.d.ts CHANGED
@@ -105,6 +105,10 @@ type GetSchemasProps = {
105
105
  contentType?: contentType;
106
106
  includes?: Mode[];
107
107
  };
108
+ /**
109
+ * Collect schemas from OpenAPI components (schemas, responses, requestBodies)
110
+ * and return them in dependency order.
111
+ */
108
112
  declare function getSchemas({
109
113
  oas,
110
114
  contentType,
package/dist/utils.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { n as getBanner, t as getFooter } from "./getFooter-CV73pVXj.js";
2
- import { n as getSchemaFactory, t as getSchemas } from "./getSchemas-CTi8zYew.js";
2
+ import { n as getSchemaFactory, t as getSchemas } from "./getSchemas-32BHoMO-.js";
3
3
  import { t as parseFromConfig } from "./parseFromConfig-BkUoWC2U.js";
4
4
  import transformers, { camelCase, isValidVarName } from "@kubb/core/transformers";
5
5
  import { URLPath } from "@kubb/core/utils";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/plugin-oas",
3
- "version": "0.0.0-canary-20251103125929",
3
+ "version": "0.0.0-canary-20251103132818",
4
4
  "description": "OpenAPI Specification (OAS) plugin for Kubb, providing core functionality for parsing and processing OpenAPI/Swagger schemas for code generation.",
5
5
  "keywords": [
6
6
  "openapi",
@@ -83,8 +83,8 @@
83
83
  "@stoplight/yaml": "^4.3.0",
84
84
  "p-limit": "^7.2.0",
85
85
  "remeda": "^2.32.0",
86
- "@kubb/core": "0.0.0-canary-20251103125929",
87
- "@kubb/oas": "0.0.0-canary-20251103125929"
86
+ "@kubb/core": "0.0.0-canary-20251103132818",
87
+ "@kubb/oas": "0.0.0-canary-20251103132818"
88
88
  },
89
89
  "devDependencies": {},
90
90
  "peerDependencies": {
@@ -8,9 +8,82 @@ type GetSchemasProps = {
8
8
  includes?: Mode[]
9
9
  }
10
10
 
11
+ /**
12
+ * Collect all schema $ref dependencies recursively.
13
+ */
14
+ function collectRefs(schema: unknown, refs = new Set<string>()): Set<string> {
15
+ if (Array.isArray(schema)) {
16
+ for (const item of schema) {
17
+ collectRefs(item, refs)
18
+ }
19
+ return refs
20
+ }
21
+
22
+ if (schema && typeof schema === 'object') {
23
+ for (const [key, value] of Object.entries(schema)) {
24
+ if (key === '$ref' && typeof value === 'string') {
25
+ const match = value.match(/^#\/components\/schemas\/(.+)$/)
26
+ if (match) {
27
+ refs.add(match[1]!)
28
+ }
29
+ } else {
30
+ collectRefs(value, refs)
31
+ }
32
+ }
33
+ }
34
+
35
+ return refs
36
+ }
37
+
38
+ /**
39
+ * Sort schemas topologically so referenced schemas appear first.
40
+ */
41
+ function sortSchemas(schemas: Record<string, OasTypes.SchemaObject>): Record<string, OasTypes.SchemaObject> {
42
+ const deps = new Map<string, string[]>()
43
+
44
+ for (const [name, schema] of Object.entries(schemas)) {
45
+ deps.set(name, Array.from(collectRefs(schema)))
46
+ }
47
+
48
+ const sorted: string[] = []
49
+ const visited = new Set<string>()
50
+
51
+ function visit(name: string, stack = new Set<string>()) {
52
+ if (visited.has(name)) {
53
+ return
54
+ }
55
+ if (stack.has(name)) {
56
+ return
57
+ } // circular refs, ignore
58
+ stack.add(name)
59
+ const children = deps.get(name) || []
60
+ for (const child of children) {
61
+ if (deps.has(child)) {
62
+ visit(child, stack)
63
+ }
64
+ }
65
+ stack.delete(name)
66
+ visited.add(name)
67
+ sorted.push(name)
68
+ }
69
+
70
+ for (const name of Object.keys(schemas)) {
71
+ visit(name)
72
+ }
73
+
74
+ const sortedSchemas: Record<string, OasTypes.SchemaObject> = {}
75
+ for (const name of sorted) {
76
+ sortedSchemas[name] = schemas[name]!
77
+ }
78
+ return sortedSchemas
79
+ }
80
+
81
+ /**
82
+ * Collect schemas from OpenAPI components (schemas, responses, requestBodies)
83
+ * and return them in dependency order.
84
+ */
11
85
  export function getSchemas({ oas, contentType, includes = ['schemas', 'requestBodies', 'responses'] }: GetSchemasProps): Record<string, OasTypes.SchemaObject> {
12
86
  const components = oas.getDefinition().components
13
-
14
87
  let schemas: Record<string, OasTypes.SchemaObject> = {}
15
88
 
16
89
  if (includes.includes('schemas')) {
@@ -20,26 +93,27 @@ export function getSchemas({ oas, contentType, includes = ['schemas', 'requestBo
20
93
  }
21
94
  }
22
95
 
23
- const requestBodies = components?.requestBodies || {}
24
96
  if (includes.includes('responses')) {
25
97
  const responses = components?.responses || {}
26
-
27
- Object.entries(responses).forEach(([name, response]: [string, OasTypes.ResponseObject]) => {
28
- if (response.content && !schemas[name]) {
29
- const firstContentType = Object.keys(response.content)[0] || 'application/json'
30
- schemas[name] = response.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject
98
+ for (const [name, response] of Object.entries(responses)) {
99
+ const r = response as OasTypes.ResponseObject
100
+ if (r.content && !schemas[name]) {
101
+ const firstContentType = Object.keys(r.content)[0] || 'application/json'
102
+ schemas[name] = r.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject
31
103
  }
32
- })
104
+ }
33
105
  }
34
106
 
35
107
  if (includes.includes('requestBodies')) {
36
- Object.entries(requestBodies).forEach(([name, request]: [string, OasTypes.RequestBodyObject]) => {
37
- if (request.content && !schemas[name]) {
38
- const firstContentType = Object.keys(request.content)[0] || 'application/json'
39
- schemas[name] = request.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject
108
+ const requestBodies = components?.requestBodies || {}
109
+ for (const [name, request] of Object.entries(requestBodies)) {
110
+ const r = request as OasTypes.RequestBodyObject
111
+ if (r.content && !schemas[name]) {
112
+ const firstContentType = Object.keys(r.content)[0] || 'application/json'
113
+ schemas[name] = r.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject
40
114
  }
41
- })
115
+ }
42
116
  }
43
117
 
44
- return schemas
118
+ return sortSchemas(schemas)
45
119
  }
@@ -1,68 +0,0 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- let __kubb_oas = require("@kubb/oas");
3
- __kubb_oas = require_chunk.__toESM(__kubb_oas);
4
-
5
- //#region src/utils/getSchemaFactory.ts
6
- /**
7
- * Creates a factory function that generates a versioned OpenAPI schema result.
8
- *
9
- * The returned function accepts an optional schema object and produces a {@link SchemaResult} containing the dereferenced schema and the OpenAPI version ('3.0' or '3.1').
10
- *
11
- * @returns A function that takes an optional schema and returns a versioned schema result.
12
- */
13
- function getSchemaFactory(oas) {
14
- return (schema) => {
15
- const version = (0, __kubb_oas.isOpenApiV3_1Document)(oas.api) ? "3.1" : "3.0";
16
- return {
17
- schemaObject: oas.dereferenceWithRef(schema),
18
- version
19
- };
20
- };
21
- }
22
-
23
- //#endregion
24
- //#region src/utils/getSchemas.ts
25
- function getSchemas({ oas, contentType, includes = [
26
- "schemas",
27
- "requestBodies",
28
- "responses"
29
- ] }) {
30
- const components = oas.getDefinition().components;
31
- let schemas = {};
32
- if (includes.includes("schemas")) schemas = {
33
- ...schemas,
34
- ...components?.schemas || {}
35
- };
36
- const requestBodies = components?.requestBodies || {};
37
- if (includes.includes("responses")) {
38
- const responses = components?.responses || {};
39
- Object.entries(responses).forEach(([name, response]) => {
40
- if (response.content && !schemas[name]) {
41
- const firstContentType = Object.keys(response.content)[0] || "application/json";
42
- schemas[name] = response.content?.[contentType || firstContentType]?.schema;
43
- }
44
- });
45
- }
46
- if (includes.includes("requestBodies")) Object.entries(requestBodies).forEach(([name, request]) => {
47
- if (request.content && !schemas[name]) {
48
- const firstContentType = Object.keys(request.content)[0] || "application/json";
49
- schemas[name] = request.content?.[contentType || firstContentType]?.schema;
50
- }
51
- });
52
- return schemas;
53
- }
54
-
55
- //#endregion
56
- Object.defineProperty(exports, 'getSchemaFactory', {
57
- enumerable: true,
58
- get: function () {
59
- return getSchemaFactory;
60
- }
61
- });
62
- Object.defineProperty(exports, 'getSchemas', {
63
- enumerable: true,
64
- get: function () {
65
- return getSchemas;
66
- }
67
- });
68
- //# sourceMappingURL=getSchemas-CP_YS4_2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getSchemas-CP_YS4_2.cjs","names":["schemas: Record<string, OasTypes.SchemaObject>"],"sources":["../src/utils/getSchemaFactory.ts","../src/utils/getSchemas.ts"],"sourcesContent":["import type { Oas, OpenAPIV3, OpenAPIV3_1, SchemaObject } from '@kubb/oas'\nimport { isOpenApiV3_1Document } from '@kubb/oas'\n\n/**\n * Make it possible to narrow down the schema based on a specific version(3 or 3.1)\n */\ntype SchemaResult<TWithRef extends boolean = false> =\n | {\n schemaObject?: (TWithRef extends true ? OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject : OpenAPIV3.SchemaObject) & {\n nullable?: boolean\n 'x-nullable'?: boolean\n }\n version: '3.0'\n }\n | {\n schemaObject?: (TWithRef extends true ? OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject : OpenAPIV3_1.SchemaObject) & {\n nullable?: boolean\n 'x-nullable'?: boolean\n }\n version: '3.1'\n }\n\n/**\n * Creates a factory function that generates a versioned OpenAPI schema result.\n *\n * The returned function accepts an optional schema object and produces a {@link SchemaResult} containing the dereferenced schema and the OpenAPI version ('3.0' or '3.1').\n *\n * @returns A function that takes an optional schema and returns a versioned schema result.\n */\nexport function getSchemaFactory<TWithRef extends boolean = false>(oas: Oas): (schema?: SchemaObject) => SchemaResult<TWithRef> {\n return (schema?: SchemaObject) => {\n const version = isOpenApiV3_1Document(oas.api) ? '3.1' : '3.0'\n\n return {\n schemaObject: oas.dereferenceWithRef(schema),\n version,\n } as SchemaResult<TWithRef>\n }\n}\n","import type { contentType, Oas, OasTypes } from '@kubb/oas'\n\ntype Mode = 'schemas' | 'responses' | 'requestBodies'\n\ntype GetSchemasProps = {\n oas: Oas\n contentType?: contentType\n includes?: Mode[]\n}\n\nexport function getSchemas({ oas, contentType, includes = ['schemas', 'requestBodies', 'responses'] }: GetSchemasProps): Record<string, OasTypes.SchemaObject> {\n const components = oas.getDefinition().components\n\n let schemas: Record<string, OasTypes.SchemaObject> = {}\n\n if (includes.includes('schemas')) {\n schemas = {\n ...schemas,\n ...((components?.schemas as Record<string, OasTypes.SchemaObject>) || {}),\n }\n }\n\n const requestBodies = components?.requestBodies || {}\n if (includes.includes('responses')) {\n const responses = components?.responses || {}\n\n Object.entries(responses).forEach(([name, response]: [string, OasTypes.ResponseObject]) => {\n if (response.content && !schemas[name]) {\n const firstContentType = Object.keys(response.content)[0] || 'application/json'\n schemas[name] = response.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject\n }\n })\n }\n\n if (includes.includes('requestBodies')) {\n Object.entries(requestBodies).forEach(([name, request]: [string, OasTypes.RequestBodyObject]) => {\n if (request.content && !schemas[name]) {\n const firstContentType = Object.keys(request.content)[0] || 'application/json'\n schemas[name] = request.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject\n }\n })\n }\n\n return schemas\n}\n"],"mappings":";;;;;;;;;;;;AA6BA,SAAgB,iBAAmD,KAA6D;AAC9H,SAAQ,WAA0B;EAChC,MAAM,gDAAgC,IAAI,IAAI,GAAG,QAAQ;AAEzD,SAAO;GACL,cAAc,IAAI,mBAAmB,OAAO;GAC5C;GACD;;;;;;AC1BL,SAAgB,WAAW,EAAE,KAAK,aAAa,WAAW;CAAC;CAAW;CAAiB;CAAY,IAA4D;CAC7J,MAAM,aAAa,IAAI,eAAe,CAAC;CAEvC,IAAIA,UAAiD,EAAE;AAEvD,KAAI,SAAS,SAAS,UAAU,CAC9B,WAAU;EACR,GAAG;EACH,GAAK,YAAY,WAAqD,EAAE;EACzE;CAGH,MAAM,gBAAgB,YAAY,iBAAiB,EAAE;AACrD,KAAI,SAAS,SAAS,YAAY,EAAE;EAClC,MAAM,YAAY,YAAY,aAAa,EAAE;AAE7C,SAAO,QAAQ,UAAU,CAAC,SAAS,CAAC,MAAM,cAAiD;AACzF,OAAI,SAAS,WAAW,CAAC,QAAQ,OAAO;IACtC,MAAM,mBAAmB,OAAO,KAAK,SAAS,QAAQ,CAAC,MAAM;AAC7D,YAAQ,QAAQ,SAAS,UAAU,eAAe,mBAAmB;;IAEvE;;AAGJ,KAAI,SAAS,SAAS,gBAAgB,CACpC,QAAO,QAAQ,cAAc,CAAC,SAAS,CAAC,MAAM,aAAmD;AAC/F,MAAI,QAAQ,WAAW,CAAC,QAAQ,OAAO;GACrC,MAAM,mBAAmB,OAAO,KAAK,QAAQ,QAAQ,CAAC,MAAM;AAC5D,WAAQ,QAAQ,QAAQ,UAAU,eAAe,mBAAmB;;GAEtE;AAGJ,QAAO"}
@@ -1,55 +0,0 @@
1
- import { isOpenApiV3_1Document } from "@kubb/oas";
2
-
3
- //#region src/utils/getSchemaFactory.ts
4
- /**
5
- * Creates a factory function that generates a versioned OpenAPI schema result.
6
- *
7
- * The returned function accepts an optional schema object and produces a {@link SchemaResult} containing the dereferenced schema and the OpenAPI version ('3.0' or '3.1').
8
- *
9
- * @returns A function that takes an optional schema and returns a versioned schema result.
10
- */
11
- function getSchemaFactory(oas) {
12
- return (schema) => {
13
- const version = isOpenApiV3_1Document(oas.api) ? "3.1" : "3.0";
14
- return {
15
- schemaObject: oas.dereferenceWithRef(schema),
16
- version
17
- };
18
- };
19
- }
20
-
21
- //#endregion
22
- //#region src/utils/getSchemas.ts
23
- function getSchemas({ oas, contentType, includes = [
24
- "schemas",
25
- "requestBodies",
26
- "responses"
27
- ] }) {
28
- const components = oas.getDefinition().components;
29
- let schemas = {};
30
- if (includes.includes("schemas")) schemas = {
31
- ...schemas,
32
- ...components?.schemas || {}
33
- };
34
- const requestBodies = components?.requestBodies || {};
35
- if (includes.includes("responses")) {
36
- const responses = components?.responses || {};
37
- Object.entries(responses).forEach(([name, response]) => {
38
- if (response.content && !schemas[name]) {
39
- const firstContentType = Object.keys(response.content)[0] || "application/json";
40
- schemas[name] = response.content?.[contentType || firstContentType]?.schema;
41
- }
42
- });
43
- }
44
- if (includes.includes("requestBodies")) Object.entries(requestBodies).forEach(([name, request]) => {
45
- if (request.content && !schemas[name]) {
46
- const firstContentType = Object.keys(request.content)[0] || "application/json";
47
- schemas[name] = request.content?.[contentType || firstContentType]?.schema;
48
- }
49
- });
50
- return schemas;
51
- }
52
-
53
- //#endregion
54
- export { getSchemaFactory as n, getSchemas as t };
55
- //# sourceMappingURL=getSchemas-CTi8zYew.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getSchemas-CTi8zYew.js","names":["schemas: Record<string, OasTypes.SchemaObject>"],"sources":["../src/utils/getSchemaFactory.ts","../src/utils/getSchemas.ts"],"sourcesContent":["import type { Oas, OpenAPIV3, OpenAPIV3_1, SchemaObject } from '@kubb/oas'\nimport { isOpenApiV3_1Document } from '@kubb/oas'\n\n/**\n * Make it possible to narrow down the schema based on a specific version(3 or 3.1)\n */\ntype SchemaResult<TWithRef extends boolean = false> =\n | {\n schemaObject?: (TWithRef extends true ? OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject : OpenAPIV3.SchemaObject) & {\n nullable?: boolean\n 'x-nullable'?: boolean\n }\n version: '3.0'\n }\n | {\n schemaObject?: (TWithRef extends true ? OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject : OpenAPIV3_1.SchemaObject) & {\n nullable?: boolean\n 'x-nullable'?: boolean\n }\n version: '3.1'\n }\n\n/**\n * Creates a factory function that generates a versioned OpenAPI schema result.\n *\n * The returned function accepts an optional schema object and produces a {@link SchemaResult} containing the dereferenced schema and the OpenAPI version ('3.0' or '3.1').\n *\n * @returns A function that takes an optional schema and returns a versioned schema result.\n */\nexport function getSchemaFactory<TWithRef extends boolean = false>(oas: Oas): (schema?: SchemaObject) => SchemaResult<TWithRef> {\n return (schema?: SchemaObject) => {\n const version = isOpenApiV3_1Document(oas.api) ? '3.1' : '3.0'\n\n return {\n schemaObject: oas.dereferenceWithRef(schema),\n version,\n } as SchemaResult<TWithRef>\n }\n}\n","import type { contentType, Oas, OasTypes } from '@kubb/oas'\n\ntype Mode = 'schemas' | 'responses' | 'requestBodies'\n\ntype GetSchemasProps = {\n oas: Oas\n contentType?: contentType\n includes?: Mode[]\n}\n\nexport function getSchemas({ oas, contentType, includes = ['schemas', 'requestBodies', 'responses'] }: GetSchemasProps): Record<string, OasTypes.SchemaObject> {\n const components = oas.getDefinition().components\n\n let schemas: Record<string, OasTypes.SchemaObject> = {}\n\n if (includes.includes('schemas')) {\n schemas = {\n ...schemas,\n ...((components?.schemas as Record<string, OasTypes.SchemaObject>) || {}),\n }\n }\n\n const requestBodies = components?.requestBodies || {}\n if (includes.includes('responses')) {\n const responses = components?.responses || {}\n\n Object.entries(responses).forEach(([name, response]: [string, OasTypes.ResponseObject]) => {\n if (response.content && !schemas[name]) {\n const firstContentType = Object.keys(response.content)[0] || 'application/json'\n schemas[name] = response.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject\n }\n })\n }\n\n if (includes.includes('requestBodies')) {\n Object.entries(requestBodies).forEach(([name, request]: [string, OasTypes.RequestBodyObject]) => {\n if (request.content && !schemas[name]) {\n const firstContentType = Object.keys(request.content)[0] || 'application/json'\n schemas[name] = request.content?.[contentType || firstContentType]?.schema as OasTypes.SchemaObject\n }\n })\n }\n\n return schemas\n}\n"],"mappings":";;;;;;;;;;AA6BA,SAAgB,iBAAmD,KAA6D;AAC9H,SAAQ,WAA0B;EAChC,MAAM,UAAU,sBAAsB,IAAI,IAAI,GAAG,QAAQ;AAEzD,SAAO;GACL,cAAc,IAAI,mBAAmB,OAAO;GAC5C;GACD;;;;;;AC1BL,SAAgB,WAAW,EAAE,KAAK,aAAa,WAAW;CAAC;CAAW;CAAiB;CAAY,IAA4D;CAC7J,MAAM,aAAa,IAAI,eAAe,CAAC;CAEvC,IAAIA,UAAiD,EAAE;AAEvD,KAAI,SAAS,SAAS,UAAU,CAC9B,WAAU;EACR,GAAG;EACH,GAAK,YAAY,WAAqD,EAAE;EACzE;CAGH,MAAM,gBAAgB,YAAY,iBAAiB,EAAE;AACrD,KAAI,SAAS,SAAS,YAAY,EAAE;EAClC,MAAM,YAAY,YAAY,aAAa,EAAE;AAE7C,SAAO,QAAQ,UAAU,CAAC,SAAS,CAAC,MAAM,cAAiD;AACzF,OAAI,SAAS,WAAW,CAAC,QAAQ,OAAO;IACtC,MAAM,mBAAmB,OAAO,KAAK,SAAS,QAAQ,CAAC,MAAM;AAC7D,YAAQ,QAAQ,SAAS,UAAU,eAAe,mBAAmB;;IAEvE;;AAGJ,KAAI,SAAS,SAAS,gBAAgB,CACpC,QAAO,QAAQ,cAAc,CAAC,SAAS,CAAC,MAAM,aAAmD;AAC/F,MAAI,QAAQ,WAAW,CAAC,QAAQ,OAAO;GACrC,MAAM,mBAAmB,OAAO,KAAK,QAAQ,QAAQ,CAAC,MAAM;AAC5D,WAAQ,QAAQ,QAAQ,UAAU,eAAe,mBAAmB;;GAEtE;AAGJ,QAAO"}