mobx-tanstack-query-api 0.30.0 → 0.32.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/cli.cjs CHANGED
@@ -209,11 +209,13 @@ const requestContentKind = {
209
209
  URL_ENCODED: '"application/x-www-form-urlencoded"',
210
210
  FORM_DATA: '"multipart/form-data"',
211
211
  TEXT: '"text/plain"',
212
+ JSON: '"application/json"',
212
213
  BINARY: '"application/octet-stream"'
213
214
  };
214
215
  const responseContentKind = {
215
216
  TEXT: '"text"',
216
217
  IMAGE: '"blob"',
218
+ JSON: '"json"',
217
219
  FORM_DATA: '"formData"',
218
220
  BYTES: '"bytes"'
219
221
  };
package/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","sources":["../src/codegen/templates/constants.ts","../src/codegen/templates/data-contract.tmpl.ts","../src/codegen/templates/endpoint-jsdoc.tmpl.ts","../src/codegen/utils/create-short-model-type.ts","../src/codegen/templates/meta-info.tmpl.ts","../src/codegen/templates/new-endpoint.tmpl.ts","../src/codegen/templates/all-endpoints-per-file.tmpl.ts","../src/codegen/templates/all-exports.tmpl.ts","../src/codegen/templates/data-contracts-file.tmpl.ts","../src/codegen/templates/endpoint-per-file.tmpl.ts","../src/codegen/templates/index-ts-for-endpoint-per-file.tmpl.ts","../src/codegen/utils/unpack-filter-option.ts","../src/codegen/utils/remove-unused-types.ts","../src/codegen/index.ts","../src/cli/utils/define-config.ts"],"sourcesContent":["export const LINTERS_IGNORE = `/* eslint-disable */\n/* tslint:disable */`;\n","import type { AnyObject } from 'yummies/types';\nimport type { BaseTmplParams } from '../types/index.js';\n\nexport interface DataContractTmplParams extends BaseTmplParams {\n contract: AnyObject;\n addExportKeyword?: boolean;\n}\n\nconst buildGenerics = (contract: any) => {\n if (!contract.genericArgs?.length) return '';\n\n return (\n '<' +\n contract.genericArgs\n .map((arg: any) => {\n const { name, default: defaultType, extends: extendsType } = arg;\n return [\n name,\n extendsType && `extends ${extendsType}`,\n defaultType && `= ${defaultType}`,\n ]\n .filter(Boolean)\n .join(' ');\n })\n .join(', ') +\n '>'\n );\n};\n\nexport const dataContractTmpl = async ({\n contract,\n configuration,\n addExportKeyword,\n}: DataContractTmplParams) => {\n const { utils } = configuration;\n const { formatDescription } = utils;\n\n const dataContractTemplates: Record<string, (contract: any) => string> = {\n enum: (contract: any) => {\n return `enum ${contract.name} {\\r\\n${contract.content}\\r\\n}`;\n },\n interface: (contract: any) => {\n return `interface ${contract.name}${buildGenerics(contract)} {\\r\\n${contract.content}}`;\n },\n type: (contract: any) => {\n return `type ${contract.name}${buildGenerics(contract)} = ${contract.content === contract.name ? 'any' : contract.content}`;\n },\n };\n\n let result: string = '';\n\n let jsdoc = '';\n\n if (contract.description) {\n jsdoc = `/**\\n * ${formatDescription(contract.description, true)}\\n */\\n`;\n }\n\n if (jsdoc) {\n result += jsdoc;\n }\n\n const templateFn =\n dataContractTemplates[contract.typeIdentifier] ||\n dataContractTemplates.type;\n\n const contractType = `${addExportKeyword ? 'export ' : ''}${templateFn(contract)}`;\n\n return result + contractType;\n};\n","import { splitTextByLines } from 'yummies/text';\nimport type { AnyObject } from 'yummies/types';\nimport type { BaseTmplParams } from '../types/base-tmpl-params.js';\n\nexport interface EndpointJSDocTmplParams extends BaseTmplParams {\n route: AnyObject;\n offset?: number;\n}\n\nexport const endpointJSDocTmpl = (params: EndpointJSDocTmplParams) => {\n const { route, configuration, offset = 0 } = params;\n const { routeName } = route;\n const rawRoute = route.raw as AnyObject;\n const routeRequest = route.request as AnyObject;\n\n const { utils } = configuration;\n\n const { _, formatDescription } = utils;\n\n const jsDocLines: { name?: string; content?: string }[] = [];\n\n if (rawRoute.summary) {\n const summaryLines = splitTextByLines(rawRoute.summary, 60)\n .filter(Boolean)\n .map((line) => ({\n content: `**${formatDescription(line, true)}**`,\n }));\n\n if (summaryLines.length > 0) {\n jsDocLines.push(...summaryLines, { content: '' });\n }\n }\n\n if (rawRoute.description) {\n const descriptionLines = splitTextByLines(rawRoute.description, 60)\n .filter(Boolean)\n .map((line) => ({\n content: formatDescription(line, true),\n }));\n\n if (descriptionLines.length > 0) {\n jsDocLines.push(...descriptionLines, { content: '' });\n } else {\n jsDocLines.push({\n content: 'No description',\n });\n }\n } else {\n jsDocLines.push({\n content: 'No description',\n });\n }\n\n if (rawRoute.operationId) {\n jsDocLines.push({\n name: 'operationId',\n content: rawRoute.operationId,\n });\n }\n\n if (_.size(rawRoute.tags)) {\n jsDocLines.push({\n name: 'tags',\n content: rawRoute.tags.join(', '),\n });\n }\n\n jsDocLines.push({\n name: 'request',\n content: `**${_.upperCase(routeRequest.method)}:${rawRoute.route}**`,\n });\n\n if (rawRoute.deprecated) {\n jsDocLines.push({\n name: 'deprecated',\n });\n }\n\n if (routeName.duplicate) {\n jsDocLines.push(\n {\n name: 'duplicate',\n },\n {\n name: 'originalName',\n content: routeName.original,\n },\n );\n }\n\n if (routeRequest.security) {\n jsDocLines.push({\n name: 'secure',\n });\n }\n\n if (rawRoute.responsesTypes.length > 0) {\n jsDocLines.push({\n name: 'responses',\n });\n\n rawRoute.responsesTypes.forEach((response: AnyObject) => {\n jsDocLines.push({\n name: `**${response.status}**`,\n content: `${_.replace(_.replace(response.type, /\\/\\*/g, String.raw`\\*`), /\\*\\//g, '*\\\\')} ${response.description}`,\n });\n });\n }\n\n const jsdocContent = jsDocLines.map((it) => {\n let line: string = ' * ';\n\n if (it.name) {\n line += `@${it.name} `;\n }\n\n const content = (it.content ?? '').trimEnd();\n\n if (content) {\n line += content;\n }\n\n return line;\n });\n\n const result = `\n/**\n${jsdocContent.join('\\n')}\n */`;\n\n if (offset > 0) {\n return result\n .split('\\n')\n .map((line) => line.padStart(offset))\n .join('\\n');\n }\n\n return result;\n};\n","import type { ModelType } from 'swagger-typescript-api';\nimport type { PartialKeys } from 'yummies/types';\nimport type { TypeInfo } from '../types/type-info.js';\n\nexport const createShortModelType = (\n shortModelType: PartialKeys<\n ModelType,\n 'rawContent' | 'description' | 'typeIdentifier'\n >,\n): TypeInfo & ModelType => {\n return {\n ...shortModelType,\n typeIdentifier: shortModelType.typeIdentifier || 'type',\n rawContent: shortModelType.rawContent || shortModelType.content,\n description: shortModelType.description || '',\n };\n};\n","import type { AnyObject, Maybe } from 'yummies/types';\nimport type {\n BaseTmplParams,\n CodegenDataUtils,\n MetaInfo,\n} from '../types/index.js';\n\nimport { LINTERS_IGNORE } from './constants.js';\n\nexport interface MetaInfoTmplParams extends BaseTmplParams {\n metaInfo: Maybe<MetaInfo>;\n}\n\nexport const formatGroupNameEnumKey = (\n groupName: string,\n { _ }: CodegenDataUtils,\n) => _.upperFirst(_.camelCase(groupName));\n\nexport const formatTagNameEnumKey = (\n tagName: string,\n utils: CodegenDataUtils,\n) => formatGroupNameEnumKey(tagName, utils);\n\nexport const metaInfoTmpl = async ({\n metaInfo,\n utils,\n formatTSContent,\n codegenParams,\n ...other\n}: MetaInfoTmplParams) => {\n const tagsMap = new Map<string, AnyObject>(\n (other as any).configuration?.apiConfig?.tags?.map((it: AnyObject) => [\n it.name,\n it,\n ]),\n );\n\n return await formatTSContent(`${LINTERS_IGNORE}\n ${[\n metaInfo?.namespace && `export const namespace = \"${metaInfo?.namespace}\";`,\n metaInfo?.groupNames?.length &&\n `\nexport const enum Group {\n ${metaInfo?.groupNames.map((groupName) => `${formatGroupNameEnumKey(groupName, utils)} = \"${codegenParams.transforms?.groupEnumValue?.(groupName) ?? groupName}\"`).join(',\\n')}\n}\n`,\n metaInfo?.tags?.length &&\n `\nexport const enum Tag {\n ${metaInfo?.tags\n .map((tagName) => {\n const tagData = tagsMap.get(tagName);\n\n let description = tagData?.description;\n\n if (!description) {\n description = utils._.words(tagName).join(' ');\n }\n\n return [\n description && `/** ${description} */`,\n `${formatTagNameEnumKey(tagName, utils)} = \"${codegenParams.transforms?.tagEnumValue?.(tagName) ?? tagName}\"`,\n ]\n .filter(Boolean)\n .join('\\n');\n })\n .join(',\\n')}\n}\n`,\n ]\n .filter(Boolean)\n .join('\\n')}\n `);\n};\n","import type { ParsedRoute } from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { BaseTmplParams } from '../types/base-tmpl-params.js';\nimport type { MetaInfo } from '../types/index.js';\nimport { createShortModelType } from '../utils/create-short-model-type.js';\nimport {\n formatGroupNameEnumKey,\n formatTagNameEnumKey,\n} from './meta-info.tmpl.js';\n\nexport interface NewEndpointTmplParams extends BaseTmplParams {\n route: ParsedRoute;\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n}\n\n// RequestParams[\"type\"]\nconst requestContentKind: AnyObject = {\n URL_ENCODED: '\"application/x-www-form-urlencoded\"',\n FORM_DATA: '\"multipart/form-data\"',\n TEXT: '\"text/plain\"',\n BINARY: '\"application/octet-stream\"',\n};\n// RequestParams[\"format\"]\nconst responseContentKind: AnyObject = {\n TEXT: '\"text\"',\n IMAGE: '\"blob\"',\n FORM_DATA: '\"formData\"',\n BYTES: '\"bytes\"',\n};\n\nexport const newEndpointTmpl = ({\n route,\n codegenParams,\n importFileParams,\n utils,\n groupName,\n metaInfo,\n filterTypes,\n configuration,\n}: NewEndpointTmplParams) => {\n const { _ } = utils;\n const positiveResponseTypes = route.raw.responsesTypes?.filter(\n (it) =>\n +it.status >= 200 &&\n +it.status < 300 &&\n (!(it as AnyObject).typeData || filterTypes((it as AnyObject).typeData)),\n );\n\n const { requestBodyInfo, responseBodyInfo } = route as AnyObject;\n const routeRequest = route.request as AnyObject;\n const routeResponse = route.response;\n\n const { parameters, path, method, payload, query, requestParams, security } =\n routeRequest;\n const { raw } = route;\n const queryName = query?.name || 'query';\n const pathParams = _.values(parameters);\n const pathParamsNames = _.map(pathParams, 'name');\n\n type RequestParam = {\n name: string;\n optional?: boolean;\n type: string;\n defaultValue?: string;\n };\n\n const requestConfigParam: RequestParam = {\n name: 'requestParams',\n optional: true,\n type: 'RequestParams',\n defaultValue: '{}',\n };\n\n const inputParams = [\n ...pathParams,\n payload,\n query,\n requestConfigParam,\n ].filter(Boolean);\n\n const getArgs = ({\n withPayload,\n withRequestConfigParam,\n }: {\n withPayload?: boolean;\n withRequestConfigParam?: boolean;\n }): RequestParam[] => {\n return _.sortBy(\n _.compact([\n ...(requestParams\n ? [\n {\n name:\n pathParams.length > 0\n ? `{ ${_.join(pathParamsNames, ', ')}, ...${queryName} }`\n : queryName,\n optional: false,\n type: utils.getInlineParseContent(requestParams),\n },\n ]\n : pathParams),\n withPayload && payload,\n withRequestConfigParam && requestConfigParam,\n ]),\n [(o: AnyObject) => o.optional],\n );\n };\n\n const tags = (raw.tags || []).filter(Boolean);\n const requestOutputDataTypes = positiveResponseTypes.map((it) => it.type);\n\n const foundErrorModelType =\n (routeResponse.errorType &&\n configuration.modelTypes.find(\n (it) => it.name === routeResponse.errorType,\n )) ||\n null;\n\n const requestOutputErrorType = foundErrorModelType\n ? routeResponse.errorType\n : 'any';\n\n const pathParamsToInline = path.split('/').slice(1) as string[];\n\n let lastDynamicStructPos = 0;\n\n const queryParamStruct =\n query == null\n ? null\n : {\n type: 'dynamic',\n key: 'params',\n i: pathParamsToInline.length,\n param: lastDynamicStructPos > 0 ? lastDynamicStructPos - 1 : 0,\n };\n\n if (queryParamStruct && !lastDynamicStructPos) {\n lastDynamicStructPos++;\n }\n\n const requestInfoMeta = codegenParams.getEndpointMeta?.(route, utils);\n const requestMeta = codegenParams.getRequestMeta?.(route, utils);\n const resultPath =\n (codegenParams.requestPathPrefix ?? '') +\n path +\n (codegenParams.requestPathSuffix ?? '');\n\n const bodyContentType =\n requestContentKind[requestBodyInfo.contentKind] || null;\n const responseFormat =\n responseContentKind[responseBodyInfo.success?.schema?.contentKind] || null;\n\n const reservedDataContractNames: string[] = _.uniq([\n ...requestOutputDataTypes,\n requestOutputErrorType || 'any',\n ...getArgs({\n withPayload: true,\n }).map((it) => it.type),\n ]);\n\n const pathDeclaration = resultPath.replaceAll('$', '');\n\n const getHttpRequestGenerics = () => {\n const defaultOkResponse = positiveResponseTypes?.[0]?.type || 'unknown';\n const defaultBadResponse = requestOutputErrorType;\n const responses =\n raw.responsesTypes?.filter(\n (it) =>\n it.status !== 'default' &&\n (!(it as AnyObject).typeData ||\n filterTypes((it as AnyObject).typeData)),\n ) || [];\n\n if (!responses?.length) {\n return `HttpResponse<unknown, ${requestOutputErrorType}>`;\n }\n\n if (responses.length === 1 && responses[0].isSuccess) {\n return `HttpResponse<${responses[0].type}, ${requestOutputErrorType}>`;\n }\n\n return `HttpMultistatusResponse<{\n ${responses\n .map((it: AnyObject) => {\n return [\n it.description && `/** ${it.description} */`,\n `${it.status}: ${it.type};`,\n ]\n .filter(Boolean)\n .join('\\n');\n })\n .join('\\n')}\n },\n ${defaultOkResponse},\n ${defaultBadResponse}\n >`;\n };\n\n const requestInputTypeDc = createShortModelType({\n typeIdentifier: 'type',\n name: _.upperFirst(_.camelCase(`${route.routeName.usage}Params`)),\n content: `{\n ${inputParams\n .map(({ name, optional, type }) => {\n return `${name}${optional ? '?' : ''}:${type}`;\n })\n .filter(Boolean)\n .join(', ')}\n }`,\n });\n\n const isAllowedInputType = filterTypes(requestInputTypeDc);\n\n return {\n reservedDataContractNames,\n localModelTypes: isAllowedInputType ? [requestInputTypeDc] : [],\n content: `\nnew ${importFileParams.endpoint.exportName}<\n ${getHttpRequestGenerics()},\n ${isAllowedInputType ? requestInputTypeDc.name : 'any'},\n ${requestInfoMeta?.typeName ?? 'any'}\n>(\n {\n params: ({\n ${inputParams.map((it) => it.name)}\n}) => ({\n path: \\`${resultPath}\\`,\n method: '${_.upperCase(method)}',\n ${requestMeta?.tmplData ? `meta: ${requestMeta.tmplData},` : ''}\n ${query == null ? '' : `query: ${query.name},`}\n ${payload?.name ? `body: ${payload.name},` : ''}\n ${security ? 'secure: true,' : ''}\n ${bodyContentType ? `contentType: ${bodyContentType},` : ''}\n ${responseFormat ? `format: ${responseFormat},` : ''}\n ...${requestConfigParam.name},\n }),\n requiredParams: [${inputParams.filter((it) => !it.optional).map((it) => `\"${it.name}\"`)}],\n operationId: \"${raw.operationId || _.camelCase(route.routeName.usage)}\",\n path: [${pathDeclaration\n .split('/')\n .filter(Boolean)\n .map((it) => `\"${it}\"`)}],\n tags: [${tags.map((tag: string) => {\n if (metaInfo) {\n return `Tag.${formatTagNameEnumKey(tag, utils)}`;\n }\n return `\"${tag}\"`;\n })}],\n ${groupName ? `group: ${metaInfo ? `Group.${formatGroupNameEnumKey(groupName, utils)}` : `\"${groupName}\"`},` : ''}\n ${metaInfo?.namespace ? `namespace,` : ''}\n meta: ${requestInfoMeta?.tmplData ?? '{} as any'},\n },\n ${importFileParams.queryClient.exportName},\n ${importFileParams.httpClient.exportName},\n) \n`\n .split('\\n')\n .map((it) => it.trim())\n .filter(Boolean)\n .join('\\n'),\n };\n};\n","import type { ParsedRoute } from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { BaseTmplParams, MetaInfo } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\nimport { dataContractTmpl } from './data-contract.tmpl.js';\nimport { endpointJSDocTmpl } from './endpoint-jsdoc.tmpl.js';\nimport { newEndpointTmpl } from './new-endpoint.tmpl.js';\n\nexport interface AllEndpointPerFileTmplParams extends BaseTmplParams {\n routes: ParsedRoute[];\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n relativePathDataContracts: string;\n}\n\nexport const allEndpointPerFileTmpl = async (\n params: AllEndpointPerFileTmplParams,\n) => {\n const {\n routes,\n configuration,\n codegenParams,\n formatTSContent,\n importFileParams,\n utils,\n relativePathDataContracts,\n groupName,\n metaInfo,\n } = params;\n\n const { _ } = utils;\n\n const dataContractNamesInThisFile: string[] = [];\n\n const newEndpointTemplates = routes.map((route) => {\n const newEndpointTemplateData = newEndpointTmpl({\n ...params,\n route,\n });\n const { reservedDataContractNames } = newEndpointTemplateData;\n\n const dataContactNames = new Set(\n Object.keys(\n (configuration.config.swaggerSchema as any)?.components?.schemas,\n ).map((schemaName) => utils.formatModelName(schemaName)),\n );\n\n reservedDataContractNames.forEach((reservedDataContractName) => {\n if (!dataContactNames.has(reservedDataContractName)) {\n dataContractNamesInThisFile.push(reservedDataContractName);\n }\n });\n\n return { ...newEndpointTemplateData, route };\n });\n\n const extraImportLines: string[] = [];\n\n const endpointTemplates = await Promise.all(\n newEndpointTemplates.map(\n async ({\n content: requestInfoInstanceContent,\n localModelTypes,\n route,\n }) => {\n const requestInfoMeta = codegenParams.getEndpointMeta?.(route, utils);\n\n if (requestInfoMeta?.typeNameImportPath && requestInfoMeta.typeName) {\n extraImportLines.push(\n `import { ${requestInfoMeta.typeName} } from \"${requestInfoMeta.typeNameImportPath}\";`,\n );\n }\n\n return `\n ${(\n await Promise.all(\n localModelTypes.map(async (modelType) => {\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n \n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent} \n`;\n },\n ),\n );\n\n if (metaInfo) {\n extraImportLines.push(\n `import { ${[groupName && 'Group', metaInfo?.namespace && 'namespace', 'Tag'].filter(Boolean).join(',')} } from \"${groupName ? '../' : './'}meta-info\";`,\n );\n }\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: await formatTSContent(`${LINTERS_IGNORE}\n import {\n RequestParams,\n HttpResponse,\n HttpMultistatusResponse,\n } from \"${codegenParams.libImports?.['mobx-tanstack-query-api'] ?? 'mobx-tanstack-query-api'}\";\n import { ${importFileParams.endpoint.exportName} } from \"${importFileParams.endpoint.path}\";\n import { ${importFileParams.httpClient.exportName} } from \"${importFileParams.httpClient.path}\";\n import { ${importFileParams.queryClient.exportName} } from \"${importFileParams.queryClient.path}\";\n ${extraImportLines.join('\\n')}\n\n ${\n configuration.modelTypes.length > 0\n ? `\n import { ${configuration.modelTypes\n .map((it: AnyObject) => it.name)\n .filter(\n (it: any) => !dataContractNamesInThisFile.includes(it),\n )} } from \"${relativePathDataContracts}\";\n `\n : ''\n }\n\n ${(\n await Promise.all(\n dataContractNamesInThisFile.map(async (dataContractName) => {\n const modelType = configuration.modelTypes.find(\n (modelType: AnyObject) => modelType.name === dataContractName,\n );\n\n if (!modelType) {\n return '';\n }\n\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n\n ${endpointTemplates.filter(Boolean).join('\\n\\n')}\n `),\n };\n};\n","import type { Maybe } from 'yummies/types';\n\nimport type {\n BaseTmplParams,\n CodegenDataUtils,\n MetaInfo,\n} from '../types/index.js';\n\nimport { LINTERS_IGNORE } from './constants.js';\n\nexport interface AllExportsTmplParams extends BaseTmplParams {\n collectedExportFiles: string[];\n metaInfo: Maybe<MetaInfo>;\n}\n\nexport const formatGroupNameEnumKey = (\n groupName: string,\n { _ }: CodegenDataUtils,\n) => _.upperFirst(_.camelCase(groupName));\n\nexport const allExportsTmpl = async ({\n collectedExportFiles,\n metaInfo,\n formatTSContent,\n}: AllExportsTmplParams) => {\n return await formatTSContent(`${LINTERS_IGNORE}\n export * from './data-contracts';\n ${collectedExportFiles.map((fileName) => `export * from './${fileName}';`).join('\\n')}\n ${metaInfo ? 'export * from \"./meta-info\";' : ''}\n `);\n};\n","import type { BaseTmplParams } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\nimport { dataContractTmpl } from './data-contract.tmpl.js';\n\nexport interface DataContractsTmplParams extends BaseTmplParams {\n excludedDataContractNames?: string[];\n}\n\nexport const dataContractsFileTmpl = async (\n params: DataContractsTmplParams,\n) => {\n const { config, modelTypes } = params.configuration;\n\n const contractDefinitions: string[] = [];\n\n if (config.internalTemplateOptions?.addUtilRequiredKeysType) {\n contractDefinitions.push(\n `type UtilRequiredKeys<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>`,\n );\n }\n\n for await (const contract of modelTypes) {\n if (params.excludedDataContractNames?.includes(contract.name)) {\n continue;\n }\n\n contractDefinitions.push(\n await dataContractTmpl({\n ...params,\n contract,\n addExportKeyword: true,\n }),\n );\n }\n\n return await params.formatTSContent(`${LINTERS_IGNORE}\n\n${contractDefinitions.length > 0 ? contractDefinitions.join('\\n\\n') : `export {}`}\n `);\n};\n","import type { ParsedRoute } from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { BaseTmplParams, MetaInfo } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\nimport { dataContractTmpl } from './data-contract.tmpl.js';\nimport { endpointJSDocTmpl } from './endpoint-jsdoc.tmpl.js';\nimport { newEndpointTmpl } from './new-endpoint.tmpl.js';\n\nexport interface EndpointPerFileTmplParams extends BaseTmplParams {\n route: ParsedRoute;\n relativePathDataContracts: string;\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n}\n\nexport const endpointPerFileTmpl = async (\n params: EndpointPerFileTmplParams,\n) => {\n const {\n route,\n configuration,\n codegenParams,\n formatTSContent,\n importFileParams,\n utils,\n relativePathDataContracts,\n groupName,\n metaInfo,\n } = params;\n const { _ } = utils;\n\n const {\n content: requestInfoInstanceContent,\n reservedDataContractNames,\n localModelTypes,\n } = newEndpointTmpl({\n ...params,\n route,\n groupName,\n metaInfo,\n });\n\n const dataContactNames = new Set(\n Object.keys(\n (configuration.config.swaggerSchema as any)?.components?.schemas,\n ).map((schemaName) => utils.formatModelName(schemaName)),\n );\n\n const dataContractNamesInThisFile: string[] = [];\n\n reservedDataContractNames.forEach((reservedDataContractName) => {\n if (!dataContactNames.has(reservedDataContractName)) {\n dataContractNamesInThisFile.push(reservedDataContractName);\n }\n });\n\n const extraImportLines: string[] = [];\n\n if (metaInfo) {\n extraImportLines.push(\n `import { ${[groupName && 'Group', metaInfo?.namespace && 'namespace', 'Tag'].filter(Boolean).join(',')} } from \"../${groupName ? '../' : ''}meta-info\";`,\n );\n }\n\n const requestInfoMeta = codegenParams.getEndpointMeta?.(route, utils);\n\n if (requestInfoMeta?.typeNameImportPath && requestInfoMeta.typeName) {\n extraImportLines.push(\n `import { ${requestInfoMeta.typeName} } from \"${requestInfoMeta.typeNameImportPath}\";`,\n );\n }\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: await formatTSContent(`${LINTERS_IGNORE}\n import {\n RequestParams,\n HttpResponse,\n HttpMultistatusResponse,\n } from \"${codegenParams.libImports?.['mobx-tanstack-query-api'] ?? 'mobx-tanstack-query-api'}\";\n import { ${importFileParams.endpoint.exportName} } from \"${importFileParams.endpoint.path}\";\n import { ${importFileParams.httpClient.exportName} } from \"${importFileParams.httpClient.path}\";\n import { ${importFileParams.queryClient.exportName} } from \"${importFileParams.queryClient.path}\";\n ${extraImportLines.join('\\n')}\n\n ${\n configuration.modelTypes.length > 0\n ? `\n import { ${configuration.modelTypes\n .map((it: AnyObject) => it.name)\n .filter(\n (it: any) => !dataContractNamesInThisFile.includes(it),\n )} } from \"${relativePathDataContracts}\";\n `\n : ''\n }\n\n ${(\n await Promise.all(\n dataContractNamesInThisFile.map(async (dataContractName) => {\n const modelType = configuration.modelTypes.find(\n (modelType: AnyObject) => modelType.name === dataContractName,\n );\n\n if (!modelType) {\n return '';\n }\n\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n\n ${(\n await Promise.all(\n localModelTypes.map(async (modelType) => {\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n \n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent}\n `),\n };\n};\n","import type { BaseTmplParams } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\n\nexport interface IndexTsForEndpointPerFileTmplParams extends BaseTmplParams {\n generatedRequestFileNames: string[];\n}\n\nexport const indexTsForEndpointPerFileTmpl = async ({\n generatedRequestFileNames,\n}: IndexTsForEndpointPerFileTmplParams) => {\n return `${LINTERS_IGNORE}\n${generatedRequestFileNames.map((fileName) => `export * from './${fileName.replace('.ts', '')}';`).join('\\n')}\n`;\n};\n","import type { Maybe } from 'yummies/types';\n\ntype AnyFilterOptionFn = (...args: any[]) => boolean;\n\nexport type FilterOption<T extends AnyFilterOptionFn> =\n | T\n | string\n | RegExp\n | (RegExp | string)[];\n\nexport type UnpackedFilterOption<T extends FilterOption<any>> = Extract<\n T,\n AnyFilterOptionFn\n>;\n\nexport const unpackFilterOption = <\n TOption extends FilterOption<AnyFilterOptionFn>,\n>(\n option: Maybe<TOption>,\n argsToString: (...args: Parameters<UnpackedFilterOption<TOption>>) => string,\n defaultReturnValue: boolean = true,\n): UnpackedFilterOption<TOption> => {\n if (typeof option === 'function') {\n // @ts-expect-error\n return option;\n }\n\n if (option == null) {\n // @ts-expect-error\n return () => defaultReturnValue;\n }\n\n const inputs = Array.isArray(option) ? option : [option];\n\n // @ts-expect-error\n return (...args: Parameters<UnpackedFilterOption<TOption>>) =>\n inputs.some((input) => {\n const str = argsToString(...args);\n\n if (typeof input === 'string') {\n return input === str;\n }\n\n return input.test(str);\n });\n};\n","import path from 'node:path';\nimport { type ExportedDeclarations, Node, Project, SyntaxKind } from 'ts-morph';\nimport {\n type FilterOption,\n unpackFilterOption,\n} from './unpack-filter-option.js';\n\nexport interface RemoveUnusedTypesParams {\n directory: string;\n keepTypes?: FilterOption<(typeName: string) => boolean>;\n}\n\nconst removeUnusedTypesItteration = async ({\n directory,\n keepTypes,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n}: RemoveUnusedTypesParams) => {\n const project = new Project();\n\n project.addSourceFilesAtPaths([\n path.join(directory, '**/*.ts'),\n path.join(directory, '**/*.tsx'),\n ]);\n\n const dataContractsSourceFile = project.getSourceFile((sourceFile) =>\n sourceFile.getFilePath().includes(`${directory}/data-contracts.ts`),\n );\n\n if (!dataContractsSourceFile) return;\n\n const exportedDeclarations =\n dataContractsSourceFile.getExportedDeclarations();\n const candidateTypes = new Map<string, ExportedDeclarations[]>();\n\n for (const [name, declarations] of exportedDeclarations) {\n const validDeclarations = declarations.filter(\n (decl) =>\n decl.getKind() === SyntaxKind.InterfaceDeclaration ||\n decl.getKind() === SyntaxKind.TypeAliasDeclaration ||\n decl.getKind() === SyntaxKind.EnumDeclaration,\n );\n\n if (validDeclarations.length > 0) {\n candidateTypes.set(name, validDeclarations);\n }\n }\n\n if (candidateTypes.size === 0) return;\n\n const usedTypes = new Set<string>();\n const externalFiles = project\n .getSourceFiles()\n .filter((sf) => sf !== dataContractsSourceFile);\n\n for (const file of externalFiles) {\n const identifiers = file.getDescendantsOfKind(SyntaxKind.Identifier);\n for (const identifier of identifiers) {\n const name = identifier.getText();\n if (candidateTypes.has(name)) {\n usedTypes.add(name);\n }\n }\n\n const memberAccessExpressions = file.getDescendantsOfKind(\n SyntaxKind.PropertyAccessExpression,\n );\n for (const expr of memberAccessExpressions) {\n const expression = expr.getExpression();\n if (Node.isIdentifier(expression)) {\n const name = expression.getText();\n if (candidateTypes.has(name)) {\n usedTypes.add(name);\n }\n }\n }\n }\n\n const dependencyGraph = new Map<string, Set<string>>();\n\n for (const [name, declarations] of candidateTypes) {\n const dependencies = new Set<string>();\n\n for (const decl of declarations) {\n const typeReferences = decl.getDescendantsOfKind(\n SyntaxKind.TypeReference,\n );\n for (const ref of typeReferences) {\n const typeName = ref.getTypeName().getText();\n if (candidateTypes.has(typeName)) {\n dependencies.add(typeName);\n }\n }\n\n if (decl.getKind() === SyntaxKind.EnumDeclaration) {\n const initializers = decl.getDescendantsOfKind(SyntaxKind.Identifier);\n for (const init of initializers) {\n const text = init.getText();\n if (candidateTypes.has(text)) {\n dependencies.add(text);\n }\n }\n }\n }\n\n dependencyGraph.set(name, dependencies);\n }\n\n const queue = Array.from(usedTypes);\n const visited = new Set(usedTypes);\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (dependencyGraph.has(current)) {\n for (const dep of dependencyGraph.get(current)!) {\n if (!visited.has(dep)) {\n visited.add(dep);\n usedTypes.add(dep);\n queue.push(dep);\n }\n }\n }\n }\n\n let removedCount = 0;\n\n const isNeedToRemoveType = unpackFilterOption(\n keepTypes,\n (name) => name,\n false,\n );\n\n for (const [name, declarations] of candidateTypes) {\n if (usedTypes.has(name)) continue;\n\n for (const decl of declarations) {\n if ('remove' in decl && isNeedToRemoveType(name)) {\n decl.remove();\n removedCount++;\n }\n }\n }\n\n if (removedCount > 0) {\n await dataContractsSourceFile.save();\n }\n\n return removedCount;\n};\n\nexport const removeUnusedTypes = async (params: RemoveUnusedTypesParams) => {\n while (true) {\n const removedCount = (await removeUnusedTypesItteration(params)) ?? 0;\n if (removedCount === 0) break;\n }\n};\n","import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { cloneDeep } from 'lodash-es';\nimport {\n type GenerateApiConfiguration,\n generateApi as generateApiFromSwagger,\n type ParsedRoute,\n} from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport { allEndpointPerFileTmpl } from './templates/all-endpoints-per-file.tmpl.js';\nimport { allExportsTmpl } from './templates/all-exports.tmpl.js';\nimport { LINTERS_IGNORE } from './templates/constants.js';\nimport { dataContractsFileTmpl } from './templates/data-contracts-file.tmpl.js';\nimport { endpointPerFileTmpl } from './templates/endpoint-per-file.tmpl.js';\nimport { indexTsForEndpointPerFileTmpl } from './templates/index-ts-for-endpoint-per-file.tmpl.js';\nimport { metaInfoTmpl } from './templates/meta-info.tmpl.js';\nimport type {\n AllImportFileParams,\n BaseTmplParams,\n CodegenDataUtils,\n GenerateQueryApiParams,\n MetaInfo,\n} from './types/index.js';\nimport { removeUnusedTypes } from './utils/remove-unused-types.js';\nimport { unpackFilterOption } from './utils/unpack-filter-option.js';\n\nexport * from './types/index.js';\n\nconst __filename = fileURLToPath(import.meta.url);\n\nconst __dirname = path.dirname(__filename);\nconst __execdirname = process.cwd();\n\nexport const generateApi = async (\n params: GenerateQueryApiParams | GenerateQueryApiParams[],\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n): Promise<void> => {\n if (Array.isArray(params)) {\n for await (const param of params) {\n await generateApi(param);\n }\n return;\n }\n\n const tsconfigPath = params.tsconfigPath\n ? path.resolve(__execdirname, params.tsconfigPath)\n : path.resolve(__execdirname, './tsconfig.json');\n\n console.info('using tsconfig', tsconfigPath);\n\n const importFileParams: AllImportFileParams = {\n queryClient:\n !params.queryClient || typeof params.queryClient === 'string'\n ? {\n exportName: 'queryClient',\n path: 'mobx-tanstack-query-api/builtin',\n }\n : params.queryClient,\n endpoint:\n !params.endpoint || typeof params.endpoint === 'string'\n ? {\n exportName: 'Endpoint',\n path: 'mobx-tanstack-query-api',\n }\n : params.endpoint,\n httpClient:\n !params.httpClient || typeof params.httpClient === 'string'\n ? {\n exportName: 'http',\n path: 'mobx-tanstack-query-api/builtin',\n }\n : params.httpClient,\n };\n\n const paths = {\n templates: path.resolve(__dirname, 'templates'),\n requestInfoClass: path.resolve(\n __dirname,\n 'templates/request-info-class.ejs',\n ),\n httpClient: path.resolve(__dirname, 'templates/http-client.ejs'),\n createRequestInfoInstance: path.resolve(\n __dirname,\n 'templates/create-request-info-instance.ejs',\n ),\n outputDir: path.resolve(process.cwd(), params.output),\n };\n\n //#region swagger-typescript-api\n const swaggerTypescriptApiCodegenBaseParams: Partial<AnyObject> = {\n httpClientType: 'fetch',\n cleanOutput: params.cleanOutput ?? true,\n modular: true,\n patch: true,\n typeSuffix: 'DC',\n disableStrictSSL: false,\n singleHttpClient: true,\n extractRequestBody: true,\n extractRequestParams: false,\n extractResponseBody: true,\n extractResponseError: true,\n generateResponses: true,\n generateClient: false,\n addReadonly: true,\n moduleNameFirstTag: true,\n sortTypes: true,\n templates: paths.templates.toString(),\n primitiveTypeConstructs: (constructs: AnyObject) => {\n return {\n ...(constructs as any),\n object: () => `Record<string, any>`,\n float: () => `number`,\n ...params.otherCodegenParams?.primitiveTypeConstructs?.(constructs),\n };\n },\n requestOptions: params.fetchSchemaRequestOptions,\n ...params.otherCodegenParams,\n };\n\n let codegenProcess!: any;\n\n if (!params.input) {\n console.warn(\n '[mobx-tanstack-query-api/codegen]',\n 'input is not specified',\n '\\nprocess will be skipped',\n );\n return;\n }\n\n const inputToCodegenInput = (input: Maybe<string | AnyObject>): AnyObject => {\n const inputData: AnyObject = {};\n\n if (typeof input === 'string') {\n inputData.input = input;\n inputData.url = input;\n } else {\n inputData.spec = input;\n }\n\n return inputData;\n };\n let mixinSwaggerSchema: Maybe<AnyObject> = null;\n\n if (params.mixinInput) {\n await generateApiFromSwagger({\n ...(swaggerTypescriptApiCodegenBaseParams as any),\n ...inputToCodegenInput(params.mixinInput),\n hooks: {\n onInit: (configuration) => {\n mixinSwaggerSchema = cloneDeep(configuration.swaggerSchema);\n },\n onPrepareConfig: (config) => {\n config.routes.combined?.forEach((routeInfo) => {\n routeInfo.routes.sort((routeA, routeB) =>\n routeA.routeName.usage.localeCompare(routeB.routeName.usage),\n );\n });\n },\n onFormatRouteName: (routeInfo, usageRouteName) => {\n let formattedRouteName = usageRouteName;\n\n if (\n params.addPathSegmentToRouteName === true ||\n typeof params.addPathSegmentToRouteName === 'number'\n ) {\n const pathSegmentForSuffix =\n typeof params.addPathSegmentToRouteName === 'number'\n ? params.addPathSegmentToRouteName\n : 0;\n\n const pathSegments = routeInfo.route.split('/').filter(Boolean);\n const { _ } = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n formattedRouteName = _.camelCase(\n `${pathSegments[pathSegmentForSuffix] || ''}_${formattedRouteName}`,\n );\n }\n\n const endpointName = formattedRouteName;\n\n return (\n params?.formatEndpointName?.(endpointName, routeInfo) ??\n swaggerTypescriptApiCodegenBaseParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n endpointName,\n ) ??\n endpointName\n );\n },\n },\n });\n }\n\n const generated = await generateApiFromSwagger({\n ...(swaggerTypescriptApiCodegenBaseParams as any),\n ...inputToCodegenInput(params.input),\n hooks: {\n onInit: (configuration, codeGenProcessFromInit) => {\n codegenProcess = codeGenProcessFromInit;\n\n const resultSwaggerSchema = configuration.swaggerSchema as AnyObject;\n\n resultSwaggerSchema.components = resultSwaggerSchema.components || {};\n resultSwaggerSchema.components.schemas =\n resultSwaggerSchema.components.schemas || {};\n\n resultSwaggerSchema.paths = {\n ...resultSwaggerSchema.paths,\n ...mixinSwaggerSchema?.paths,\n };\n\n resultSwaggerSchema.components.schemas = {\n ...resultSwaggerSchema.components.schemas,\n ...mixinSwaggerSchema?.components?.schemas,\n };\n\n return swaggerTypescriptApiCodegenBaseParams?.hooks?.onInit?.(\n configuration,\n codeGenProcessFromInit,\n );\n },\n onPrepareConfig: (config) => {\n config.routes.combined?.forEach((routeInfo) => {\n routeInfo.routes.sort((routeA, routeB) =>\n routeA.routeName.usage.localeCompare(routeB.routeName.usage),\n );\n });\n return swaggerTypescriptApiCodegenBaseParams?.hooks?.onPrepareConfig?.(\n config,\n );\n },\n onFormatRouteName: (routeInfo, usageRouteName) => {\n let formattedRouteName = usageRouteName;\n\n if (\n params.addPathSegmentToRouteName === true ||\n typeof params.addPathSegmentToRouteName === 'number'\n ) {\n const pathSegmentForSuffix =\n typeof params.addPathSegmentToRouteName === 'number'\n ? params.addPathSegmentToRouteName\n : 0;\n\n const pathSegments = routeInfo.route.split('/').filter(Boolean);\n const { _ } = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n formattedRouteName = _.camelCase(\n `${pathSegments[pathSegmentForSuffix] || ''}_${formattedRouteName}`,\n );\n }\n\n const endpointName = formattedRouteName;\n\n return (\n params?.formatEndpointName?.(endpointName, routeInfo) ??\n swaggerTypescriptApiCodegenBaseParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n endpointName,\n ) ??\n endpointName\n );\n },\n },\n });\n\n //#endregion\n\n const utils = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n const { _ } = utils;\n\n const shouldGenerateBarrelFiles = !params.noBarrelFiles;\n\n let namespace: Maybe<string> = null;\n\n if (params.namespace) {\n if (typeof params.namespace === 'function') {\n namespace = params.namespace(utils);\n } else {\n namespace = utils._.camelCase(params.namespace);\n }\n }\n\n const codegenFs = codegenProcess.fileSystem as any;\n\n codegenFs.cleanDir(params.output);\n codegenFs.createDir(params.output);\n\n const filterTypes = unpackFilterOption(\n params.filterTypes,\n (modelType) => modelType.name,\n );\n\n generated.configuration.modelTypes =\n generated.configuration.modelTypes.filter((modelType) =>\n filterTypes(modelType),\n );\n\n const allRoutes = Object.values(generated.configuration.routes)\n .flat()\n .flatMap((routeGroup) =>\n 'routes' in routeGroup ? routeGroup.routes : routeGroup,\n );\n\n const filterEndpoint = unpackFilterOption(\n params.filterEndpoints,\n (route) => route.raw?.operationId || '',\n );\n\n const baseTmplParams: BaseTmplParams = {\n ...generated,\n codegenParams: params,\n configuration: generated.configuration as GenerateApiConfiguration,\n formatTSContent: generated.formatTSContent,\n codegenProcess,\n importFileParams,\n utils,\n filterTypes,\n };\n\n const reservedDataContractNamesMap = new Map<string, number>();\n\n const collectedExportFilesFromIndexFile: string[] = [];\n\n const groupsMap = new Map<string, ParsedRoute[]>();\n const nonEmptyGroups = new Set<string>();\n const tagsSet = new Set<string>();\n\n if (params.groupBy == null) {\n collectedExportFilesFromIndexFile.push('endpoints');\n\n if (params.outputType === 'one-endpoint-per-file') {\n // #region кодогенерация 1 эндпоинт - 1 файл без группировки\n codegenFs.createDir(path.resolve(params.output, 'endpoints'));\n\n const fileNamesWithRequestInfo: string[] = [];\n\n for await (const route of allRoutes) {\n const {\n content: requestInfoPerFileContent,\n reservedDataContractNames,\n } = await endpointPerFileTmpl({\n ...baseTmplParams,\n route,\n relativePathDataContracts: '../data-contracts',\n groupName: null,\n metaInfo: params.noMetaInfo\n ? null\n : {\n groupNames: [],\n namespace,\n },\n });\n\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag) => {\n tagsSet.add(tag);\n });\n }\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n if (!filterEndpoint(route)) {\n continue;\n }\n\n const fileName = `${_.kebabCase(route.routeName.usage)}.ts`;\n\n fileNamesWithRequestInfo.push(fileName);\n\n codegenFs.createFile({\n path: path.resolve(params.output, 'endpoints'),\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: path.resolve(params.output, 'endpoints'),\n fileName: 'index.ts',\n withPrefix: false,\n content: await indexTsForEndpointPerFileTmpl({\n ...baseTmplParams,\n generatedRequestFileNames: fileNamesWithRequestInfo,\n }),\n });\n }\n // #endregion\n } else {\n // #region кодогенерация несколько эндпоинтов в 1 файле без группировки\n const { content: requestInfoPerFileContent, reservedDataContractNames } =\n await allEndpointPerFileTmpl({\n ...baseTmplParams,\n routes: allRoutes,\n relativePathDataContracts: './data-contracts',\n groupName: null,\n metaInfo: params.noMetaInfo\n ? null\n : {\n namespace,\n groupNames: [],\n },\n });\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n const filteredRoutes = allRoutes.filter(filterEndpoint);\n\n const hasFilteredRoutes = filteredRoutes.length > 0;\n\n if (hasFilteredRoutes) {\n filteredRoutes.forEach((route) => {\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag: string) => {\n tagsSet.add(tag);\n });\n }\n });\n\n const fileName = 'endpoints.ts';\n\n collectedExportFilesFromIndexFile.push('endpoints');\n\n codegenFs.createFile({\n path: params.output,\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n\n // #endregion\n }\n } else {\n // #region кодогенерация с группировкой\n\n // #region разбиение роутов по группам\n\n allRoutes.forEach((route) => {\n let group: string | undefined;\n\n if (typeof params.groupBy === 'function') {\n group = params.groupBy(route);\n } else if (params.groupBy?.includes('path-segment')) {\n const segmentIndex =\n +params.groupBy.replaceAll(/path-segment-?/g, '') || 0;\n\n group =\n (route.request as AnyObject).path?.split('/')?.filter(Boolean)?.[\n segmentIndex\n ] || undefined;\n } else if (params.groupBy?.includes('tag')) {\n const tagIndex = +params.groupBy.replaceAll(/tag-?/g, '') || 0;\n\n group = route.raw?.tags?.[tagIndex] ?? undefined;\n }\n\n if (group == null) {\n group = 'other';\n }\n\n if (!groupsMap.has(group)) {\n groupsMap.set(group, []);\n }\n\n groupsMap.get(group)?.push(route);\n });\n // #endregion\n\n const filterGroups = unpackFilterOption(\n params.filterGroups,\n (groupName) => groupName,\n );\n for await (const [groupName, routes] of groupsMap) {\n if (!filterGroups(groupName)) {\n continue;\n }\n\n const fileNamesWithRequestInfo: string[] = [];\n\n const groupDirectory = path.resolve(\n params.output,\n _.kebabCase(groupName),\n );\n\n codegenFs.createDir(groupDirectory);\n\n let hasFilteredRoutes = false;\n\n if (params.outputType === 'one-endpoint-per-file') {\n // #region Генерация одного эндпоинта на 1 файл\n codegenFs.createDir(path.resolve(groupDirectory, 'endpoints'));\n\n for await (const route of routes) {\n const {\n content: requestInfoPerFileContent,\n reservedDataContractNames,\n } = await endpointPerFileTmpl({\n ...baseTmplParams,\n route,\n relativePathDataContracts: '../../data-contracts',\n groupName,\n metaInfo: params.noMetaInfo\n ? null\n : {\n namespace,\n groupNames: [],\n },\n });\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n if (!filterEndpoint(route)) {\n continue;\n }\n\n hasFilteredRoutes = true;\n\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag: string) => {\n tagsSet.add(tag);\n });\n }\n\n const fileName = `${_.kebabCase(route.routeName.usage)}.ts`;\n\n fileNamesWithRequestInfo.push(fileName);\n\n codegenFs.createFile({\n path: path.resolve(\n params.output,\n _.kebabCase(groupName),\n 'endpoints',\n ),\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n // #endregion\n } else {\n // #region Генерация нескольких эндпоинтов на 1 файл\n const {\n content: requestInfoPerFileContent,\n reservedDataContractNames,\n } = await allEndpointPerFileTmpl({\n ...baseTmplParams,\n routes,\n relativePathDataContracts: '../data-contracts',\n groupName,\n metaInfo: params.noMetaInfo\n ? null\n : {\n namespace,\n groupNames: [],\n },\n });\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n const filteredRoutes = routes.filter(filterEndpoint);\n\n hasFilteredRoutes = filteredRoutes.length > 0;\n\n if (hasFilteredRoutes) {\n filteredRoutes.forEach((route) => {\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag: string) => {\n tagsSet.add(tag);\n });\n }\n });\n\n const fileName = 'endpoints.ts';\n\n fileNamesWithRequestInfo.push(fileName);\n\n codegenFs.createFile({\n path: groupDirectory,\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n\n // #endregion\n }\n\n if (hasFilteredRoutes) {\n nonEmptyGroups.add(groupName);\n const exportGroupName = params.formatExportGroupName\n ? params.formatExportGroupName(_.camelCase(groupName), utils)\n : _.camelCase(groupName);\n\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: groupDirectory,\n fileName: 'index.ts',\n withPrefix: false,\n content: `${LINTERS_IGNORE}\nexport * as ${exportGroupName} from './endpoints';\n`,\n });\n }\n\n if (\n shouldGenerateBarrelFiles &&\n params.outputType === 'one-endpoint-per-file'\n ) {\n codegenFs.createFile({\n path: path.resolve(groupDirectory, 'endpoints'),\n fileName: 'index.ts',\n withPrefix: false,\n content: await indexTsForEndpointPerFileTmpl({\n ...baseTmplParams,\n generatedRequestFileNames: fileNamesWithRequestInfo,\n }),\n });\n }\n\n collectedExportFilesFromIndexFile.push(_.kebabCase(groupName));\n } else {\n codegenFs.removeDir(\n path.resolve(params.output, _.kebabCase(groupName)),\n );\n }\n }\n // #endregion\n }\n\n const metaInfo: Maybe<MetaInfo> =\n !params.noMetaInfo &&\n (namespace ?? (nonEmptyGroups.size > 0 || tagsSet.size > 0))\n ? {\n namespace,\n groupNames: [...nonEmptyGroups.values()],\n tags: [...tagsSet.values()],\n }\n : null;\n\n const excludedDataContractNames = Array.from(\n reservedDataContractNamesMap.entries(),\n )\n .filter(([_, count]) => count === 1)\n .map(([name]) => name);\n\n const dataContractsContent = await dataContractsFileTmpl({\n ...baseTmplParams,\n excludedDataContractNames,\n });\n\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'data-contracts.ts',\n withPrefix: false,\n content: dataContractsContent,\n });\n\n if (metaInfo) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'meta-info.ts',\n withPrefix: false,\n content: await metaInfoTmpl({\n ...baseTmplParams,\n metaInfo,\n }),\n });\n }\n\n if (namespace) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: '__exports.ts',\n withPrefix: false,\n content: await allExportsTmpl({\n ...baseTmplParams,\n collectedExportFiles: collectedExportFilesFromIndexFile,\n metaInfo,\n }),\n });\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'index.ts',\n withPrefix: false,\n content: `${LINTERS_IGNORE}\nexport * as ${namespace} from './__exports';\n`,\n });\n }\n } else {\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'index.ts',\n withPrefix: false,\n content: await allExportsTmpl({\n ...baseTmplParams,\n collectedExportFiles: collectedExportFilesFromIndexFile,\n metaInfo,\n }),\n });\n }\n }\n\n if (params.removeUnusedTypes) {\n removeUnusedTypes({\n directory: params.output,\n keepTypes:\n params.removeUnusedTypes === true\n ? undefined\n : params.removeUnusedTypes.keepTypes,\n });\n }\n};\n","import type { Maybe } from 'yummies/types';\nimport type { GenerateQueryApiParams } from '../../codegen/types/index.js';\n\nexport const defineConfig = (\n ...configs: Maybe<GenerateQueryApiParams | GenerateQueryApiParams[]>[]\n): GenerateQueryApiParams[] => {\n return configs\n .flat()\n .filter((config): config is GenerateQueryApiParams => !!config);\n};\n"],"names":["contract","splitTextByLines","path","modelType","Project","SyntaxKind","Node","text","__filename","fileURLToPath","__dirname","generateApiFromSwagger","cloneDeep","_"],"mappings":"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"}
1
+ {"version":3,"file":"cli.cjs","sources":["../src/codegen/templates/constants.ts","../src/codegen/templates/data-contract.tmpl.ts","../src/codegen/templates/endpoint-jsdoc.tmpl.ts","../src/codegen/utils/create-short-model-type.ts","../src/codegen/templates/meta-info.tmpl.ts","../src/codegen/templates/new-endpoint.tmpl.ts","../src/codegen/templates/all-endpoints-per-file.tmpl.ts","../src/codegen/templates/all-exports.tmpl.ts","../src/codegen/templates/data-contracts-file.tmpl.ts","../src/codegen/templates/endpoint-per-file.tmpl.ts","../src/codegen/templates/index-ts-for-endpoint-per-file.tmpl.ts","../src/codegen/utils/unpack-filter-option.ts","../src/codegen/utils/remove-unused-types.ts","../src/codegen/index.ts","../src/cli/utils/define-config.ts"],"sourcesContent":["export const LINTERS_IGNORE = `/* eslint-disable */\n/* tslint:disable */`;\n","import type { AnyObject } from 'yummies/types';\nimport type { BaseTmplParams } from '../types/index.js';\n\nexport interface DataContractTmplParams extends BaseTmplParams {\n contract: AnyObject;\n addExportKeyword?: boolean;\n}\n\nconst buildGenerics = (contract: any) => {\n if (!contract.genericArgs?.length) return '';\n\n return (\n '<' +\n contract.genericArgs\n .map((arg: any) => {\n const { name, default: defaultType, extends: extendsType } = arg;\n return [\n name,\n extendsType && `extends ${extendsType}`,\n defaultType && `= ${defaultType}`,\n ]\n .filter(Boolean)\n .join(' ');\n })\n .join(', ') +\n '>'\n );\n};\n\nexport const dataContractTmpl = async ({\n contract,\n configuration,\n addExportKeyword,\n}: DataContractTmplParams) => {\n const { utils } = configuration;\n const { formatDescription } = utils;\n\n const dataContractTemplates: Record<string, (contract: any) => string> = {\n enum: (contract: any) => {\n return `enum ${contract.name} {\\r\\n${contract.content}\\r\\n}`;\n },\n interface: (contract: any) => {\n return `interface ${contract.name}${buildGenerics(contract)} {\\r\\n${contract.content}}`;\n },\n type: (contract: any) => {\n return `type ${contract.name}${buildGenerics(contract)} = ${contract.content === contract.name ? 'any' : contract.content}`;\n },\n };\n\n let result: string = '';\n\n let jsdoc = '';\n\n if (contract.description) {\n jsdoc = `/**\\n * ${formatDescription(contract.description, true)}\\n */\\n`;\n }\n\n if (jsdoc) {\n result += jsdoc;\n }\n\n const templateFn =\n dataContractTemplates[contract.typeIdentifier] ||\n dataContractTemplates.type;\n\n const contractType = `${addExportKeyword ? 'export ' : ''}${templateFn(contract)}`;\n\n return result + contractType;\n};\n","import { splitTextByLines } from 'yummies/text';\nimport type { AnyObject } from 'yummies/types';\nimport type { BaseTmplParams } from '../types/base-tmpl-params.js';\n\nexport interface EndpointJSDocTmplParams extends BaseTmplParams {\n route: AnyObject;\n offset?: number;\n}\n\nexport const endpointJSDocTmpl = (params: EndpointJSDocTmplParams) => {\n const { route, configuration, offset = 0 } = params;\n const { routeName } = route;\n const rawRoute = route.raw as AnyObject;\n const routeRequest = route.request as AnyObject;\n\n const { utils } = configuration;\n\n const { _, formatDescription } = utils;\n\n const jsDocLines: { name?: string; content?: string }[] = [];\n\n if (rawRoute.summary) {\n const summaryLines = splitTextByLines(rawRoute.summary, 60)\n .filter(Boolean)\n .map((line) => ({\n content: `**${formatDescription(line, true)}**`,\n }));\n\n if (summaryLines.length > 0) {\n jsDocLines.push(...summaryLines, { content: '' });\n }\n }\n\n if (rawRoute.description) {\n const descriptionLines = splitTextByLines(rawRoute.description, 60)\n .filter(Boolean)\n .map((line) => ({\n content: formatDescription(line, true),\n }));\n\n if (descriptionLines.length > 0) {\n jsDocLines.push(...descriptionLines, { content: '' });\n } else {\n jsDocLines.push({\n content: 'No description',\n });\n }\n } else {\n jsDocLines.push({\n content: 'No description',\n });\n }\n\n if (rawRoute.operationId) {\n jsDocLines.push({\n name: 'operationId',\n content: rawRoute.operationId,\n });\n }\n\n if (_.size(rawRoute.tags)) {\n jsDocLines.push({\n name: 'tags',\n content: rawRoute.tags.join(', '),\n });\n }\n\n jsDocLines.push({\n name: 'request',\n content: `**${_.upperCase(routeRequest.method)}:${rawRoute.route}**`,\n });\n\n if (rawRoute.deprecated) {\n jsDocLines.push({\n name: 'deprecated',\n });\n }\n\n if (routeName.duplicate) {\n jsDocLines.push(\n {\n name: 'duplicate',\n },\n {\n name: 'originalName',\n content: routeName.original,\n },\n );\n }\n\n if (routeRequest.security) {\n jsDocLines.push({\n name: 'secure',\n });\n }\n\n if (rawRoute.responsesTypes.length > 0) {\n jsDocLines.push({\n name: 'responses',\n });\n\n rawRoute.responsesTypes.forEach((response: AnyObject) => {\n jsDocLines.push({\n name: `**${response.status}**`,\n content: `${_.replace(_.replace(response.type, /\\/\\*/g, String.raw`\\*`), /\\*\\//g, '*\\\\')} ${response.description}`,\n });\n });\n }\n\n const jsdocContent = jsDocLines.map((it) => {\n let line: string = ' * ';\n\n if (it.name) {\n line += `@${it.name} `;\n }\n\n const content = (it.content ?? '').trimEnd();\n\n if (content) {\n line += content;\n }\n\n return line;\n });\n\n const result = `\n/**\n${jsdocContent.join('\\n')}\n */`;\n\n if (offset > 0) {\n return result\n .split('\\n')\n .map((line) => line.padStart(offset))\n .join('\\n');\n }\n\n return result;\n};\n","import type { ModelType } from 'swagger-typescript-api';\nimport type { PartialKeys } from 'yummies/types';\nimport type { TypeInfo } from '../types/type-info.js';\n\nexport const createShortModelType = (\n shortModelType: PartialKeys<\n ModelType,\n 'rawContent' | 'description' | 'typeIdentifier'\n >,\n): TypeInfo & ModelType => {\n return {\n ...shortModelType,\n typeIdentifier: shortModelType.typeIdentifier || 'type',\n rawContent: shortModelType.rawContent || shortModelType.content,\n description: shortModelType.description || '',\n };\n};\n","import type { AnyObject, Maybe } from 'yummies/types';\nimport type {\n BaseTmplParams,\n CodegenDataUtils,\n MetaInfo,\n} from '../types/index.js';\n\nimport { LINTERS_IGNORE } from './constants.js';\n\nexport interface MetaInfoTmplParams extends BaseTmplParams {\n metaInfo: Maybe<MetaInfo>;\n}\n\nexport const formatGroupNameEnumKey = (\n groupName: string,\n { _ }: CodegenDataUtils,\n) => _.upperFirst(_.camelCase(groupName));\n\nexport const formatTagNameEnumKey = (\n tagName: string,\n utils: CodegenDataUtils,\n) => formatGroupNameEnumKey(tagName, utils);\n\nexport const metaInfoTmpl = async ({\n metaInfo,\n utils,\n formatTSContent,\n codegenParams,\n ...other\n}: MetaInfoTmplParams) => {\n const tagsMap = new Map<string, AnyObject>(\n (other as any).configuration?.apiConfig?.tags?.map((it: AnyObject) => [\n it.name,\n it,\n ]),\n );\n\n return await formatTSContent(`${LINTERS_IGNORE}\n ${[\n metaInfo?.namespace && `export const namespace = \"${metaInfo?.namespace}\";`,\n metaInfo?.groupNames?.length &&\n `\nexport const enum Group {\n ${metaInfo?.groupNames.map((groupName) => `${formatGroupNameEnumKey(groupName, utils)} = \"${codegenParams.transforms?.groupEnumValue?.(groupName) ?? groupName}\"`).join(',\\n')}\n}\n`,\n metaInfo?.tags?.length &&\n `\nexport const enum Tag {\n ${metaInfo?.tags\n .map((tagName) => {\n const tagData = tagsMap.get(tagName);\n\n let description = tagData?.description;\n\n if (!description) {\n description = utils._.words(tagName).join(' ');\n }\n\n return [\n description && `/** ${description} */`,\n `${formatTagNameEnumKey(tagName, utils)} = \"${codegenParams.transforms?.tagEnumValue?.(tagName) ?? tagName}\"`,\n ]\n .filter(Boolean)\n .join('\\n');\n })\n .join(',\\n')}\n}\n`,\n ]\n .filter(Boolean)\n .join('\\n')}\n `);\n};\n","import type { ParsedRoute } from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { BaseTmplParams } from '../types/base-tmpl-params.js';\nimport type { MetaInfo } from '../types/index.js';\nimport { createShortModelType } from '../utils/create-short-model-type.js';\nimport {\n formatGroupNameEnumKey,\n formatTagNameEnumKey,\n} from './meta-info.tmpl.js';\n\nexport interface NewEndpointTmplParams extends BaseTmplParams {\n route: ParsedRoute;\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n}\n\n// RequestParams[\"type\"]\nconst requestContentKind: AnyObject = {\n URL_ENCODED: '\"application/x-www-form-urlencoded\"',\n FORM_DATA: '\"multipart/form-data\"',\n TEXT: '\"text/plain\"',\n JSON: '\"application/json\"',\n BINARY: '\"application/octet-stream\"',\n};\n// RequestParams[\"format\"]\nconst responseContentKind: AnyObject = {\n TEXT: '\"text\"',\n IMAGE: '\"blob\"',\n JSON: '\"json\"',\n FORM_DATA: '\"formData\"',\n BYTES: '\"bytes\"',\n};\n\nexport const newEndpointTmpl = ({\n route,\n codegenParams,\n importFileParams,\n utils,\n groupName,\n metaInfo,\n filterTypes,\n configuration,\n}: NewEndpointTmplParams) => {\n const { _ } = utils;\n const positiveResponseTypes = route.raw.responsesTypes?.filter(\n (it) =>\n +it.status >= 200 &&\n +it.status < 300 &&\n (!(it as AnyObject).typeData || filterTypes((it as AnyObject).typeData)),\n );\n\n const { requestBodyInfo, responseBodyInfo } = route as AnyObject;\n const routeRequest = route.request as AnyObject;\n const routeResponse = route.response;\n\n const { parameters, path, method, payload, query, requestParams, security } =\n routeRequest;\n const { raw } = route;\n const queryName = query?.name || 'query';\n const pathParams = _.values(parameters);\n const pathParamsNames = _.map(pathParams, 'name');\n\n type RequestParam = {\n name: string;\n optional?: boolean;\n type: string;\n defaultValue?: string;\n };\n\n const requestConfigParam: RequestParam = {\n name: 'requestParams',\n optional: true,\n type: 'RequestParams',\n defaultValue: '{}',\n };\n\n const inputParams = [\n ...pathParams,\n payload,\n query,\n requestConfigParam,\n ].filter(Boolean);\n\n const getArgs = ({\n withPayload,\n withRequestConfigParam,\n }: {\n withPayload?: boolean;\n withRequestConfigParam?: boolean;\n }): RequestParam[] => {\n return _.sortBy(\n _.compact([\n ...(requestParams\n ? [\n {\n name:\n pathParams.length > 0\n ? `{ ${_.join(pathParamsNames, ', ')}, ...${queryName} }`\n : queryName,\n optional: false,\n type: utils.getInlineParseContent(requestParams),\n },\n ]\n : pathParams),\n withPayload && payload,\n withRequestConfigParam && requestConfigParam,\n ]),\n [(o: AnyObject) => o.optional],\n );\n };\n\n const tags = (raw.tags || []).filter(Boolean);\n const requestOutputDataTypes = positiveResponseTypes.map((it) => it.type);\n\n const foundErrorModelType =\n (routeResponse.errorType &&\n configuration.modelTypes.find(\n (it) => it.name === routeResponse.errorType,\n )) ||\n null;\n\n const requestOutputErrorType = foundErrorModelType\n ? routeResponse.errorType\n : 'any';\n\n const pathParamsToInline = path.split('/').slice(1) as string[];\n\n let lastDynamicStructPos = 0;\n\n const queryParamStruct =\n query == null\n ? null\n : {\n type: 'dynamic',\n key: 'params',\n i: pathParamsToInline.length,\n param: lastDynamicStructPos > 0 ? lastDynamicStructPos - 1 : 0,\n };\n\n if (queryParamStruct && !lastDynamicStructPos) {\n lastDynamicStructPos++;\n }\n\n const requestInfoMeta = codegenParams.getEndpointMeta?.(route, utils);\n const requestMeta = codegenParams.getRequestMeta?.(route, utils);\n const resultPath =\n (codegenParams.requestPathPrefix ?? '') +\n path +\n (codegenParams.requestPathSuffix ?? '');\n\n const bodyContentType =\n requestContentKind[requestBodyInfo.contentKind] || null;\n const responseFormat =\n responseContentKind[responseBodyInfo.success?.schema?.contentKind] || null;\n\n const reservedDataContractNames: string[] = _.uniq([\n ...requestOutputDataTypes,\n requestOutputErrorType || 'any',\n ...getArgs({\n withPayload: true,\n }).map((it) => it.type),\n ]);\n\n const pathDeclaration = resultPath.replaceAll('$', '');\n\n const getHttpRequestGenerics = () => {\n const defaultOkResponse = positiveResponseTypes?.[0]?.type || 'unknown';\n const defaultBadResponse = requestOutputErrorType;\n const responses =\n raw.responsesTypes?.filter(\n (it) =>\n it.status !== 'default' &&\n (!(it as AnyObject).typeData ||\n filterTypes((it as AnyObject).typeData)),\n ) || [];\n\n if (!responses?.length) {\n return `HttpResponse<unknown, ${requestOutputErrorType}>`;\n }\n\n if (responses.length === 1 && responses[0].isSuccess) {\n return `HttpResponse<${responses[0].type}, ${requestOutputErrorType}>`;\n }\n\n return `HttpMultistatusResponse<{\n ${responses\n .map((it: AnyObject) => {\n return [\n it.description && `/** ${it.description} */`,\n `${it.status}: ${it.type};`,\n ]\n .filter(Boolean)\n .join('\\n');\n })\n .join('\\n')}\n },\n ${defaultOkResponse},\n ${defaultBadResponse}\n >`;\n };\n\n const requestInputTypeDc = createShortModelType({\n typeIdentifier: 'type',\n name: _.upperFirst(_.camelCase(`${route.routeName.usage}Params`)),\n content: `{\n ${inputParams\n .map(({ name, optional, type }) => {\n return `${name}${optional ? '?' : ''}:${type}`;\n })\n .filter(Boolean)\n .join(', ')}\n }`,\n });\n\n const isAllowedInputType = filterTypes(requestInputTypeDc);\n\n return {\n reservedDataContractNames,\n localModelTypes: isAllowedInputType ? [requestInputTypeDc] : [],\n content: `\nnew ${importFileParams.endpoint.exportName}<\n ${getHttpRequestGenerics()},\n ${isAllowedInputType ? requestInputTypeDc.name : 'any'},\n ${requestInfoMeta?.typeName ?? 'any'}\n>(\n {\n params: ({\n ${inputParams.map((it) => it.name)}\n}) => ({\n path: \\`${resultPath}\\`,\n method: '${_.upperCase(method)}',\n ${requestMeta?.tmplData ? `meta: ${requestMeta.tmplData},` : ''}\n ${query == null ? '' : `query: ${query.name},`}\n ${payload?.name ? `body: ${payload.name},` : ''}\n ${security ? 'secure: true,' : ''}\n ${bodyContentType ? `contentType: ${bodyContentType},` : ''}\n ${responseFormat ? `format: ${responseFormat},` : ''}\n ...${requestConfigParam.name},\n }),\n requiredParams: [${inputParams.filter((it) => !it.optional).map((it) => `\"${it.name}\"`)}],\n operationId: \"${raw.operationId || _.camelCase(route.routeName.usage)}\",\n path: [${pathDeclaration\n .split('/')\n .filter(Boolean)\n .map((it) => `\"${it}\"`)}],\n tags: [${tags.map((tag: string) => {\n if (metaInfo) {\n return `Tag.${formatTagNameEnumKey(tag, utils)}`;\n }\n return `\"${tag}\"`;\n })}],\n ${groupName ? `group: ${metaInfo ? `Group.${formatGroupNameEnumKey(groupName, utils)}` : `\"${groupName}\"`},` : ''}\n ${metaInfo?.namespace ? `namespace,` : ''}\n meta: ${requestInfoMeta?.tmplData ?? '{} as any'},\n },\n ${importFileParams.queryClient.exportName},\n ${importFileParams.httpClient.exportName},\n) \n`\n .split('\\n')\n .map((it) => it.trim())\n .filter(Boolean)\n .join('\\n'),\n };\n};\n","import type { ParsedRoute } from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { BaseTmplParams, MetaInfo } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\nimport { dataContractTmpl } from './data-contract.tmpl.js';\nimport { endpointJSDocTmpl } from './endpoint-jsdoc.tmpl.js';\nimport { newEndpointTmpl } from './new-endpoint.tmpl.js';\n\nexport interface AllEndpointPerFileTmplParams extends BaseTmplParams {\n routes: ParsedRoute[];\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n relativePathDataContracts: string;\n}\n\nexport const allEndpointPerFileTmpl = async (\n params: AllEndpointPerFileTmplParams,\n) => {\n const {\n routes,\n configuration,\n codegenParams,\n formatTSContent,\n importFileParams,\n utils,\n relativePathDataContracts,\n groupName,\n metaInfo,\n } = params;\n\n const { _ } = utils;\n\n const dataContractNamesInThisFile: string[] = [];\n\n const newEndpointTemplates = routes.map((route) => {\n const newEndpointTemplateData = newEndpointTmpl({\n ...params,\n route,\n });\n const { reservedDataContractNames } = newEndpointTemplateData;\n\n const dataContactNames = new Set(\n Object.keys(\n (configuration.config.swaggerSchema as any)?.components?.schemas,\n ).map((schemaName) => utils.formatModelName(schemaName)),\n );\n\n reservedDataContractNames.forEach((reservedDataContractName) => {\n if (!dataContactNames.has(reservedDataContractName)) {\n dataContractNamesInThisFile.push(reservedDataContractName);\n }\n });\n\n return { ...newEndpointTemplateData, route };\n });\n\n const extraImportLines: string[] = [];\n\n const endpointTemplates = await Promise.all(\n newEndpointTemplates.map(\n async ({\n content: requestInfoInstanceContent,\n localModelTypes,\n route,\n }) => {\n const requestInfoMeta = codegenParams.getEndpointMeta?.(route, utils);\n\n if (requestInfoMeta?.typeNameImportPath && requestInfoMeta.typeName) {\n extraImportLines.push(\n `import { ${requestInfoMeta.typeName} } from \"${requestInfoMeta.typeNameImportPath}\";`,\n );\n }\n\n return `\n ${(\n await Promise.all(\n localModelTypes.map(async (modelType) => {\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n \n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent} \n`;\n },\n ),\n );\n\n if (metaInfo) {\n extraImportLines.push(\n `import { ${[groupName && 'Group', metaInfo?.namespace && 'namespace', 'Tag'].filter(Boolean).join(',')} } from \"${groupName ? '../' : './'}meta-info\";`,\n );\n }\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: await formatTSContent(`${LINTERS_IGNORE}\n import {\n RequestParams,\n HttpResponse,\n HttpMultistatusResponse,\n } from \"${codegenParams.libImports?.['mobx-tanstack-query-api'] ?? 'mobx-tanstack-query-api'}\";\n import { ${importFileParams.endpoint.exportName} } from \"${importFileParams.endpoint.path}\";\n import { ${importFileParams.httpClient.exportName} } from \"${importFileParams.httpClient.path}\";\n import { ${importFileParams.queryClient.exportName} } from \"${importFileParams.queryClient.path}\";\n ${extraImportLines.join('\\n')}\n\n ${\n configuration.modelTypes.length > 0\n ? `\n import { ${configuration.modelTypes\n .map((it: AnyObject) => it.name)\n .filter(\n (it: any) => !dataContractNamesInThisFile.includes(it),\n )} } from \"${relativePathDataContracts}\";\n `\n : ''\n }\n\n ${(\n await Promise.all(\n dataContractNamesInThisFile.map(async (dataContractName) => {\n const modelType = configuration.modelTypes.find(\n (modelType: AnyObject) => modelType.name === dataContractName,\n );\n\n if (!modelType) {\n return '';\n }\n\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n\n ${endpointTemplates.filter(Boolean).join('\\n\\n')}\n `),\n };\n};\n","import type { Maybe } from 'yummies/types';\n\nimport type {\n BaseTmplParams,\n CodegenDataUtils,\n MetaInfo,\n} from '../types/index.js';\n\nimport { LINTERS_IGNORE } from './constants.js';\n\nexport interface AllExportsTmplParams extends BaseTmplParams {\n collectedExportFiles: string[];\n metaInfo: Maybe<MetaInfo>;\n}\n\nexport const formatGroupNameEnumKey = (\n groupName: string,\n { _ }: CodegenDataUtils,\n) => _.upperFirst(_.camelCase(groupName));\n\nexport const allExportsTmpl = async ({\n collectedExportFiles,\n metaInfo,\n formatTSContent,\n}: AllExportsTmplParams) => {\n return await formatTSContent(`${LINTERS_IGNORE}\n export * from './data-contracts';\n ${collectedExportFiles.map((fileName) => `export * from './${fileName}';`).join('\\n')}\n ${metaInfo ? 'export * from \"./meta-info\";' : ''}\n `);\n};\n","import type { BaseTmplParams } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\nimport { dataContractTmpl } from './data-contract.tmpl.js';\n\nexport interface DataContractsTmplParams extends BaseTmplParams {\n excludedDataContractNames?: string[];\n}\n\nexport const dataContractsFileTmpl = async (\n params: DataContractsTmplParams,\n) => {\n const { config, modelTypes } = params.configuration;\n\n const contractDefinitions: string[] = [];\n\n if (config.internalTemplateOptions?.addUtilRequiredKeysType) {\n contractDefinitions.push(\n `type UtilRequiredKeys<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>`,\n );\n }\n\n for await (const contract of modelTypes) {\n if (params.excludedDataContractNames?.includes(contract.name)) {\n continue;\n }\n\n contractDefinitions.push(\n await dataContractTmpl({\n ...params,\n contract,\n addExportKeyword: true,\n }),\n );\n }\n\n return await params.formatTSContent(`${LINTERS_IGNORE}\n\n${contractDefinitions.length > 0 ? contractDefinitions.join('\\n\\n') : `export {}`}\n `);\n};\n","import type { ParsedRoute } from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { BaseTmplParams, MetaInfo } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\nimport { dataContractTmpl } from './data-contract.tmpl.js';\nimport { endpointJSDocTmpl } from './endpoint-jsdoc.tmpl.js';\nimport { newEndpointTmpl } from './new-endpoint.tmpl.js';\n\nexport interface EndpointPerFileTmplParams extends BaseTmplParams {\n route: ParsedRoute;\n relativePathDataContracts: string;\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n}\n\nexport const endpointPerFileTmpl = async (\n params: EndpointPerFileTmplParams,\n) => {\n const {\n route,\n configuration,\n codegenParams,\n formatTSContent,\n importFileParams,\n utils,\n relativePathDataContracts,\n groupName,\n metaInfo,\n } = params;\n const { _ } = utils;\n\n const {\n content: requestInfoInstanceContent,\n reservedDataContractNames,\n localModelTypes,\n } = newEndpointTmpl({\n ...params,\n route,\n groupName,\n metaInfo,\n });\n\n const dataContactNames = new Set(\n Object.keys(\n (configuration.config.swaggerSchema as any)?.components?.schemas,\n ).map((schemaName) => utils.formatModelName(schemaName)),\n );\n\n const dataContractNamesInThisFile: string[] = [];\n\n reservedDataContractNames.forEach((reservedDataContractName) => {\n if (!dataContactNames.has(reservedDataContractName)) {\n dataContractNamesInThisFile.push(reservedDataContractName);\n }\n });\n\n const extraImportLines: string[] = [];\n\n if (metaInfo) {\n extraImportLines.push(\n `import { ${[groupName && 'Group', metaInfo?.namespace && 'namespace', 'Tag'].filter(Boolean).join(',')} } from \"../${groupName ? '../' : ''}meta-info\";`,\n );\n }\n\n const requestInfoMeta = codegenParams.getEndpointMeta?.(route, utils);\n\n if (requestInfoMeta?.typeNameImportPath && requestInfoMeta.typeName) {\n extraImportLines.push(\n `import { ${requestInfoMeta.typeName} } from \"${requestInfoMeta.typeNameImportPath}\";`,\n );\n }\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: await formatTSContent(`${LINTERS_IGNORE}\n import {\n RequestParams,\n HttpResponse,\n HttpMultistatusResponse,\n } from \"${codegenParams.libImports?.['mobx-tanstack-query-api'] ?? 'mobx-tanstack-query-api'}\";\n import { ${importFileParams.endpoint.exportName} } from \"${importFileParams.endpoint.path}\";\n import { ${importFileParams.httpClient.exportName} } from \"${importFileParams.httpClient.path}\";\n import { ${importFileParams.queryClient.exportName} } from \"${importFileParams.queryClient.path}\";\n ${extraImportLines.join('\\n')}\n\n ${\n configuration.modelTypes.length > 0\n ? `\n import { ${configuration.modelTypes\n .map((it: AnyObject) => it.name)\n .filter(\n (it: any) => !dataContractNamesInThisFile.includes(it),\n )} } from \"${relativePathDataContracts}\";\n `\n : ''\n }\n\n ${(\n await Promise.all(\n dataContractNamesInThisFile.map(async (dataContractName) => {\n const modelType = configuration.modelTypes.find(\n (modelType: AnyObject) => modelType.name === dataContractName,\n );\n\n if (!modelType) {\n return '';\n }\n\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n\n ${(\n await Promise.all(\n localModelTypes.map(async (modelType) => {\n const contractType = await dataContractTmpl({\n ...params,\n contract: modelType,\n addExportKeyword: true,\n });\n\n return contractType;\n }),\n )\n )\n .filter(Boolean)\n .join('\\n\\n')}\n \n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent}\n `),\n };\n};\n","import type { BaseTmplParams } from '../types/index.js';\nimport { LINTERS_IGNORE } from './constants.js';\n\nexport interface IndexTsForEndpointPerFileTmplParams extends BaseTmplParams {\n generatedRequestFileNames: string[];\n}\n\nexport const indexTsForEndpointPerFileTmpl = async ({\n generatedRequestFileNames,\n}: IndexTsForEndpointPerFileTmplParams) => {\n return `${LINTERS_IGNORE}\n${generatedRequestFileNames.map((fileName) => `export * from './${fileName.replace('.ts', '')}';`).join('\\n')}\n`;\n};\n","import type { Maybe } from 'yummies/types';\n\ntype AnyFilterOptionFn = (...args: any[]) => boolean;\n\nexport type FilterOption<T extends AnyFilterOptionFn> =\n | T\n | string\n | RegExp\n | (RegExp | string)[];\n\nexport type UnpackedFilterOption<T extends FilterOption<any>> = Extract<\n T,\n AnyFilterOptionFn\n>;\n\nexport const unpackFilterOption = <\n TOption extends FilterOption<AnyFilterOptionFn>,\n>(\n option: Maybe<TOption>,\n argsToString: (...args: Parameters<UnpackedFilterOption<TOption>>) => string,\n defaultReturnValue: boolean = true,\n): UnpackedFilterOption<TOption> => {\n if (typeof option === 'function') {\n // @ts-expect-error\n return option;\n }\n\n if (option == null) {\n // @ts-expect-error\n return () => defaultReturnValue;\n }\n\n const inputs = Array.isArray(option) ? option : [option];\n\n // @ts-expect-error\n return (...args: Parameters<UnpackedFilterOption<TOption>>) =>\n inputs.some((input) => {\n const str = argsToString(...args);\n\n if (typeof input === 'string') {\n return input === str;\n }\n\n return input.test(str);\n });\n};\n","import path from 'node:path';\nimport { type ExportedDeclarations, Node, Project, SyntaxKind } from 'ts-morph';\nimport {\n type FilterOption,\n unpackFilterOption,\n} from './unpack-filter-option.js';\n\nexport interface RemoveUnusedTypesParams {\n directory: string;\n keepTypes?: FilterOption<(typeName: string) => boolean>;\n}\n\nconst removeUnusedTypesItteration = async ({\n directory,\n keepTypes,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n}: RemoveUnusedTypesParams) => {\n const project = new Project();\n\n project.addSourceFilesAtPaths([\n path.join(directory, '**/*.ts'),\n path.join(directory, '**/*.tsx'),\n ]);\n\n const dataContractsSourceFile = project.getSourceFile((sourceFile) =>\n sourceFile.getFilePath().includes(`${directory}/data-contracts.ts`),\n );\n\n if (!dataContractsSourceFile) return;\n\n const exportedDeclarations =\n dataContractsSourceFile.getExportedDeclarations();\n const candidateTypes = new Map<string, ExportedDeclarations[]>();\n\n for (const [name, declarations] of exportedDeclarations) {\n const validDeclarations = declarations.filter(\n (decl) =>\n decl.getKind() === SyntaxKind.InterfaceDeclaration ||\n decl.getKind() === SyntaxKind.TypeAliasDeclaration ||\n decl.getKind() === SyntaxKind.EnumDeclaration,\n );\n\n if (validDeclarations.length > 0) {\n candidateTypes.set(name, validDeclarations);\n }\n }\n\n if (candidateTypes.size === 0) return;\n\n const usedTypes = new Set<string>();\n const externalFiles = project\n .getSourceFiles()\n .filter((sf) => sf !== dataContractsSourceFile);\n\n for (const file of externalFiles) {\n const identifiers = file.getDescendantsOfKind(SyntaxKind.Identifier);\n for (const identifier of identifiers) {\n const name = identifier.getText();\n if (candidateTypes.has(name)) {\n usedTypes.add(name);\n }\n }\n\n const memberAccessExpressions = file.getDescendantsOfKind(\n SyntaxKind.PropertyAccessExpression,\n );\n for (const expr of memberAccessExpressions) {\n const expression = expr.getExpression();\n if (Node.isIdentifier(expression)) {\n const name = expression.getText();\n if (candidateTypes.has(name)) {\n usedTypes.add(name);\n }\n }\n }\n }\n\n const dependencyGraph = new Map<string, Set<string>>();\n\n for (const [name, declarations] of candidateTypes) {\n const dependencies = new Set<string>();\n\n for (const decl of declarations) {\n const typeReferences = decl.getDescendantsOfKind(\n SyntaxKind.TypeReference,\n );\n for (const ref of typeReferences) {\n const typeName = ref.getTypeName().getText();\n if (candidateTypes.has(typeName)) {\n dependencies.add(typeName);\n }\n }\n\n if (decl.getKind() === SyntaxKind.EnumDeclaration) {\n const initializers = decl.getDescendantsOfKind(SyntaxKind.Identifier);\n for (const init of initializers) {\n const text = init.getText();\n if (candidateTypes.has(text)) {\n dependencies.add(text);\n }\n }\n }\n }\n\n dependencyGraph.set(name, dependencies);\n }\n\n const queue = Array.from(usedTypes);\n const visited = new Set(usedTypes);\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (dependencyGraph.has(current)) {\n for (const dep of dependencyGraph.get(current)!) {\n if (!visited.has(dep)) {\n visited.add(dep);\n usedTypes.add(dep);\n queue.push(dep);\n }\n }\n }\n }\n\n let removedCount = 0;\n\n const isNeedToRemoveType = unpackFilterOption(\n keepTypes,\n (name) => name,\n false,\n );\n\n for (const [name, declarations] of candidateTypes) {\n if (usedTypes.has(name)) continue;\n\n for (const decl of declarations) {\n if ('remove' in decl && isNeedToRemoveType(name)) {\n decl.remove();\n removedCount++;\n }\n }\n }\n\n if (removedCount > 0) {\n await dataContractsSourceFile.save();\n }\n\n return removedCount;\n};\n\nexport const removeUnusedTypes = async (params: RemoveUnusedTypesParams) => {\n while (true) {\n const removedCount = (await removeUnusedTypesItteration(params)) ?? 0;\n if (removedCount === 0) break;\n }\n};\n","import path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { cloneDeep } from 'lodash-es';\nimport {\n type GenerateApiConfiguration,\n generateApi as generateApiFromSwagger,\n type ParsedRoute,\n} from 'swagger-typescript-api';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport { allEndpointPerFileTmpl } from './templates/all-endpoints-per-file.tmpl.js';\nimport { allExportsTmpl } from './templates/all-exports.tmpl.js';\nimport { LINTERS_IGNORE } from './templates/constants.js';\nimport { dataContractsFileTmpl } from './templates/data-contracts-file.tmpl.js';\nimport { endpointPerFileTmpl } from './templates/endpoint-per-file.tmpl.js';\nimport { indexTsForEndpointPerFileTmpl } from './templates/index-ts-for-endpoint-per-file.tmpl.js';\nimport { metaInfoTmpl } from './templates/meta-info.tmpl.js';\nimport type {\n AllImportFileParams,\n BaseTmplParams,\n CodegenDataUtils,\n GenerateQueryApiParams,\n MetaInfo,\n} from './types/index.js';\nimport { removeUnusedTypes } from './utils/remove-unused-types.js';\nimport { unpackFilterOption } from './utils/unpack-filter-option.js';\n\nexport * from './types/index.js';\n\nconst __filename = fileURLToPath(import.meta.url);\n\nconst __dirname = path.dirname(__filename);\nconst __execdirname = process.cwd();\n\nexport const generateApi = async (\n params: GenerateQueryApiParams | GenerateQueryApiParams[],\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\n): Promise<void> => {\n if (Array.isArray(params)) {\n for await (const param of params) {\n await generateApi(param);\n }\n return;\n }\n\n const tsconfigPath = params.tsconfigPath\n ? path.resolve(__execdirname, params.tsconfigPath)\n : path.resolve(__execdirname, './tsconfig.json');\n\n console.info('using tsconfig', tsconfigPath);\n\n const importFileParams: AllImportFileParams = {\n queryClient:\n !params.queryClient || typeof params.queryClient === 'string'\n ? {\n exportName: 'queryClient',\n path: 'mobx-tanstack-query-api/builtin',\n }\n : params.queryClient,\n endpoint:\n !params.endpoint || typeof params.endpoint === 'string'\n ? {\n exportName: 'Endpoint',\n path: 'mobx-tanstack-query-api',\n }\n : params.endpoint,\n httpClient:\n !params.httpClient || typeof params.httpClient === 'string'\n ? {\n exportName: 'http',\n path: 'mobx-tanstack-query-api/builtin',\n }\n : params.httpClient,\n };\n\n const paths = {\n templates: path.resolve(__dirname, 'templates'),\n requestInfoClass: path.resolve(\n __dirname,\n 'templates/request-info-class.ejs',\n ),\n httpClient: path.resolve(__dirname, 'templates/http-client.ejs'),\n createRequestInfoInstance: path.resolve(\n __dirname,\n 'templates/create-request-info-instance.ejs',\n ),\n outputDir: path.resolve(process.cwd(), params.output),\n };\n\n //#region swagger-typescript-api\n const swaggerTypescriptApiCodegenBaseParams: Partial<AnyObject> = {\n httpClientType: 'fetch',\n cleanOutput: params.cleanOutput ?? true,\n modular: true,\n patch: true,\n typeSuffix: 'DC',\n disableStrictSSL: false,\n singleHttpClient: true,\n extractRequestBody: true,\n extractRequestParams: false,\n extractResponseBody: true,\n extractResponseError: true,\n generateResponses: true,\n generateClient: false,\n addReadonly: true,\n moduleNameFirstTag: true,\n sortTypes: true,\n templates: paths.templates.toString(),\n primitiveTypeConstructs: (constructs: AnyObject) => {\n return {\n ...(constructs as any),\n object: () => `Record<string, any>`,\n float: () => `number`,\n ...params.otherCodegenParams?.primitiveTypeConstructs?.(constructs),\n };\n },\n requestOptions: params.fetchSchemaRequestOptions,\n ...params.otherCodegenParams,\n };\n\n let codegenProcess!: any;\n\n if (!params.input) {\n console.warn(\n '[mobx-tanstack-query-api/codegen]',\n 'input is not specified',\n '\\nprocess will be skipped',\n );\n return;\n }\n\n const inputToCodegenInput = (input: Maybe<string | AnyObject>): AnyObject => {\n const inputData: AnyObject = {};\n\n if (typeof input === 'string') {\n inputData.input = input;\n inputData.url = input;\n } else {\n inputData.spec = input;\n }\n\n return inputData;\n };\n let mixinSwaggerSchema: Maybe<AnyObject> = null;\n\n if (params.mixinInput) {\n await generateApiFromSwagger({\n ...(swaggerTypescriptApiCodegenBaseParams as any),\n ...inputToCodegenInput(params.mixinInput),\n hooks: {\n onInit: (configuration) => {\n mixinSwaggerSchema = cloneDeep(configuration.swaggerSchema);\n },\n onPrepareConfig: (config) => {\n config.routes.combined?.forEach((routeInfo) => {\n routeInfo.routes.sort((routeA, routeB) =>\n routeA.routeName.usage.localeCompare(routeB.routeName.usage),\n );\n });\n },\n onFormatRouteName: (routeInfo, usageRouteName) => {\n let formattedRouteName = usageRouteName;\n\n if (\n params.addPathSegmentToRouteName === true ||\n typeof params.addPathSegmentToRouteName === 'number'\n ) {\n const pathSegmentForSuffix =\n typeof params.addPathSegmentToRouteName === 'number'\n ? params.addPathSegmentToRouteName\n : 0;\n\n const pathSegments = routeInfo.route.split('/').filter(Boolean);\n const { _ } = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n formattedRouteName = _.camelCase(\n `${pathSegments[pathSegmentForSuffix] || ''}_${formattedRouteName}`,\n );\n }\n\n const endpointName = formattedRouteName;\n\n return (\n params?.formatEndpointName?.(endpointName, routeInfo) ??\n swaggerTypescriptApiCodegenBaseParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n endpointName,\n ) ??\n endpointName\n );\n },\n },\n });\n }\n\n const generated = await generateApiFromSwagger({\n ...(swaggerTypescriptApiCodegenBaseParams as any),\n ...inputToCodegenInput(params.input),\n hooks: {\n onInit: (configuration, codeGenProcessFromInit) => {\n codegenProcess = codeGenProcessFromInit;\n\n const resultSwaggerSchema = configuration.swaggerSchema as AnyObject;\n\n resultSwaggerSchema.components = resultSwaggerSchema.components || {};\n resultSwaggerSchema.components.schemas =\n resultSwaggerSchema.components.schemas || {};\n\n resultSwaggerSchema.paths = {\n ...resultSwaggerSchema.paths,\n ...mixinSwaggerSchema?.paths,\n };\n\n resultSwaggerSchema.components.schemas = {\n ...resultSwaggerSchema.components.schemas,\n ...mixinSwaggerSchema?.components?.schemas,\n };\n\n return swaggerTypescriptApiCodegenBaseParams?.hooks?.onInit?.(\n configuration,\n codeGenProcessFromInit,\n );\n },\n onPrepareConfig: (config) => {\n config.routes.combined?.forEach((routeInfo) => {\n routeInfo.routes.sort((routeA, routeB) =>\n routeA.routeName.usage.localeCompare(routeB.routeName.usage),\n );\n });\n return swaggerTypescriptApiCodegenBaseParams?.hooks?.onPrepareConfig?.(\n config,\n );\n },\n onFormatRouteName: (routeInfo, usageRouteName) => {\n let formattedRouteName = usageRouteName;\n\n if (\n params.addPathSegmentToRouteName === true ||\n typeof params.addPathSegmentToRouteName === 'number'\n ) {\n const pathSegmentForSuffix =\n typeof params.addPathSegmentToRouteName === 'number'\n ? params.addPathSegmentToRouteName\n : 0;\n\n const pathSegments = routeInfo.route.split('/').filter(Boolean);\n const { _ } = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n formattedRouteName = _.camelCase(\n `${pathSegments[pathSegmentForSuffix] || ''}_${formattedRouteName}`,\n );\n }\n\n const endpointName = formattedRouteName;\n\n return (\n params?.formatEndpointName?.(endpointName, routeInfo) ??\n swaggerTypescriptApiCodegenBaseParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n endpointName,\n ) ??\n endpointName\n );\n },\n },\n });\n\n //#endregion\n\n const utils = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n const { _ } = utils;\n\n const shouldGenerateBarrelFiles = !params.noBarrelFiles;\n\n let namespace: Maybe<string> = null;\n\n if (params.namespace) {\n if (typeof params.namespace === 'function') {\n namespace = params.namespace(utils);\n } else {\n namespace = utils._.camelCase(params.namespace);\n }\n }\n\n const codegenFs = codegenProcess.fileSystem as any;\n\n codegenFs.cleanDir(params.output);\n codegenFs.createDir(params.output);\n\n const filterTypes = unpackFilterOption(\n params.filterTypes,\n (modelType) => modelType.name,\n );\n\n generated.configuration.modelTypes =\n generated.configuration.modelTypes.filter((modelType) =>\n filterTypes(modelType),\n );\n\n const allRoutes = Object.values(generated.configuration.routes)\n .flat()\n .flatMap((routeGroup) =>\n 'routes' in routeGroup ? routeGroup.routes : routeGroup,\n );\n\n const filterEndpoint = unpackFilterOption(\n params.filterEndpoints,\n (route) => route.raw?.operationId || '',\n );\n\n const baseTmplParams: BaseTmplParams = {\n ...generated,\n codegenParams: params,\n configuration: generated.configuration as GenerateApiConfiguration,\n formatTSContent: generated.formatTSContent,\n codegenProcess,\n importFileParams,\n utils,\n filterTypes,\n };\n\n const reservedDataContractNamesMap = new Map<string, number>();\n\n const collectedExportFilesFromIndexFile: string[] = [];\n\n const groupsMap = new Map<string, ParsedRoute[]>();\n const nonEmptyGroups = new Set<string>();\n const tagsSet = new Set<string>();\n\n if (params.groupBy == null) {\n collectedExportFilesFromIndexFile.push('endpoints');\n\n if (params.outputType === 'one-endpoint-per-file') {\n // #region кодогенерация 1 эндпоинт - 1 файл без группировки\n codegenFs.createDir(path.resolve(params.output, 'endpoints'));\n\n const fileNamesWithRequestInfo: string[] = [];\n\n for await (const route of allRoutes) {\n const {\n content: requestInfoPerFileContent,\n reservedDataContractNames,\n } = await endpointPerFileTmpl({\n ...baseTmplParams,\n route,\n relativePathDataContracts: '../data-contracts',\n groupName: null,\n metaInfo: params.noMetaInfo\n ? null\n : {\n groupNames: [],\n namespace,\n },\n });\n\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag) => {\n tagsSet.add(tag);\n });\n }\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n if (!filterEndpoint(route)) {\n continue;\n }\n\n const fileName = `${_.kebabCase(route.routeName.usage)}.ts`;\n\n fileNamesWithRequestInfo.push(fileName);\n\n codegenFs.createFile({\n path: path.resolve(params.output, 'endpoints'),\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: path.resolve(params.output, 'endpoints'),\n fileName: 'index.ts',\n withPrefix: false,\n content: await indexTsForEndpointPerFileTmpl({\n ...baseTmplParams,\n generatedRequestFileNames: fileNamesWithRequestInfo,\n }),\n });\n }\n // #endregion\n } else {\n // #region кодогенерация несколько эндпоинтов в 1 файле без группировки\n const { content: requestInfoPerFileContent, reservedDataContractNames } =\n await allEndpointPerFileTmpl({\n ...baseTmplParams,\n routes: allRoutes,\n relativePathDataContracts: './data-contracts',\n groupName: null,\n metaInfo: params.noMetaInfo\n ? null\n : {\n namespace,\n groupNames: [],\n },\n });\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n const filteredRoutes = allRoutes.filter(filterEndpoint);\n\n const hasFilteredRoutes = filteredRoutes.length > 0;\n\n if (hasFilteredRoutes) {\n filteredRoutes.forEach((route) => {\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag: string) => {\n tagsSet.add(tag);\n });\n }\n });\n\n const fileName = 'endpoints.ts';\n\n collectedExportFilesFromIndexFile.push('endpoints');\n\n codegenFs.createFile({\n path: params.output,\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n\n // #endregion\n }\n } else {\n // #region кодогенерация с группировкой\n\n // #region разбиение роутов по группам\n\n allRoutes.forEach((route) => {\n let group: string | undefined;\n\n if (typeof params.groupBy === 'function') {\n group = params.groupBy(route);\n } else if (params.groupBy?.includes('path-segment')) {\n const segmentIndex =\n +params.groupBy.replaceAll(/path-segment-?/g, '') || 0;\n\n group =\n (route.request as AnyObject).path?.split('/')?.filter(Boolean)?.[\n segmentIndex\n ] || undefined;\n } else if (params.groupBy?.includes('tag')) {\n const tagIndex = +params.groupBy.replaceAll(/tag-?/g, '') || 0;\n\n group = route.raw?.tags?.[tagIndex] ?? undefined;\n }\n\n if (group == null) {\n group = 'other';\n }\n\n if (!groupsMap.has(group)) {\n groupsMap.set(group, []);\n }\n\n groupsMap.get(group)?.push(route);\n });\n // #endregion\n\n const filterGroups = unpackFilterOption(\n params.filterGroups,\n (groupName) => groupName,\n );\n for await (const [groupName, routes] of groupsMap) {\n if (!filterGroups(groupName)) {\n continue;\n }\n\n const fileNamesWithRequestInfo: string[] = [];\n\n const groupDirectory = path.resolve(\n params.output,\n _.kebabCase(groupName),\n );\n\n codegenFs.createDir(groupDirectory);\n\n let hasFilteredRoutes = false;\n\n if (params.outputType === 'one-endpoint-per-file') {\n // #region Генерация одного эндпоинта на 1 файл\n codegenFs.createDir(path.resolve(groupDirectory, 'endpoints'));\n\n for await (const route of routes) {\n const {\n content: requestInfoPerFileContent,\n reservedDataContractNames,\n } = await endpointPerFileTmpl({\n ...baseTmplParams,\n route,\n relativePathDataContracts: '../../data-contracts',\n groupName,\n metaInfo: params.noMetaInfo\n ? null\n : {\n namespace,\n groupNames: [],\n },\n });\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n if (!filterEndpoint(route)) {\n continue;\n }\n\n hasFilteredRoutes = true;\n\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag: string) => {\n tagsSet.add(tag);\n });\n }\n\n const fileName = `${_.kebabCase(route.routeName.usage)}.ts`;\n\n fileNamesWithRequestInfo.push(fileName);\n\n codegenFs.createFile({\n path: path.resolve(\n params.output,\n _.kebabCase(groupName),\n 'endpoints',\n ),\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n // #endregion\n } else {\n // #region Генерация нескольких эндпоинтов на 1 файл\n const {\n content: requestInfoPerFileContent,\n reservedDataContractNames,\n } = await allEndpointPerFileTmpl({\n ...baseTmplParams,\n routes,\n relativePathDataContracts: '../data-contracts',\n groupName,\n metaInfo: params.noMetaInfo\n ? null\n : {\n namespace,\n groupNames: [],\n },\n });\n\n reservedDataContractNames.forEach((name) => {\n reservedDataContractNamesMap.set(\n name,\n (reservedDataContractNamesMap.get(name) ?? 0) + 1,\n );\n });\n\n const filteredRoutes = routes.filter(filterEndpoint);\n\n hasFilteredRoutes = filteredRoutes.length > 0;\n\n if (hasFilteredRoutes) {\n filteredRoutes.forEach((route) => {\n if (Array.isArray(route.raw.tags)) {\n route.raw.tags.forEach((tag: string) => {\n tagsSet.add(tag);\n });\n }\n });\n\n const fileName = 'endpoints.ts';\n\n fileNamesWithRequestInfo.push(fileName);\n\n codegenFs.createFile({\n path: groupDirectory,\n fileName,\n withPrefix: false,\n content: requestInfoPerFileContent,\n });\n }\n\n // #endregion\n }\n\n if (hasFilteredRoutes) {\n nonEmptyGroups.add(groupName);\n const exportGroupName = params.formatExportGroupName\n ? params.formatExportGroupName(_.camelCase(groupName), utils)\n : _.camelCase(groupName);\n\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: groupDirectory,\n fileName: 'index.ts',\n withPrefix: false,\n content: `${LINTERS_IGNORE}\nexport * as ${exportGroupName} from './endpoints';\n`,\n });\n }\n\n if (\n shouldGenerateBarrelFiles &&\n params.outputType === 'one-endpoint-per-file'\n ) {\n codegenFs.createFile({\n path: path.resolve(groupDirectory, 'endpoints'),\n fileName: 'index.ts',\n withPrefix: false,\n content: await indexTsForEndpointPerFileTmpl({\n ...baseTmplParams,\n generatedRequestFileNames: fileNamesWithRequestInfo,\n }),\n });\n }\n\n collectedExportFilesFromIndexFile.push(_.kebabCase(groupName));\n } else {\n codegenFs.removeDir(\n path.resolve(params.output, _.kebabCase(groupName)),\n );\n }\n }\n // #endregion\n }\n\n const metaInfo: Maybe<MetaInfo> =\n !params.noMetaInfo &&\n (namespace ?? (nonEmptyGroups.size > 0 || tagsSet.size > 0))\n ? {\n namespace,\n groupNames: [...nonEmptyGroups.values()],\n tags: [...tagsSet.values()],\n }\n : null;\n\n const excludedDataContractNames = Array.from(\n reservedDataContractNamesMap.entries(),\n )\n .filter(([_, count]) => count === 1)\n .map(([name]) => name);\n\n const dataContractsContent = await dataContractsFileTmpl({\n ...baseTmplParams,\n excludedDataContractNames,\n });\n\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'data-contracts.ts',\n withPrefix: false,\n content: dataContractsContent,\n });\n\n if (metaInfo) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'meta-info.ts',\n withPrefix: false,\n content: await metaInfoTmpl({\n ...baseTmplParams,\n metaInfo,\n }),\n });\n }\n\n if (namespace) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: '__exports.ts',\n withPrefix: false,\n content: await allExportsTmpl({\n ...baseTmplParams,\n collectedExportFiles: collectedExportFilesFromIndexFile,\n metaInfo,\n }),\n });\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'index.ts',\n withPrefix: false,\n content: `${LINTERS_IGNORE}\nexport * as ${namespace} from './__exports';\n`,\n });\n }\n } else {\n if (shouldGenerateBarrelFiles) {\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'index.ts',\n withPrefix: false,\n content: await allExportsTmpl({\n ...baseTmplParams,\n collectedExportFiles: collectedExportFilesFromIndexFile,\n metaInfo,\n }),\n });\n }\n }\n\n if (params.removeUnusedTypes) {\n removeUnusedTypes({\n directory: params.output,\n keepTypes:\n params.removeUnusedTypes === true\n ? undefined\n : params.removeUnusedTypes.keepTypes,\n });\n }\n};\n","import type { Maybe } from 'yummies/types';\nimport type { GenerateQueryApiParams } from '../../codegen/types/index.js';\n\nexport const defineConfig = (\n ...configs: Maybe<GenerateQueryApiParams | GenerateQueryApiParams[]>[]\n): GenerateQueryApiParams[] => {\n return configs\n .flat()\n .filter((config): config is GenerateQueryApiParams => !!config);\n};\n"],"names":["contract","splitTextByLines","path","modelType","Project","SyntaxKind","Node","text","__filename","fileURLToPath","__dirname","generateApiFromSwagger","cloneDeep","_"],"mappings":";;;;;;;;;AAAO,MAAM,iBAAiB;AAAA;ACQ9B,MAAM,gBAAgB,CAAC,aAAkB;AACvC,MAAI,CAAC,SAAS,aAAa,OAAQ,QAAO;AAE1C,SACE,MACA,SAAS,YACN,IAAI,CAAC,QAAa;AACjB,UAAM,EAAE,MAAM,SAAS,aAAa,SAAS,gBAAgB;AAC7D,WAAO;AAAA,MACL;AAAA,MACA,eAAe,WAAW,WAAW;AAAA,MACrC,eAAe,KAAK,WAAW;AAAA,IAAA,EAE9B,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,EACb,CAAC,EACA,KAAK,IAAI,IACZ;AAEJ;AAEO,MAAM,mBAAmB,OAAO;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,EAAE,UAAU;AAClB,QAAM,EAAE,sBAAsB;AAE9B,QAAM,wBAAmE;AAAA,IACvE,MAAM,CAACA,cAAkB;AACvB,aAAO,QAAQA,UAAS,IAAI;AAAA,EAASA,UAAS,OAAO;AAAA;AAAA,IACvD;AAAA,IACA,WAAW,CAACA,cAAkB;AAC5B,aAAO,aAAaA,UAAS,IAAI,GAAG,cAAcA,SAAQ,CAAC;AAAA,EAASA,UAAS,OAAO;AAAA,IACtF;AAAA,IACA,MAAM,CAACA,cAAkB;AACvB,aAAO,QAAQA,UAAS,IAAI,GAAG,cAAcA,SAAQ,CAAC,MAAMA,UAAS,YAAYA,UAAS,OAAO,QAAQA,UAAS,OAAO;AAAA,IAC3H;AAAA,EAAA;AAGF,MAAI,SAAiB;AAErB,MAAI,QAAQ;AAEZ,MAAI,SAAS,aAAa;AACxB,YAAQ;AAAA,KAAW,kBAAkB,SAAS,aAAa,IAAI,CAAC;AAAA;AAAA;AAAA,EAClE;AAEA,MAAI,OAAO;AACT,cAAU;AAAA,EACZ;AAEA,QAAM,aACJ,sBAAsB,SAAS,cAAc,KAC7C,sBAAsB;AAExB,QAAM,eAAe,GAAsB,SAAc,GAAG,WAAW,QAAQ,CAAC;AAEhF,SAAO,SAAS;AAClB;AC3DO,MAAM,oBAAoB,CAAC,WAAoC;AACpE,QAAM,EAAE,OAAO,eAAe,SAAS,MAAM;AAC7C,QAAM,EAAE,cAAc;AACtB,QAAM,WAAW,MAAM;AACvB,QAAM,eAAe,MAAM;AAE3B,QAAM,EAAE,UAAU;AAElB,QAAM,EAAE,GAAG,kBAAA,IAAsB;AAEjC,QAAM,aAAoD,CAAA;AAE1D,MAAI,SAAS,SAAS;AACpB,UAAM,eAAeC,KAAAA,iBAAiB,SAAS,SAAS,EAAE,EACvD,OAAO,OAAO,EACd,IAAI,CAAC,UAAU;AAAA,MACd,SAAS,KAAK,kBAAkB,MAAM,IAAI,CAAC;AAAA,IAAA,EAC3C;AAEJ,QAAI,aAAa,SAAS,GAAG;AAC3B,iBAAW,KAAK,GAAG,cAAc,EAAE,SAAS,IAAI;AAAA,IAClD;AAAA,EACF;AAEA,MAAI,SAAS,aAAa;AACxB,UAAM,mBAAmBA,KAAAA,iBAAiB,SAAS,aAAa,EAAE,EAC/D,OAAO,OAAO,EACd,IAAI,CAAC,UAAU;AAAA,MACd,SAAS,kBAAkB,MAAM,IAAI;AAAA,IAAA,EACrC;AAEJ,QAAI,iBAAiB,SAAS,GAAG;AAC/B,iBAAW,KAAK,GAAG,kBAAkB,EAAE,SAAS,IAAI;AAAA,IACtD,OAAO;AACL,iBAAW,KAAK;AAAA,QACd,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAAA,EACF,OAAO;AACL,eAAW,KAAK;AAAA,MACd,SAAS;AAAA,IAAA,CACV;AAAA,EACH;AAEA,MAAI,SAAS,aAAa;AACxB,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,SAAS,SAAS;AAAA,IAAA,CACnB;AAAA,EACH;AAEA,MAAI,EAAE,KAAK,SAAS,IAAI,GAAG;AACzB,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,SAAS,SAAS,KAAK,KAAK,IAAI;AAAA,IAAA,CACjC;AAAA,EACH;AAEA,aAAW,KAAK;AAAA,IACd,MAAM;AAAA,IACN,SAAS,KAAK,EAAE,UAAU,aAAa,MAAM,CAAC,IAAI,SAAS,KAAK;AAAA,EAAA,CACjE;AAED,MAAI,SAAS,YAAY;AACvB,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAEA,MAAI,UAAU,WAAW;AACvB,eAAW;AAAA,MACT;AAAA,QACE,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,MAAM;AAAA,QACN,SAAS,UAAU;AAAA,MAAA;AAAA,IACrB;AAAA,EAEJ;AAEA,MAAI,aAAa,UAAU;AACzB,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAEA,MAAI,SAAS,eAAe,SAAS,GAAG;AACtC,eAAW,KAAK;AAAA,MACd,MAAM;AAAA,IAAA,CACP;AAED,aAAS,eAAe,QAAQ,CAAC,aAAwB;AACvD,iBAAW,KAAK;AAAA,QACd,MAAM,KAAK,SAAS,MAAM;AAAA,QAC1B,SAAS,GAAG,EAAE,QAAQ,EAAE,QAAQ,SAAS,MAAM,SAAS,OAAO,OAAO,GAAG,SAAS,KAAK,CAAC,IAAI,SAAS,WAAW;AAAA,MAAA,CACjH;AAAA,IACH,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,WAAW,IAAI,CAAC,OAAO;AAC1C,QAAI,OAAe;AAEnB,QAAI,GAAG,MAAM;AACX,cAAQ,IAAI,GAAG,IAAI;AAAA,IACrB;AAEA,UAAM,WAAW,GAAG,WAAW,IAAI,QAAA;AAEnC,QAAI,SAAS;AACX,cAAQ;AAAA,IACV;AAEA,WAAO;AAAA,EACT,CAAC;AAED,QAAM,SAAS;AAAA;AAAA,EAEf,aAAa,KAAK,IAAI,CAAC;AAAA;AAGvB,MAAI,SAAS,GAAG;AACd,WAAO,OACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,SAAS,MAAM,CAAC,EACnC,KAAK,IAAI;AAAA,EACd;AAEA,SAAO;AACT;ACtIO,MAAM,uBAAuB,CAClC,mBAIyB;AACzB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB,eAAe,kBAAkB;AAAA,IACjD,YAAY,eAAe,cAAc,eAAe;AAAA,IACxD,aAAa,eAAe,eAAe;AAAA,EAAA;AAE/C;ACHO,MAAM,yBAAyB,CACpC,WACA,EAAE,EAAA,MACC,EAAE,WAAW,EAAE,UAAU,SAAS,CAAC;AAEjC,MAAM,uBAAuB,CAClC,SACA,UACG,uBAAuB,SAAS,KAAK;AAEnC,MAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA0B;AACxB,QAAM,UAAU,IAAI;AAAA,IACjB,MAAc,eAAe,WAAW,MAAM,IAAI,CAAC,OAAkB;AAAA,MACpE,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,SAAO,MAAM,gBAAgB,GAAG,cAAc;AAAA,IAC5C;AAAA,IACA,UAAU,aAAa,6BAA6B,UAAU,SAAS;AAAA,IACvE,UAAU,YAAY,UACpB;AAAA;AAAA,IAEF,UAAU,WAAW,IAAI,CAAC,cAAc,GAAG,uBAAuB,WAAW,KAAK,CAAC,OAAO,cAAc,YAAY,iBAAiB,SAAS,KAAK,SAAS,GAAG,EAAE,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,IAG5K,UAAU,MAAM,UACd;AAAA;AAAA,IAEF,UAAU,KACT,IAAI,CAAC,YAAY;AAChB,YAAM,UAAU,QAAQ,IAAI,OAAO;AAEnC,UAAI,cAAc,SAAS;AAE3B,UAAI,CAAC,aAAa;AAChB,sBAAc,MAAM,EAAE,MAAM,OAAO,EAAE,KAAK,GAAG;AAAA,MAC/C;AAEA,aAAO;AAAA,QACL,eAAe,OAAO,WAAW;AAAA,QACjC,GAAG,qBAAqB,SAAS,KAAK,CAAC,OAAO,cAAc,YAAY,eAAe,OAAO,KAAK,OAAO;AAAA,MAAA,EAEzG,OAAO,OAAO,EACd,KAAK,IAAI;AAAA,IACd,CAAC,EACA,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,EAAA,EAIX,OAAO,OAAO,EACd,KAAK,IAAI,CAAC;AAAA,KACV;AACL;ACxDA,MAAM,qBAAgC;AAAA,EACpC,aAAa;AAAA,EACb,WAAW;AAAA,EACX,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AACV;AAEA,MAAM,sBAAiC;AAAA,EACrC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AACT;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA6B;AAC3B,QAAM,EAAE,MAAM;AACd,QAAM,wBAAwB,MAAM,IAAI,gBAAgB;AAAA,IACtD,CAAC,OACC,CAAC,GAAG,UAAU,OACd,CAAC,GAAG,SAAS,QACZ,CAAE,GAAiB,YAAY,YAAa,GAAiB,QAAQ;AAAA,EAAA;AAG1E,QAAM,EAAE,iBAAiB,iBAAA,IAAqB;AAC9C,QAAM,eAAe,MAAM;AAC3B,QAAM,gBAAgB,MAAM;AAE5B,QAAM,EAAE,YAAY,MAAAC,OAAM,QAAQ,SAAS,OAAO,eAAe,aAC/D;AACF,QAAM,EAAE,QAAQ;AAChB,QAAM,YAAY,OAAO,QAAQ;AACjC,QAAM,aAAa,EAAE,OAAO,UAAU;AACtC,QAAM,kBAAkB,EAAE,IAAI,YAAY,MAAM;AAShD,QAAM,qBAAmC;AAAA,IACvC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,cAAc;AAAA,EAAA;AAGhB,QAAM,cAAc;AAAA,IAClB,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,OAAO,OAAO;AAEhB,QAAM,UAAU,CAAC;AAAA,IACf;AAAA,IACA;AAAA,EAAA,MAIoB;AACpB,WAAO,EAAE;AAAA,MACP,EAAE,QAAQ;AAAA,QACR,GAAI,gBACA;AAAA,UACE;AAAA,YACE,MACE,WAAW,SAAS,IAChB,KAAK,EAAE,KAAK,iBAAiB,IAAI,CAAC,QAAQ,SAAS,OACnD;AAAA,YACN,UAAU;AAAA,YACV,MAAM,MAAM,sBAAsB,aAAa;AAAA,UAAA;AAAA,QACjD,IAEF;AAAA,QACW;AAAA,QACf,0BAA0B;AAAA,MAAA,CAC3B;AAAA,MACD,CAAC,CAAC,MAAiB,EAAE,QAAQ;AAAA,IAAA;AAAA,EAEjC;AAEA,QAAM,QAAQ,IAAI,QAAQ,CAAA,GAAI,OAAO,OAAO;AAC5C,QAAM,yBAAyB,sBAAsB,IAAI,CAAC,OAAO,GAAG,IAAI;AAExE,QAAM,sBACH,cAAc,aACb,cAAc,WAAW;AAAA,IACvB,CAAC,OAAO,GAAG,SAAS,cAAc;AAAA,EAAA,KAEtC;AAEF,QAAM,yBAAyB,sBAC3B,cAAc,YACd;AAEJ,QAAM,qBAAqBA,MAAK,MAAM,GAAG,EAAE,MAAM,CAAC;AAKhD,WAAS,OACL,OACA;AAAA,IAGE,GAAG,mBAAmB;AAAA,EAExB;AAMN,QAAM,kBAAkB,cAAc,kBAAkB,OAAO,KAAK;AACpE,QAAM,cAAc,cAAc,iBAAiB,OAAO,KAAK;AAC/D,QAAM,cACH,cAAc,qBAAqB,MACpCA,SACC,cAAc,qBAAqB;AAEtC,QAAM,kBACJ,mBAAmB,gBAAgB,WAAW,KAAK;AACrD,QAAM,iBACJ,oBAAoB,iBAAiB,SAAS,QAAQ,WAAW,KAAK;AAExE,QAAM,4BAAsC,EAAE,KAAK;AAAA,IACjD,GAAG;AAAA,IACH,0BAA0B;AAAA,IAC1B,GAAG,QAAQ;AAAA,MACT,aAAa;AAAA,IAAA,CACd,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AAAA,EAAA,CACvB;AAED,QAAM,kBAAkB,WAAW,WAAW,KAAK,EAAE;AAErD,QAAM,yBAAyB,MAAM;AACnC,UAAM,oBAAoB,wBAAwB,CAAC,GAAG,QAAQ;AAC9D,UAAM,qBAAqB;AAC3B,UAAM,YACJ,IAAI,gBAAgB;AAAA,MAClB,CAAC,OACC,GAAG,WAAW,cACb,CAAE,GAAiB,YAClB,YAAa,GAAiB,QAAQ;AAAA,IAAA,KACvC,CAAA;AAEP,QAAI,CAAC,WAAW,QAAQ;AACtB,aAAO,yBAAyB,sBAAsB;AAAA,IACxD;AAEA,QAAI,UAAU,WAAW,KAAK,UAAU,CAAC,EAAE,WAAW;AACpD,aAAO,gBAAgB,UAAU,CAAC,EAAE,IAAI,KAAK,sBAAsB;AAAA,IACrE;AAEA,WAAO;AAAA,IACP,UACC,IAAI,CAAC,OAAkB;AACtB,aAAO;AAAA,QACL,GAAG,eAAe,OAAO,GAAG,WAAW;AAAA,QACvC,GAAG,GAAG,MAAM,KAAK,GAAG,IAAI;AAAA,MAAA,EAEvB,OAAO,OAAO,EACd,KAAK,IAAI;AAAA,IACd,CAAC,EACA,KAAK,IAAI,CAAC;AAAA;AAAA,IAEX,iBAAiB;AAAA,IACjB,kBAAkB;AAAA;AAAA,EAEpB;AAEA,QAAM,qBAAqB,qBAAqB;AAAA,IAC9C,gBAAgB;AAAA,IAChB,MAAM,EAAE,WAAW,EAAE,UAAU,GAAG,MAAM,UAAU,KAAK,QAAQ,CAAC;AAAA,IAChE,SAAS;AAAA,MACP,YACC,IAAI,CAAC,EAAE,MAAM,UAAU,WAAW;AACjC,aAAO,GAAG,IAAI,GAAG,WAAW,MAAM,EAAE,IAAI,IAAI;AAAA,IAC9C,CAAC,EACA,OAAO,OAAO,EACd,KAAK,IAAI,CAAC;AAAA;AAAA,EAAA,CAEd;AAED,QAAM,qBAAqB,YAAY,kBAAkB;AAEzD,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB,qBAAqB,CAAC,kBAAkB,IAAI,CAAA;AAAA,IAC7D,SAAS;AAAA,MACP,iBAAiB,SAAS,UAAU;AAAA,IACtC,wBAAwB;AAAA,IACxB,qBAAqB,mBAAmB,OAAO,KAAK;AAAA,IACpD,iBAAiB,YAAY,KAAK;AAAA;AAAA;AAAA;AAAA,IAIlC,YAAY,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAAA;AAAA,sBAEd,UAAU;AAAA,uBACT,EAAE,UAAU,MAAM,CAAC;AAAA,cAC5B,aAAa,WAAW,SAAS,YAAY,QAAQ,MAAM,EAAE;AAAA,cAC7D,SAAS,OAAO,KAAK,UAAU,MAAM,IAAI,GAAG;AAAA,cAC5C,SAAS,OAAO,SAAS,QAAQ,IAAI,MAAM,EAAE;AAAA,cAC7C,WAAW,kBAAkB,EAAE;AAAA,cAC/B,kBAAkB,gBAAgB,eAAe,MAAM,EAAE;AAAA,cACzD,iBAAiB,WAAW,cAAc,MAAM,EAAE;AAAA,iBAC/C,mBAAmB,IAAI;AAAA;AAAA,2BAEb,YAAY,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC;AAAA,wBACvE,IAAI,eAAe,EAAE,UAAU,MAAM,UAAU,KAAK,CAAC;AAAA,iBAC5D,gBACN,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAI,CAAC,OAAO,IAAI,EAAE,GAAG,CAAC;AAAA,iBAChB,KAAK,IAAI,CAAC,QAAgB;AACjC,UAAI,UAAU;AACZ,eAAO,OAAO,qBAAqB,KAAK,KAAK,CAAC;AAAA,MAChD;AACA,aAAO,IAAI,GAAG;AAAA,IAChB,CAAC,CAAC;AAAA,UACA,YAAY,UAAU,WAAW,SAAS,uBAAuB,WAAW,KAAK,CAAC,KAAK,IAAI,SAAS,GAAG,MAAM,EAAE;AAAA,UAC/G,UAAU,YAAY,eAAe,EAAE;AAAA,gBACjC,iBAAiB,YAAY,WAAW;AAAA;AAAA,MAElD,iBAAiB,YAAY,UAAU;AAAA,MACvC,iBAAiB,WAAW,UAAU;AAAA;AAAA,EAGrC,MAAM,IAAI,EACV,IAAI,CAAC,OAAO,GAAG,KAAA,CAAM,EACrB,OAAO,OAAO,EACd,KAAK,IAAI;AAAA,EAAA;AAEhB;ACzPO,MAAM,yBAAyB,OACpC,WACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,EAAE,MAAM;AAEd,QAAM,8BAAwC,CAAA;AAE9C,QAAM,uBAAuB,OAAO,IAAI,CAAC,UAAU;AACjD,UAAM,0BAA0B,gBAAgB;AAAA,MAC9C,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AACD,UAAM,EAAE,8BAA8B;AAEtC,UAAM,mBAAmB,IAAI;AAAA,MAC3B,OAAO;AAAA,QACJ,cAAc,OAAO,eAAuB,YAAY;AAAA,MAAA,EACzD,IAAI,CAAC,eAAe,MAAM,gBAAgB,UAAU,CAAC;AAAA,IAAA;AAGzD,8BAA0B,QAAQ,CAAC,6BAA6B;AAC9D,UAAI,CAAC,iBAAiB,IAAI,wBAAwB,GAAG;AACnD,oCAA4B,KAAK,wBAAwB;AAAA,MAC3D;AAAA,IACF,CAAC;AAED,WAAO,EAAE,GAAG,yBAAyB,MAAA;AAAA,EACvC,CAAC;AAED,QAAM,mBAA6B,CAAA;AAEnC,QAAM,oBAAoB,MAAM,QAAQ;AAAA,IACtC,qBAAqB;AAAA,MACnB,OAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MAAA,MACI;AACJ,cAAM,kBAAkB,cAAc,kBAAkB,OAAO,KAAK;AAEpE,YAAI,iBAAiB,sBAAsB,gBAAgB,UAAU;AACnE,2BAAiB;AAAA,YACf,YAAY,gBAAgB,QAAQ,YAAY,gBAAgB,kBAAkB;AAAA,UAAA;AAAA,QAEtF;AAEA,eAAO;AAAA,SAEP,MAAM,QAAQ;AAAA,UACZ,gBAAgB,IAAI,OAAO,cAAc;AACvC,kBAAM,eAAe,MAAM,iBAAiB;AAAA,cAC1C,GAAG;AAAA,cACH,UAAU;AAAA,cACV,kBAAkB;AAAA,YAAA,CACnB;AAED,mBAAO;AAAA,UACT,CAAC;AAAA,QAAA,GAGF,OAAO,OAAO,EACd,KAAK,MAAM,CAAC;AAAA;AAAA,QAEb,kBAAkB;AAAA,UAClB,GAAG;AAAA,UACH;AAAA,QAAA,CACD,CAAC;AAAA,qBACa,EAAE,UAAU,MAAM,UAAU,KAAK,CAAC,MAAM,0BAA0B;AAAA;AAAA,MAEjF;AAAA,IAAA;AAAA,EACF;AAGF,MAAI,UAAU;AACZ,qBAAiB;AAAA,MACf,YAAY,CAAC,aAAa,SAAS,UAAU,aAAa,aAAa,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,YAAY,YAAY,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/I;AAEA,SAAO;AAAA,IACL,2BAA2B;AAAA,IAC3B,SAAS,MAAM,gBAAgB,GAAG,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKpC,cAAc,aAAa,yBAAyB,KAAK,yBAAyB;AAAA,iBACjF,iBAAiB,SAAS,UAAU,YAAY,iBAAiB,SAAS,IAAI;AAAA,iBAC9E,iBAAiB,WAAW,UAAU,YAAY,iBAAiB,WAAW,IAAI;AAAA,iBAClF,iBAAiB,YAAY,UAAU,YAAY,iBAAiB,YAAY,IAAI;AAAA,QAC7F,iBAAiB,KAAK,IAAI,CAAC;AAAA;AAAA,QAG3B,cAAc,WAAW,SAAS,IAC9B;AAAA,iBACK,cAAc,WACtB,IAAI,CAAC,OAAkB,GAAG,IAAI,EAC9B;AAAA,MACC,CAAC,OAAY,CAAC,4BAA4B,SAAS,EAAE;AAAA,IAAA,CACtD,YAAY,yBAAyB;AAAA,UAElC,EACN;AAAA;AAAA,SAGE,MAAM,QAAQ;AAAA,MACZ,4BAA4B,IAAI,OAAO,qBAAqB;AAC1D,cAAM,YAAY,cAAc,WAAW;AAAA,UACzC,CAACC,eAAyBA,WAAU,SAAS;AAAA,QAAA;AAG/C,YAAI,CAAC,WAAW;AACd,iBAAO;AAAA,QACT;AAEA,cAAM,eAAe,MAAM,iBAAiB;AAAA,UAC1C,GAAG;AAAA,UACH,UAAU;AAAA,UACV,kBAAkB;AAAA,QAAA,CACnB;AAED,eAAO;AAAA,MACT,CAAC;AAAA,IAAA,GAGF,OAAO,OAAO,EACd,KAAK,MAAM,CAAC;AAAA;AAAA,QAEb,kBAAkB,OAAO,OAAO,EAAE,KAAK,MAAM,CAAC;AAAA,OAC/C;AAAA,EAAA;AAEP;AC1IO,MAAM,iBAAiB,OAAO;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,MAA4B;AAC1B,SAAO,MAAM,gBAAgB,GAAG,cAAc;AAAA;AAAA,IAE5C,qBAAqB,IAAI,CAAC,aAAa,oBAAoB,QAAQ,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,IACnF,WAAW,iCAAiC,EAAE;AAAA,KAC7C;AACL;ACtBO,MAAM,wBAAwB,OACnC,WACG;AACH,QAAM,EAAE,QAAQ,WAAA,IAAe,OAAO;AAEtC,QAAM,sBAAgC,CAAA;AAEtC,MAAI,OAAO,yBAAyB,yBAAyB;AAC3D,wBAAoB;AAAA,MAClB;AAAA,IAAA;AAAA,EAEJ;AAEA,mBAAiB,YAAY,YAAY;AACvC,QAAI,OAAO,2BAA2B,SAAS,SAAS,IAAI,GAAG;AAC7D;AAAA,IACF;AAEA,wBAAoB;AAAA,MAClB,MAAM,iBAAiB;AAAA,QACrB,GAAG;AAAA,QACH;AAAA,QACA,kBAAkB;AAAA,MAAA,CACnB;AAAA,IAAA;AAAA,EAEL;AAEA,SAAO,MAAM,OAAO,gBAAgB,GAAG,cAAc;AAAA;AAAA,EAErD,oBAAoB,SAAS,IAAI,oBAAoB,KAAK,MAAM,IAAI,WAAW;AAAA,GAC9E;AACH;ACxBO,MAAM,sBAAsB,OACjC,WACG;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,EAAE,MAAM;AAEd,QAAM;AAAA,IACJ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA,IACE,gBAAgB;AAAA,IAClB,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,mBAAmB,IAAI;AAAA,IAC3B,OAAO;AAAA,MACJ,cAAc,OAAO,eAAuB,YAAY;AAAA,IAAA,EACzD,IAAI,CAAC,eAAe,MAAM,gBAAgB,UAAU,CAAC;AAAA,EAAA;AAGzD,QAAM,8BAAwC,CAAA;AAE9C,4BAA0B,QAAQ,CAAC,6BAA6B;AAC9D,QAAI,CAAC,iBAAiB,IAAI,wBAAwB,GAAG;AACnD,kCAA4B,KAAK,wBAAwB;AAAA,IAC3D;AAAA,EACF,CAAC;AAED,QAAM,mBAA6B,CAAA;AAEnC,MAAI,UAAU;AACZ,qBAAiB;AAAA,MACf,YAAY,CAAC,aAAa,SAAS,UAAU,aAAa,aAAa,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,eAAe,YAAY,QAAQ,EAAE;AAAA,IAAA;AAAA,EAEhJ;AAEA,QAAM,kBAAkB,cAAc,kBAAkB,OAAO,KAAK;AAEpE,MAAI,iBAAiB,sBAAsB,gBAAgB,UAAU;AACnE,qBAAiB;AAAA,MACf,YAAY,gBAAgB,QAAQ,YAAY,gBAAgB,kBAAkB;AAAA,IAAA;AAAA,EAEtF;AAEA,SAAO;AAAA,IACL,2BAA2B;AAAA,IAC3B,SAAS,MAAM,gBAAgB,GAAG,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKpC,cAAc,aAAa,yBAAyB,KAAK,yBAAyB;AAAA,iBACjF,iBAAiB,SAAS,UAAU,YAAY,iBAAiB,SAAS,IAAI;AAAA,iBAC9E,iBAAiB,WAAW,UAAU,YAAY,iBAAiB,WAAW,IAAI;AAAA,iBAClF,iBAAiB,YAAY,UAAU,YAAY,iBAAiB,YAAY,IAAI;AAAA,QAC7F,iBAAiB,KAAK,IAAI,CAAC;AAAA;AAAA,QAG3B,cAAc,WAAW,SAAS,IAC9B;AAAA,iBACK,cAAc,WACtB,IAAI,CAAC,OAAkB,GAAG,IAAI,EAC9B;AAAA,MACC,CAAC,OAAY,CAAC,4BAA4B,SAAS,EAAE;AAAA,IAAA,CACtD,YAAY,yBAAyB;AAAA,UAElC,EACN;AAAA;AAAA,SAGE,MAAM,QAAQ;AAAA,MACZ,4BAA4B,IAAI,OAAO,qBAAqB;AAC1D,cAAM,YAAY,cAAc,WAAW;AAAA,UACzC,CAACA,eAAyBA,WAAU,SAAS;AAAA,QAAA;AAG/C,YAAI,CAAC,WAAW;AACd,iBAAO;AAAA,QACT;AAEA,cAAM,eAAe,MAAM,iBAAiB;AAAA,UAC1C,GAAG;AAAA,UACH,UAAU;AAAA,UACV,kBAAkB;AAAA,QAAA,CACnB;AAED,eAAO;AAAA,MACT,CAAC;AAAA,IAAA,GAGF,OAAO,OAAO,EACd,KAAK,MAAM,CAAC;AAAA;AAAA,SAGb,MAAM,QAAQ;AAAA,MACZ,gBAAgB,IAAI,OAAO,cAAc;AACvC,cAAM,eAAe,MAAM,iBAAiB;AAAA,UAC1C,GAAG;AAAA,UACH,UAAU;AAAA,UACV,kBAAkB;AAAA,QAAA,CACnB;AAED,eAAO;AAAA,MACT,CAAC;AAAA,IAAA,GAGF,OAAO,OAAO,EACd,KAAK,MAAM,CAAC;AAAA;AAAA,QAEb,kBAAkB;AAAA,MAClB,GAAG;AAAA,MACH;AAAA,IAAA,CACD,CAAC;AAAA,qBACa,EAAE,UAAU,MAAM,UAAU,KAAK,CAAC,MAAM,0BAA0B;AAAA,OAChF;AAAA,EAAA;AAEP;ACzIO,MAAM,gCAAgC,OAAO;AAAA,EAClD;AACF,MAA2C;AACzC,SAAO,GAAG,cAAc;AAAA,EACxB,0BAA0B,IAAI,CAAC,aAAa,oBAAoB,SAAS,QAAQ,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA;AAE7G;ACEO,MAAM,qBAAqB,CAGhC,QACA,cACA,qBAA8B,SACI;AAClC,MAAI,OAAO,WAAW,YAAY;AAEhC,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,MAAM;AAElB,WAAO,MAAM;AAAA,EACf;AAEA,QAAM,SAAS,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAGvD,SAAO,IAAI,SACT,OAAO,KAAK,CAAC,UAAU;AACrB,UAAM,MAAM,aAAa,GAAG,IAAI;AAEhC,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,UAAU;AAAA,IACnB;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB,CAAC;AACL;ACjCA,MAAM,8BAA8B,OAAO;AAAA,EACzC;AAAA,EACA;AAAA;AAEF,MAA+B;AAC7B,QAAM,UAAU,IAAIC,gBAAA;AAEpB,UAAQ,sBAAsB;AAAA,IAC5B,KAAK,KAAK,WAAW,SAAS;AAAA,IAC9B,KAAK,KAAK,WAAW,UAAU;AAAA,EAAA,CAChC;AAED,QAAM,0BAA0B,QAAQ;AAAA,IAAc,CAAC,eACrD,WAAW,YAAA,EAAc,SAAS,GAAG,SAAS,oBAAoB;AAAA,EAAA;AAGpE,MAAI,CAAC,wBAAyB;AAE9B,QAAM,uBACJ,wBAAwB,wBAAA;AAC1B,QAAM,qCAAqB,IAAA;AAE3B,aAAW,CAAC,MAAM,YAAY,KAAK,sBAAsB;AACvD,UAAM,oBAAoB,aAAa;AAAA,MACrC,CAAC,SACC,KAAK,QAAA,MAAcC,QAAAA,WAAW,wBAC9B,KAAK,QAAA,MAAcA,QAAAA,WAAW,wBAC9B,KAAK,QAAA,MAAcA,QAAAA,WAAW;AAAA,IAAA;AAGlC,QAAI,kBAAkB,SAAS,GAAG;AAChC,qBAAe,IAAI,MAAM,iBAAiB;AAAA,IAC5C;AAAA,EACF;AAEA,MAAI,eAAe,SAAS,EAAG;AAE/B,QAAM,gCAAgB,IAAA;AACtB,QAAM,gBAAgB,QACnB,eAAA,EACA,OAAO,CAAC,OAAO,OAAO,uBAAuB;AAEhD,aAAW,QAAQ,eAAe;AAChC,UAAM,cAAc,KAAK,qBAAqBA,QAAAA,WAAW,UAAU;AACnE,eAAW,cAAc,aAAa;AACpC,YAAM,OAAO,WAAW,QAAA;AACxB,UAAI,eAAe,IAAI,IAAI,GAAG;AAC5B,kBAAU,IAAI,IAAI;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,0BAA0B,KAAK;AAAA,MACnCA,mBAAW;AAAA,IAAA;AAEb,eAAW,QAAQ,yBAAyB;AAC1C,YAAM,aAAa,KAAK,cAAA;AACxB,UAAIC,QAAAA,KAAK,aAAa,UAAU,GAAG;AACjC,cAAM,OAAO,WAAW,QAAA;AACxB,YAAI,eAAe,IAAI,IAAI,GAAG;AAC5B,oBAAU,IAAI,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,sCAAsB,IAAA;AAE5B,aAAW,CAAC,MAAM,YAAY,KAAK,gBAAgB;AACjD,UAAM,mCAAmB,IAAA;AAEzB,eAAW,QAAQ,cAAc;AAC/B,YAAM,iBAAiB,KAAK;AAAA,QAC1BD,mBAAW;AAAA,MAAA;AAEb,iBAAW,OAAO,gBAAgB;AAChC,cAAM,WAAW,IAAI,YAAA,EAAc,QAAA;AACnC,YAAI,eAAe,IAAI,QAAQ,GAAG;AAChC,uBAAa,IAAI,QAAQ;AAAA,QAC3B;AAAA,MACF;AAEA,UAAI,KAAK,cAAcA,QAAAA,WAAW,iBAAiB;AACjD,cAAM,eAAe,KAAK,qBAAqBA,QAAAA,WAAW,UAAU;AACpE,mBAAW,QAAQ,cAAc;AAC/B,gBAAME,QAAO,KAAK,QAAA;AAClB,cAAI,eAAe,IAAIA,KAAI,GAAG;AAC5B,yBAAa,IAAIA,KAAI;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,oBAAgB,IAAI,MAAM,YAAY;AAAA,EACxC;AAEA,QAAM,QAAQ,MAAM,KAAK,SAAS;AAClC,QAAM,UAAU,IAAI,IAAI,SAAS;AAEjC,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,UAAU,MAAM,MAAA;AAEtB,QAAI,gBAAgB,IAAI,OAAO,GAAG;AAChC,iBAAW,OAAO,gBAAgB,IAAI,OAAO,GAAI;AAC/C,YAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AACrB,kBAAQ,IAAI,GAAG;AACf,oBAAU,IAAI,GAAG;AACjB,gBAAM,KAAK,GAAG;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe;AAEnB,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA,CAAC,SAAS;AAAA,IACV;AAAA,EAAA;AAGF,aAAW,CAAC,MAAM,YAAY,KAAK,gBAAgB;AACjD,QAAI,UAAU,IAAI,IAAI,EAAG;AAEzB,eAAW,QAAQ,cAAc;AAC/B,UAAI,YAAY,QAAQ,mBAAmB,IAAI,GAAG;AAChD,aAAK,OAAA;AACL;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,eAAe,GAAG;AACpB,UAAM,wBAAwB,KAAA;AAAA,EAChC;AAEA,SAAO;AACT;AAEO,MAAM,oBAAoB,OAAO,WAAoC;AAC1E,SAAO,MAAM;AACX,UAAM,eAAgB,MAAM,4BAA4B,MAAM,KAAM;AACpE,QAAI,iBAAiB,EAAG;AAAA,EAC1B;AACF;AC/HA,MAAMC,eAAaC,SAAAA,8PAA6B;AAEhD,MAAMC,cAAY,KAAK,QAAQF,YAAU;AACzC,MAAM,gBAAgB,QAAQ,IAAA;AAEvB,MAAM,cAAc,OACzB,WAEkB;AAClB,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,qBAAiB,SAAS,QAAQ;AAChC,YAAM,YAAY,KAAK;AAAA,IACzB;AACA;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,eACxB,KAAK,QAAQ,eAAe,OAAO,YAAY,IAC/C,KAAK,QAAQ,eAAe,iBAAiB;AAEjD,UAAQ,KAAK,kBAAkB,YAAY;AAE3C,QAAM,mBAAwC;AAAA,IAC5C,aACE,CAAC,OAAO,eAAe,OAAO,OAAO,gBAAgB,WACjD;AAAA,MACE,YAAY;AAAA,MACZ,MAAM;AAAA,IAAA,IAER,OAAO;AAAA,IACb,UACE,CAAC,OAAO,YAAY,OAAO,OAAO,aAAa,WAC3C;AAAA,MACE,YAAY;AAAA,MACZ,MAAM;AAAA,IAAA,IAER,OAAO;AAAA,IACb,YACE,CAAC,OAAO,cAAc,OAAO,OAAO,eAAe,WAC/C;AAAA,MACE,YAAY;AAAA,MACZ,MAAM;AAAA,IAAA,IAER,OAAO;AAAA,EAAA;AAGf,QAAM,QAAQ;AAAA,IACZ,WAAW,KAAK,QAAQE,aAAW,WAAW;AAAA,IAC9C,kBAAkB,KAAK;AAAA,MACrBA;AAAAA,MACA;AAAA,IAAA;AAAA,IAEF,YAAY,KAAK,QAAQA,aAAW,2BAA2B;AAAA,IAC/D,2BAA2B,KAAK;AAAA,MAC9BA;AAAAA,MACA;AAAA,IAAA;AAAA,IAEF,WAAW,KAAK,QAAQ,QAAQ,IAAA,GAAO,OAAO,MAAM;AAAA,EAAA;AAItD,QAAM,wCAA4D;AAAA,IAChE,gBAAgB;AAAA,IAChB,aAAa,OAAO,eAAe;AAAA,IACnC,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,WAAW;AAAA,IACX,WAAW,MAAM,UAAU,SAAA;AAAA,IAC3B,yBAAyB,CAAC,eAA0B;AAClD,aAAO;AAAA,QACL,GAAI;AAAA,QACJ,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,QACb,GAAG,OAAO,oBAAoB,0BAA0B,UAAU;AAAA,MAAA;AAAA,IAEtE;AAAA,IACA,gBAAgB,OAAO;AAAA,IACvB,GAAG,OAAO;AAAA,EAAA;AAGZ,MAAI;AAEJ,MAAI,CAAC,OAAO,OAAO;AACjB,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF;AAAA,EACF;AAEA,QAAM,sBAAsB,CAAC,UAAgD;AAC3E,UAAM,YAAuB,CAAA;AAE7B,QAAI,OAAO,UAAU,UAAU;AAC7B,gBAAU,QAAQ;AAClB,gBAAU,MAAM;AAAA,IAClB,OAAO;AACL,gBAAU,OAAO;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AACA,MAAI,qBAAuC;AAE3C,MAAI,OAAO,YAAY;AACrB,UAAMC,iCAAuB;AAAA,MAC3B,GAAI;AAAA,MACJ,GAAG,oBAAoB,OAAO,UAAU;AAAA,MACxC,OAAO;AAAA,QACL,QAAQ,CAAC,kBAAkB;AACzB,+BAAqBC,SAAAA,UAAU,cAAc,aAAa;AAAA,QAC5D;AAAA,QACA,iBAAiB,CAAC,WAAW;AAC3B,iBAAO,OAAO,UAAU,QAAQ,CAAC,cAAc;AAC7C,sBAAU,OAAO;AAAA,cAAK,CAAC,QAAQ,WAC7B,OAAO,UAAU,MAAM,cAAc,OAAO,UAAU,KAAK;AAAA,YAAA;AAAA,UAE/D,CAAC;AAAA,QACH;AAAA,QACA,mBAAmB,CAAC,WAAW,mBAAmB;AAChD,cAAI,qBAAqB;AAEzB,cACE,OAAO,8BAA8B,QACrC,OAAO,OAAO,8BAA8B,UAC5C;AACA,kBAAM,uBACJ,OAAO,OAAO,8BAA8B,WACxC,OAAO,4BACP;AAEN,kBAAM,eAAe,UAAU,MAAM,MAAM,GAAG,EAAE,OAAO,OAAO;AAC9D,kBAAM,EAAE,GAAAC,GAAAA,IAAM,eAAe,wBAC1B;AAEH,iCAAqBA,GAAE;AAAA,cACrB,GAAG,aAAa,oBAAoB,KAAK,EAAE,IAAI,kBAAkB;AAAA,YAAA;AAAA,UAErE;AAEA,gBAAM,eAAe;AAErB,iBACE,QAAQ,qBAAqB,cAAc,SAAS,KACpD,uCAAuC,OAAO;AAAA,YAC5C;AAAA,YACA;AAAA,UAAA,KAEF;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AAEA,QAAM,YAAY,MAAMF,iCAAuB;AAAA,IAC7C,GAAI;AAAA,IACJ,GAAG,oBAAoB,OAAO,KAAK;AAAA,IACnC,OAAO;AAAA,MACL,QAAQ,CAAC,eAAe,2BAA2B;AACjD,yBAAiB;AAEjB,cAAM,sBAAsB,cAAc;AAE1C,4BAAoB,aAAa,oBAAoB,cAAc,CAAA;AACnE,4BAAoB,WAAW,UAC7B,oBAAoB,WAAW,WAAW,CAAA;AAE5C,4BAAoB,QAAQ;AAAA,UAC1B,GAAG,oBAAoB;AAAA,UACvB,GAAG,oBAAoB;AAAA,QAAA;AAGzB,4BAAoB,WAAW,UAAU;AAAA,UACvC,GAAG,oBAAoB,WAAW;AAAA,UAClC,GAAG,oBAAoB,YAAY;AAAA,QAAA;AAGrC,eAAO,uCAAuC,OAAO;AAAA,UACnD;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,iBAAiB,CAAC,WAAW;AAC3B,eAAO,OAAO,UAAU,QAAQ,CAAC,cAAc;AAC7C,oBAAU,OAAO;AAAA,YAAK,CAAC,QAAQ,WAC7B,OAAO,UAAU,MAAM,cAAc,OAAO,UAAU,KAAK;AAAA,UAAA;AAAA,QAE/D,CAAC;AACD,eAAO,uCAAuC,OAAO;AAAA,UACnD;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,mBAAmB,CAAC,WAAW,mBAAmB;AAChD,YAAI,qBAAqB;AAEzB,YACE,OAAO,8BAA8B,QACrC,OAAO,OAAO,8BAA8B,UAC5C;AACA,gBAAM,uBACJ,OAAO,OAAO,8BAA8B,WACxC,OAAO,4BACP;AAEN,gBAAM,eAAe,UAAU,MAAM,MAAM,GAAG,EAAE,OAAO,OAAO;AAC9D,gBAAM,EAAE,GAAAE,GAAAA,IAAM,eAAe,wBAC1B;AAEH,+BAAqBA,GAAE;AAAA,YACrB,GAAG,aAAa,oBAAoB,KAAK,EAAE,IAAI,kBAAkB;AAAA,UAAA;AAAA,QAErE;AAEA,cAAM,eAAe;AAErB,eACE,QAAQ,qBAAqB,cAAc,SAAS,KACpD,uCAAuC,OAAO;AAAA,UAC5C;AAAA,UACA;AAAA,QAAA,KAEF;AAAA,MAEJ;AAAA,IAAA;AAAA,EACF,CACD;AAID,QAAM,QAAQ,eAAe,sBAAA,EAC1B;AAEH,QAAM,EAAE,MAAM;AAEd,QAAM,4BAA4B,CAAC,OAAO;AAE1C,MAAI,YAA2B;AAE/B,MAAI,OAAO,WAAW;AACpB,QAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,kBAAY,OAAO,UAAU,KAAK;AAAA,IACpC,OAAO;AACL,kBAAY,MAAM,EAAE,UAAU,OAAO,SAAS;AAAA,IAChD;AAAA,EACF;AAEA,QAAM,YAAY,eAAe;AAEjC,YAAU,SAAS,OAAO,MAAM;AAChC,YAAU,UAAU,OAAO,MAAM;AAEjC,QAAM,cAAc;AAAA,IAClB,OAAO;AAAA,IACP,CAAC,cAAc,UAAU;AAAA,EAAA;AAG3B,YAAU,cAAc,aACtB,UAAU,cAAc,WAAW;AAAA,IAAO,CAAC,cACzC,YAAY,SAAS;AAAA,EAAA;AAGzB,QAAM,YAAY,OAAO,OAAO,UAAU,cAAc,MAAM,EAC3D,OACA;AAAA,IAAQ,CAAC,eACR,YAAY,aAAa,WAAW,SAAS;AAAA,EAAA;AAGjD,QAAM,iBAAiB;AAAA,IACrB,OAAO;AAAA,IACP,CAAC,UAAU,MAAM,KAAK,eAAe;AAAA,EAAA;AAGvC,QAAM,iBAAiC;AAAA,IACrC,GAAG;AAAA,IACH,eAAe;AAAA,IACf,eAAe,UAAU;AAAA,IACzB,iBAAiB,UAAU;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,QAAM,mDAAmC,IAAA;AAEzC,QAAM,oCAA8C,CAAA;AAEpD,QAAM,gCAAgB,IAAA;AACtB,QAAM,qCAAqB,IAAA;AAC3B,QAAM,8BAAc,IAAA;AAEpB,MAAI,OAAO,WAAW,MAAM;AAC1B,sCAAkC,KAAK,WAAW;AAElD,QAAI,OAAO,eAAe,yBAAyB;AAEjD,gBAAU,UAAU,KAAK,QAAQ,OAAO,QAAQ,WAAW,CAAC;AAE5D,YAAM,2BAAqC,CAAA;AAE3C,uBAAiB,SAAS,WAAW;AACnC,cAAM;AAAA,UACJ,SAAS;AAAA,UACT;AAAA,QAAA,IACE,MAAM,oBAAoB;AAAA,UAC5B,GAAG;AAAA,UACH;AAAA,UACA,2BAA2B;AAAA,UAC3B,WAAW;AAAA,UACX,UAAU,OAAO,aACb,OACA;AAAA,YACE,YAAY,CAAA;AAAA,YACZ;AAAA,UAAA;AAAA,QACF,CACL;AAED,YAAI,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG;AACjC,gBAAM,IAAI,KAAK,QAAQ,CAAC,QAAQ;AAC9B,oBAAQ,IAAI,GAAG;AAAA,UACjB,CAAC;AAAA,QACH;AAEA,kCAA0B,QAAQ,CAAC,SAAS;AAC1C,uCAA6B;AAAA,YAC3B;AAAA,aACC,6BAA6B,IAAI,IAAI,KAAK,KAAK;AAAA,UAAA;AAAA,QAEpD,CAAC;AAED,YAAI,CAAC,eAAe,KAAK,GAAG;AAC1B;AAAA,QACF;AAEA,cAAM,WAAW,GAAG,EAAE,UAAU,MAAM,UAAU,KAAK,CAAC;AAEtD,iCAAyB,KAAK,QAAQ;AAEtC,kBAAU,WAAW;AAAA,UACnB,MAAM,KAAK,QAAQ,OAAO,QAAQ,WAAW;AAAA,UAC7C;AAAA,UACA,YAAY;AAAA,UACZ,SAAS;AAAA,QAAA,CACV;AAAA,MACH;AAEA,UAAI,2BAA2B;AAC7B,kBAAU,WAAW;AAAA,UACnB,MAAM,KAAK,QAAQ,OAAO,QAAQ,WAAW;AAAA,UAC7C,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,SAAS,MAAM,8BAA8B;AAAA,YAE3C,2BAA2B;AAAA,UAAA,CAC5B;AAAA,QAAA,CACF;AAAA,MACH;AAAA,IAEF,OAAO;AAEL,YAAM,EAAE,SAAS,2BAA2B,0BAAA,IAC1C,MAAM,uBAAuB;AAAA,QAC3B,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,2BAA2B;AAAA,QAC3B,WAAW;AAAA,QACX,UAAU,OAAO,aACb,OACA;AAAA,UACE;AAAA,UACA,YAAY,CAAA;AAAA,QAAC;AAAA,MACf,CACL;AAEH,gCAA0B,QAAQ,CAAC,SAAS;AAC1C,qCAA6B;AAAA,UAC3B;AAAA,WACC,6BAA6B,IAAI,IAAI,KAAK,KAAK;AAAA,QAAA;AAAA,MAEpD,CAAC;AAED,YAAM,iBAAiB,UAAU,OAAO,cAAc;AAEtD,YAAM,oBAAoB,eAAe,SAAS;AAElD,UAAI,mBAAmB;AACrB,uBAAe,QAAQ,CAAC,UAAU;AAChC,cAAI,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG;AACjC,kBAAM,IAAI,KAAK,QAAQ,CAAC,QAAgB;AACtC,sBAAQ,IAAI,GAAG;AAAA,YACjB,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAED,cAAM,WAAW;AAEjB,0CAAkC,KAAK,WAAW;AAElD,kBAAU,WAAW;AAAA,UACnB,MAAM,OAAO;AAAA,UACb;AAAA,UACA,YAAY;AAAA,UACZ,SAAS;AAAA,QAAA,CACV;AAAA,MACH;AAAA,IAGF;AAAA,EACF,OAAO;AAKL,cAAU,QAAQ,CAAC,UAAU;AAC3B,UAAI;AAEJ,UAAI,OAAO,OAAO,YAAY,YAAY;AACxC,gBAAQ,OAAO,QAAQ,KAAK;AAAA,MAC9B,WAAW,OAAO,SAAS,SAAS,cAAc,GAAG;AACnD,cAAM,eACJ,CAAC,OAAO,QAAQ,WAAW,mBAAmB,EAAE,KAAK;AAEvD,gBACG,MAAM,QAAsB,MAAM,MAAM,GAAG,GAAG,OAAO,OAAO,IAC3D,YACF,KAAK;AAAA,MACT,WAAW,OAAO,SAAS,SAAS,KAAK,GAAG;AAC1C,cAAM,WAAW,CAAC,OAAO,QAAQ,WAAW,UAAU,EAAE,KAAK;AAE7D,gBAAQ,MAAM,KAAK,OAAO,QAAQ,KAAK;AAAA,MACzC;AAEA,UAAI,SAAS,MAAM;AACjB,gBAAQ;AAAA,MACV;AAEA,UAAI,CAAC,UAAU,IAAI,KAAK,GAAG;AACzB,kBAAU,IAAI,OAAO,EAAE;AAAA,MACzB;AAEA,gBAAU,IAAI,KAAK,GAAG,KAAK,KAAK;AAAA,IAClC,CAAC;AAGD,UAAM,eAAe;AAAA,MACnB,OAAO;AAAA,MACP,CAAC,cAAc;AAAA,IAAA;AAEjB,qBAAiB,CAAC,WAAW,MAAM,KAAK,WAAW;AACjD,UAAI,CAAC,aAAa,SAAS,GAAG;AAC5B;AAAA,MACF;AAEA,YAAM,2BAAqC,CAAA;AAE3C,YAAM,iBAAiB,KAAK;AAAA,QAC1B,OAAO;AAAA,QACP,EAAE,UAAU,SAAS;AAAA,MAAA;AAGvB,gBAAU,UAAU,cAAc;AAElC,UAAI,oBAAoB;AAExB,UAAI,OAAO,eAAe,yBAAyB;AAEjD,kBAAU,UAAU,KAAK,QAAQ,gBAAgB,WAAW,CAAC;AAE7D,yBAAiB,SAAS,QAAQ;AAChC,gBAAM;AAAA,YACJ,SAAS;AAAA,YACT;AAAA,UAAA,IACE,MAAM,oBAAoB;AAAA,YAC5B,GAAG;AAAA,YACH;AAAA,YACA,2BAA2B;AAAA,YAC3B;AAAA,YACA,UAAU,OAAO,aACb,OACA;AAAA,cACE;AAAA,cACA,YAAY,CAAA;AAAA,YAAC;AAAA,UACf,CACL;AAED,oCAA0B,QAAQ,CAAC,SAAS;AAC1C,yCAA6B;AAAA,cAC3B;AAAA,eACC,6BAA6B,IAAI,IAAI,KAAK,KAAK;AAAA,YAAA;AAAA,UAEpD,CAAC;AAED,cAAI,CAAC,eAAe,KAAK,GAAG;AAC1B;AAAA,UACF;AAEA,8BAAoB;AAEpB,cAAI,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG;AACjC,kBAAM,IAAI,KAAK,QAAQ,CAAC,QAAgB;AACtC,sBAAQ,IAAI,GAAG;AAAA,YACjB,CAAC;AAAA,UACH;AAEA,gBAAM,WAAW,GAAG,EAAE,UAAU,MAAM,UAAU,KAAK,CAAC;AAEtD,mCAAyB,KAAK,QAAQ;AAEtC,oBAAU,WAAW;AAAA,YACnB,MAAM,KAAK;AAAA,cACT,OAAO;AAAA,cACP,EAAE,UAAU,SAAS;AAAA,cACrB;AAAA,YAAA;AAAA,YAEF;AAAA,YACA,YAAY;AAAA,YACZ,SAAS;AAAA,UAAA,CACV;AAAA,QACH;AAAA,MAEF,OAAO;AAEL,cAAM;AAAA,UACJ,SAAS;AAAA,UACT;AAAA,QAAA,IACE,MAAM,uBAAuB;AAAA,UAC/B,GAAG;AAAA,UACH;AAAA,UACA,2BAA2B;AAAA,UAC3B;AAAA,UACA,UAAU,OAAO,aACb,OACA;AAAA,YACE;AAAA,YACA,YAAY,CAAA;AAAA,UAAC;AAAA,QACf,CACL;AAED,kCAA0B,QAAQ,CAAC,SAAS;AAC1C,uCAA6B;AAAA,YAC3B;AAAA,aACC,6BAA6B,IAAI,IAAI,KAAK,KAAK;AAAA,UAAA;AAAA,QAEpD,CAAC;AAED,cAAM,iBAAiB,OAAO,OAAO,cAAc;AAEnD,4BAAoB,eAAe,SAAS;AAE5C,YAAI,mBAAmB;AACrB,yBAAe,QAAQ,CAAC,UAAU;AAChC,gBAAI,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG;AACjC,oBAAM,IAAI,KAAK,QAAQ,CAAC,QAAgB;AACtC,wBAAQ,IAAI,GAAG;AAAA,cACjB,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AAED,gBAAM,WAAW;AAEjB,mCAAyB,KAAK,QAAQ;AAEtC,oBAAU,WAAW;AAAA,YACnB,MAAM;AAAA,YACN;AAAA,YACA,YAAY;AAAA,YACZ,SAAS;AAAA,UAAA,CACV;AAAA,QACH;AAAA,MAGF;AAEA,UAAI,mBAAmB;AACrB,uBAAe,IAAI,SAAS;AAC5B,cAAM,kBAAkB,OAAO,wBAC3B,OAAO,sBAAsB,EAAE,UAAU,SAAS,GAAG,KAAK,IAC1D,EAAE,UAAU,SAAS;AAEzB,YAAI,2BAA2B;AAC7B,oBAAU,WAAW;AAAA,YACnB,MAAM;AAAA,YACN,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,SAAS,GAAG,cAAc;AAAA,cACxB,eAAe;AAAA;AAAA,UAAA,CAElB;AAAA,QACH;AAEA,YACE,6BACA,OAAO,eAAe,yBACtB;AACA,oBAAU,WAAW;AAAA,YACnB,MAAM,KAAK,QAAQ,gBAAgB,WAAW;AAAA,YAC9C,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,SAAS,MAAM,8BAA8B;AAAA,cAE3C,2BAA2B;AAAA,YAAA,CAC5B;AAAA,UAAA,CACF;AAAA,QACH;AAEA,0CAAkC,KAAK,EAAE,UAAU,SAAS,CAAC;AAAA,MAC/D,OAAO;AACL,kBAAU;AAAA,UACR,KAAK,QAAQ,OAAO,QAAQ,EAAE,UAAU,SAAS,CAAC;AAAA,QAAA;AAAA,MAEtD;AAAA,IACF;AAAA,EAEF;AAEA,QAAM,WACJ,CAAC,OAAO,eACP,cAAc,eAAe,OAAO,KAAK,QAAQ,OAAO,MACrD;AAAA,IACE;AAAA,IACA,YAAY,CAAC,GAAG,eAAe,QAAQ;AAAA,IACvC,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,EAAA,IAE5B;AAEN,QAAM,4BAA4B,MAAM;AAAA,IACtC,6BAA6B,QAAA;AAAA,EAAQ,EAEpC,OAAO,CAAC,CAACA,IAAG,KAAK,MAAM,UAAU,CAAC,EAClC,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AAEvB,QAAM,uBAAuB,MAAM,sBAAsB;AAAA,IACvD,GAAG;AAAA,IACH;AAAA,EAAA,CACD;AAED,YAAU,WAAW;AAAA,IACnB,MAAM,MAAM;AAAA,IACZ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,SAAS;AAAA,EAAA,CACV;AAED,MAAI,UAAU;AACZ,cAAU,WAAW;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,SAAS,MAAM,aAAa;AAAA,QAC1B,GAAG;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AAEA,MAAI,WAAW;AACb,cAAU,WAAW;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,SAAS,MAAM,eAAe;AAAA,QAC5B,GAAG;AAAA,QACH,sBAAsB;AAAA,QACtB;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AACD,QAAI,2BAA2B;AAC7B,gBAAU,WAAW;AAAA,QACnB,MAAM,MAAM;AAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,GAAG,cAAc;AAAA,cACpB,SAAS;AAAA;AAAA,MAAA,CAEhB;AAAA,IACH;AAAA,EACF,OAAO;AACL,QAAI,2BAA2B;AAC7B,gBAAU,WAAW;AAAA,QACnB,MAAM,MAAM;AAAA,QACZ,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,MAAM,eAAe;AAAA,UAC5B,GAAG;AAAA,UACH,sBAAsB;AAAA,UACtB;AAAA,QAAA,CACD;AAAA,MAAA,CACF;AAAA,IACH;AAAA,EACF;AAEA,MAAI,OAAO,mBAAmB;AAC5B,sBAAkB;AAAA,MAChB,WAAW,OAAO;AAAA,MAClB,WACE,OAAO,sBAAsB,OACzB,SACA,OAAO,kBAAkB;AAAA,IAAA,CAChC;AAAA,EACH;AACF;ACluBO,MAAM,eAAe,IACvB,YAC0B;AAC7B,SAAO,QACJ,OACA,OAAO,CAAC,WAA6C,CAAC,CAAC,MAAM;AAClE;;;"}
package/cli.js CHANGED
@@ -206,11 +206,13 @@ const requestContentKind = {
206
206
  URL_ENCODED: '"application/x-www-form-urlencoded"',
207
207
  FORM_DATA: '"multipart/form-data"',
208
208
  TEXT: '"text/plain"',
209
+ JSON: '"application/json"',
209
210
  BINARY: '"application/octet-stream"'
210
211
  };
211
212
  const responseContentKind = {
212
213
  TEXT: '"text"',
213
214
  IMAGE: '"blob"',
215
+ JSON: '"json"',
214
216
  FORM_DATA: '"formData"',
215
217
  BYTES: '"bytes"'
216
218
  };