@sdk-it/typescript 0.39.0 → 0.40.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 (64) hide show
  1. package/dist/index.js +155 -53
  2. package/dist/index.js.map +3 -3
  3. package/dist/lib/client.d.ts.map +1 -1
  4. package/dist/lib/emitters/zod.d.ts.map +1 -1
  5. package/dist/lib/generate.d.ts +3 -1
  6. package/dist/lib/generate.d.ts.map +1 -1
  7. package/dist/lib/generator.d.ts.map +1 -1
  8. package/dist/lib/options.d.ts +1 -0
  9. package/dist/lib/options.d.ts.map +1 -1
  10. package/dist/lib/sdk.d.ts +1 -1
  11. package/dist/lib/sdk.d.ts.map +1 -1
  12. package/dist/lib/server-urls.d.ts +3 -0
  13. package/dist/lib/server-urls.d.ts.map +1 -0
  14. package/dist/lib/status-map.d.ts.map +1 -1
  15. package/dist/lib/typescript-snippet.d.ts.map +1 -1
  16. package/package.json +4 -4
  17. package/dist/connect.d.ts +0 -1
  18. package/dist/connect.d.ts.map +0 -1
  19. package/dist/global.d.js +0 -1
  20. package/dist/global.d.js.map +0 -7
  21. package/dist/lib/connect.d.ts +0 -162
  22. package/dist/lib/connect.d.ts.map +0 -1
  23. package/dist/lib/readme-generator.d.ts +0 -8
  24. package/dist/lib/readme-generator.d.ts.map +0 -1
  25. package/dist/lib/statusMap.d.ts +0 -2
  26. package/dist/lib/statusMap.d.ts.map +0 -1
  27. package/dist/lib/utils.d.ts +0 -17
  28. package/dist/lib/utils.d.ts.map +0 -1
  29. package/dist/lib/watcher.d.ts +0 -2
  30. package/dist/lib/watcher.d.ts.map +0 -1
  31. package/dist/src/index.js +0 -5
  32. package/dist/src/index.js.map +0 -7
  33. package/dist/src/lib/agent/ai-sdk.js +0 -60
  34. package/dist/src/lib/agent/ai-sdk.js.map +0 -7
  35. package/dist/src/lib/agent/openai-agents.js +0 -42
  36. package/dist/src/lib/agent/openai-agents.js.map +0 -7
  37. package/dist/src/lib/client.js +0 -152
  38. package/dist/src/lib/client.js.map +0 -7
  39. package/dist/src/lib/emitters/interface.js +0 -169
  40. package/dist/src/lib/emitters/interface.js.map +0 -7
  41. package/dist/src/lib/emitters/snippet.js +0 -191
  42. package/dist/src/lib/emitters/snippet.js.map +0 -7
  43. package/dist/src/lib/emitters/zod.js +0 -271
  44. package/dist/src/lib/emitters/zod.js.map +0 -7
  45. package/dist/src/lib/generate.js +0 -382
  46. package/dist/src/lib/generate.js.map +0 -7
  47. package/dist/src/lib/generator.js +0 -268
  48. package/dist/src/lib/generator.js.map +0 -7
  49. package/dist/src/lib/import-utilities.js +0 -56
  50. package/dist/src/lib/import-utilities.js.map +0 -7
  51. package/dist/src/lib/options.js +0 -3
  52. package/dist/src/lib/options.js.map +0 -7
  53. package/dist/src/lib/readme/prop.emitter.js +0 -283
  54. package/dist/src/lib/readme/prop.emitter.js.map +0 -7
  55. package/dist/src/lib/readme/readme.js +0 -105
  56. package/dist/src/lib/readme/readme.js.map +0 -7
  57. package/dist/src/lib/sdk.js +0 -236
  58. package/dist/src/lib/sdk.js.map +0 -7
  59. package/dist/src/lib/status-map.js +0 -28
  60. package/dist/src/lib/status-map.js.map +0 -7
  61. package/dist/src/lib/style.js +0 -1
  62. package/dist/src/lib/style.js.map +0 -7
  63. package/dist/src/lib/typescript-snippet.js +0 -738
  64. package/dist/src/lib/typescript-snippet.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lib/typescript-snippet.ts"],
4
- "sourcesContent": ["import type { ResponseObject, SchemaObject } from 'openapi3-ts/oas31';\nimport { camelcase, spinalcase } from 'stringcase';\n\nimport { isEmpty, pascalcase, resolveRef } from '@sdk-it/core';\nimport { type Generator } from '@sdk-it/readme';\nimport {\n type IR,\n type OperationEntry,\n type OperationPagination,\n type TunedOperationObject,\n forEachOperation,\n patchParameters,\n securityToOptions,\n} from '@sdk-it/spec';\n\nimport { SnippetEmitter } from './emitters/snippet.ts';\nimport type { TypeScriptGeneratorOptions } from './options.ts';\n\nexport class TypeScriptSnippet implements Generator {\n #spec: IR;\n #snippetEmitter: SnippetEmitter;\n #clientName: string;\n #packageName: string;\n constructor(spec: IR, settings: TypeScriptGeneratorOptions) {\n this.#spec = spec;\n this.#snippetEmitter = new SnippetEmitter(spec);\n this.#clientName = settings.name?.trim()\n ? pascalcase(settings.name)\n : 'Client';\n\n this.#packageName = settings.name\n ? `@${spinalcase(this.#clientName.toLowerCase())}/sdk`\n : 'sdk';\n }\n succinct(\n entry: OperationEntry,\n operation: TunedOperationObject,\n values: {\n requestBody?: Record<string, unknown>;\n pathParameters?: Record<string, unknown>;\n queryParameters?: Record<string, unknown>;\n headers?: Record<string, unknown>;\n cookies?: Record<string, unknown>;\n },\n ) {\n let payload = '{}';\n if (!isEmpty(operation.requestBody)) {\n const contentTypes = Object.keys(operation.requestBody.content || {});\n const schema = resolveRef(\n this.#spec,\n operation.requestBody.content[contentTypes[0]].schema,\n );\n\n const examplePayload = this.#snippetEmitter.handle({\n ...schema,\n properties: Object.assign({}, schema.properties, schema.properties),\n });\n // merge explicit values into the example payload\n Object.assign(\n examplePayload as Record<string, unknown>,\n values.requestBody ?? {},\n values.pathParameters ?? {},\n values.queryParameters ?? {},\n values.headers ?? {},\n values.cookies ?? {},\n );\n payload = examplePayload as any;\n } else {\n const requestBody: SchemaObject = { type: 'object', properties: {} };\n patchParameters(\n this.#spec,\n requestBody,\n operation.parameters,\n operation.security ?? [],\n );\n const examplePayload = this.#snippetEmitter.handle(requestBody);\n // merge explicit values into the example payload\n Object.assign(\n examplePayload as Record<string, unknown>,\n values.pathParameters ?? {},\n values.queryParameters ?? {},\n values.headers ?? {},\n values.cookies ?? {},\n );\n payload = examplePayload as any;\n }\n payload = JSON.stringify(\n payload,\n (key, value) => {\n if (value?.startsWith && value.startsWith('new')) {\n return `__REPLACE_${Math.random().toString(36).substring(2, 11)}__${value}__REPLACE_END__`;\n }\n return value;\n },\n 2,\n ).replace(/\"__REPLACE_[^\"]*__([^\"]*?)__REPLACE_END__\"/g, '$1');\n\n let successResponse: ResponseObject | undefined;\n for (const status in operation.responses) {\n if (status.startsWith('2')) {\n successResponse = operation.responses[status] as ResponseObject;\n break;\n }\n }\n\n if (successResponse) {\n if (successResponse.headers?.['Transfer-Encoding']) {\n return this.#httpStreaming(entry, payload);\n }\n if (\n successResponse.content &&\n successResponse.content['application/octet-stream']\n ) {\n return this.#streamDownload(entry, payload);\n }\n }\n\n if (!isEmpty(operation['x-pagination'])) {\n return this.#pagination(operation, entry, payload);\n }\n return this.#normal(entry, payload);\n }\n\n #pagination(\n operation: TunedOperationObject,\n entry: OperationEntry,\n payload: string,\n ) {\n const pagination: OperationPagination = operation['x-pagination'];\n switch (pagination.type) {\n case 'page':\n return {\n content: `const result = ${this.#toRequest(entry, payload)}`,\n footer: `for await (const page of result) {\\n\\t\\tconsole.log(page);\\n}`,\n };\n case 'offset':\n return {\n content: `const result = ${this.#toRequest(entry, payload)}`,\n footer: `for await (const page of result) {\\n\\t\\tconsole.log(page);\\n}`,\n };\n case 'cursor':\n return {\n content: `const result = ${this.#toRequest(entry, payload)}`,\n footer: `for await (const page of result) {\\n\\t\\tconsole.log(page);\\n}`,\n };\n }\n return this.#normal(entry, payload);\n }\n\n #normal(entry: OperationEntry, payload: string) {\n return {\n content: `const result = ${this.#toRequest(entry, payload)};`,\n footer: 'console.log(result.data)',\n };\n }\n\n #streamDownload(entry: OperationEntry, payload: string) {\n return {\n content: `const stream = ${this.#toRequest(entry, payload)}`,\n footer: `await writeFile('./report.pdf', stream);`,\n };\n }\n\n #httpStreaming(entry: OperationEntry, payload: string) {\n return {\n content: `const stream = ${this.#toRequest(entry, payload)}`,\n footer: `for await (const chunk of stream) {\\n\\t\\tconsole.log(chunk);\\n}`,\n };\n }\n\n #toRequest(entry: OperationEntry, payload: string) {\n return `await ${camelcase(this.#clientName)}.request('${entry.method.toUpperCase()} ${entry.path}', ${payload});`;\n }\n\n snippet(\n entry: OperationEntry,\n operation: TunedOperationObject,\n config: Record<string, unknown> = {},\n ) {\n const payload = this.succinct(entry, operation, config);\n const content: string[] = [\n this.client(),\n '',\n payload.content,\n '',\n payload.footer,\n ];\n if (config.frame !== false) {\n return createCodeBlock('typescript', content);\n }\n return content.join('\\n');\n }\n\n #authentication() {\n return securityToOptions(\n this.#spec,\n this.#spec.security ?? [],\n this.#spec.components?.securitySchemes ?? {},\n );\n }\n\n client() {\n const options: Record<string, unknown> = {\n baseUrl: this.#spec.servers?.[0]?.url ?? 'http://localhost:3000',\n };\n\n const authOptions = this.#authentication();\n if (!isEmpty(authOptions)) {\n const [firstAuth] = authOptions;\n const optionName = firstAuth['x-optionName'] ?? firstAuth.name;\n options[optionName] = firstAuth.example;\n }\n\n const client = this.#constructClient(options);\n return `${client.import}\\n\\n${client.use}`;\n }\n\n #constructClient(options: Record<string, unknown> = {}) {\n return {\n import: `import { ${this.#clientName} } from '${this.#packageName}';`,\n use: `const ${camelcase(this.#clientName)} = new ${this.#clientName}({\\n\\t\\t${Object.entries(\n options,\n )\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(',\\n\\t\\t')}\\n\\t});`,\n };\n }\n\n clientInstallDocs(): string {\n const sections: string[] = [];\n\n sections.push('## Installation');\n sections.push('');\n sections.push(\n createCodeBlock('bash', [`npm install ${this.#packageName}`]),\n );\n sections.push('');\n\n sections.push('## Basic Usage');\n sections.push('');\n sections.push(createCodeBlock('typescript', [this.client()]));\n\n return sections.join('\\n');\n }\n\n configurationOptions(): {\n sections: string[];\n hasServers: boolean;\n baseUrl: string;\n hasApiKey: boolean;\n } {\n const sections: string[] = [];\n const hasServers = Boolean(\n this.#spec.servers && this.#spec.servers.length > 0,\n );\n const baseUrl = this.#spec.servers?.[0]?.url || 'https://api.example.com';\n\n // Use the existing authentication method to get auth options\n const authOptions = this.#authentication();\n const hasApiKey = !isEmpty(authOptions);\n\n sections.push('### Configuration Options');\n sections.push('');\n sections.push('| Option | Type | Required | Description |');\n sections.push('|--------|------|----------|-------------|');\n sections.push(\n '| `fetch` | `fetch compatible` | No | Fetch implementation to use for HTTP requests |',\n );\n\n if (hasServers) {\n sections.push(\n '| `baseUrl` | `string` | No | API base URL (default: `' +\n baseUrl +\n '`) |',\n );\n }\n\n // Add auth options using the existing authentication structure\n for (const authOption of authOptions) {\n const optionName = authOption['x-optionName'] ?? authOption.name;\n const description =\n authOption.in === 'header' && authOption.name === 'authorization'\n ? 'Bearer token for authentication'\n : `API key for authentication (${authOption.in}: ${authOption.name})`;\n\n sections.push(`| \\`${optionName}\\` | \\`string\\` | No | ${description} |`);\n }\n\n return { sections, hasServers, baseUrl, hasApiKey };\n }\n\n clientSetupDocs(): string {\n const sections: string[] = [];\n\n // Use the dedicated install docs method\n sections.push(this.clientInstallDocs());\n sections.push('');\n\n // Use the configuration options method\n const config = this.configurationOptions();\n sections.push(...config.sections);\n sections.push('');\n\n // Add configuration update documentation\n sections.push(this.configurationUpdateDocs());\n\n return sections.join('\\n');\n }\n\n paginationDocs(): string {\n const paginationTypes = availablePaginationTypes(this.#spec);\n\n if (\n !paginationTypes.offset &&\n !paginationTypes.page &&\n !paginationTypes.cursor\n ) {\n return '';\n }\n\n const sections: string[] = [];\n\n sections.push('## Pagination');\n sections.push('');\n sections.push(\n 'This SDK automatically handles pagination for endpoints that return multiple items.',\n );\n sections.push('');\n sections.push('### How it Works');\n sections.push('');\n sections.push(\n 'When you call a paginated endpoint, the SDK returns a pagination object that allows you to iterate through all results:',\n );\n sections.push('');\n\n // Generate examples for each available pagination type\n const availableTypes: Array<'offset' | 'page' | 'cursor'> = [];\n if (paginationTypes.offset) availableTypes.push('offset');\n if (paginationTypes.page) availableTypes.push('page');\n if (paginationTypes.cursor) availableTypes.push('cursor');\n\n // Use the first available type for the main example\n const primaryPaginationType = availableTypes[0];\n const mockPaginatedOperation = {\n 'x-pagination': { type: primaryPaginationType },\n tags: ['Products'],\n operationId: 'listProducts',\n parameters: [],\n 'x-fn-name': 'listProducts',\n responses: {},\n requestBody: {} as TunedOperationObject['requestBody'],\n } as TunedOperationObject;\n const mockOperationEntry = {\n method: 'get' as const,\n path: '/products',\n tag: 'Products',\n } as OperationEntry;\n const initialRequestPayload = createObjectLiteral({ limit: 20 });\n const paginationExample = this.#pagination(\n mockPaginatedOperation,\n mockOperationEntry,\n initialRequestPayload,\n );\n\n sections.push(\n createCodeBlock('typescript', [\n '// The SDK automatically handles pagination',\n paginationExample.content,\n '',\n '// Access the current page data',\n 'const currentPage = result.getCurrentPage();',\n 'console.log(currentPage.data); // Array of product items',\n '',\n '// Check if more pages exist',\n 'if (result.hasMore) {',\n ' await result.getNextPage();',\n '}',\n '',\n '// Or iterate through all pages automatically',\n paginationExample.footer,\n ]),\n );\n sections.push('');\n\n sections.push('### Iterating Through All Pages');\n sections.push('');\n\n const iterationExample = this.#pagination(\n mockPaginatedOperation,\n mockOperationEntry,\n createObjectLiteral({ limit: 100 }),\n );\n sections.push(\n createCodeBlock('typescript', [\n '// Using async iteration to process all pages',\n iterationExample.content,\n '',\n iterationExample.footer,\n ]),\n );\n sections.push('');\n\n // Show pagination types section with examples for each available type\n if (availableTypes.length > 1) {\n sections.push('### Pagination Types');\n sections.push('');\n sections.push(\n 'Your API uses the following pagination strategies, automatically detected by the SDK:',\n );\n sections.push('');\n } else {\n sections.push('### Pagination Strategy');\n sections.push('');\n sections.push(\n 'Your API uses the following pagination strategy, automatically detected by the SDK:',\n );\n sections.push('');\n }\n\n // Generate specific examples for each available pagination type\n for (const paginationType of availableTypes) {\n const typeSpecificOperation = {\n 'x-pagination': { type: paginationType },\n tags: ['Products'],\n operationId: 'listProducts',\n parameters: [],\n 'x-fn-name': 'listProducts',\n responses: {},\n requestBody: {} as TunedOperationObject['requestBody'],\n } as TunedOperationObject;\n\n const typeSpecificEntry = {\n method: 'get' as const,\n path: '/products',\n tag: 'Products',\n } as OperationEntry;\n\n if (paginationType === 'cursor') {\n sections.push('#### Cursor Pagination');\n sections.push('');\n sections.push('Uses a cursor token to fetch the next page:');\n sections.push('');\n\n const cursorPaginationExample = this.#pagination(\n typeSpecificOperation,\n typeSpecificEntry,\n createObjectLiteral({ limit: 20 }),\n );\n\n sections.push(\n createCodeBlock('typescript', [\n cursorPaginationExample.content,\n '',\n '// Iterate through all pages using cursor',\n cursorPaginationExample.footer,\n ]),\n );\n sections.push('');\n }\n if (paginationType === 'offset') {\n sections.push('#### Offset Pagination');\n sections.push('');\n sections.push('Uses offset and limit parameters:');\n sections.push('');\n\n const offsetPaginationExample = this.#pagination(\n typeSpecificOperation,\n typeSpecificEntry,\n createObjectLiteral({ limit: 20, offset: 0 }),\n );\n\n sections.push(\n createCodeBlock('typescript', [\n offsetPaginationExample.content,\n '',\n '// Iterate through all pages using offset',\n offsetPaginationExample.footer,\n ]),\n );\n sections.push('');\n }\n if (paginationType === 'page') {\n sections.push('#### Page Pagination');\n sections.push('');\n sections.push('Uses page number and page size:');\n sections.push('');\n\n const pagePaginationExample = this.#pagination(\n typeSpecificOperation,\n typeSpecificEntry,\n createObjectLiteral({ page: 1, pageSize: 20 }),\n );\n\n sections.push(\n createCodeBlock('typescript', [\n pagePaginationExample.content,\n '',\n '// Iterate through all pages using page numbers',\n pagePaginationExample.footer,\n ]),\n );\n sections.push('');\n }\n }\n\n if (availableTypes.length > 1) {\n sections.push(\n 'The SDK handles the differences transparently, providing a consistent interface regardless of the underlying pagination type.',\n );\n }\n\n return sections.join('\\n');\n }\n\n errorHandlingDocs(): string {\n const sections: string[] = [];\n\n sections.push('## Error Handling');\n sections.push('');\n sections.push(\n 'The SDK provides structured error handling with typed HTTP error responses.',\n );\n sections.push('');\n\n sections.push('### Error Response Types');\n sections.push('');\n sections.push(\n 'All API errors extend from `APIError` and include the HTTP status code and response data:',\n );\n sections.push('');\n sections.push(\n createCodeBlock('typescript', [\n `import { BadRequest, Unauthorized, NotFound, TooManyRequests, InternalServerError, ParseError } from \"${this.#packageName}\";`,\n 'try {',\n 'const usersList = ',\n this.#toRequest(\n {\n method: 'get',\n path: '/users',\n tag: 'Users',\n },\n createObjectLiteral({}),\n ),\n ' // Handle successful response',\n '} catch (error) {',\n ' // Handle different error types',\n ' if (error instanceof BadRequest) {',\n ' console.error(\"Bad request:\", error.data);',\n ' console.log(\"Status:\", error.status); // 400',\n ' } else if (error instanceof Unauthorized) {',\n ' console.error(\"Authentication failed:\", error.data);',\n ' console.log(\"Status:\", error.status); // 401',\n ' } else if (error instanceof NotFound) {',\n ' console.error(\"Resource not found:\", error.data);',\n ' console.log(\"Status:\", error.status); // 404',\n ' } else if (error instanceof TooManyRequests) {',\n ' console.error(\"Rate limited:\", error.data);',\n ' if (error.data.retryAfter) {',\n ' console.log(\"Retry after:\", error.data.retryAfter);',\n ' }',\n ' } else if (error instanceof InternalServerError) {',\n ' console.error(\"Server error:\", error.data);',\n ' console.log(\"Status:\", error.status); // 500',\n ' } else if (error instanceof ParseError) {',\n ' console.error(\"Input validation failed:\", error.data);',\n ' }',\n '}',\n ]),\n );\n sections.push('');\n\n sections.push('### Available Error Classes');\n sections.push('');\n sections.push('#### Input Validation Errors');\n sections.push(\n '- `ParseError` - Request input validation failed against API schema',\n );\n sections.push('');\n sections.push('#### Client Errors (4xx)');\n sections.push('- `BadRequest` (400) - Invalid request data');\n sections.push('- `Unauthorized` (401) - Authentication required');\n sections.push('- `PaymentRequired` (402) - Payment required');\n sections.push('- `Forbidden` (403) - Access denied');\n sections.push('- `NotFound` (404) - Resource not found');\n sections.push('- `MethodNotAllowed` (405) - HTTP method not allowed');\n sections.push('- `NotAcceptable` (406) - Content type not acceptable');\n sections.push('- `Conflict` (409) - Resource conflict');\n sections.push('- `Gone` (410) - Resource no longer available');\n sections.push('- `PreconditionFailed` (412) - Precondition failed');\n sections.push('- `PayloadTooLarge` (413) - Request payload too large');\n sections.push('- `UnsupportedMediaType` (415) - Unsupported content type');\n sections.push('- `UnprocessableEntity` (422) - Validation errors');\n sections.push('- `TooManyRequests` (429) - Rate limit exceeded');\n sections.push('');\n\n sections.push('#### Server Errors (5xx)');\n sections.push('- `InternalServerError` (500) - Server error');\n sections.push('- `NotImplemented` (501) - Not implemented');\n sections.push('- `BadGateway` (502) - Bad gateway');\n sections.push('- `ServiceUnavailable` (503) - Service unavailable');\n sections.push('- `GatewayTimeout` (504) - Gateway timeout');\n sections.push('');\n\n sections.push('### Validation Errors');\n sections.push('');\n sections.push(\n 'Validation errors (422) include detailed field-level error information:',\n );\n\n sections.push('### Input Validation Errors');\n sections.push('');\n sections.push(\n 'When request input fails validation against the API schema, a `ParseError` is thrown:',\n );\n sections.push('');\n sections.push(\n createCodeBlock('typescript', [\n `import { ParseError } from \"${this.#packageName}\";`,\n '',\n 'try {',\n \" // Invalid input that doesn't match the expected schema\",\n ' const newUser = ',\n this.#toRequest(\n {\n method: 'post',\n path: '/users',\n tag: 'Users',\n },\n createObjectLiteral({\n email: 123, // should be string\n firstName: '', // empty required field\n age: -5, // invalid age value\n }),\n ),\n '} catch (error) {',\n ' if (error instanceof ParseError) {',\n ' console.log(\"Input validation failed:\");',\n ' ',\n ' // Field-level errors',\n ' if (error.data.fieldErrors) {',\n ' Object.entries(error.data.fieldErrors).forEach(([fieldName, validationIssues]) => {',\n ' console.log(` ${fieldName}: ${validationIssues.map(issue => issue.message).join(\", \")}`);',\n ' });',\n ' }',\n ' ',\n ' // Form-level errors',\n ' if (error.data.formErrors.length > 0) {',\n ' console.log(` Form errors: ${error.data.formErrors.map(issue => issue.message).join(\", \")}`);',\n ' }',\n ' }',\n '}',\n ]),\n );\n sections.push('');\n sections.push(\n \"`ParseError` contains detailed validation information using Zod's flattened error format, providing specific field-level and form-level validation messages.\",\n );\n sections.push('');\n\n sections.push('### Rate Limiting');\n sections.push('');\n sections.push(\n 'Rate limit responses may include a `retryAfter` field indicating when to retry:',\n );\n sections.push('');\n sections.push(\n createCodeBlock('typescript', [\n `import { TooManyRequests } from \"${this.#packageName}\";`,\n '',\n 'try {',\n ' const apiResponse = ',\n this.#toRequest(\n {\n method: 'get',\n path: '/api/data',\n tag: 'Data',\n },\n createObjectLiteral({}),\n ),\n '} catch (error) {',\n ' if (error instanceof TooManyRequests) {',\n ' const retryAfterSeconds = error.data.retryAfter;',\n ' if (retryAfterSeconds) {',\n ' console.log(`Rate limited. Retry after: ${retryAfterSeconds} seconds`);',\n ' // Implement your own retry logic',\n ' setTimeout(() => {',\n ' // Retry the request',\n ' }, retryAfterSeconds * 1000);',\n ' }',\n ' }',\n '}',\n ]),\n );\n\n return sections.join('\\n');\n }\n\n authenticationDocs(): string {\n // Use the existing authentication method\n const authOptions = this.#authentication();\n\n if (isEmpty(authOptions)) {\n return '';\n }\n\n const sections: string[] = [];\n\n sections.push('## Authentication');\n sections.push('');\n\n // Adapt introduction based on number of auth methods\n if (authOptions.length === 1) {\n sections.push(\n 'The SDK requires authentication to access the API. Configure your client with the required credentials:',\n );\n } else {\n sections.push('The SDK supports the following authentication methods:');\n }\n sections.push('');\n\n for (const authOption of authOptions) {\n const optionName = authOption['x-optionName'] ?? authOption.name;\n const isBearer =\n authOption.in === 'header' && authOption.name === 'authorization';\n const isApiKey =\n authOption.in === 'header' && authOption.name !== 'authorization';\n const isQueryParam = authOption.in === 'query';\n\n // Determine heading level based on number of auth methods\n const headingLevel = authOptions.length === 1 ? '###' : '###';\n\n if (isBearer) {\n const authenticationHeading =\n authOptions.length === 1\n ? 'Bearer Token'\n : 'Bearer Token Authentication';\n sections.push(`${headingLevel} ${authenticationHeading}`);\n sections.push('');\n sections.push(\n 'Pass your bearer token directly - the \"Bearer\" prefix is automatically added:',\n );\n sections.push('');\n const bearerAuthClient = this.#constructClient({\n [optionName]: 'sk_live_51234567890abcdef1234567890abcdef',\n });\n sections.push(createCodeBlock('typescript', [bearerAuthClient.use]));\n sections.push('');\n } else if (isApiKey) {\n const apiKeyHeading =\n authOptions.length === 1\n ? 'API Key (Header)'\n : 'API Key Authentication (Header)';\n sections.push(`${headingLevel} ${apiKeyHeading}`);\n sections.push('');\n const apiKeyAuthClient = this.#constructClient({\n [optionName]: 'api_key_1234567890abcdef1234567890abcdef',\n });\n sections.push(createCodeBlock('typescript', [apiKeyAuthClient.use]));\n sections.push('');\n } else if (isQueryParam) {\n const queryParamHeading =\n authOptions.length === 1\n ? 'API Key (Query Parameter)'\n : 'API Key Authentication (Query Parameter)';\n sections.push(`${headingLevel} ${queryParamHeading}`);\n sections.push('');\n const queryParamAuthClient = this.#constructClient({\n [optionName]: 'qp_key_1234567890abcdef1234567890abcdef',\n });\n sections.push(\n createCodeBlock('typescript', [queryParamAuthClient.use]),\n );\n sections.push('');\n } else {\n // Generic fallback\n const genericAuthHeading =\n authOptions.length === 1\n ? authOption.name\n : `${authOption.name} Authentication`;\n sections.push(`${headingLevel} ${genericAuthHeading}`);\n sections.push('');\n const genericAuthClient = this.#constructClient({\n [optionName]: 'auth_token_1234567890abcdef1234567890abcdef',\n });\n sections.push(createCodeBlock('typescript', [genericAuthClient.use]));\n sections.push('');\n }\n }\n\n return sections.join('\\n');\n }\n\n generalUsageDocs(): string {\n const sections: string[] = [];\n\n return sections.join('\\n');\n }\n\n configurationUpdateDocs(): string {\n const sections: string[] = [];\n const authOptions = this.#authentication();\n\n sections.push('### Updating Configuration');\n sections.push('');\n sections.push(\n 'You can update client configuration after initialization using the `setOptions` method:',\n );\n sections.push('');\n\n const initialClientOptions: Record<string, unknown> = {\n baseUrl: 'https://api.production-service.com',\n };\n\n if (!isEmpty(authOptions)) {\n const [primaryAuth] = authOptions;\n const authOptionName = primaryAuth['x-optionName'] ?? primaryAuth.name;\n initialClientOptions[authOptionName] = 'prod_sk_1234567890abcdef';\n }\n\n const initialClientSetup = this.#constructClient(initialClientOptions);\n\n const configurationUpdateCode = [\n '// Initial client setup',\n initialClientSetup.use,\n '',\n '// Later, update specific options',\n 'client.setOptions({',\n \" baseUrl: 'https://api.staging-service.com',\",\n ];\n\n if (!isEmpty(authOptions)) {\n const [primaryAuth] = authOptions;\n const authOptionName = primaryAuth['x-optionName'] ?? primaryAuth.name;\n configurationUpdateCode.push(\n ` ${authOptionName}: 'staging_sk_abcdef1234567890'`,\n );\n }\n\n configurationUpdateCode.push('});');\n\n sections.push(createCodeBlock('typescript', configurationUpdateCode));\n sections.push('');\n sections.push(\n 'The `setOptions` method validates the provided options and only updates the specified fields, leaving other configuration unchanged.',\n );\n\n return sections.join('\\n');\n }\n}\n\nfunction createCodeBlock(language: string, content: string[]) {\n return ['```' + language, ...content, '```'].join('\\n');\n}\n\nfunction createObjectLiteral(\n obj: Record<string, unknown>,\n indent = '\\t',\n): string {\n return (\n '{\\n' +\n Object.entries(obj)\n .map(([key, value]) => `${indent}${key}: ${JSON.stringify(value)}`)\n .join(',\\n') +\n `\\n${indent.slice(0, -1)}}`\n );\n}\n\nfunction availablePaginationTypes(spec: IR) {\n let offset = false;\n let page = false;\n let cursor = false;\n forEachOperation(spec, (entry, operation) => {\n if (operation['x-pagination']) {\n switch (operation['x-pagination'].type) {\n case 'offset':\n offset = true;\n break;\n case 'page':\n page = true;\n break;\n case 'cursor':\n cursor = true;\n break;\n }\n }\n });\n return {\n offset,\n page,\n cursor,\n };\n}\n"],
5
- "mappings": "AACA,SAAS,WAAW,kBAAkB;AAEtC,SAAS,SAAS,YAAY,kBAAkB;AAChD,eAA+B;AAC/B;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,sBAAsB;AAGxB,MAAM,kBAAuC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY,MAAU,UAAsC;AAC1D,SAAK,QAAQ;AACb,SAAK,kBAAkB,IAAI,eAAe,IAAI;AAC9C,SAAK,cAAc,SAAS,MAAM,KAAK,IACnC,WAAW,SAAS,IAAI,IACxB;AAEJ,SAAK,eAAe,SAAS,OACzB,IAAI,WAAW,KAAK,YAAY,YAAY,CAAC,CAAC,SAC9C;AAAA,EACN;AAAA,EACA,SACE,OACA,WACA,QAOA;AACA,QAAI,UAAU;AACd,QAAI,CAAC,QAAQ,UAAU,WAAW,GAAG;AACnC,YAAM,eAAe,OAAO,KAAK,UAAU,YAAY,WAAW,CAAC,CAAC;AACpE,YAAM,SAAS;AAAA,QACb,KAAK;AAAA,QACL,UAAU,YAAY,QAAQ,aAAa,CAAC,CAAC,EAAE;AAAA,MACjD;AAEA,YAAM,iBAAiB,KAAK,gBAAgB,OAAO;AAAA,QACjD,GAAG;AAAA,QACH,YAAY,OAAO,OAAO,CAAC,GAAG,OAAO,YAAY,OAAO,UAAU;AAAA,MACpE,CAAC;AAED,aAAO;AAAA,QACL;AAAA,QACA,OAAO,eAAe,CAAC;AAAA,QACvB,OAAO,kBAAkB,CAAC;AAAA,QAC1B,OAAO,mBAAmB,CAAC;AAAA,QAC3B,OAAO,WAAW,CAAC;AAAA,QACnB,OAAO,WAAW,CAAC;AAAA,MACrB;AACA,gBAAU;AAAA,IACZ,OAAO;AACL,YAAM,cAA4B,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AACnE;AAAA,QACE,KAAK;AAAA,QACL;AAAA,QACA,UAAU;AAAA,QACV,UAAU,YAAY,CAAC;AAAA,MACzB;AACA,YAAM,iBAAiB,KAAK,gBAAgB,OAAO,WAAW;AAE9D,aAAO;AAAA,QACL;AAAA,QACA,OAAO,kBAAkB,CAAC;AAAA,QAC1B,OAAO,mBAAmB,CAAC;AAAA,QAC3B,OAAO,WAAW,CAAC;AAAA,QACnB,OAAO,WAAW,CAAC;AAAA,MACrB;AACA,gBAAU;AAAA,IACZ;AACA,cAAU,KAAK;AAAA,MACb;AAAA,MACA,CAAC,KAAK,UAAU;AACd,YAAI,OAAO,cAAc,MAAM,WAAW,KAAK,GAAG;AAChD,iBAAO,aAAa,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC,KAAK,KAAK;AAAA,QAC3E;AACA,eAAO;AAAA,MACT;AAAA,MACA;AAAA,IACF,EAAE,QAAQ,+CAA+C,IAAI;AAE7D,QAAI;AACJ,eAAW,UAAU,UAAU,WAAW;AACxC,UAAI,OAAO,WAAW,GAAG,GAAG;AAC1B,0BAAkB,UAAU,UAAU,MAAM;AAC5C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,iBAAiB;AACnB,UAAI,gBAAgB,UAAU,mBAAmB,GAAG;AAClD,eAAO,KAAK,eAAe,OAAO,OAAO;AAAA,MAC3C;AACA,UACE,gBAAgB,WAChB,gBAAgB,QAAQ,0BAA0B,GAClD;AACA,eAAO,KAAK,gBAAgB,OAAO,OAAO;AAAA,MAC5C;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,UAAU,cAAc,CAAC,GAAG;AACvC,aAAO,KAAK,YAAY,WAAW,OAAO,OAAO;AAAA,IACnD;AACA,WAAO,KAAK,QAAQ,OAAO,OAAO;AAAA,EACpC;AAAA,EAEA,YACE,WACA,OACA,SACA;AACA,UAAM,aAAkC,UAAU,cAAc;AAChE,YAAQ,WAAW,MAAM;AAAA,MACvB,KAAK;AACH,eAAO;AAAA,UACL,SAAS,kBAAkB,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,UAC1D,QAAQ;AAAA;AAAA;AAAA,QACV;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,SAAS,kBAAkB,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,UAC1D,QAAQ;AAAA;AAAA;AAAA,QACV;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,SAAS,kBAAkB,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,UAC1D,QAAQ;AAAA;AAAA;AAAA,QACV;AAAA,IACJ;AACA,WAAO,KAAK,QAAQ,OAAO,OAAO;AAAA,EACpC;AAAA,EAEA,QAAQ,OAAuB,SAAiB;AAC9C,WAAO;AAAA,MACL,SAAS,kBAAkB,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,MAC1D,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,gBAAgB,OAAuB,SAAiB;AACtD,WAAO;AAAA,MACL,SAAS,kBAAkB,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,MAC1D,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,eAAe,OAAuB,SAAiB;AACrD,WAAO;AAAA,MACL,SAAS,kBAAkB,KAAK,WAAW,OAAO,OAAO,CAAC;AAAA,MAC1D,QAAQ;AAAA;AAAA;AAAA,IACV;AAAA,EACF;AAAA,EAEA,WAAW,OAAuB,SAAiB;AACjD,WAAO,SAAS,UAAU,KAAK,WAAW,CAAC,aAAa,MAAM,OAAO,YAAY,CAAC,IAAI,MAAM,IAAI,MAAM,OAAO;AAAA,EAC/G;AAAA,EAEA,QACE,OACA,WACA,SAAkC,CAAC,GACnC;AACA,UAAM,UAAU,KAAK,SAAS,OAAO,WAAW,MAAM;AACtD,UAAM,UAAoB;AAAA,MACxB,KAAK,OAAO;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,IACV;AACA,QAAI,OAAO,UAAU,OAAO;AAC1B,aAAO,gBAAgB,cAAc,OAAO;AAAA,IAC9C;AACA,WAAO,QAAQ,KAAK,IAAI;AAAA,EAC1B;AAAA,EAEA,kBAAkB;AAChB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,KAAK,MAAM,YAAY,CAAC;AAAA,MACxB,KAAK,MAAM,YAAY,mBAAmB,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,SAAS;AACP,UAAM,UAAmC;AAAA,MACvC,SAAS,KAAK,MAAM,UAAU,CAAC,GAAG,OAAO;AAAA,IAC3C;AAEA,UAAM,cAAc,KAAK,gBAAgB;AACzC,QAAI,CAAC,QAAQ,WAAW,GAAG;AACzB,YAAM,CAAC,SAAS,IAAI;AACpB,YAAM,aAAa,UAAU,cAAc,KAAK,UAAU;AAC1D,cAAQ,UAAU,IAAI,UAAU;AAAA,IAClC;AAEA,UAAM,SAAS,KAAK,iBAAiB,OAAO;AAC5C,WAAO,GAAG,OAAO,MAAM;AAAA;AAAA,EAAO,OAAO,GAAG;AAAA,EAC1C;AAAA,EAEA,iBAAiB,UAAmC,CAAC,GAAG;AACtD,WAAO;AAAA,MACL,QAAQ,YAAY,KAAK,WAAW,YAAY,KAAK,YAAY;AAAA,MACjE,KAAK,SAAS,UAAU,KAAK,WAAW,CAAC,UAAU,KAAK,WAAW;AAAA,IAAW,OAAO;AAAA,QACnF;AAAA,MACF,EACG,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EACxD,KAAK,OAAS,CAAC;AAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,oBAA4B;AAC1B,UAAM,WAAqB,CAAC;AAE5B,aAAS,KAAK,iBAAiB;AAC/B,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP,gBAAgB,QAAQ,CAAC,eAAe,KAAK,YAAY,EAAE,CAAC;AAAA,IAC9D;AACA,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,gBAAgB;AAC9B,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,gBAAgB,cAAc,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;AAE5D,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EAEA,uBAKE;AACA,UAAM,WAAqB,CAAC;AAC5B,UAAM,aAAa;AAAA,MACjB,KAAK,MAAM,WAAW,KAAK,MAAM,QAAQ,SAAS;AAAA,IACpD;AACA,UAAM,UAAU,KAAK,MAAM,UAAU,CAAC,GAAG,OAAO;AAGhD,UAAM,cAAc,KAAK,gBAAgB;AACzC,UAAM,YAAY,CAAC,QAAQ,WAAW;AAEtC,aAAS,KAAK,2BAA2B;AACzC,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,4CAA4C;AAC1D,aAAS,KAAK,4CAA4C;AAC1D,aAAS;AAAA,MACP;AAAA,IACF;AAEA,QAAI,YAAY;AACd,eAAS;AAAA,QACP,2DACE,UACA;AAAA,MACJ;AAAA,IACF;AAGA,eAAW,cAAc,aAAa;AACpC,YAAM,aAAa,WAAW,cAAc,KAAK,WAAW;AAC5D,YAAM,cACJ,WAAW,OAAO,YAAY,WAAW,SAAS,kBAC9C,oCACA,+BAA+B,WAAW,EAAE,KAAK,WAAW,IAAI;AAEtE,eAAS,KAAK,OAAO,UAAU,0BAA0B,WAAW,IAAI;AAAA,IAC1E;AAEA,WAAO,EAAE,UAAU,YAAY,SAAS,UAAU;AAAA,EACpD;AAAA,EAEA,kBAA0B;AACxB,UAAM,WAAqB,CAAC;AAG5B,aAAS,KAAK,KAAK,kBAAkB,CAAC;AACtC,aAAS,KAAK,EAAE;AAGhB,UAAM,SAAS,KAAK,qBAAqB;AACzC,aAAS,KAAK,GAAG,OAAO,QAAQ;AAChC,aAAS,KAAK,EAAE;AAGhB,aAAS,KAAK,KAAK,wBAAwB,CAAC;AAE5C,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EAEA,iBAAyB;AACvB,UAAM,kBAAkB,yBAAyB,KAAK,KAAK;AAE3D,QACE,CAAC,gBAAgB,UACjB,CAAC,gBAAgB,QACjB,CAAC,gBAAgB,QACjB;AACA,aAAO;AAAA,IACT;AAEA,UAAM,WAAqB,CAAC;AAE5B,aAAS,KAAK,eAAe;AAC7B,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,kBAAkB;AAChC,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAGhB,UAAM,iBAAsD,CAAC;AAC7D,QAAI,gBAAgB,OAAQ,gBAAe,KAAK,QAAQ;AACxD,QAAI,gBAAgB,KAAM,gBAAe,KAAK,MAAM;AACpD,QAAI,gBAAgB,OAAQ,gBAAe,KAAK,QAAQ;AAGxD,UAAM,wBAAwB,eAAe,CAAC;AAC9C,UAAM,yBAAyB;AAAA,MAC7B,gBAAgB,EAAE,MAAM,sBAAsB;AAAA,MAC9C,MAAM,CAAC,UAAU;AAAA,MACjB,aAAa;AAAA,MACb,YAAY,CAAC;AAAA,MACb,aAAa;AAAA,MACb,WAAW,CAAC;AAAA,MACZ,aAAa,CAAC;AAAA,IAChB;AACA,UAAM,qBAAqB;AAAA,MACzB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AACA,UAAM,wBAAwB,oBAAoB,EAAE,OAAO,GAAG,CAAC;AAC/D,UAAM,oBAAoB,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,aAAS;AAAA,MACP,gBAAgB,cAAc;AAAA,QAC5B;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,MACpB,CAAC;AAAA,IACH;AACA,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,iCAAiC;AAC/C,aAAS,KAAK,EAAE;AAEhB,UAAM,mBAAmB,KAAK;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,oBAAoB,EAAE,OAAO,IAAI,CAAC;AAAA,IACpC;AACA,aAAS;AAAA,MACP,gBAAgB,cAAc;AAAA,QAC5B;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,QACA,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AACA,aAAS,KAAK,EAAE;AAGhB,QAAI,eAAe,SAAS,GAAG;AAC7B,eAAS,KAAK,sBAAsB;AACpC,eAAS,KAAK,EAAE;AAChB,eAAS;AAAA,QACP;AAAA,MACF;AACA,eAAS,KAAK,EAAE;AAAA,IAClB,OAAO;AACL,eAAS,KAAK,yBAAyB;AACvC,eAAS,KAAK,EAAE;AAChB,eAAS;AAAA,QACP;AAAA,MACF;AACA,eAAS,KAAK,EAAE;AAAA,IAClB;AAGA,eAAW,kBAAkB,gBAAgB;AAC3C,YAAM,wBAAwB;AAAA,QAC5B,gBAAgB,EAAE,MAAM,eAAe;AAAA,QACvC,MAAM,CAAC,UAAU;AAAA,QACjB,aAAa;AAAA,QACb,YAAY,CAAC;AAAA,QACb,aAAa;AAAA,QACb,WAAW,CAAC;AAAA,QACZ,aAAa,CAAC;AAAA,MAChB;AAEA,YAAM,oBAAoB;AAAA,QACxB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAEA,UAAI,mBAAmB,UAAU;AAC/B,iBAAS,KAAK,wBAAwB;AACtC,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,6CAA6C;AAC3D,iBAAS,KAAK,EAAE;AAEhB,cAAM,0BAA0B,KAAK;AAAA,UACnC;AAAA,UACA;AAAA,UACA,oBAAoB,EAAE,OAAO,GAAG,CAAC;AAAA,QACnC;AAEA,iBAAS;AAAA,UACP,gBAAgB,cAAc;AAAA,YAC5B,wBAAwB;AAAA,YACxB;AAAA,YACA;AAAA,YACA,wBAAwB;AAAA,UAC1B,CAAC;AAAA,QACH;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AACA,UAAI,mBAAmB,UAAU;AAC/B,iBAAS,KAAK,wBAAwB;AACtC,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,mCAAmC;AACjD,iBAAS,KAAK,EAAE;AAEhB,cAAM,0BAA0B,KAAK;AAAA,UACnC;AAAA,UACA;AAAA,UACA,oBAAoB,EAAE,OAAO,IAAI,QAAQ,EAAE,CAAC;AAAA,QAC9C;AAEA,iBAAS;AAAA,UACP,gBAAgB,cAAc;AAAA,YAC5B,wBAAwB;AAAA,YACxB;AAAA,YACA;AAAA,YACA,wBAAwB;AAAA,UAC1B,CAAC;AAAA,QACH;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AACA,UAAI,mBAAmB,QAAQ;AAC7B,iBAAS,KAAK,sBAAsB;AACpC,iBAAS,KAAK,EAAE;AAChB,iBAAS,KAAK,iCAAiC;AAC/C,iBAAS,KAAK,EAAE;AAEhB,cAAM,wBAAwB,KAAK;AAAA,UACjC;AAAA,UACA;AAAA,UACA,oBAAoB,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC;AAAA,QAC/C;AAEA,iBAAS;AAAA,UACP,gBAAgB,cAAc;AAAA,YAC5B,sBAAsB;AAAA,YACtB;AAAA,YACA;AAAA,YACA,sBAAsB;AAAA,UACxB,CAAC;AAAA,QACH;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,eAAe,SAAS,GAAG;AAC7B,eAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAEA,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EAEA,oBAA4B;AAC1B,UAAM,WAAqB,CAAC;AAE5B,aAAS,KAAK,mBAAmB;AACjC,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,0BAA0B;AACxC,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP,gBAAgB,cAAc;AAAA,QAC5B,yGAAyG,KAAK,YAAY;AAAA,QAC1H;AAAA,QACA;AAAA,QACA,KAAK;AAAA,UACH;AAAA,YACE,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,KAAK;AAAA,UACP;AAAA,UACA,oBAAoB,CAAC,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AACA,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,6BAA6B;AAC3C,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,8BAA8B;AAC5C,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAChB,aAAS,KAAK,0BAA0B;AACxC,aAAS,KAAK,6CAA6C;AAC3D,aAAS,KAAK,kDAAkD;AAChE,aAAS,KAAK,8CAA8C;AAC5D,aAAS,KAAK,qCAAqC;AACnD,aAAS,KAAK,yCAAyC;AACvD,aAAS,KAAK,sDAAsD;AACpE,aAAS,KAAK,uDAAuD;AACrE,aAAS,KAAK,wCAAwC;AACtD,aAAS,KAAK,+CAA+C;AAC7D,aAAS,KAAK,oDAAoD;AAClE,aAAS,KAAK,uDAAuD;AACrE,aAAS,KAAK,2DAA2D;AACzE,aAAS,KAAK,mDAAmD;AACjE,aAAS,KAAK,iDAAiD;AAC/D,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,0BAA0B;AACxC,aAAS,KAAK,8CAA8C;AAC5D,aAAS,KAAK,4CAA4C;AAC1D,aAAS,KAAK,oCAAoC;AAClD,aAAS,KAAK,oDAAoD;AAClE,aAAS,KAAK,4CAA4C;AAC1D,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,uBAAuB;AACrC,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AAEA,aAAS,KAAK,6BAA6B;AAC3C,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP,gBAAgB,cAAc;AAAA,QAC5B,+BAA+B,KAAK,YAAY;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,UACH;AAAA,YACE,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,KAAK;AAAA,UACP;AAAA,UACA,oBAAoB;AAAA,YAClB,OAAO;AAAA;AAAA,YACP,WAAW;AAAA;AAAA,YACX,KAAK;AAAA;AAAA,UACP,CAAC;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AACA,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAEhB,aAAS,KAAK,mBAAmB;AACjC,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP,gBAAgB,cAAc;AAAA,QAC5B,oCAAoC,KAAK,YAAY;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,UACH;AAAA,YACE,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,KAAK;AAAA,UACP;AAAA,UACA,oBAAoB,CAAC,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EAEA,qBAA6B;AAE3B,UAAM,cAAc,KAAK,gBAAgB;AAEzC,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AAEA,UAAM,WAAqB,CAAC;AAE5B,aAAS,KAAK,mBAAmB;AACjC,aAAS,KAAK,EAAE;AAGhB,QAAI,YAAY,WAAW,GAAG;AAC5B,eAAS;AAAA,QACP;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,KAAK,wDAAwD;AAAA,IACxE;AACA,aAAS,KAAK,EAAE;AAEhB,eAAW,cAAc,aAAa;AACpC,YAAM,aAAa,WAAW,cAAc,KAAK,WAAW;AAC5D,YAAM,WACJ,WAAW,OAAO,YAAY,WAAW,SAAS;AACpD,YAAM,WACJ,WAAW,OAAO,YAAY,WAAW,SAAS;AACpD,YAAM,eAAe,WAAW,OAAO;AAGvC,YAAM,eAAe,YAAY,WAAW,IAAI,QAAQ;AAExD,UAAI,UAAU;AACZ,cAAM,wBACJ,YAAY,WAAW,IACnB,iBACA;AACN,iBAAS,KAAK,GAAG,YAAY,IAAI,qBAAqB,EAAE;AACxD,iBAAS,KAAK,EAAE;AAChB,iBAAS;AAAA,UACP;AAAA,QACF;AACA,iBAAS,KAAK,EAAE;AAChB,cAAM,mBAAmB,KAAK,iBAAiB;AAAA,UAC7C,CAAC,UAAU,GAAG;AAAA,QAChB,CAAC;AACD,iBAAS,KAAK,gBAAgB,cAAc,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACnE,iBAAS,KAAK,EAAE;AAAA,MAClB,WAAW,UAAU;AACnB,cAAM,gBACJ,YAAY,WAAW,IACnB,qBACA;AACN,iBAAS,KAAK,GAAG,YAAY,IAAI,aAAa,EAAE;AAChD,iBAAS,KAAK,EAAE;AAChB,cAAM,mBAAmB,KAAK,iBAAiB;AAAA,UAC7C,CAAC,UAAU,GAAG;AAAA,QAChB,CAAC;AACD,iBAAS,KAAK,gBAAgB,cAAc,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACnE,iBAAS,KAAK,EAAE;AAAA,MAClB,WAAW,cAAc;AACvB,cAAM,oBACJ,YAAY,WAAW,IACnB,8BACA;AACN,iBAAS,KAAK,GAAG,YAAY,IAAI,iBAAiB,EAAE;AACpD,iBAAS,KAAK,EAAE;AAChB,cAAM,uBAAuB,KAAK,iBAAiB;AAAA,UACjD,CAAC,UAAU,GAAG;AAAA,QAChB,CAAC;AACD,iBAAS;AAAA,UACP,gBAAgB,cAAc,CAAC,qBAAqB,GAAG,CAAC;AAAA,QAC1D;AACA,iBAAS,KAAK,EAAE;AAAA,MAClB,OAAO;AAEL,cAAM,qBACJ,YAAY,WAAW,IACnB,WAAW,OACX,GAAG,WAAW,IAAI;AACxB,iBAAS,KAAK,GAAG,YAAY,IAAI,kBAAkB,EAAE;AACrD,iBAAS,KAAK,EAAE;AAChB,cAAM,oBAAoB,KAAK,iBAAiB;AAAA,UAC9C,CAAC,UAAU,GAAG;AAAA,QAChB,CAAC;AACD,iBAAS,KAAK,gBAAgB,cAAc,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACpE,iBAAS,KAAK,EAAE;AAAA,MAClB;AAAA,IACF;AAEA,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EAEA,mBAA2B;AACzB,UAAM,WAAqB,CAAC;AAE5B,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAAA,EAEA,0BAAkC;AAChC,UAAM,WAAqB,CAAC;AAC5B,UAAM,cAAc,KAAK,gBAAgB;AAEzC,aAAS,KAAK,4BAA4B;AAC1C,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AACA,aAAS,KAAK,EAAE;AAEhB,UAAM,uBAAgD;AAAA,MACpD,SAAS;AAAA,IACX;AAEA,QAAI,CAAC,QAAQ,WAAW,GAAG;AACzB,YAAM,CAAC,WAAW,IAAI;AACtB,YAAM,iBAAiB,YAAY,cAAc,KAAK,YAAY;AAClE,2BAAqB,cAAc,IAAI;AAAA,IACzC;AAEA,UAAM,qBAAqB,KAAK,iBAAiB,oBAAoB;AAErE,UAAM,0BAA0B;AAAA,MAC9B;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,CAAC,QAAQ,WAAW,GAAG;AACzB,YAAM,CAAC,WAAW,IAAI;AACtB,YAAM,iBAAiB,YAAY,cAAc,KAAK,YAAY;AAClE,8BAAwB;AAAA,QACtB,KAAK,cAAc;AAAA,MACrB;AAAA,IACF;AAEA,4BAAwB,KAAK,KAAK;AAElC,aAAS,KAAK,gBAAgB,cAAc,uBAAuB,CAAC;AACpE,aAAS,KAAK,EAAE;AAChB,aAAS;AAAA,MACP;AAAA,IACF;AAEA,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AACF;AAEA,SAAS,gBAAgB,UAAkB,SAAmB;AAC5D,SAAO,CAAC,QAAQ,UAAU,GAAG,SAAS,KAAK,EAAE,KAAK,IAAI;AACxD;AAEA,SAAS,oBACP,KACA,SAAS,KACD;AACR,SACE,QACA,OAAO,QAAQ,GAAG,EACf,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EACjE,KAAK,KAAK,IACb;AAAA,EAAK,OAAO,MAAM,GAAG,EAAE,CAAC;AAE5B;AAEA,SAAS,yBAAyB,MAAU;AAC1C,MAAI,SAAS;AACb,MAAI,OAAO;AACX,MAAI,SAAS;AACb,mBAAiB,MAAM,CAAC,OAAO,cAAc;AAC3C,QAAI,UAAU,cAAc,GAAG;AAC7B,cAAQ,UAAU,cAAc,EAAE,MAAM;AAAA,QACtC,KAAK;AACH,mBAAS;AACT;AAAA,QACF,KAAK;AACH,iBAAO;AACP;AAAA,QACF,KAAK;AACH,mBAAS;AACT;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
- "names": []
7
- }