@scalar/oas-utils 0.11.1 → 0.12.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.
Files changed (126) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/helpers/index.d.ts +0 -82
  3. package/dist/helpers/index.d.ts.map +1 -1
  4. package/dist/helpers/index.js +0 -78
  5. package/dist/migrations/migrate-to-indexdb.d.ts.map +1 -1
  6. package/dist/migrations/migrate-to-indexdb.js +1 -1
  7. package/dist/migrations/v-2.5.0/types.generated.d.ts +428 -34
  8. package/dist/migrations/v-2.5.0/types.generated.d.ts.map +1 -1
  9. package/package.json +7 -61
  10. package/dist/entities/cookie/cookie.d.ts +0 -15
  11. package/dist/entities/cookie/cookie.d.ts.map +0 -1
  12. package/dist/entities/cookie/cookie.js +0 -12
  13. package/dist/entities/cookie/index.d.ts +0 -2
  14. package/dist/entities/cookie/index.d.ts.map +0 -1
  15. package/dist/entities/cookie/index.js +0 -1
  16. package/dist/entities/environment/environment.d.ts +0 -12
  17. package/dist/entities/environment/environment.d.ts.map +0 -1
  18. package/dist/entities/environment/environment.js +0 -8
  19. package/dist/entities/environment/index.d.ts +0 -2
  20. package/dist/entities/environment/index.d.ts.map +0 -1
  21. package/dist/entities/environment/index.js +0 -1
  22. package/dist/entities/hotkeys/hotkeys.d.ts +0 -15
  23. package/dist/entities/hotkeys/hotkeys.d.ts.map +0 -1
  24. package/dist/entities/hotkeys/hotkeys.js +0 -118
  25. package/dist/entities/hotkeys/index.d.ts +0 -2
  26. package/dist/entities/hotkeys/index.d.ts.map +0 -1
  27. package/dist/entities/hotkeys/index.js +0 -1
  28. package/dist/entities/shared/index.d.ts +0 -2
  29. package/dist/entities/shared/index.d.ts.map +0 -1
  30. package/dist/entities/shared/index.js +0 -1
  31. package/dist/entities/shared/utility.d.ts +0 -5
  32. package/dist/entities/shared/utility.d.ts.map +0 -1
  33. package/dist/entities/shared/utility.js +0 -9
  34. package/dist/entities/spec/collection.d.ts +0 -133
  35. package/dist/entities/spec/collection.d.ts.map +0 -1
  36. package/dist/entities/spec/collection.js +0 -95
  37. package/dist/entities/spec/index.d.ts +0 -12
  38. package/dist/entities/spec/index.d.ts.map +0 -1
  39. package/dist/entities/spec/index.js +0 -10
  40. package/dist/entities/spec/operation.d.ts +0 -99
  41. package/dist/entities/spec/operation.d.ts.map +0 -1
  42. package/dist/entities/spec/operation.js +0 -6
  43. package/dist/entities/spec/parameters.d.ts +0 -44
  44. package/dist/entities/spec/parameters.d.ts.map +0 -1
  45. package/dist/entities/spec/parameters.js +0 -41
  46. package/dist/entities/spec/request-examples.d.ts +0 -380
  47. package/dist/entities/spec/request-examples.d.ts.map +0 -1
  48. package/dist/entities/spec/request-examples.js +0 -449
  49. package/dist/entities/spec/requests.d.ts +0 -137
  50. package/dist/entities/spec/requests.d.ts.map +0 -1
  51. package/dist/entities/spec/requests.js +0 -123
  52. package/dist/entities/spec/server.d.ts +0 -15
  53. package/dist/entities/spec/server.d.ts.map +0 -1
  54. package/dist/entities/spec/server.js +0 -67
  55. package/dist/entities/spec/spec-objects.d.ts +0 -171
  56. package/dist/entities/spec/spec-objects.d.ts.map +0 -1
  57. package/dist/entities/spec/spec-objects.js +0 -134
  58. package/dist/entities/spec/x-scalar-environments.d.ts +0 -22
  59. package/dist/entities/spec/x-scalar-environments.d.ts.map +0 -1
  60. package/dist/entities/spec/x-scalar-environments.js +0 -22
  61. package/dist/entities/spec/x-scalar-secrets.d.ts +0 -6
  62. package/dist/entities/spec/x-scalar-secrets.d.ts.map +0 -1
  63. package/dist/entities/spec/x-scalar-secrets.js +0 -8
  64. package/dist/entities/workspace/index.d.ts +0 -2
  65. package/dist/entities/workspace/index.d.ts.map +0 -1
  66. package/dist/entities/workspace/index.js +0 -1
  67. package/dist/entities/workspace/workspace.d.ts +0 -236
  68. package/dist/entities/workspace/workspace.d.ts.map +0 -1
  69. package/dist/entities/workspace/workspace.js +0 -49
  70. package/dist/helpers/fetch-document.d.ts +0 -7
  71. package/dist/helpers/fetch-document.d.ts.map +0 -1
  72. package/dist/helpers/fetch-document.js +0 -32
  73. package/dist/helpers/fetch-with-proxy-fallback.d.ts +0 -15
  74. package/dist/helpers/fetch-with-proxy-fallback.d.ts.map +0 -1
  75. package/dist/helpers/fetch-with-proxy-fallback.js +0 -29
  76. package/dist/helpers/normalize-mime-type-object.d.ts +0 -8
  77. package/dist/helpers/normalize-mime-type-object.d.ts.map +0 -1
  78. package/dist/helpers/normalize-mime-type-object.js +0 -21
  79. package/dist/helpers/normalize-mime-type.d.ts +0 -10
  80. package/dist/helpers/normalize-mime-type.d.ts.map +0 -1
  81. package/dist/helpers/normalize-mime-type.js +0 -12
  82. package/dist/helpers/operation-stability.d.ts +0 -19
  83. package/dist/helpers/operation-stability.d.ts.map +0 -1
  84. package/dist/helpers/operation-stability.js +0 -24
  85. package/dist/helpers/schema-model.d.ts +0 -5
  86. package/dist/helpers/schema-model.d.ts.map +0 -1
  87. package/dist/helpers/schema-model.js +0 -14
  88. package/dist/helpers/security/get-schemes.d.ts +0 -97
  89. package/dist/helpers/security/get-schemes.d.ts.map +0 -1
  90. package/dist/helpers/security/get-schemes.js +0 -8
  91. package/dist/helpers/security/has-token.d.ts +0 -4
  92. package/dist/helpers/security/has-token.d.ts.map +0 -1
  93. package/dist/helpers/security/has-token.js +0 -19
  94. package/dist/helpers/security/index.d.ts +0 -3
  95. package/dist/helpers/security/index.d.ts.map +0 -1
  96. package/dist/helpers/security/index.js +0 -2
  97. package/dist/helpers/servers.d.ts +0 -24
  98. package/dist/helpers/servers.d.ts.map +0 -1
  99. package/dist/helpers/servers.js +0 -146
  100. package/dist/helpers/should-ignore-entity.d.ts +0 -8
  101. package/dist/helpers/should-ignore-entity.d.ts.map +0 -1
  102. package/dist/helpers/should-ignore-entity.js +0 -4
  103. package/dist/migrations/generate-types.d.ts +0 -2
  104. package/dist/migrations/generate-types.d.ts.map +0 -1
  105. package/dist/migrations/generate-types.js +0 -53
  106. package/dist/spec-getters/get-example-from-schema.d.ts +0 -36
  107. package/dist/spec-getters/get-example-from-schema.d.ts.map +0 -1
  108. package/dist/spec-getters/get-example-from-schema.js +0 -521
  109. package/dist/spec-getters/get-parameters-from-operation.d.ts +0 -17
  110. package/dist/spec-getters/get-parameters-from-operation.d.ts.map +0 -1
  111. package/dist/spec-getters/get-parameters-from-operation.js +0 -40
  112. package/dist/spec-getters/get-request-body-from-operation.d.ts +0 -14
  113. package/dist/spec-getters/get-request-body-from-operation.d.ts.map +0 -1
  114. package/dist/spec-getters/get-request-body-from-operation.js +0 -176
  115. package/dist/spec-getters/get-server-variable-examples.d.ts +0 -4
  116. package/dist/spec-getters/get-server-variable-examples.d.ts.map +0 -1
  117. package/dist/spec-getters/get-server-variable-examples.js +0 -12
  118. package/dist/spec-getters/index.d.ts +0 -5
  119. package/dist/spec-getters/index.d.ts.map +0 -1
  120. package/dist/spec-getters/index.js +0 -4
  121. package/dist/transforms/import-spec.d.ts +0 -64
  122. package/dist/transforms/import-spec.d.ts.map +0 -1
  123. package/dist/transforms/import-spec.js +0 -397
  124. package/dist/transforms/index.d.ts +0 -2
  125. package/dist/transforms/index.d.ts.map +0 -1
  126. package/dist/transforms/index.js +0 -1
@@ -1,19 +0,0 @@
1
- /** Pass in a security scheme and it will return true if it has a token or value depending on the scheme type */
2
- export const hasToken = (scheme) => {
3
- // ApiKey
4
- if (scheme.type === 'apiKey') {
5
- return Boolean(scheme.value);
6
- }
7
- // Http
8
- if (scheme.type === 'http') {
9
- return Boolean((scheme.scheme === 'bearer' && scheme.token) || (scheme.scheme === 'basic' && scheme.username && scheme.password));
10
- }
11
- // OAuth2 just check for A token
12
- if (scheme.type === 'oauth2') {
13
- return Boolean(scheme.flows.authorizationCode?.token ||
14
- scheme.flows.clientCredentials?.token ||
15
- scheme.flows.password?.token ||
16
- scheme.flows.implicit?.token);
17
- }
18
- return false;
19
- };
@@ -1,3 +0,0 @@
1
- export { getSchemes } from './get-schemes.js';
2
- export { hasToken } from './has-token.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/security/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
@@ -1,2 +0,0 @@
1
- export { getSchemes } from './get-schemes.js';
2
- export { hasToken } from './has-token.js';
@@ -1,24 +0,0 @@
1
- import type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
- import { type Server } from '../entities/spec/server.js';
3
- /**
4
- * Server processing options containing base URLs for resolving relative server URLs.
5
- */
6
- type ServerProcessingOptions = {
7
- baseServerURL?: string;
8
- documentUrl?: string;
9
- };
10
- /**
11
- * Retrieves and processes servers from an OpenAPI document.
12
- *
13
- * This function handles several scenarios:
14
- * 1. No servers provided - creates a default server from document URL or fallback
15
- * 2. Invalid server configurations - filters them out with warnings
16
- * 3. Relative URLs - resolves them to absolute URLs using available base URLs
17
- *
18
- * @param servers - Array of OpenAPI server objects from the document
19
- * @param options - Configuration options for server processing
20
- * @returns Array of validated Server entities
21
- */
22
- export declare function getServersFromDocument(servers: ServerObject[] | undefined, options?: ServerProcessingOptions): Server[];
23
- export {};
24
- //# sourceMappingURL=servers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/helpers/servers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAEhG,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,wBAAwB,CAAA;AAElE;;GAEG;AACH,KAAK,uBAAuB,GAAG;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EACnC,OAAO,GAAE,uBAA4B,GACpC,MAAM,EAAE,CAsBV"}
@@ -1,146 +0,0 @@
1
- import { isDefined } from '@scalar/helpers/array/is-defined';
2
- import { combineUrlAndPath } from '@scalar/helpers/url/merge-urls';
3
- import { serverSchema } from '../entities/spec/server.js';
4
- /**
5
- * Retrieves and processes servers from an OpenAPI document.
6
- *
7
- * This function handles several scenarios:
8
- * 1. No servers provided - creates a default server from document URL or fallback
9
- * 2. Invalid server configurations - filters them out with warnings
10
- * 3. Relative URLs - resolves them to absolute URLs using available base URLs
11
- *
12
- * @param servers - Array of OpenAPI server objects from the document
13
- * @param options - Configuration options for server processing
14
- * @returns Array of validated Server entities
15
- */
16
- export function getServersFromDocument(servers, options = {}) {
17
- // Handle case where no servers are provided
18
- if (!servers?.length) {
19
- const fallbackServer = createFallbackServer(options);
20
- return fallbackServer ? [fallbackServer] : [];
21
- }
22
- // Handle invalid server array
23
- if (!Array.isArray(servers)) {
24
- return [];
25
- }
26
- // Process each server and filter out invalid ones
27
- const validServers = servers.map((server) => processServerObject(server, options)).filter(isDefined);
28
- // If all servers were invalid, provide a fallback
29
- if (validServers.length === 0) {
30
- const fallbackServer = createFallbackServer(options);
31
- return fallbackServer ? [fallbackServer] : [];
32
- }
33
- return validServers;
34
- }
35
- /**
36
- * Extracts the base URL (protocol + hostname) from a document URL.
37
- * Returns undefined if the URL is invalid.
38
- */
39
- function extractBaseUrlFromDocumentUrl(documentUrl) {
40
- try {
41
- const url = new URL(documentUrl);
42
- const port = url.port ? `:${url.port}` : '';
43
- return `${url.protocol}//${url.hostname}${port}`;
44
- }
45
- catch {
46
- return undefined;
47
- }
48
- }
49
- /**
50
- * Gets the fallback URL from window.location.origin if available.
51
- */
52
- function getFallbackUrl() {
53
- if (typeof window === 'undefined' || typeof window?.location?.origin !== 'string') {
54
- return undefined;
55
- }
56
- return window.location.origin;
57
- }
58
- /**
59
- * Creates a server object from a URL string, with error handling.
60
- */
61
- function createServerFromUrl(url, context) {
62
- try {
63
- return serverSchema.parse({ url });
64
- }
65
- catch {
66
- console.warn(`Failed to create server from ${context}:`, url);
67
- return undefined;
68
- }
69
- }
70
- /**
71
- * Creates a default server using the document URL as the base.
72
- */
73
- function createDefaultServerFromDocumentUrl(documentUrl) {
74
- const baseUrl = extractBaseUrlFromDocumentUrl(documentUrl);
75
- if (!baseUrl) {
76
- return undefined;
77
- }
78
- return createServerFromUrl(baseUrl, 'document URL');
79
- }
80
- /**
81
- * Creates a default server using the fallback URL (window.location.origin).
82
- */
83
- function createDefaultServerFromFallback() {
84
- const fallbackUrl = getFallbackUrl();
85
- if (!fallbackUrl) {
86
- return undefined;
87
- }
88
- return createServerFromUrl(fallbackUrl, 'fallback URL');
89
- }
90
- /**
91
- * Resolves a relative server URL to an absolute URL using available base URLs.
92
- * Uses a priority system: baseServerURL > documentUrl > fallbackUrl.
93
- */
94
- function resolveRelativeServerUrl(serverUrl, options) {
95
- const { baseServerURL, documentUrl } = options;
96
- // Priority 1: Use provided base server URL
97
- if (baseServerURL) {
98
- return combineUrlAndPath(baseServerURL, serverUrl);
99
- }
100
- // Priority 2: Extract base URL from document URL
101
- if (documentUrl) {
102
- const baseUrl = extractBaseUrlFromDocumentUrl(documentUrl);
103
- if (baseUrl) {
104
- return combineUrlAndPath(baseUrl, serverUrl);
105
- }
106
- }
107
- // Priority 3: Use fallback URL (window.location.origin)
108
- const fallbackUrl = getFallbackUrl();
109
- if (fallbackUrl) {
110
- return combineUrlAndPath(fallbackUrl, serverUrl);
111
- }
112
- // If no base URL is available, return the original URL
113
- return serverUrl;
114
- }
115
- /**
116
- * Processes a single server object, handling validation and URL resolution.
117
- */
118
- function processServerObject(server, options) {
119
- try {
120
- const parsedServer = serverSchema.parse(server);
121
- // Resolve relative URLs to absolute URLs
122
- if (parsedServer.url?.startsWith('/')) {
123
- parsedServer.url = resolveRelativeServerUrl(parsedServer.url, options);
124
- }
125
- return parsedServer;
126
- }
127
- catch (error) {
128
- console.warn('Invalid server configuration:', server, 'Error:', error);
129
- return undefined;
130
- }
131
- }
132
- /**
133
- * Creates a fallback server when no valid servers are available.
134
- * Uses document URL first, then fallback URL.
135
- */
136
- function createFallbackServer(options) {
137
- // Priority 1: Try to create default server from document URL
138
- if (options.documentUrl) {
139
- const defaultServer = createDefaultServerFromDocumentUrl(options.documentUrl);
140
- if (defaultServer) {
141
- return defaultServer;
142
- }
143
- }
144
- // Priority 2: Try to create default server from fallback URL
145
- return createDefaultServerFromFallback();
146
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Check if an entity should be ignored
3
- */
4
- export declare const shouldIgnoreEntity: (data: {
5
- "x-internal"?: boolean;
6
- "x-scalar-ignore"?: boolean;
7
- }) => boolean;
8
- //# sourceMappingURL=should-ignore-entity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"should-ignore-entity.d.ts","sourceRoot":"","sources":["../../src/helpers/should-ignore-entity.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,YAC3B,CAAA"}
@@ -1,4 +0,0 @@
1
- /**
2
- * Check if an entity should be ignored
3
- */
4
- export const shouldIgnoreEntity = (data) => data?.['x-internal'] === true || data?.['x-scalar-ignore'] === true;
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=generate-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-types.d.ts","sourceRoot":"","sources":["../../src/migrations/generate-types.ts"],"names":[],"mappings":""}
@@ -1,53 +0,0 @@
1
- import { writeFile } from 'node:fs';
2
- import { securitySchemeSchema } from '@scalar/types/entities';
3
- import { createTypeAlias, printNode, zodToTs } from 'zod-to-ts';
4
- import { cookieSchema } from '../entities/cookie/cookie.js';
5
- import { environmentSchema } from '../entities/environment/environment.js';
6
- import { collectionSchema } from '../entities/spec/collection.js';
7
- import { requestExampleSchema } from '../entities/spec/request-examples.js';
8
- import { requestSchema } from '../entities/spec/requests.js';
9
- import { serverSchema } from '../entities/spec/server.js';
10
- import { tagSchema } from '../entities/spec/spec-objects.js';
11
- import { workspaceSchema } from '../entities/workspace/workspace.js';
12
- import { DATA_VERSION } from '../migrations/data-version.js';
13
- console.warn('Make sure the generate types file is updated for the current version');
14
- console.info('Generating...');
15
- const entities = [
16
- { identifier: 'Collection', schema: collectionSchema },
17
- { identifier: 'Cookie', schema: cookieSchema },
18
- { identifier: 'Environment', schema: environmentSchema },
19
- { identifier: 'Tag', schema: tagSchema },
20
- { identifier: 'RequestExample', schema: requestExampleSchema },
21
- { identifier: 'Request', schema: requestSchema },
22
- { identifier: 'SecurityScheme', schema: securitySchemeSchema },
23
- { identifier: 'Server', schema: serverSchema },
24
- { identifier: 'Workspace', schema: workspaceSchema },
25
- ];
26
- /**
27
- * Export the types in a namespace
28
- * TODO:
29
- * - go back to typescript compiler api and print pretty types as these ones are optional
30
- */
31
- let typeString = entities.reduce((prev, { identifier, schema }) => {
32
- const { node } = zodToTs(schema, identifier);
33
- const typeAlias = createTypeAlias(node, identifier);
34
- const nodeString = ' export ' + printNode(typeAlias) + '\n\n';
35
- return prev + nodeString;
36
- }, `export namespace v_${DATA_VERSION.replace(/\./g, '_')} {\n`);
37
- // Add all types data object
38
- typeString += `
39
- export type DataRecord = {
40
- collections: Record<string, Collection>
41
- cookies: Record<string, Cookie>
42
- environments: Record<string, Environment>
43
- requestExamples: Record<string, RequestExample>
44
- requests: Record<string, Request>
45
- securitySchemes: Record<string, SecurityScheme>
46
- servers: Record<string, Server>
47
- tags: Record<string, Tag>
48
- workspaces: Record<string, Workspace>
49
- }
50
- }
51
- `;
52
- // Write to file
53
- writeFile(import.meta.dirname + `/v-${DATA_VERSION}/types.generated.ts`, typeString, { flag: 'w' }, (err) => err ? console.error(err) : console.log('Generation complete!'));
@@ -1,36 +0,0 @@
1
- import type { OpenAPIV3_1 } from '@scalar/openapi-types';
2
- /**
3
- * Generate an example value from a given OpenAPI SchemaObject.
4
- *
5
- * This function recursively processes OpenAPI schemas to create realistic example data.
6
- * It handles all OpenAPI schema types including primitives, objects, arrays, and
7
- * composition schemas (allOf, oneOf, anyOf).
8
- * Uses a tonne of caching for maximum performance.
9
- *
10
- * @param schema - The OpenAPI SchemaObject to generate an example from.
11
- * @param options - Options to customize example generation.
12
- * @param level - The current recursion depth.
13
- * @param parentSchema - The parent schema, if any.
14
- * @param name - The name of the property being processed.
15
- * @returns An example value for the given schema.
16
- *
17
- * @deprecated Use the one from `@scalar/api-client/v2/blocks/operation-code-sample` instead.
18
- */
19
- export declare const getExampleFromSchema: (schema: OpenAPIV3_1.SchemaObject, options?: {
20
- /** Fallback string for empty string values. */
21
- emptyString?: string;
22
- /** Whether to use XML tag names as keys. */
23
- xml?: boolean;
24
- /** Whether to show read-only/write-only properties. */
25
- mode?: "read" | "write";
26
- /** Dynamic variables which can replace values via x-variable. */
27
- variables?: Record<string, unknown>;
28
- /** Whether to omit empty and optional properties. */
29
- omitEmptyAndOptionalProperties?: boolean;
30
- }, args?: Partial<{
31
- level: number;
32
- parentSchema: OpenAPIV3_1.SchemaObject;
33
- name: string;
34
- seen: WeakSet<object>;
35
- }>) => any;
36
- //# sourceMappingURL=get-example-from-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-example-from-schema.d.ts","sourceRoot":"","sources":["../../src/spec-getters/get-example-from-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAgdxD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,WAAW,CAAC,YAAY,EAChC,UAAU;IACR,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACvB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,qDAAqD;IACrD,8BAA8B,CAAC,EAAE,OAAO,CAAA;CACzC,EACD,OAAO,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CACtB,CAAC,KACD,GAyJF,CAAA"}