mobx-tanstack-query-api 0.29.0 → 0.30.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 +40 -31
- package/cli.cjs.map +1 -1
- package/cli.d.ts +6 -0
- package/cli.js +40 -31
- package/cli.js.map +1 -1
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -928,6 +928,7 @@ const generateApi = async (params) => {
|
|
|
928
928
|
});
|
|
929
929
|
const utils = codegenProcess.getRenderTemplateData().utils;
|
|
930
930
|
const { _ } = utils;
|
|
931
|
+
const shouldGenerateBarrelFiles = !params.noBarrelFiles;
|
|
931
932
|
let namespace = null;
|
|
932
933
|
if (params.namespace) {
|
|
933
934
|
if (typeof params.namespace === "function") {
|
|
@@ -1010,14 +1011,16 @@ const generateApi = async (params) => {
|
|
|
1010
1011
|
content: requestInfoPerFileContent
|
|
1011
1012
|
});
|
|
1012
1013
|
}
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1014
|
+
if (shouldGenerateBarrelFiles) {
|
|
1015
|
+
codegenFs.createFile({
|
|
1016
|
+
path: path.resolve(params.output, "endpoints"),
|
|
1017
|
+
fileName: "index.ts",
|
|
1018
|
+
withPrefix: false,
|
|
1019
|
+
content: await indexTsForEndpointPerFileTmpl({
|
|
1020
|
+
generatedRequestFileNames: fileNamesWithRequestInfo
|
|
1021
|
+
})
|
|
1022
|
+
});
|
|
1023
|
+
}
|
|
1021
1024
|
} else {
|
|
1022
1025
|
const { content: requestInfoPerFileContent, reservedDataContractNames } = await allEndpointPerFileTmpl({
|
|
1023
1026
|
...baseTmplParams,
|
|
@@ -1177,15 +1180,17 @@ const generateApi = async (params) => {
|
|
|
1177
1180
|
if (hasFilteredRoutes) {
|
|
1178
1181
|
nonEmptyGroups.add(groupName);
|
|
1179
1182
|
const exportGroupName = params.formatExportGroupName ? params.formatExportGroupName(_.camelCase(groupName), utils) : _.camelCase(groupName);
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1183
|
+
if (shouldGenerateBarrelFiles) {
|
|
1184
|
+
codegenFs.createFile({
|
|
1185
|
+
path: groupDirectory,
|
|
1186
|
+
fileName: "index.ts",
|
|
1187
|
+
withPrefix: false,
|
|
1188
|
+
content: `${LINTERS_IGNORE}
|
|
1185
1189
|
export * as ${exportGroupName} from './endpoints';
|
|
1186
1190
|
`
|
|
1187
|
-
|
|
1188
|
-
|
|
1191
|
+
});
|
|
1192
|
+
}
|
|
1193
|
+
if (shouldGenerateBarrelFiles && params.outputType === "one-endpoint-per-file") {
|
|
1189
1194
|
codegenFs.createFile({
|
|
1190
1195
|
path: path.resolve(groupDirectory, "endpoints"),
|
|
1191
1196
|
fileName: "index.ts",
|
|
@@ -1243,25 +1248,29 @@ export * as ${exportGroupName} from './endpoints';
|
|
|
1243
1248
|
metaInfo
|
|
1244
1249
|
})
|
|
1245
1250
|
});
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
+
if (shouldGenerateBarrelFiles) {
|
|
1252
|
+
codegenFs.createFile({
|
|
1253
|
+
path: paths.outputDir,
|
|
1254
|
+
fileName: "index.ts",
|
|
1255
|
+
withPrefix: false,
|
|
1256
|
+
content: `${LINTERS_IGNORE}
|
|
1251
1257
|
export * as ${namespace} from './__exports';
|
|
1252
1258
|
`
|
|
1253
|
-
|
|
1259
|
+
});
|
|
1260
|
+
}
|
|
1254
1261
|
} else {
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1262
|
+
if (shouldGenerateBarrelFiles) {
|
|
1263
|
+
codegenFs.createFile({
|
|
1264
|
+
path: paths.outputDir,
|
|
1265
|
+
fileName: "index.ts",
|
|
1266
|
+
withPrefix: false,
|
|
1267
|
+
content: await allExportsTmpl({
|
|
1268
|
+
...baseTmplParams,
|
|
1269
|
+
collectedExportFiles: collectedExportFilesFromIndexFile,
|
|
1270
|
+
metaInfo
|
|
1271
|
+
})
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1265
1274
|
}
|
|
1266
1275
|
if (params.removeUnusedTypes) {
|
|
1267
1276
|
removeUnusedTypes({
|
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 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 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 // #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 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 if (params.outputType === 'one-endpoint-per-file') {\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 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 } else {\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 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,QAAQ;AACV;AAEA,MAAM,sBAAiC;AAAA,EACrC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,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;ACvPO,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,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,gBAAU,WAAW;AAAA,QACnB,MAAM,KAAK,QAAQ,OAAO,QAAQ,WAAW;AAAA,QAC7C,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,MAAM,8BAA8B;AAAA,UAE3C,2BAA2B;AAAA,QAAA,CAC5B;AAAA,MAAA,CACF;AAAA,IAEH,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,kBAAU,WAAW;AAAA,UACnB,MAAM;AAAA,UACN,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,SAAS,GAAG,cAAc;AAAA,cACtB,eAAe;AAAA;AAAA,QAAA,CAEpB;AAED,YAAI,OAAO,eAAe,yBAAyB;AACjD,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,cAAU,WAAW;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,SAAS,GAAG,cAAc;AAAA,cAClB,SAAS;AAAA;AAAA,IAAA,CAElB;AAAA,EACH,OAAO;AACL,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;AAAA,EACH;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;ACrtBO,MAAM,eAAe,IACvB,YAC0B;AAC7B,SAAO,QACJ,OACA,OAAO,CAAC,WAA6C,CAAC,CAAC,MAAM;AAClE;;;"}
|
|
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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"}
|
package/cli.d.ts
CHANGED
|
@@ -178,6 +178,12 @@ interface GenerateQueryApiParams {
|
|
|
178
178
|
* [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/codegen/config/#nometainfo)
|
|
179
179
|
*/
|
|
180
180
|
noMetaInfo?: boolean;
|
|
181
|
+
/**
|
|
182
|
+
* Disable generation of index.ts barrel files.
|
|
183
|
+
*
|
|
184
|
+
* [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/codegen/config/#nobarrelfiles)
|
|
185
|
+
*/
|
|
186
|
+
noBarrelFiles?: boolean;
|
|
181
187
|
}
|
|
182
188
|
|
|
183
189
|
type AllImportFileParams = Record<KeyOfByValue<Required<GenerateQueryApiParams>, 'builtin' | ImportFileParams>, ImportFileParams>;
|
package/cli.js
CHANGED
|
@@ -925,6 +925,7 @@ const generateApi = async (params) => {
|
|
|
925
925
|
});
|
|
926
926
|
const utils = codegenProcess.getRenderTemplateData().utils;
|
|
927
927
|
const { _ } = utils;
|
|
928
|
+
const shouldGenerateBarrelFiles = !params.noBarrelFiles;
|
|
928
929
|
let namespace = null;
|
|
929
930
|
if (params.namespace) {
|
|
930
931
|
if (typeof params.namespace === "function") {
|
|
@@ -1007,14 +1008,16 @@ const generateApi = async (params) => {
|
|
|
1007
1008
|
content: requestInfoPerFileContent
|
|
1008
1009
|
});
|
|
1009
1010
|
}
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1011
|
+
if (shouldGenerateBarrelFiles) {
|
|
1012
|
+
codegenFs.createFile({
|
|
1013
|
+
path: path.resolve(params.output, "endpoints"),
|
|
1014
|
+
fileName: "index.ts",
|
|
1015
|
+
withPrefix: false,
|
|
1016
|
+
content: await indexTsForEndpointPerFileTmpl({
|
|
1017
|
+
generatedRequestFileNames: fileNamesWithRequestInfo
|
|
1018
|
+
})
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1018
1021
|
} else {
|
|
1019
1022
|
const { content: requestInfoPerFileContent, reservedDataContractNames } = await allEndpointPerFileTmpl({
|
|
1020
1023
|
...baseTmplParams,
|
|
@@ -1174,15 +1177,17 @@ const generateApi = async (params) => {
|
|
|
1174
1177
|
if (hasFilteredRoutes) {
|
|
1175
1178
|
nonEmptyGroups.add(groupName);
|
|
1176
1179
|
const exportGroupName = params.formatExportGroupName ? params.formatExportGroupName(_.camelCase(groupName), utils) : _.camelCase(groupName);
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1180
|
+
if (shouldGenerateBarrelFiles) {
|
|
1181
|
+
codegenFs.createFile({
|
|
1182
|
+
path: groupDirectory,
|
|
1183
|
+
fileName: "index.ts",
|
|
1184
|
+
withPrefix: false,
|
|
1185
|
+
content: `${LINTERS_IGNORE}
|
|
1182
1186
|
export * as ${exportGroupName} from './endpoints';
|
|
1183
1187
|
`
|
|
1184
|
-
|
|
1185
|
-
|
|
1188
|
+
});
|
|
1189
|
+
}
|
|
1190
|
+
if (shouldGenerateBarrelFiles && params.outputType === "one-endpoint-per-file") {
|
|
1186
1191
|
codegenFs.createFile({
|
|
1187
1192
|
path: path.resolve(groupDirectory, "endpoints"),
|
|
1188
1193
|
fileName: "index.ts",
|
|
@@ -1240,25 +1245,29 @@ export * as ${exportGroupName} from './endpoints';
|
|
|
1240
1245
|
metaInfo
|
|
1241
1246
|
})
|
|
1242
1247
|
});
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
+
if (shouldGenerateBarrelFiles) {
|
|
1249
|
+
codegenFs.createFile({
|
|
1250
|
+
path: paths.outputDir,
|
|
1251
|
+
fileName: "index.ts",
|
|
1252
|
+
withPrefix: false,
|
|
1253
|
+
content: `${LINTERS_IGNORE}
|
|
1248
1254
|
export * as ${namespace} from './__exports';
|
|
1249
1255
|
`
|
|
1250
|
-
|
|
1256
|
+
});
|
|
1257
|
+
}
|
|
1251
1258
|
} else {
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1259
|
+
if (shouldGenerateBarrelFiles) {
|
|
1260
|
+
codegenFs.createFile({
|
|
1261
|
+
path: paths.outputDir,
|
|
1262
|
+
fileName: "index.ts",
|
|
1263
|
+
withPrefix: false,
|
|
1264
|
+
content: await allExportsTmpl({
|
|
1265
|
+
...baseTmplParams,
|
|
1266
|
+
collectedExportFiles: collectedExportFilesFromIndexFile,
|
|
1267
|
+
metaInfo
|
|
1268
|
+
})
|
|
1269
|
+
});
|
|
1270
|
+
}
|
|
1262
1271
|
}
|
|
1263
1272
|
if (params.removeUnusedTypes) {
|
|
1264
1273
|
removeUnusedTypes({
|
package/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","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 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 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 // #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 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 if (params.outputType === 'one-endpoint-per-file') {\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 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 } else {\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 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","path","modelType","generateApiFromSwagger","_"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","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","path","modelType","generateApiFromSwagger","_"],"mappings":"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"}
|
package/package.json
CHANGED