mobx-tanstack-query-api 0.39.1 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.cjs +11 -4
- package/cli.cjs.map +1 -1
- package/cli.d.ts +1 -0
- package/cli.js +11 -4
- package/cli.js.map +1 -1
- package/package.json +2 -2
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/utils/zod/types.ts","../src/codegen/utils/zod/build-endpoint-zod-contracts-code.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\nfunction getResponseContentTypes(raw: AnyObject): string[] {\n const out: string[] = [];\n if (Array.isArray(raw.produces)) out.push(...raw.produces);\n const status =\n raw.responses &&\n Object.keys(raw.responses).find((s) => {\n const code = Number.parseInt(s, 10);\n return code >= 200 && code < 300;\n });\n const content = status && raw.responses[status]?.content;\n if (content && typeof content === 'object') out.push(...Object.keys(content));\n return [...new Set(out)];\n}\n\nfunction getRequestContentTypes(raw: AnyObject): string[] {\n const out: string[] = [];\n if (Array.isArray(raw.consumes)) out.push(...raw.consumes);\n const body = raw.requestBody?.content;\n if (body && typeof body === 'object') out.push(...Object.keys(body));\n return [...new Set(out)];\n}\ntype JSDocLine = { name?: string; content?: string };\n\nfunction getSecuritySchemeNames(security: unknown): string[] {\n if (!Array.isArray(security)) return [];\n return security\n .flatMap((s: AnyObject) =>\n typeof s === 'object' && s !== null ? Object.keys(s) : [],\n )\n .filter(Boolean);\n}\n\nfunction getExternalDocsLine(\n externalDocs: unknown,\n formatDescription: (s: string, b: boolean) => string,\n): JSDocLine | null {\n if (\n !externalDocs ||\n typeof externalDocs !== 'object' ||\n !('url' in externalDocs)\n )\n return null;\n const url = (externalDocs as AnyObject).url;\n if (!url) return null;\n const desc = (externalDocs as AnyObject).description;\n const extDesc = desc\n ? ` ${formatDescription(String(desc).slice(0, 60), true)}`\n : '';\n return { name: 'see', content: `${url}${extDesc}`.trim() };\n}\n\nfunction getSummaryAndDescriptionLines(\n rawRoute: AnyObject,\n formatDescription: (s: string, b: boolean) => string,\n): JSDocLine[] {\n const out: JSDocLine[] = [];\n if (rawRoute.summary) {\n const summaryLines = splitTextByLines(rawRoute.summary, 60)\n .filter(Boolean)\n .map((line) => ({ content: `**${formatDescription(line, true)}**` }));\n if (summaryLines.length > 0) out.push(...summaryLines, { content: '' });\n }\n if (rawRoute.description) {\n const descriptionLines = splitTextByLines(rawRoute.description, 60)\n .filter(Boolean)\n .map((line) => ({ content: formatDescription(line, true) }));\n if (descriptionLines.length > 0)\n out.push(...descriptionLines, { content: '' });\n } else if (!rawRoute.summary) {\n out.push({ content: 'No description' });\n }\n return out;\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 const path = routeRequest?.path as string | undefined;\n const method = routeRequest?.method as string | undefined;\n\n const { utils } = configuration;\n\n const { _, formatDescription } = utils;\n\n const schema =\n (configuration as AnyObject).config?.swaggerSchema ??\n (configuration as AnyObject).swaggerSchema;\n const pathKey = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n const schemaOp =\n pathKey && methodKey ? schema?.paths?.[pathKey]?.[methodKey] : null;\n const rawWithSpec =\n schemaOp && typeof schemaOp === 'object'\n ? { ...schemaOp, ...rawRoute }\n : rawRoute;\n\n const jsDocLines: JSDocLine[] = [];\n jsDocLines.push(\n ...getSummaryAndDescriptionLines(rawRoute, formatDescription),\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 const responseTypes = getResponseContentTypes(rawWithSpec);\n if (responseTypes.length > 0) {\n jsDocLines.push({\n name: 'produces',\n content: responseTypes.join(', '),\n });\n }\n\n const requestTypes = getRequestContentTypes(rawWithSpec);\n if (requestTypes.length > 0) {\n jsDocLines.push({\n name: 'consumes',\n content: requestTypes.join(', '),\n });\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({ name: 'secure' });\n const schemeNames = getSecuritySchemeNames(rawWithSpec.security);\n if (schemeNames.length > 0) {\n jsDocLines.push({ name: 'security', content: schemeNames.join(', ') });\n }\n }\n\n const externalDocsLine = getExternalDocsLine(\n rawWithSpec.externalDocs,\n formatDescription,\n );\n if (externalDocsLine) jsDocLines.push(externalDocsLine);\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","/** Request parameter shape used when building params schema. */\nexport type RequestParam = {\n name: string;\n optional?: boolean;\n type: string;\n};\n\n/** OpenAPI/JSON Schema subset we use for Zod generation */\nexport type OpenAPISchema = {\n type?: string;\n $ref?: string;\n allOf?: OpenAPISchema[];\n properties?: Record<string, OpenAPISchema>;\n required?: string[];\n items?: OpenAPISchema;\n enum?: unknown[];\n nullable?: boolean;\n format?: string;\n additionalProperties?: boolean | OpenAPISchema;\n minLength?: number;\n maxLength?: number;\n minimum?: number;\n maximum?: number;\n minItems?: number;\n maxItems?: number;\n pattern?: string;\n};\n\nexport const REF_PREFIX = '#/components/schemas/';\nexport const REF_PREFIX_PARAMS = '#/components/parameters/';\n\n/** OpenAPI parameter (operation.parameters item or resolved from components.parameters) */\nexport type OpenAPIParameter = {\n name?: string;\n in?: string;\n required?: boolean;\n schema?: OpenAPISchema;\n type?: string;\n format?: string;\n items?: OpenAPISchema;\n};\n\n/** Minimal shape used to extract response schema $ref; accepts raw OpenAPI operation or route raw. */\nexport type OperationWithResponses = {\n responses?: Record<\n string,\n { content?: Record<string, { schema?: { $ref?: string } }> }\n >;\n};\n\nexport interface EndpointZodContractsResult {\n content: string;\n /** Schema var names to import from the central schemas file (e.g. ['appleSchema', 'coreSchema']) */\n zodSchemaImportNames: string[];\n}\n","import type { AnyObject } from 'yummies/types';\n\nimport {\n type EndpointZodContractsResult,\n type OpenAPIParameter,\n type OpenAPISchema,\n type OperationWithResponses,\n REF_PREFIX,\n REF_PREFIX_PARAMS,\n type RequestParam,\n} from './types.js';\n\nfunction parseRef(ref: string): string | null {\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX)) return null;\n return ref.slice(REF_PREFIX.length);\n}\n\nfunction parseParamRef(ref: string): string | null {\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX_PARAMS))\n return null;\n return ref.slice(REF_PREFIX_PARAMS.length);\n}\n\n/**\n * Extract OpenAPI schema key from response $ref (e.g. from responses['200'].content['application/json'].schema.$ref).\n * Use this for the data contract so we resolve the actual schema (e.g. GoldenApple) instead of the alias type name (GetGoldenAppleDataDC).\n */\nexport function getResponseSchemaKeyFromOperation(\n rawOperation: OperationWithResponses | Record<string, unknown>,\n): string | null {\n const op = rawOperation as OperationWithResponses;\n const responses = op?.responses;\n if (!responses || typeof responses !== 'object') return null;\n const successStatus = Object.keys(responses).find((s) => {\n const code = Number.parseInt(s, 10);\n return code >= 200 && code < 300;\n });\n if (!successStatus) return null;\n const successResponse = responses[successStatus] as\n | {\n content?: Record<string, { schema?: { $ref?: string } }>;\n }\n | undefined;\n const content = successResponse?.content;\n if (!content || typeof content !== 'object') return null;\n const jsonContent = content['application/json'] ?? Object.values(content)[0];\n const ref = jsonContent?.schema?.$ref;\n if (typeof ref !== 'string') return null;\n return parseRef(ref);\n}\n\n/**\n * Resolve generated type name to OpenAPI schema key (e.g. RelaySignalPacketDC -> RelaySignalPacket).\n */\nexport function typeNameToSchemaKey(\n typeName: string,\n typeSuffix = 'DC',\n): string {\n const t = typeName.trim();\n if (typeSuffix && t.endsWith(typeSuffix))\n return t.slice(0, -typeSuffix.length);\n return t;\n}\n\nfunction schemaToString(schema: OpenAPISchema): string {\n let s = 'z.string()';\n if (schema.minLength != null) s += `.min(${schema.minLength})`;\n if (schema.maxLength != null) s += `.max(${schema.maxLength})`;\n if (schema.pattern != null)\n s += `.regex(new RegExp(${JSON.stringify(schema.pattern)}))`;\n if (schema.enum != null)\n s = `z.enum([${schema.enum.map((e) => JSON.stringify(e)).join(', ')}])`;\n return s;\n}\n\nfunction schemaToNumber(schema: OpenAPISchema): string {\n let n = 'z.number()';\n if (schema.type === 'integer') n += '.int()';\n if (schema.minimum != null) n += `.min(${schema.minimum})`;\n if (schema.maximum != null) n += `.max(${schema.maximum})`;\n return n;\n}\n\nfunction schemaToArray(\n schema: OpenAPISchema,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n visited: Set<string>,\n): string {\n const items = schema.items\n ? schemaToZodExpr(schema.items, schemas, schemaKeyToVarName, visited)\n : 'z.any()';\n let a = `z.array(${items})`;\n if (schema.minItems != null) a += `.min(${schema.minItems})`;\n if (schema.maxItems != null) a += `.max(${schema.maxItems})`;\n return a;\n}\n\nfunction schemaToObject(\n schema: OpenAPISchema,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n visited: Set<string>,\n): string {\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n const required = new Set(schema.required ?? []);\n const entries = Object.entries(schema.properties).map(\n ([propName, propSchema]) => {\n const expr = schemaToZodExpr(\n propSchema,\n schemas,\n schemaKeyToVarName,\n visited,\n );\n const optional = !required.has(propName);\n const field = optional ? `${expr}.optional()` : expr;\n return ` ${JSON.stringify(propName)}: ${field}`;\n },\n );\n return `z.object({\\n${entries.join(',\\n')}\\n})`;\n }\n if (schema.additionalProperties === true)\n return 'z.record(z.string(), z.any())';\n if (typeof schema.additionalProperties === 'object') {\n const value = schemaToZodExpr(\n schema.additionalProperties,\n schemas,\n schemaKeyToVarName,\n visited,\n );\n return `z.record(z.string(), ${value})`;\n }\n return 'z.record(z.string(), z.any())';\n}\n\n/**\n * Convert a single OpenAPI/JSON Schema to Zod expression string.\n * Uses z.lazy for $ref to support circular refs and correct order.\n */\nfunction schemaToZodExpr(\n schema: OpenAPISchema | undefined,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n visited: Set<string>,\n): string {\n if (!schema) return 'z.any()';\n if (schema.$ref) {\n const key = parseRef(schema.$ref);\n if (key && key in schemas) {\n // Явный return type только при цикле (рекурсия), иначе TS сужает тип до any\n const isCycle = visited.has(key);\n return isCycle\n ? `z.lazy((): z.ZodTypeAny => ${schemaKeyToVarName(key)})`\n : `z.lazy(() => ${schemaKeyToVarName(key)})`;\n }\n return 'z.any()';\n }\n if (schema.allOf && schema.allOf.length > 0) {\n const parts = schema.allOf.map((part) =>\n schemaToZodExpr(part, schemas, schemaKeyToVarName, visited),\n );\n const base =\n parts.length === 1\n ? parts[0]\n : parts.reduce((acc, p) => `z.intersection(${acc}, ${p})`);\n return schema.nullable === true ? `${base}.nullable()` : base;\n }\n\n const nullable = schema.nullable === true;\n let base: string;\n switch (schema.type) {\n case 'string':\n base = schemaToString(schema);\n break;\n case 'integer':\n case 'number':\n base = schemaToNumber(schema);\n break;\n case 'boolean':\n base = 'z.boolean()';\n break;\n case 'array':\n base = schemaToArray(schema, schemas, schemaKeyToVarName, visited);\n break;\n case 'object':\n base = schemaToObject(schema, schemas, schemaKeyToVarName, visited);\n break;\n default:\n base = 'z.any()';\n }\n return nullable ? `${base}.nullable()` : base;\n}\n\n/**\n * Collect all schema keys referenced from this schema (transitively).\n */\nfunction collectRefs(\n schema: OpenAPISchema | undefined,\n schemas: Record<string, OpenAPISchema>,\n out: Set<string>,\n): void {\n if (!schema) return;\n if (schema.$ref) {\n const key = parseRef(schema.$ref);\n if (key && key in schemas && !out.has(key)) {\n out.add(key);\n collectRefs(schemas[key], schemas, out);\n }\n return;\n }\n if (schema.allOf) {\n for (const part of schema.allOf) collectRefs(part, schemas, out);\n }\n if (schema.properties) {\n for (const v of Object.values(schema.properties)) {\n collectRefs(v, schemas, out);\n }\n }\n if (schema.items) collectRefs(schema.items, schemas, out);\n if (typeof schema.additionalProperties === 'object') {\n collectRefs(schema.additionalProperties, schemas, out);\n }\n}\n\n/**\n * Generate Zod variable name for a schema key (e.g. RelaySignalPacket -> relaySignalPacketSchema).\n */\nexport function schemaKeyToVarName(\n key: string,\n utils: { _: AnyObject },\n): string {\n const _ = utils._ as typeof import('lodash-es');\n return `${_.camelCase(key)}Schema`;\n}\n\n/**\n * Resolve operation.parameters to a list of query params { name, required, schema }.\n * Expands $ref from components.parameters. Supports OAS2 (type/items on param) and OAS3 (param.schema).\n */\nfunction resolveQueryParameters(\n operation: {\n parameters?: Array<{\n $ref?: string;\n in?: string;\n name?: string;\n required?: boolean;\n schema?: OpenAPISchema;\n type?: string;\n format?: string;\n items?: OpenAPISchema;\n }>;\n },\n componentsParameters: Record<string, OpenAPIParameter> | null,\n): Array<{ name: string; required: boolean; schema: OpenAPISchema }> {\n const list: Array<{\n name: string;\n required: boolean;\n schema: OpenAPISchema;\n }> = [];\n const params = operation?.parameters;\n if (!Array.isArray(params) || !params.length) return list;\n for (const p of params) {\n let param: OpenAPIParameter = p as OpenAPIParameter;\n if (p.$ref && componentsParameters) {\n const key = parseParamRef(p.$ref);\n if (key && key in componentsParameters)\n param = componentsParameters[key] as OpenAPIParameter;\n }\n if (param.in !== 'query') continue;\n const name = param.name;\n if (!name) continue;\n const schema: OpenAPISchema = param.schema ?? {\n type: param.type ?? 'string',\n format: param.format,\n items: param.items,\n };\n list.push({\n name,\n required: param.required === true,\n schema,\n });\n }\n return list;\n}\n\n/**\n * Build zod object expression string from resolved query parameters.\n */\nfunction queryParamsToZodObject(\n queryParams: Array<{\n name: string;\n required: boolean;\n schema: OpenAPISchema;\n }>,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n): string {\n if (queryParams.length === 0) return 'z.object({})';\n const entries = queryParams.map(({ name, required, schema }) => {\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarName,\n new Set<string>(),\n );\n const field = required ? expr : `${expr}.optional()`;\n return ` ${JSON.stringify(name)}: ${field}`;\n });\n return `z.object({\\n${entries.join(',\\n')}\\n})`;\n}\n\n/**\n * Generate auxiliary Zod schema definitions for referenced schemas (so that z.lazy can reference them).\n * Для детекции цикла передаём только текущий ключ (cyclePath), а не все уже обработанные —\n * иначе любой ref на ранее сгенерированную схему ошибочно считался бы циклом и получал ZodTypeAny.\n */\nfunction generateAuxiliarySchemas(\n schemaKeys: string[],\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarNameFn: (key: string) => string,\n visited: Set<string>,\n): string[] {\n const lines: string[] = [];\n for (const key of schemaKeys) {\n if (visited.has(key)) continue;\n visited.add(key);\n const schema = schemas[key];\n if (!schema) continue;\n const varName = schemaKeyToVarNameFn(key);\n const cyclePath = new Set<string>([key]);\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarNameFn,\n cyclePath,\n );\n lines.push(`export const ${varName} = ${expr};`);\n }\n return lines;\n}\n\n/**\n * Build the content of a central schemas.ts file with all Zod schemas from OpenAPI components.schemas.\n * Endpoints can import these and reference them in their params/data contracts.\n */\nexport function buildCentralZodSchemasFile(params: {\n componentsSchemas: Record<string, OpenAPISchema>;\n utils: { _: AnyObject };\n}): string {\n const { componentsSchemas, utils } = params;\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n const lines = generateAuxiliarySchemas(\n Object.keys(componentsSchemas),\n componentsSchemas,\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n return `import * as z from \"zod\";\n\n${lines.join('\\n\\n')}\n`;\n}\n\n/**\n * Fallback when no OpenAPI schema is available: map type name/string to simple Zod.\n */\nfunction typeToZodSchemaFallback(typeStr: string): string {\n const t = typeStr.trim();\n if (t === 'RequestParams') return 'z.any()';\n if (t === 'Record<string, any>' || t === 'Record<string, unknown>')\n return 'z.record(z.string(), z.any())';\n if (/^Record\\s*<\\s*string\\s*,/i.test(t))\n return 'z.record(z.string(), z.any())';\n if (t === 'string') return 'z.string()';\n if (t === 'number') return 'z.number()';\n if (t === 'boolean') return 'z.boolean()';\n if (t === 'any') return 'z.any()';\n if (t === 'unknown') return 'z.unknown()';\n return 'z.any()';\n}\n\n/**\n * Resolve type name to OpenAPI schema and return Zod expr plus refs needed for z.lazy.\n */\nexport function typeToZodSchemaWithSchema(\n typeStr: string,\n schemas: Record<string, OpenAPISchema> | null,\n utils: { _: AnyObject },\n typeSuffix?: string,\n): { expr: string; refs: string[] } {\n const t = typeStr.trim();\n\n if (!schemas || Object.keys(schemas).length === 0) {\n return { expr: typeToZodSchemaFallback(t), refs: [] };\n }\n\n if (t === 'RequestParams') return { expr: 'z.any()', refs: [] };\n\n const schemaKey = typeNameToSchemaKey(t, typeSuffix);\n const schema = schemas[schemaKey];\n if (!schema) {\n return { expr: typeToZodSchemaFallback(t), refs: [] };\n }\n\n const refs = new Set<string>();\n collectRefs(schema, schemas, refs);\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n return { expr, refs: [...refs] };\n}\n\n/**\n * Maps a TypeScript type name or expression to a Zod schema code string (fallback only).\n */\nexport function typeToZodSchema(typeStr: string): string {\n return typeToZodSchemaFallback(typeStr);\n}\n\n/**\n * Build Zod expr + refs from a known OpenAPI schema key (for response data when we have $ref from the operation).\n */\nfunction schemaKeyToZod(\n schemaKey: string,\n schemas: Record<string, OpenAPISchema>,\n utils: { _: AnyObject },\n): { expr: string; refs: string[] } {\n const schema = schemas[schemaKey];\n if (!schema) return { expr: 'z.any()', refs: [] };\n const refs = new Set<string>();\n collectRefs(schema, schemas, refs);\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n return { expr, refs: [...refs] };\n}\n\n/**\n * Builds the source code for endpoint Zod contracts: params schema, data schema, and the contracts object.\n * When components.schemas are provided, generates detailed Zod from OpenAPI schemas.\n */\n/** Minimal operation shape for resolving query parameters */\nexport type OpenAPIOperationForZod = {\n parameters?: Array<{\n $ref?: string;\n in?: string;\n name?: string;\n required?: boolean;\n schema?: OpenAPISchema;\n type?: string;\n format?: string;\n items?: OpenAPISchema;\n }>;\n};\n\nexport function buildEndpointZodContractsCode(params: {\n routeNameUsage: string;\n inputParams: RequestParam[];\n responseDataTypeName: string;\n contractsVarName: string;\n utils: { _: AnyObject };\n /** OpenAPI components.schemas for detailed Zod generation */\n componentsSchemas?: Record<string, OpenAPISchema> | null;\n typeSuffix?: string;\n /** When set, use this schema key for data contract instead of resolving from responseDataTypeName (fixes alias types like GetGoldenAppleDataDC -> GoldenApple) */\n responseSchemaKey?: string | null;\n /** When true, do not emit auxiliary schemas inline; they are expected from a central schemas.ts (zodSchemaImportNames will be non-empty) */\n useExternalZodSchemas?: boolean;\n /** OpenAPI operation (path + method) to build query object schema from parameters with in: 'query' */\n openApiOperation?: OpenAPIOperationForZod | null;\n /** OpenAPI components.parameters to resolve $ref in operation.parameters */\n openApiComponentsParameters?: Record<string, OpenAPIParameter> | null;\n /** Name of the input param that holds query (default 'query') */\n queryParamName?: string;\n}): EndpointZodContractsResult {\n const {\n routeNameUsage,\n inputParams,\n responseDataTypeName,\n contractsVarName,\n utils,\n componentsSchemas = null,\n typeSuffix = 'DC',\n responseSchemaKey,\n useExternalZodSchemas = false,\n openApiOperation = null,\n openApiComponentsParameters = null,\n queryParamName = 'query',\n } = params;\n const _ = utils._ as typeof import('lodash-es');\n\n const paramsSchemaName = `${_.camelCase(routeNameUsage)}ParamsSchema`;\n const dataSchemaName = `${_.camelCase(routeNameUsage)}DataSchema`;\n\n const allAuxiliaryKeys = new Set<string>();\n const paramParts: string[] = [];\n\n const resolvedQueryParams =\n openApiOperation &&\n (openApiComponentsParameters || openApiOperation.parameters?.length)\n ? resolveQueryParameters(openApiOperation, openApiComponentsParameters)\n : [];\n\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n\n for (const p of inputParams) {\n let expr: string;\n let refKeys: string[] = [];\n\n if (\n p.name === queryParamName &&\n resolvedQueryParams.length > 0 &&\n componentsSchemas\n ) {\n expr = queryParamsToZodObject(\n resolvedQueryParams,\n componentsSchemas,\n schemaKeyToVarNameFn,\n );\n } else {\n const result = typeToZodSchemaWithSchema(\n p.type,\n componentsSchemas,\n utils,\n typeSuffix,\n );\n expr = result.expr;\n refKeys = result.refs;\n }\n\n for (const k of refKeys) allAuxiliaryKeys.add(k);\n const schemaWithOptional = p.optional ? `${expr}.optional()` : expr;\n paramParts.push(`${p.name}: ${schemaWithOptional}`);\n }\n\n const responseResult =\n responseSchemaKey &&\n componentsSchemas &&\n responseSchemaKey in componentsSchemas\n ? schemaKeyToZod(responseSchemaKey, componentsSchemas, utils)\n : typeToZodSchemaWithSchema(\n responseDataTypeName,\n componentsSchemas,\n utils,\n typeSuffix,\n );\n const useDataSchemaFromCentral =\n useExternalZodSchemas &&\n responseSchemaKey &&\n componentsSchemas &&\n responseSchemaKey in componentsSchemas;\n if (useDataSchemaFromCentral) {\n allAuxiliaryKeys.add(responseSchemaKey);\n } else {\n for (const k of responseResult.refs) allAuxiliaryKeys.add(k);\n }\n const zodSchemaImportNames =\n useExternalZodSchemas && allAuxiliaryKeys.size > 0\n ? [...allAuxiliaryKeys].map(schemaKeyToVarNameFn)\n : [];\n\n const allAuxiliary = useExternalZodSchemas\n ? []\n : generateAuxiliarySchemas(\n [...allAuxiliaryKeys],\n componentsSchemas ?? {},\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n\n const paramsFields = paramParts.join(',\\n ');\n const paramsSchemaCode = `export const ${paramsSchemaName} = z.object({\n ${paramsFields},\n});`;\n\n const dataSchemaCode = useDataSchemaFromCentral\n ? `export const ${dataSchemaName} = ${schemaKeyToVarNameFn(responseSchemaKey!)};`\n : `export const ${dataSchemaName} = ${responseResult.expr};`;\n\n const contractsCode = `export const ${contractsVarName} = {\n params: ${paramsSchemaName},\n data: ${dataSchemaName},\n};`;\n\n const auxiliaryBlock =\n allAuxiliary.length > 0 ? `${allAuxiliary.join('\\n\\n')}\\n\\n` : '';\n const content = `${auxiliaryBlock}${paramsSchemaCode}\n\n${dataSchemaCode}\n\n${contractsCode}`;\n\n return { content, zodSchemaImportNames };\n}\n\nexport type { EndpointZodContractsResult };\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 buildEndpointZodContractsCode,\n getResponseSchemaKeyFromOperation,\n typeNameToSchemaKey,\n} from '../utils/zod/build-endpoint-zod-contracts-code.js';\nimport {\n formatGroupNameEnumKey,\n formatTagNameEnumKey,\n} from './meta-info.tmpl.js';\n\nexport type ZodContractsOption =\n | boolean\n | {\n validate:\n | boolean\n | string\n | { params?: boolean | string; data?: boolean | string };\n throw?:\n | boolean\n | string\n | { params?: boolean | string; data?: boolean | string };\n /** String: runtime condition. Function: codegen-time filter for (contractName, routeInfo). */\n appendRule?:\n | string\n | ((\n contractName: string,\n routeInfo: {\n operationId: string;\n path: string;\n method: string;\n contractName: string;\n },\n ) => boolean);\n };\n\nexport interface NewEndpointTmplParams extends BaseTmplParams {\n route: ParsedRoute;\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n /** Generate Zod contracts and optionally enable validation. */\n zodContracts?: ZodContractsOption;\n /** When set, auxiliary Zod schemas are not inlined; endpoint imports them from this path (e.g. '../schemas') */\n relativePathZodSchemas?: string | null;\n}\n\n// RequestParams[\"type\"]\nconst requestContentKind: AnyObject = {\n URL_ENCODED: '\"application/x-www-form-urlencoded\"',\n FORM_DATA: '\"multipart/form-data\"',\n TEXT: '\"text/plain\"',\n JSON: '\"application/json\"',\n BINARY: '\"application/octet-stream\"',\n};\n// RequestParams[\"format\"]\nconst responseContentKind: AnyObject = {\n TEXT: '\"text\"',\n IMAGE: '\"blob\"',\n JSON: '\"json\"',\n FORM_DATA: '\"formData\"',\n BYTES: '\"bytes\"',\n};\n\n/** Infer response format from raw OpenAPI operation (produces or responses content) when contentKind is not set */\nfunction inferResponseFormatFromRaw(raw: AnyObject): string | null {\n const contentTypes: string[] = [];\n if (Array.isArray(raw.produces)) {\n contentTypes.push(...raw.produces);\n }\n const successStatus =\n raw.responses &&\n Object.keys(raw.responses).find((s) => {\n const code = Number.parseInt(s, 10);\n return code >= 200 && code < 300;\n });\n const content = successStatus && raw.responses[successStatus]?.content;\n if (content && typeof content === 'object') {\n contentTypes.push(...Object.keys(content));\n }\n if (contentTypes.length === 0) return null;\n\n const mimeToFormat = (mime: string): string | null => {\n if (mime.includes('application/json') || mime.includes('+json'))\n return '\"json\"';\n if (mime.startsWith('text/')) return '\"text\"';\n if (mime.includes('form-data') || mime.includes('multipart'))\n return '\"formData\"';\n // binary: blob() in Fetch API — IANA binary types: application/*, image/*, audio/*, video/*, font/*, model/*, message/*, haptics/*\n if (\n mime.includes('octet-stream') ||\n mime.includes('spreadsheet') ||\n mime.includes('vnd.') ||\n mime.startsWith('application/') ||\n mime.startsWith('image/') ||\n mime.startsWith('audio/') ||\n mime.startsWith('video/') ||\n mime.startsWith('font/') ||\n mime.startsWith('model/') ||\n mime.startsWith('message/') ||\n mime.startsWith('haptics/')\n )\n return '\"blob\"';\n return null;\n };\n\n // Prefer json for typed responses, then first recognized format\n const preferredOrder = ['\"json\"', '\"text\"', '\"formData\"', '\"blob\"'] as const;\n for (const fmt of preferredOrder) {\n const found = contentTypes.map(mimeToFormat).find((f) => f === fmt);\n if (found) return found;\n }\n return null;\n}\n\n/** Resolve response format from contentKind, then from raw operation (produces / responses content) */\nfunction getResponseFormat(\n responseBodyInfo: AnyObject,\n raw: AnyObject,\n configuration: AnyObject,\n path: string,\n method: string,\n): string | null {\n const fromContentKind =\n responseContentKind[responseBodyInfo.success?.schema?.contentKind];\n if (fromContentKind) return fromContentKind;\n const swaggerSchema =\n configuration.config?.swaggerSchema ?? configuration.swaggerSchema;\n const schemaPaths = swaggerSchema?.paths;\n const pathKey = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n const schemaOperation =\n pathKey && methodKey ? schemaPaths?.[pathKey]?.[methodKey] : null;\n const rawWithProduces =\n schemaOperation && typeof schemaOperation === 'object'\n ? { ...schemaOperation, ...raw }\n : raw;\n return inferResponseFormatFromRaw(rawWithProduces);\n}\n\n/** Infer request body contentType from raw OpenAPI operation (consumes or requestBody.content) */\nfunction inferRequestBodyContentTypeFromRaw(raw: AnyObject): string | null {\n const contentTypes: string[] = [];\n if (Array.isArray(raw.consumes)) {\n contentTypes.push(...raw.consumes);\n }\n const requestBody = raw.requestBody;\n if (requestBody?.content && typeof requestBody.content === 'object') {\n contentTypes.push(...Object.keys(requestBody.content));\n }\n if (contentTypes.length === 0) return null;\n\n const mimeToContentType = (mime: string): string | null => {\n if (mime.includes('application/json') || mime.includes('+json'))\n return '\"application/json\"';\n if (mime.includes('application/x-www-form-urlencoded'))\n return '\"application/x-www-form-urlencoded\"';\n if (mime.includes('multipart/form-data') || mime.includes('multipart/'))\n return '\"multipart/form-data\"';\n if (mime.startsWith('text/')) return '\"text/plain\"';\n if (\n mime.includes('octet-stream') ||\n mime.startsWith('application/') ||\n mime.startsWith('image/') ||\n mime.startsWith('audio/') ||\n mime.startsWith('video/') ||\n mime.startsWith('font/') ||\n mime.startsWith('model/') ||\n mime.includes('vnd.')\n )\n return '\"application/octet-stream\"';\n return null;\n };\n\n const preferredOrder = [\n '\"application/json\"',\n '\"application/x-www-form-urlencoded\"',\n '\"multipart/form-data\"',\n '\"text/plain\"',\n '\"application/octet-stream\"',\n ] as const;\n for (const ct of preferredOrder) {\n const found = contentTypes.map(mimeToContentType).find((c) => c === ct);\n if (found) return found;\n }\n return null;\n}\n\n/** Resolve request body contentType from contentKind, then from raw (consumes / requestBody.content) */\nfunction getRequestBodyContentType(\n requestBodyInfo: AnyObject,\n raw: AnyObject,\n configuration: AnyObject,\n path: string,\n method: string,\n): string | null {\n const fromContentKind = requestContentKind[requestBodyInfo?.contentKind];\n if (fromContentKind) return fromContentKind;\n const swaggerSchema =\n configuration.config?.swaggerSchema ?? configuration.swaggerSchema;\n const schemaPaths = swaggerSchema?.paths;\n const pathKey = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n const schemaOperation =\n pathKey && methodKey ? schemaPaths?.[pathKey]?.[methodKey] : null;\n const rawWithConsumes =\n schemaOperation && typeof schemaOperation === 'object'\n ? { ...schemaOperation, ...raw }\n : raw;\n return inferRequestBodyContentTypeFromRaw(rawWithConsumes);\n}\n\nexport const newEndpointTmpl = ({\n route,\n codegenParams,\n importFileParams,\n utils,\n groupName,\n metaInfo,\n filterTypes,\n configuration,\n zodContracts,\n relativePathZodSchemas,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: codegen template, many branches by design\n}: NewEndpointTmplParams) => {\n const zodContractsIsObject =\n typeof zodContracts === 'object' && zodContracts !== null;\n const hasZodContracts = zodContracts === true || zodContractsIsObject;\n const validateOpt = zodContractsIsObject\n ? zodContracts.validate\n : zodContracts === true\n ? true\n : undefined;\n const throwOpt = zodContractsIsObject ? zodContracts.throw : undefined;\n const validateOptObj =\n validateOpt != null &&\n typeof validateOpt === 'object' &&\n !Array.isArray(validateOpt)\n ? (validateOpt as { params?: boolean | string; data?: boolean | string })\n : null;\n const throwOptObj =\n throwOpt != null && typeof throwOpt === 'object' && !Array.isArray(throwOpt)\n ? (throwOpt as { params?: boolean | string; data?: boolean | string })\n : null;\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 getRequestBodyContentType(\n requestBodyInfo,\n raw,\n configuration as AnyObject,\n path,\n method,\n ) || null;\n const responseFormat =\n getResponseFormat(\n responseBodyInfo,\n raw,\n configuration as AnyObject,\n path,\n method,\n ) || 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 const defaultOkResponseType = positiveResponseTypes?.[0]?.type ?? 'unknown';\n const contractsVarName = hasZodContracts\n ? `${_.camelCase(route.routeName.usage)}Contracts`\n : null;\n const swaggerSchema =\n (configuration.config as AnyObject)?.swaggerSchema ??\n (configuration as AnyObject)?.swaggerSchema;\n const componentsSchemas = swaggerSchema?.components?.schemas as Record<\n string,\n AnyObject\n > | null;\n let operationFromSpec: AnyObject | null = null;\n const pathKeyForSpec = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n if (pathKeyForSpec && methodKey && swaggerSchema?.paths?.[pathKeyForSpec]) {\n operationFromSpec = swaggerSchema.paths[pathKeyForSpec][methodKey] ?? null;\n }\n if (!operationFromSpec && swaggerSchema?.paths && raw?.operationId) {\n for (const pathItem of Object.values(swaggerSchema.paths) as AnyObject[]) {\n const op = pathItem?.[methodKey];\n if (op?.operationId === raw.operationId) {\n operationFromSpec = op;\n break;\n }\n }\n }\n let responseSchemaKey = getResponseSchemaKeyFromOperation(\n operationFromSpec ?? raw,\n );\n if (!responseSchemaKey && componentsSchemas && configuration.modelTypes) {\n const aliasType = configuration.modelTypes.find(\n (m: AnyObject) => m.name === defaultOkResponseType,\n );\n if (\n aliasType?.typeIdentifier === 'type' &&\n typeof aliasType.content === 'string' &&\n /^[A-Za-z0-9_]+$/.test(aliasType.content.trim())\n ) {\n const resolved = typeNameToSchemaKey(aliasType.content.trim(), 'DC');\n if (resolved in componentsSchemas) responseSchemaKey = resolved;\n }\n }\n if (!responseSchemaKey && componentsSchemas) {\n const match = defaultOkResponseType.match(/^Get(.+)DataDC$/);\n if (match) {\n const candidate = match[1];\n if (candidate in componentsSchemas) responseSchemaKey = candidate;\n }\n }\n const contractsCode =\n hasZodContracts && contractsVarName\n ? buildEndpointZodContractsCode({\n routeNameUsage: route.routeName.usage,\n inputParams,\n responseDataTypeName: defaultOkResponseType,\n contractsVarName,\n utils,\n componentsSchemas: componentsSchemas ?? undefined,\n typeSuffix: 'DC',\n responseSchemaKey: responseSchemaKey ?? undefined,\n useExternalZodSchemas: Boolean(relativePathZodSchemas),\n openApiOperation: operationFromSpec ?? undefined,\n openApiComponentsParameters:\n (swaggerSchema?.components as AnyObject)?.parameters ?? undefined,\n queryParamName: queryName,\n })\n : null;\n\n const appendRuleOpt =\n zodContractsIsObject && zodContracts.appendRule != null\n ? zodContracts.appendRule\n : null;\n const routeInfoForAppend =\n contractsVarName != null\n ? {\n operationId: raw.operationId ?? '',\n path,\n method,\n contractName: contractsVarName,\n }\n : null;\n const contractsLine = (() => {\n if (contractsVarName == null) return '';\n if (typeof appendRuleOpt === 'string')\n return `contracts: ${appendRuleOpt} ? ${contractsVarName} : undefined,`;\n if (typeof appendRuleOpt === 'function' && routeInfoForAppend) {\n const include = appendRuleOpt(\n routeInfoForAppend.contractName,\n routeInfoForAppend,\n );\n return include\n ? `contracts: ${contractsVarName},`\n : 'contracts: undefined,';\n }\n return `contracts: ${contractsVarName},`;\n })();\n const validateContractsLine = (() => {\n if (validateOpt === undefined) return '';\n if (typeof validateOpt === 'string')\n return `validateContracts: ${validateOpt},`;\n if (typeof validateOpt === 'boolean')\n return `validateContracts: ${validateOpt},`;\n if (validateOptObj !== null) {\n const parts: string[] = [];\n if (validateOptObj.params !== undefined)\n parts.push(\n `params: ${typeof validateOptObj.params === 'string' ? validateOptObj.params : validateOptObj.params}`,\n );\n if (validateOptObj.data !== undefined)\n parts.push(\n `data: ${typeof validateOptObj.data === 'string' ? validateOptObj.data : validateOptObj.data}`,\n );\n return parts.length > 0\n ? `validateContracts: { ${parts.join(', ')} },`\n : '';\n }\n return '';\n })();\n const throwContractsLine = (() => {\n if (throwOpt === undefined) return '';\n if (typeof throwOpt === 'string') return `throwContracts: ${throwOpt},`;\n if (typeof throwOpt === 'boolean') return `throwContracts: ${throwOpt},`;\n if (throwOptObj !== null) {\n const parts: string[] = [];\n if (throwOptObj.params !== undefined)\n parts.push(`params: ${throwOptObj.params}`);\n if (throwOptObj.data !== undefined)\n parts.push(`data: ${throwOptObj.data}`);\n return parts.length > 0 ? `throwContracts: { ${parts.join(', ')} },` : '';\n }\n return '';\n })();\n\n return {\n reservedDataContractNames,\n localModelTypes: isAllowedInputType ? [requestInputTypeDc] : [],\n contractsCode: contractsCode ?? undefined,\n contractsVarName: contractsVarName ?? undefined,\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 ${contractsLine}\n ${validateContractsLine}\n ${throwContractsLine}\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 relativePathZodSchemas?: string | null;\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 relativePathZodSchemas,\n } = params;\n\n const { _ } = utils;\n\n const dataContractNamesInThisFile: string[] = [];\n const dataContactNames = new Set(\n Object.keys(\n (configuration.config.swaggerSchema as any)?.components?.schemas,\n ).map((schemaName) => utils.formatModelName(schemaName)),\n );\n const newEndpointTemplates = routes.map((route) => {\n const newEndpointTemplateData = newEndpointTmpl({\n ...params,\n route,\n groupName,\n metaInfo,\n zodContracts: codegenParams.zodContracts,\n relativePathZodSchemas: relativePathZodSchemas ?? undefined,\n });\n const { reservedDataContractNames } = newEndpointTemplateData;\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 hasAnyZodContracts = newEndpointTemplates.some(\n (t) => t.contractsCode != null,\n );\n const allZodSchemaImportNames = new Set<string>();\n newEndpointTemplates.forEach((t) => {\n const c = t.contractsCode;\n if (c != null && typeof c === 'object' && c.zodSchemaImportNames?.length) {\n for (const n of c.zodSchemaImportNames) {\n allZodSchemaImportNames.add(n);\n }\n }\n });\n const zodImportLine = hasAnyZodContracts ? 'import * as z from \"zod\";' : '';\n const zodSchemasImportLine =\n allZodSchemaImportNames.size && relativePathZodSchemas\n ? `import { ${[...allZodSchemaImportNames].sort().join(', ')} } from \"${relativePathZodSchemas}\";`\n : '';\n\n const endpointTemplates = await Promise.all(\n newEndpointTemplates.map(\n async ({\n content: requestInfoInstanceContent,\n localModelTypes,\n route,\n contractsCode,\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 const contractsResult =\n contractsCode != null && typeof contractsCode === 'object'\n ? contractsCode\n : null;\n const contractsBlock =\n contractsResult != null ? `\\n\\n${contractsResult.content}\\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 ${contractsBlock}\n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent} \n`;\n },\n ),\n );\n\n const endpointTemplatesContent = endpointTemplates\n .filter(Boolean)\n .join('\\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 const dataContractImportToken = '/*__DATA_CONTRACT_IMPORTS__*/';\n const contentWithImportToken = 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 ${[zodImportLine, zodSchemasImportLine].filter(Boolean).join('\\n')}\n ${dataContractImportToken}\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 ${endpointTemplatesContent}\n `);\n\n const escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const usedDataContractNames = configuration.modelTypes\n .map((modelType: AnyObject) => modelType.name as string)\n .filter(\n (modelTypeName) =>\n !dataContractNamesInThisFile.includes(modelTypeName) &&\n dataContactNames.has(modelTypeName) &&\n new RegExp(`\\\\b${escapeRegExp(modelTypeName)}\\\\b`).test(\n contentWithImportToken,\n ),\n );\n\n const dataContractImportLine =\n usedDataContractNames.length > 0\n ? `import { ${usedDataContractNames.join(', ')} } from \"${relativePathDataContracts}\";`\n : '';\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: contentWithImportToken.replace(\n dataContractImportToken,\n dataContractImportLine,\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 /** When true, add export * from './schemas' (Zod schemas from zodContracts) */\n exportSchemas?: boolean;\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 exportSchemas,\n}: AllExportsTmplParams) => {\n return await formatTSContent(`${LINTERS_IGNORE}\n export * from './data-contracts';\n ${exportSchemas ? \" export * from './schemas';\\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 /** When set (e.g. '../schemas'), endpoint imports shared Zod schemas from this path instead of inlining them */\n relativePathZodSchemas?: string | null;\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 relativePathZodSchemas,\n } = params;\n const { _ } = utils;\n\n const {\n content: requestInfoInstanceContent,\n reservedDataContractNames,\n localModelTypes,\n contractsCode,\n } = newEndpointTmpl({\n ...params,\n route,\n groupName,\n metaInfo,\n zodContracts: codegenParams.zodContracts,\n relativePathZodSchemas: relativePathZodSchemas ?? undefined,\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 const dataContractImportToken = '/*__DATA_CONTRACT_IMPORTS__*/';\n const contractsResult =\n contractsCode != null && typeof contractsCode === 'object'\n ? contractsCode\n : null;\n const zodImportLine =\n contractsResult != null ? 'import * as z from \"zod\";' : '';\n const zodSchemasImportLine =\n contractsResult?.zodSchemaImportNames?.length && relativePathZodSchemas\n ? `import { ${contractsResult.zodSchemaImportNames.join(', ')} } from \"${relativePathZodSchemas}\";`\n : '';\n const contractsBlock =\n contractsResult != null ? `\\n\\n${contractsResult.content}\\n\\n` : '';\n const zodImportsBlock = [zodImportLine, zodSchemasImportLine]\n .filter(Boolean)\n .join('\\n');\n const contentWithImportToken = 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 ${zodImportsBlock}\n ${dataContractImportToken}\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 ${contractsBlock}\n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent}\n `);\n\n const escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const usedDataContractNames = configuration.modelTypes\n .map((modelType: AnyObject) => modelType.name as string)\n .filter(\n (modelTypeName) =>\n !dataContractNamesInThisFile.includes(modelTypeName) &&\n dataContactNames.has(modelTypeName) &&\n new RegExp(`\\\\b${escapeRegExp(modelTypeName)}\\\\b`).test(\n contentWithImportToken,\n ),\n );\n\n const dataContractImportLine =\n usedDataContractNames.length > 0\n ? `import { ${usedDataContractNames.join(', ')} } from \"${relativePathDataContracts}\";`\n : '';\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: contentWithImportToken.replace(\n dataContractImportToken,\n dataContractImportLine,\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: iterative AST traversal\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 isKeepType = unpackFilterOption(keepTypes, (name) => name, false);\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 && !isKeepType(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 Hooks,\n type ParsedRoute,\n} from 'swagger-typescript-api';\nimport type { AnyObject, Defined, 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';\nimport { buildCentralZodSchemasFile } from './utils/zod/build-endpoint-zod-contracts-code.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: orchestration with many code paths\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 = {\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 const result = {\n ...(constructs as any),\n object: () => `Record<string, any>`,\n float: () => `number`,\n };\n\n if (params.otherCodegenParams?.primitiveTypeConstructs) {\n if (\n typeof params.otherCodegenParams?.primitiveTypeConstructs ===\n 'function'\n ) {\n Object.assign(\n result,\n params.otherCodegenParams.primitiveTypeConstructs(result),\n );\n } else {\n Object.assign(\n result,\n params.otherCodegenParams.primitiveTypeConstructs,\n );\n }\n }\n\n return result;\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 prepareConfig: Defined<Hooks['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 params.otherCodegenParams?.hooks?.onPrepareConfig?.(config);\n };\n\n const formatRouteName: Defined<Hooks['onFormatRouteName']> = (\n routeInfo,\n usageRouteName,\n ) => {\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 const resultRouteName =\n params?.formatEndpointName?.(endpointName, routeInfo) ??\n swaggerTypescriptApiCodegenBaseParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n endpointName,\n ) ??\n endpointName;\n\n return (\n params.otherCodegenParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n resultRouteName,\n ) ?? resultRouteName\n );\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, codegenProcess) => {\n mixinSwaggerSchema = cloneDeep(configuration.swaggerSchema);\n },\n onPrepareConfig: prepareConfig,\n onFormatRouteName: formatRouteName,\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: prepareConfig,\n onFormatRouteName: formatRouteName,\n },\n });\n\n //#endregion\n\n const utils = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n const { _ } = utils;\n\n const outputType = params.outputType ?? 'one-endpoint-per-file';\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(paths.outputDir);\n codegenFs.createDir(paths.outputDir);\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 componentsSchemasForZod =\n (generated.configuration as AnyObject).config?.swaggerSchema?.components\n ?.schemas ??\n (generated.configuration as AnyObject).swaggerSchema?.components?.schemas;\n const hasZodSchemasFile =\n (params.zodContracts === true ||\n (typeof params.zodContracts === 'object' &&\n params.zodContracts != null)) &&\n componentsSchemasForZod &&\n typeof componentsSchemasForZod === 'object' &&\n Object.keys(componentsSchemasForZod).length > 0;\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 (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 relativePathZodSchemas: hasZodSchemasFile ? '../schemas' : null,\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 relativePathZodSchemas: hasZodSchemasFile ? './schemas' : null,\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: paths.outputDir,\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 (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 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 (hasZodSchemasFile && componentsSchemasForZod) {\n const schemasTsContent = buildCentralZodSchemasFile({\n componentsSchemas: componentsSchemasForZod as Record<string, AnyObject>,\n utils,\n });\n const formattedSchemasContent = await generated.formatTSContent(\n `${LINTERS_IGNORE}\\n${schemasTsContent}`,\n );\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'schemas.ts',\n withPrefix: false,\n content: formattedSchemasContent,\n });\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 exportSchemas: hasZodSchemasFile,\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 exportSchemas: hasZodSchemasFile,\n }),\n });\n }\n }\n\n if (params.removeUnusedTypes) {\n await removeUnusedTypes({\n directory: paths.outputDir,\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","schemaKeyToVarName","base","modelType","_","generateApiFromSwagger","codegenProcess"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../__vite-browser-external","../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/utils/zod/types.ts","../src/codegen/utils/zod/build-endpoint-zod-contracts-code.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 default {}","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\nfunction getResponseContentTypes(raw: AnyObject): string[] {\n const out: string[] = [];\n if (Array.isArray(raw.produces)) out.push(...raw.produces);\n const status =\n raw.responses &&\n Object.keys(raw.responses).find((s) => {\n const code = Number.parseInt(s, 10);\n return code >= 200 && code < 300;\n });\n const content = status && raw.responses[status]?.content;\n if (content && typeof content === 'object') out.push(...Object.keys(content));\n return [...new Set(out)];\n}\n\nfunction getRequestContentTypes(raw: AnyObject): string[] {\n const out: string[] = [];\n if (Array.isArray(raw.consumes)) out.push(...raw.consumes);\n const body = raw.requestBody?.content;\n if (body && typeof body === 'object') out.push(...Object.keys(body));\n return [...new Set(out)];\n}\ntype JSDocLine = { name?: string; content?: string };\n\nfunction getSecuritySchemeNames(security: unknown): string[] {\n if (!Array.isArray(security)) return [];\n return security\n .flatMap((s: AnyObject) =>\n typeof s === 'object' && s !== null ? Object.keys(s) : [],\n )\n .filter(Boolean);\n}\n\nfunction getExternalDocsLine(\n externalDocs: unknown,\n formatDescription: (s: string, b: boolean) => string,\n): JSDocLine | null {\n if (\n !externalDocs ||\n typeof externalDocs !== 'object' ||\n !('url' in externalDocs)\n )\n return null;\n const url = (externalDocs as AnyObject).url;\n if (!url) return null;\n const desc = (externalDocs as AnyObject).description;\n const extDesc = desc\n ? ` ${formatDescription(String(desc).slice(0, 60), true)}`\n : '';\n return { name: 'see', content: `${url}${extDesc}`.trim() };\n}\n\nfunction getSummaryAndDescriptionLines(\n rawRoute: AnyObject,\n formatDescription: (s: string, b: boolean) => string,\n): JSDocLine[] {\n const out: JSDocLine[] = [];\n if (rawRoute.summary) {\n const summaryLines = splitTextByLines(rawRoute.summary, 60)\n .filter(Boolean)\n .map((line) => ({ content: `**${formatDescription(line, true)}**` }));\n if (summaryLines.length > 0) out.push(...summaryLines, { content: '' });\n }\n if (rawRoute.description) {\n const descriptionLines = splitTextByLines(rawRoute.description, 60)\n .filter(Boolean)\n .map((line) => ({ content: formatDescription(line, true) }));\n if (descriptionLines.length > 0)\n out.push(...descriptionLines, { content: '' });\n } else if (!rawRoute.summary) {\n out.push({ content: 'No description' });\n }\n return out;\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 const path = routeRequest?.path as string | undefined;\n const method = routeRequest?.method as string | undefined;\n\n const { utils } = configuration;\n\n const { _, formatDescription } = utils;\n\n const schema =\n (configuration as AnyObject).config?.swaggerSchema ??\n (configuration as AnyObject).swaggerSchema;\n const pathKey = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n const schemaOp =\n pathKey && methodKey ? schema?.paths?.[pathKey]?.[methodKey] : null;\n const rawWithSpec =\n schemaOp && typeof schemaOp === 'object'\n ? { ...schemaOp, ...rawRoute }\n : rawRoute;\n\n const jsDocLines: JSDocLine[] = [];\n jsDocLines.push(\n ...getSummaryAndDescriptionLines(rawRoute, formatDescription),\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 const responseTypes = getResponseContentTypes(rawWithSpec);\n if (responseTypes.length > 0) {\n jsDocLines.push({\n name: 'produces',\n content: responseTypes.join(', '),\n });\n }\n\n const requestTypes = getRequestContentTypes(rawWithSpec);\n if (requestTypes.length > 0) {\n jsDocLines.push({\n name: 'consumes',\n content: requestTypes.join(', '),\n });\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({ name: 'secure' });\n const schemeNames = getSecuritySchemeNames(rawWithSpec.security);\n if (schemeNames.length > 0) {\n jsDocLines.push({ name: 'security', content: schemeNames.join(', ') });\n }\n }\n\n const externalDocsLine = getExternalDocsLine(\n rawWithSpec.externalDocs,\n formatDescription,\n );\n if (externalDocsLine) jsDocLines.push(externalDocsLine);\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","/** Request parameter shape used when building params schema. */\nexport type RequestParam = {\n name: string;\n optional?: boolean;\n type: string;\n};\n\n/** OpenAPI/JSON Schema subset we use for Zod generation */\nexport type OpenAPISchema = {\n type?: string;\n $ref?: string;\n allOf?: OpenAPISchema[];\n properties?: Record<string, OpenAPISchema>;\n required?: string[];\n items?: OpenAPISchema;\n enum?: unknown[];\n nullable?: boolean;\n format?: string;\n additionalProperties?: boolean | OpenAPISchema;\n minLength?: number;\n maxLength?: number;\n minimum?: number;\n maximum?: number;\n minItems?: number;\n maxItems?: number;\n pattern?: string;\n};\n\nexport const REF_PREFIX = '#/components/schemas/';\nexport const REF_PREFIX_PARAMS = '#/components/parameters/';\n\n/** OpenAPI parameter (operation.parameters item or resolved from components.parameters) */\nexport type OpenAPIParameter = {\n name?: string;\n in?: string;\n required?: boolean;\n schema?: OpenAPISchema;\n type?: string;\n format?: string;\n items?: OpenAPISchema;\n};\n\n/** Minimal shape used to extract response schema $ref; accepts raw OpenAPI operation or route raw. */\nexport type OperationWithResponses = {\n responses?: Record<\n string,\n { content?: Record<string, { schema?: { $ref?: string } }> }\n >;\n};\n\nexport interface EndpointZodContractsResult {\n content: string;\n /** Schema var names to import from the central schemas file (e.g. ['appleSchema', 'coreSchema']) */\n zodSchemaImportNames: string[];\n}\n","import type { AnyObject } from 'yummies/types';\n\nimport {\n type EndpointZodContractsResult,\n type OpenAPIParameter,\n type OpenAPISchema,\n type OperationWithResponses,\n REF_PREFIX,\n REF_PREFIX_PARAMS,\n type RequestParam,\n} from './types.js';\n\nfunction parseRef(ref: string): string | null {\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX)) return null;\n return ref.slice(REF_PREFIX.length);\n}\n\nfunction parseParamRef(ref: string): string | null {\n if (typeof ref !== 'string' || !ref.startsWith(REF_PREFIX_PARAMS))\n return null;\n return ref.slice(REF_PREFIX_PARAMS.length);\n}\n\n/**\n * Extract OpenAPI schema key from response $ref (e.g. from responses['200'].content['application/json'].schema.$ref).\n * Use this for the data contract so we resolve the actual schema (e.g. GoldenApple) instead of the alias type name (GetGoldenAppleDataDC).\n */\nexport function getResponseSchemaKeyFromOperation(\n rawOperation: OperationWithResponses | Record<string, unknown>,\n): string | null {\n const op = rawOperation as OperationWithResponses;\n const responses = op?.responses;\n if (!responses || typeof responses !== 'object') return null;\n const successStatus = Object.keys(responses).find((s) => {\n const code = Number.parseInt(s, 10);\n return code >= 200 && code < 300;\n });\n if (!successStatus) return null;\n const successResponse = responses[successStatus] as\n | {\n content?: Record<string, { schema?: { $ref?: string } }>;\n }\n | undefined;\n const content = successResponse?.content;\n if (!content || typeof content !== 'object') return null;\n const jsonContent = content['application/json'] ?? Object.values(content)[0];\n const ref = jsonContent?.schema?.$ref;\n if (typeof ref !== 'string') return null;\n return parseRef(ref);\n}\n\n/**\n * Resolve generated type name to OpenAPI schema key (e.g. RelaySignalPacketDC -> RelaySignalPacket).\n */\nexport function typeNameToSchemaKey(\n typeName: string,\n typeSuffix = 'DC',\n): string {\n const t = typeName.trim();\n if (typeSuffix && t.endsWith(typeSuffix))\n return t.slice(0, -typeSuffix.length);\n return t;\n}\n\nfunction schemaToString(schema: OpenAPISchema): string {\n let s = 'z.string()';\n if (schema.minLength != null) s += `.min(${schema.minLength})`;\n if (schema.maxLength != null) s += `.max(${schema.maxLength})`;\n if (schema.pattern != null)\n s += `.regex(new RegExp(${JSON.stringify(schema.pattern)}))`;\n if (schema.enum != null)\n s = `z.enum([${schema.enum.map((e) => JSON.stringify(e)).join(', ')}])`;\n return s;\n}\n\nfunction schemaToNumber(schema: OpenAPISchema): string {\n let n = 'z.number()';\n if (schema.type === 'integer') n += '.int()';\n if (schema.minimum != null) n += `.min(${schema.minimum})`;\n if (schema.maximum != null) n += `.max(${schema.maximum})`;\n return n;\n}\n\nfunction schemaToArray(\n schema: OpenAPISchema,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n visited: Set<string>,\n): string {\n const items = schema.items\n ? schemaToZodExpr(schema.items, schemas, schemaKeyToVarName, visited)\n : 'z.any()';\n let a = `z.array(${items})`;\n if (schema.minItems != null) a += `.min(${schema.minItems})`;\n if (schema.maxItems != null) a += `.max(${schema.maxItems})`;\n return a;\n}\n\nfunction schemaToObject(\n schema: OpenAPISchema,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n visited: Set<string>,\n): string {\n if (schema.properties && Object.keys(schema.properties).length > 0) {\n const required = new Set(schema.required ?? []);\n const entries = Object.entries(schema.properties).map(\n ([propName, propSchema]) => {\n const expr = schemaToZodExpr(\n propSchema,\n schemas,\n schemaKeyToVarName,\n visited,\n );\n const optional = !required.has(propName);\n const field = optional ? `${expr}.optional()` : expr;\n return ` ${JSON.stringify(propName)}: ${field}`;\n },\n );\n return `z.object({\\n${entries.join(',\\n')}\\n})`;\n }\n if (schema.additionalProperties === true)\n return 'z.record(z.string(), z.any())';\n if (typeof schema.additionalProperties === 'object') {\n const value = schemaToZodExpr(\n schema.additionalProperties,\n schemas,\n schemaKeyToVarName,\n visited,\n );\n return `z.record(z.string(), ${value})`;\n }\n return 'z.record(z.string(), z.any())';\n}\n\n/**\n * Convert a single OpenAPI/JSON Schema to Zod expression string.\n * Uses z.lazy for $ref to support circular refs and correct order.\n */\nfunction schemaToZodExpr(\n schema: OpenAPISchema | undefined,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n visited: Set<string>,\n): string {\n if (!schema) return 'z.any()';\n if (schema.$ref) {\n const key = parseRef(schema.$ref);\n if (key && key in schemas) {\n // Явный return type только при цикле (рекурсия), иначе TS сужает тип до any\n const isCycle = visited.has(key);\n return isCycle\n ? `z.lazy((): z.ZodTypeAny => ${schemaKeyToVarName(key)})`\n : `z.lazy(() => ${schemaKeyToVarName(key)})`;\n }\n return 'z.any()';\n }\n if (schema.allOf && schema.allOf.length > 0) {\n const parts = schema.allOf.map((part) =>\n schemaToZodExpr(part, schemas, schemaKeyToVarName, visited),\n );\n const base =\n parts.length === 1\n ? parts[0]\n : parts.reduce((acc, p) => `z.intersection(${acc}, ${p})`);\n return schema.nullable === true ? `${base}.nullable()` : base;\n }\n\n const nullable = schema.nullable === true;\n let base: string;\n switch (schema.type) {\n case 'string':\n base = schemaToString(schema);\n break;\n case 'integer':\n case 'number':\n base = schemaToNumber(schema);\n break;\n case 'boolean':\n base = 'z.boolean()';\n break;\n case 'array':\n base = schemaToArray(schema, schemas, schemaKeyToVarName, visited);\n break;\n case 'object':\n base = schemaToObject(schema, schemas, schemaKeyToVarName, visited);\n break;\n default:\n base = 'z.any()';\n }\n return nullable ? `${base}.nullable()` : base;\n}\n\n/**\n * Collect all schema keys referenced from this schema (transitively).\n */\nfunction collectRefs(\n schema: OpenAPISchema | undefined,\n schemas: Record<string, OpenAPISchema>,\n out: Set<string>,\n): void {\n if (!schema) return;\n if (schema.$ref) {\n const key = parseRef(schema.$ref);\n if (key && key in schemas && !out.has(key)) {\n out.add(key);\n collectRefs(schemas[key], schemas, out);\n }\n return;\n }\n if (schema.allOf) {\n for (const part of schema.allOf) collectRefs(part, schemas, out);\n }\n if (schema.properties) {\n for (const v of Object.values(schema.properties)) {\n collectRefs(v, schemas, out);\n }\n }\n if (schema.items) collectRefs(schema.items, schemas, out);\n if (typeof schema.additionalProperties === 'object') {\n collectRefs(schema.additionalProperties, schemas, out);\n }\n}\n\n/**\n * Generate Zod variable name for a schema key (e.g. RelaySignalPacket -> relaySignalPacketSchema).\n */\nexport function schemaKeyToVarName(\n key: string,\n utils: { _: AnyObject },\n): string {\n const _ = utils._ as typeof import('lodash-es');\n return `${_.camelCase(key)}Schema`;\n}\n\n/**\n * Resolve operation.parameters to a list of query params { name, required, schema }.\n * Expands $ref from components.parameters. Supports OAS2 (type/items on param) and OAS3 (param.schema).\n */\nfunction resolveQueryParameters(\n operation: {\n parameters?: Array<{\n $ref?: string;\n in?: string;\n name?: string;\n required?: boolean;\n schema?: OpenAPISchema;\n type?: string;\n format?: string;\n items?: OpenAPISchema;\n }>;\n },\n componentsParameters: Record<string, OpenAPIParameter> | null,\n): Array<{ name: string; required: boolean; schema: OpenAPISchema }> {\n const list: Array<{\n name: string;\n required: boolean;\n schema: OpenAPISchema;\n }> = [];\n const params = operation?.parameters;\n if (!Array.isArray(params) || !params.length) return list;\n for (const p of params) {\n let param: OpenAPIParameter = p as OpenAPIParameter;\n if (p.$ref && componentsParameters) {\n const key = parseParamRef(p.$ref);\n if (key && key in componentsParameters)\n param = componentsParameters[key] as OpenAPIParameter;\n }\n if (param.in !== 'query') continue;\n const name = param.name;\n if (!name) continue;\n const schema: OpenAPISchema = param.schema ?? {\n type: param.type ?? 'string',\n format: param.format,\n items: param.items,\n };\n list.push({\n name,\n required: param.required === true,\n schema,\n });\n }\n return list;\n}\n\n/**\n * Build zod object expression string from resolved query parameters.\n */\nfunction queryParamsToZodObject(\n queryParams: Array<{\n name: string;\n required: boolean;\n schema: OpenAPISchema;\n }>,\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarName: (key: string) => string,\n): string {\n if (queryParams.length === 0) return 'z.object({})';\n const entries = queryParams.map(({ name, required, schema }) => {\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarName,\n new Set<string>(),\n );\n const field = required ? expr : `${expr}.optional()`;\n return ` ${JSON.stringify(name)}: ${field}`;\n });\n return `z.object({\\n${entries.join(',\\n')}\\n})`;\n}\n\n/**\n * Generate auxiliary Zod schema definitions for referenced schemas (so that z.lazy can reference them).\n * Для детекции цикла передаём только текущий ключ (cyclePath), а не все уже обработанные —\n * иначе любой ref на ранее сгенерированную схему ошибочно считался бы циклом и получал ZodTypeAny.\n */\nfunction generateAuxiliarySchemas(\n schemaKeys: string[],\n schemas: Record<string, OpenAPISchema>,\n schemaKeyToVarNameFn: (key: string) => string,\n visited: Set<string>,\n): string[] {\n const lines: string[] = [];\n for (const key of schemaKeys) {\n if (visited.has(key)) continue;\n visited.add(key);\n const schema = schemas[key];\n if (!schema) continue;\n const varName = schemaKeyToVarNameFn(key);\n const cyclePath = new Set<string>([key]);\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarNameFn,\n cyclePath,\n );\n lines.push(`export const ${varName} = ${expr};`);\n }\n return lines;\n}\n\n/**\n * Build the content of a central schemas.ts file with all Zod schemas from OpenAPI components.schemas.\n * Endpoints can import these and reference them in their params/data contracts.\n */\nexport function buildCentralZodSchemasFile(params: {\n componentsSchemas: Record<string, OpenAPISchema>;\n utils: { _: AnyObject };\n}): string {\n const { componentsSchemas, utils } = params;\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n const lines = generateAuxiliarySchemas(\n Object.keys(componentsSchemas),\n componentsSchemas,\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n return `import * as z from \"zod\";\n\n${lines.join('\\n\\n')}\n`;\n}\n\n/**\n * Fallback when no OpenAPI schema is available: map type name/string to simple Zod.\n */\nfunction typeToZodSchemaFallback(typeStr: string): string {\n const t = typeStr.trim();\n if (t === 'RequestParams') return 'z.any()';\n if (t === 'Record<string, any>' || t === 'Record<string, unknown>')\n return 'z.record(z.string(), z.any())';\n if (/^Record\\s*<\\s*string\\s*,/i.test(t))\n return 'z.record(z.string(), z.any())';\n if (t === 'string') return 'z.string()';\n if (t === 'number') return 'z.number()';\n if (t === 'boolean') return 'z.boolean()';\n if (t === 'any') return 'z.any()';\n if (t === 'unknown') return 'z.unknown()';\n return 'z.any()';\n}\n\n/**\n * Resolve type name to OpenAPI schema and return Zod expr plus refs needed for z.lazy.\n */\nexport function typeToZodSchemaWithSchema(\n typeStr: string,\n schemas: Record<string, OpenAPISchema> | null,\n utils: { _: AnyObject },\n typeSuffix?: string,\n): { expr: string; refs: string[] } {\n const t = typeStr.trim();\n\n if (!schemas || Object.keys(schemas).length === 0) {\n return { expr: typeToZodSchemaFallback(t), refs: [] };\n }\n\n if (t === 'RequestParams') return { expr: 'z.any()', refs: [] };\n\n const schemaKey = typeNameToSchemaKey(t, typeSuffix);\n const schema = schemas[schemaKey];\n if (!schema) {\n return { expr: typeToZodSchemaFallback(t), refs: [] };\n }\n\n const refs = new Set<string>();\n collectRefs(schema, schemas, refs);\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n return { expr, refs: [...refs] };\n}\n\n/**\n * Maps a TypeScript type name or expression to a Zod schema code string (fallback only).\n */\nexport function typeToZodSchema(typeStr: string): string {\n return typeToZodSchemaFallback(typeStr);\n}\n\n/**\n * Build Zod expr + refs from a known OpenAPI schema key (for response data when we have $ref from the operation).\n */\nfunction schemaKeyToZod(\n schemaKey: string,\n schemas: Record<string, OpenAPISchema>,\n utils: { _: AnyObject },\n): { expr: string; refs: string[] } {\n const schema = schemas[schemaKey];\n if (!schema) return { expr: 'z.any()', refs: [] };\n const refs = new Set<string>();\n collectRefs(schema, schemas, refs);\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n const expr = schemaToZodExpr(\n schema,\n schemas,\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n return { expr, refs: [...refs] };\n}\n\n/**\n * Builds the source code for endpoint Zod contracts: params schema, data schema, and the contracts object.\n * When components.schemas are provided, generates detailed Zod from OpenAPI schemas.\n */\n/** Minimal operation shape for resolving query parameters */\nexport type OpenAPIOperationForZod = {\n parameters?: Array<{\n $ref?: string;\n in?: string;\n name?: string;\n required?: boolean;\n schema?: OpenAPISchema;\n type?: string;\n format?: string;\n items?: OpenAPISchema;\n }>;\n};\n\nexport function buildEndpointZodContractsCode(params: {\n routeNameUsage: string;\n inputParams: RequestParam[];\n responseDataTypeName: string;\n contractsVarName: string;\n utils: { _: AnyObject };\n /** OpenAPI components.schemas for detailed Zod generation */\n componentsSchemas?: Record<string, OpenAPISchema> | null;\n typeSuffix?: string;\n /** When set, use this schema key for data contract instead of resolving from responseDataTypeName (fixes alias types like GetGoldenAppleDataDC -> GoldenApple) */\n responseSchemaKey?: string | null;\n /** When true, do not emit auxiliary schemas inline; they are expected from a central schemas.ts (zodSchemaImportNames will be non-empty) */\n useExternalZodSchemas?: boolean;\n /** OpenAPI operation (path + method) to build query object schema from parameters with in: 'query' */\n openApiOperation?: OpenAPIOperationForZod | null;\n /** OpenAPI components.parameters to resolve $ref in operation.parameters */\n openApiComponentsParameters?: Record<string, OpenAPIParameter> | null;\n /** Name of the input param that holds query (default 'query') */\n queryParamName?: string;\n}): EndpointZodContractsResult {\n const {\n routeNameUsage,\n inputParams,\n responseDataTypeName,\n contractsVarName,\n utils,\n componentsSchemas = null,\n typeSuffix = 'DC',\n responseSchemaKey,\n useExternalZodSchemas = false,\n openApiOperation = null,\n openApiComponentsParameters = null,\n queryParamName = 'query',\n } = params;\n const _ = utils._ as typeof import('lodash-es');\n\n const paramsSchemaName = `${_.camelCase(routeNameUsage)}ParamsSchema`;\n const dataSchemaName = `${_.camelCase(routeNameUsage)}DataSchema`;\n\n const allAuxiliaryKeys = new Set<string>();\n const paramParts: string[] = [];\n\n const resolvedQueryParams =\n openApiOperation &&\n (openApiComponentsParameters || openApiOperation.parameters?.length)\n ? resolveQueryParameters(openApiOperation, openApiComponentsParameters)\n : [];\n\n const schemaKeyToVarNameFn = (key: string) => schemaKeyToVarName(key, utils);\n\n for (const p of inputParams) {\n let expr: string;\n let refKeys: string[] = [];\n\n if (\n p.name === queryParamName &&\n resolvedQueryParams.length > 0 &&\n componentsSchemas\n ) {\n expr = queryParamsToZodObject(\n resolvedQueryParams,\n componentsSchemas,\n schemaKeyToVarNameFn,\n );\n } else {\n const result = typeToZodSchemaWithSchema(\n p.type,\n componentsSchemas,\n utils,\n typeSuffix,\n );\n expr = result.expr;\n refKeys = result.refs;\n }\n\n for (const k of refKeys) allAuxiliaryKeys.add(k);\n const schemaWithOptional = p.optional ? `${expr}.optional()` : expr;\n paramParts.push(`${p.name}: ${schemaWithOptional}`);\n }\n\n const responseResult =\n responseSchemaKey &&\n componentsSchemas &&\n responseSchemaKey in componentsSchemas\n ? schemaKeyToZod(responseSchemaKey, componentsSchemas, utils)\n : typeToZodSchemaWithSchema(\n responseDataTypeName,\n componentsSchemas,\n utils,\n typeSuffix,\n );\n const useDataSchemaFromCentral =\n useExternalZodSchemas &&\n responseSchemaKey &&\n componentsSchemas &&\n responseSchemaKey in componentsSchemas;\n if (useDataSchemaFromCentral) {\n allAuxiliaryKeys.add(responseSchemaKey);\n } else {\n for (const k of responseResult.refs) allAuxiliaryKeys.add(k);\n }\n const zodSchemaImportNames =\n useExternalZodSchemas && allAuxiliaryKeys.size > 0\n ? [...allAuxiliaryKeys].map(schemaKeyToVarNameFn)\n : [];\n\n const allAuxiliary = useExternalZodSchemas\n ? []\n : generateAuxiliarySchemas(\n [...allAuxiliaryKeys],\n componentsSchemas ?? {},\n schemaKeyToVarNameFn,\n new Set<string>(),\n );\n\n const paramsFields = paramParts.join(',\\n ');\n const paramsSchemaCode = `export const ${paramsSchemaName} = z.object({\n ${paramsFields},\n});`;\n\n const dataSchemaCode = useDataSchemaFromCentral\n ? `export const ${dataSchemaName} = ${schemaKeyToVarNameFn(responseSchemaKey!)};`\n : `export const ${dataSchemaName} = ${responseResult.expr};`;\n\n const contractsCode = `export const ${contractsVarName} = {\n params: ${paramsSchemaName},\n data: ${dataSchemaName},\n};`;\n\n const auxiliaryBlock =\n allAuxiliary.length > 0 ? `${allAuxiliary.join('\\n\\n')}\\n\\n` : '';\n const content = `${auxiliaryBlock}${paramsSchemaCode}\n\n${dataSchemaCode}\n\n${contractsCode}`;\n\n return { content, zodSchemaImportNames };\n}\n\nexport type { EndpointZodContractsResult };\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 buildEndpointZodContractsCode,\n getResponseSchemaKeyFromOperation,\n typeNameToSchemaKey,\n} from '../utils/zod/build-endpoint-zod-contracts-code.js';\nimport {\n formatGroupNameEnumKey,\n formatTagNameEnumKey,\n} from './meta-info.tmpl.js';\n\nexport type ZodContractsOption =\n | boolean\n | {\n validate:\n | boolean\n | string\n | { params?: boolean | string; data?: boolean | string };\n throw?:\n | boolean\n | string\n | { params?: boolean | string; data?: boolean | string };\n /** String: runtime condition. Function: codegen-time filter for (contractName, routeInfo). */\n appendRule?:\n | string\n | ((\n contractName: string,\n routeInfo: {\n operationId: string;\n path: string;\n method: string;\n contractName: string;\n },\n ) => boolean);\n };\n\nexport interface NewEndpointTmplParams extends BaseTmplParams {\n route: ParsedRoute;\n groupName: Maybe<string>;\n metaInfo: Maybe<MetaInfo>;\n /** Generate Zod contracts and optionally enable validation. */\n zodContracts?: ZodContractsOption;\n /** When set, auxiliary Zod schemas are not inlined; endpoint imports them from this path (e.g. '../schemas') */\n relativePathZodSchemas?: string | null;\n}\n\n// RequestParams[\"type\"]\nconst requestContentKind: AnyObject = {\n URL_ENCODED: '\"application/x-www-form-urlencoded\"',\n FORM_DATA: '\"multipart/form-data\"',\n TEXT: '\"text/plain\"',\n JSON: '\"application/json\"',\n BINARY: '\"application/octet-stream\"',\n};\n// RequestParams[\"format\"]\nconst responseContentKind: AnyObject = {\n TEXT: '\"text\"',\n IMAGE: '\"blob\"',\n JSON: '\"json\"',\n FORM_DATA: '\"formData\"',\n BYTES: '\"bytes\"',\n};\n\n/** Infer response format from raw OpenAPI operation (produces or responses content) when contentKind is not set */\nfunction inferResponseFormatFromRaw(raw: AnyObject): string | null {\n const contentTypes: string[] = [];\n if (Array.isArray(raw.produces)) {\n contentTypes.push(...raw.produces);\n }\n const successStatus =\n raw.responses &&\n Object.keys(raw.responses).find((s) => {\n const code = Number.parseInt(s, 10);\n return code >= 200 && code < 300;\n });\n const content = successStatus && raw.responses[successStatus]?.content;\n if (content && typeof content === 'object') {\n contentTypes.push(...Object.keys(content));\n }\n if (contentTypes.length === 0) return null;\n\n const mimeToFormat = (mime: string): string | null => {\n if (mime.includes('application/json') || mime.includes('+json'))\n return '\"json\"';\n if (mime.startsWith('text/')) return '\"text\"';\n if (mime.includes('form-data') || mime.includes('multipart'))\n return '\"formData\"';\n // binary: blob() in Fetch API — IANA binary types: application/*, image/*, audio/*, video/*, font/*, model/*, message/*, haptics/*\n if (\n mime.includes('octet-stream') ||\n mime.includes('spreadsheet') ||\n mime.includes('vnd.') ||\n mime.startsWith('application/') ||\n mime.startsWith('image/') ||\n mime.startsWith('audio/') ||\n mime.startsWith('video/') ||\n mime.startsWith('font/') ||\n mime.startsWith('model/') ||\n mime.startsWith('message/') ||\n mime.startsWith('haptics/')\n )\n return '\"blob\"';\n return null;\n };\n\n // Prefer json for typed responses, then first recognized format\n const preferredOrder = ['\"json\"', '\"text\"', '\"formData\"', '\"blob\"'] as const;\n for (const fmt of preferredOrder) {\n const found = contentTypes.map(mimeToFormat).find((f) => f === fmt);\n if (found) return found;\n }\n return null;\n}\n\n/** Resolve response format from contentKind, then from raw operation (produces / responses content) */\nfunction getResponseFormat(\n responseBodyInfo: AnyObject,\n raw: AnyObject,\n configuration: AnyObject,\n path: string,\n method: string,\n): string | null {\n const fromContentKind =\n responseContentKind[responseBodyInfo.success?.schema?.contentKind];\n if (fromContentKind) return fromContentKind;\n const swaggerSchema =\n configuration.config?.swaggerSchema ?? configuration.swaggerSchema;\n const schemaPaths = swaggerSchema?.paths;\n const pathKey = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n const schemaOperation =\n pathKey && methodKey ? schemaPaths?.[pathKey]?.[methodKey] : null;\n const rawWithProduces =\n schemaOperation && typeof schemaOperation === 'object'\n ? { ...schemaOperation, ...raw }\n : raw;\n return inferResponseFormatFromRaw(rawWithProduces);\n}\n\n/** Infer request body contentType from raw OpenAPI operation (consumes or requestBody.content) */\nfunction inferRequestBodyContentTypeFromRaw(raw: AnyObject): string | null {\n const contentTypes: string[] = [];\n if (Array.isArray(raw.consumes)) {\n contentTypes.push(...raw.consumes);\n }\n const requestBody = raw.requestBody;\n if (requestBody?.content && typeof requestBody.content === 'object') {\n contentTypes.push(...Object.keys(requestBody.content));\n }\n if (contentTypes.length === 0) return null;\n\n const mimeToContentType = (mime: string): string | null => {\n if (mime.includes('application/json') || mime.includes('+json'))\n return '\"application/json\"';\n if (mime.includes('application/x-www-form-urlencoded'))\n return '\"application/x-www-form-urlencoded\"';\n if (mime.includes('multipart/form-data') || mime.includes('multipart/'))\n return '\"multipart/form-data\"';\n if (mime.startsWith('text/')) return '\"text/plain\"';\n if (\n mime.includes('octet-stream') ||\n mime.startsWith('application/') ||\n mime.startsWith('image/') ||\n mime.startsWith('audio/') ||\n mime.startsWith('video/') ||\n mime.startsWith('font/') ||\n mime.startsWith('model/') ||\n mime.includes('vnd.')\n )\n return '\"application/octet-stream\"';\n return null;\n };\n\n const preferredOrder = [\n '\"application/json\"',\n '\"application/x-www-form-urlencoded\"',\n '\"multipart/form-data\"',\n '\"text/plain\"',\n '\"application/octet-stream\"',\n ] as const;\n for (const ct of preferredOrder) {\n const found = contentTypes.map(mimeToContentType).find((c) => c === ct);\n if (found) return found;\n }\n return null;\n}\n\n/** Resolve request body contentType from contentKind, then from raw (consumes / requestBody.content) */\nfunction getRequestBodyContentType(\n requestBodyInfo: AnyObject,\n raw: AnyObject,\n configuration: AnyObject,\n path: string,\n method: string,\n): string | null {\n const fromContentKind = requestContentKind[requestBodyInfo?.contentKind];\n if (fromContentKind) return fromContentKind;\n const swaggerSchema =\n configuration.config?.swaggerSchema ?? configuration.swaggerSchema;\n const schemaPaths = swaggerSchema?.paths;\n const pathKey = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n const schemaOperation =\n pathKey && methodKey ? schemaPaths?.[pathKey]?.[methodKey] : null;\n const rawWithConsumes =\n schemaOperation && typeof schemaOperation === 'object'\n ? { ...schemaOperation, ...raw }\n : raw;\n return inferRequestBodyContentTypeFromRaw(rawWithConsumes);\n}\n\nexport const newEndpointTmpl = ({\n route,\n codegenParams,\n importFileParams,\n utils,\n groupName,\n metaInfo,\n filterTypes,\n configuration,\n zodContracts,\n relativePathZodSchemas,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: codegen template, many branches by design\n}: NewEndpointTmplParams) => {\n const zodContractsIsObject =\n typeof zodContracts === 'object' && zodContracts !== null;\n const hasZodContracts = zodContracts === true || zodContractsIsObject;\n const validateOpt = zodContractsIsObject\n ? zodContracts.validate\n : zodContracts === true\n ? true\n : undefined;\n const throwOpt = zodContractsIsObject ? zodContracts.throw : undefined;\n const validateOptObj =\n validateOpt != null &&\n typeof validateOpt === 'object' &&\n !Array.isArray(validateOpt)\n ? (validateOpt as { params?: boolean | string; data?: boolean | string })\n : null;\n const throwOptObj =\n throwOpt != null && typeof throwOpt === 'object' && !Array.isArray(throwOpt)\n ? (throwOpt as { params?: boolean | string; data?: boolean | string })\n : null;\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 getRequestBodyContentType(\n requestBodyInfo,\n raw,\n configuration as AnyObject,\n path,\n method,\n ) || null;\n const responseFormat =\n getResponseFormat(\n responseBodyInfo,\n raw,\n configuration as AnyObject,\n path,\n method,\n ) || 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 const defaultOkResponseType = positiveResponseTypes?.[0]?.type ?? 'unknown';\n const contractsVarName = hasZodContracts\n ? `${_.camelCase(route.routeName.usage)}Contracts`\n : null;\n const swaggerSchema =\n (configuration.config as AnyObject)?.swaggerSchema ??\n (configuration as AnyObject)?.swaggerSchema;\n const componentsSchemas = swaggerSchema?.components?.schemas as Record<\n string,\n AnyObject\n > | null;\n let operationFromSpec: AnyObject | null = null;\n const pathKeyForSpec = path?.startsWith('/') ? path : `/${path || ''}`;\n const methodKey = method?.toLowerCase?.() ?? method;\n if (pathKeyForSpec && methodKey && swaggerSchema?.paths?.[pathKeyForSpec]) {\n operationFromSpec = swaggerSchema.paths[pathKeyForSpec][methodKey] ?? null;\n }\n if (!operationFromSpec && swaggerSchema?.paths && raw?.operationId) {\n for (const pathItem of Object.values(swaggerSchema.paths) as AnyObject[]) {\n const op = pathItem?.[methodKey];\n if (op?.operationId === raw.operationId) {\n operationFromSpec = op;\n break;\n }\n }\n }\n let responseSchemaKey = getResponseSchemaKeyFromOperation(\n operationFromSpec ?? raw,\n );\n if (!responseSchemaKey && componentsSchemas && configuration.modelTypes) {\n const aliasType = configuration.modelTypes.find(\n (m: AnyObject) => m.name === defaultOkResponseType,\n );\n if (\n aliasType?.typeIdentifier === 'type' &&\n typeof aliasType.content === 'string' &&\n /^[A-Za-z0-9_]+$/.test(aliasType.content.trim())\n ) {\n const resolved = typeNameToSchemaKey(aliasType.content.trim(), 'DC');\n if (resolved in componentsSchemas) responseSchemaKey = resolved;\n }\n }\n if (!responseSchemaKey && componentsSchemas) {\n const match = defaultOkResponseType.match(/^Get(.+)DataDC$/);\n if (match) {\n const candidate = match[1];\n if (candidate in componentsSchemas) responseSchemaKey = candidate;\n }\n }\n const contractsCode =\n hasZodContracts && contractsVarName\n ? buildEndpointZodContractsCode({\n routeNameUsage: route.routeName.usage,\n inputParams,\n responseDataTypeName: defaultOkResponseType,\n contractsVarName,\n utils,\n componentsSchemas: componentsSchemas ?? undefined,\n typeSuffix: 'DC',\n responseSchemaKey: responseSchemaKey ?? undefined,\n useExternalZodSchemas: Boolean(relativePathZodSchemas),\n openApiOperation: operationFromSpec ?? undefined,\n openApiComponentsParameters:\n (swaggerSchema?.components as AnyObject)?.parameters ?? undefined,\n queryParamName: queryName,\n })\n : null;\n\n const appendRuleOpt =\n zodContractsIsObject && zodContracts.appendRule != null\n ? zodContracts.appendRule\n : null;\n const routeInfoForAppend =\n contractsVarName != null\n ? {\n operationId: raw.operationId ?? '',\n path,\n method,\n contractName: contractsVarName,\n }\n : null;\n const contractsLine = (() => {\n if (contractsVarName == null) return '';\n if (typeof appendRuleOpt === 'string')\n return `contracts: ${appendRuleOpt} ? ${contractsVarName} : undefined,`;\n if (typeof appendRuleOpt === 'function' && routeInfoForAppend) {\n const include = appendRuleOpt(\n routeInfoForAppend.contractName,\n routeInfoForAppend,\n );\n return include\n ? `contracts: ${contractsVarName},`\n : 'contracts: undefined,';\n }\n return `contracts: ${contractsVarName},`;\n })();\n const validateContractsLine = (() => {\n if (validateOpt === undefined) return '';\n if (typeof validateOpt === 'string')\n return `validateContracts: ${validateOpt},`;\n if (typeof validateOpt === 'boolean')\n return `validateContracts: ${validateOpt},`;\n if (validateOptObj !== null) {\n const parts: string[] = [];\n if (validateOptObj.params !== undefined)\n parts.push(\n `params: ${typeof validateOptObj.params === 'string' ? validateOptObj.params : validateOptObj.params}`,\n );\n if (validateOptObj.data !== undefined)\n parts.push(\n `data: ${typeof validateOptObj.data === 'string' ? validateOptObj.data : validateOptObj.data}`,\n );\n return parts.length > 0\n ? `validateContracts: { ${parts.join(', ')} },`\n : '';\n }\n return '';\n })();\n const throwContractsLine = (() => {\n if (throwOpt === undefined) return '';\n if (typeof throwOpt === 'string') return `throwContracts: ${throwOpt},`;\n if (typeof throwOpt === 'boolean') return `throwContracts: ${throwOpt},`;\n if (throwOptObj !== null) {\n const parts: string[] = [];\n if (throwOptObj.params !== undefined)\n parts.push(`params: ${throwOptObj.params}`);\n if (throwOptObj.data !== undefined)\n parts.push(`data: ${throwOptObj.data}`);\n return parts.length > 0 ? `throwContracts: { ${parts.join(', ')} },` : '';\n }\n return '';\n })();\n\n return {\n reservedDataContractNames,\n localModelTypes: isAllowedInputType ? [requestInputTypeDc] : [],\n contractsCode: contractsCode ?? undefined,\n contractsVarName: contractsVarName ?? undefined,\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 ${contractsLine}\n ${validateContractsLine}\n ${throwContractsLine}\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 relativePathZodSchemas?: string | null;\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 relativePathZodSchemas,\n } = params;\n\n const { _ } = utils;\n\n const dataContractNamesInThisFile: string[] = [];\n const dataContactNames = new Set(\n Object.keys(\n (configuration.config.swaggerSchema as any)?.components?.schemas,\n ).map((schemaName) => utils.formatModelName(schemaName)),\n );\n const newEndpointTemplates = routes.map((route) => {\n const newEndpointTemplateData = newEndpointTmpl({\n ...params,\n route,\n groupName,\n metaInfo,\n zodContracts: codegenParams.zodContracts,\n relativePathZodSchemas: relativePathZodSchemas ?? undefined,\n });\n const { reservedDataContractNames } = newEndpointTemplateData;\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 hasAnyZodContracts = newEndpointTemplates.some(\n (t) => t.contractsCode != null,\n );\n const allZodSchemaImportNames = new Set<string>();\n newEndpointTemplates.forEach((t) => {\n const c = t.contractsCode;\n if (c != null && typeof c === 'object' && c.zodSchemaImportNames?.length) {\n for (const n of c.zodSchemaImportNames) {\n allZodSchemaImportNames.add(n);\n }\n }\n });\n const zodImportLine = hasAnyZodContracts ? 'import * as z from \"zod\";' : '';\n const zodSchemasImportLine =\n allZodSchemaImportNames.size && relativePathZodSchemas\n ? `import { ${[...allZodSchemaImportNames].sort().join(', ')} } from \"${relativePathZodSchemas}\";`\n : '';\n\n const endpointTemplates = await Promise.all(\n newEndpointTemplates.map(\n async ({\n content: requestInfoInstanceContent,\n localModelTypes,\n route,\n contractsCode,\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 const contractsResult =\n contractsCode != null && typeof contractsCode === 'object'\n ? contractsCode\n : null;\n const contractsBlock =\n contractsResult != null ? `\\n\\n${contractsResult.content}\\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 ${contractsBlock}\n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent} \n`;\n },\n ),\n );\n\n const endpointTemplatesContent = endpointTemplates\n .filter(Boolean)\n .join('\\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 const dataContractImportToken = '/*__DATA_CONTRACT_IMPORTS__*/';\n const contentWithImportToken = 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 ${[zodImportLine, zodSchemasImportLine].filter(Boolean).join('\\n')}\n ${dataContractImportToken}\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 ${endpointTemplatesContent}\n `);\n\n const escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const usedDataContractNames = configuration.modelTypes\n .map((modelType: AnyObject) => modelType.name as string)\n .filter(\n (modelTypeName) =>\n !dataContractNamesInThisFile.includes(modelTypeName) &&\n dataContactNames.has(modelTypeName) &&\n new RegExp(`\\\\b${escapeRegExp(modelTypeName)}\\\\b`).test(\n contentWithImportToken,\n ),\n );\n\n const dataContractImportLine =\n usedDataContractNames.length > 0\n ? `import { ${usedDataContractNames.join(', ')} } from \"${relativePathDataContracts}\";`\n : '';\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: contentWithImportToken.replace(\n dataContractImportToken,\n dataContractImportLine,\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 /** When true, add export * from './schemas' (Zod schemas from zodContracts) */\n exportSchemas?: boolean;\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 exportSchemas,\n}: AllExportsTmplParams) => {\n return await formatTSContent(`${LINTERS_IGNORE}\n export * from './data-contracts';\n ${exportSchemas ? \" export * from './schemas';\\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 /** When set (e.g. '../schemas'), endpoint imports shared Zod schemas from this path instead of inlining them */\n relativePathZodSchemas?: string | null;\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 relativePathZodSchemas,\n } = params;\n const { _ } = utils;\n\n const {\n content: requestInfoInstanceContent,\n reservedDataContractNames,\n localModelTypes,\n contractsCode,\n } = newEndpointTmpl({\n ...params,\n route,\n groupName,\n metaInfo,\n zodContracts: codegenParams.zodContracts,\n relativePathZodSchemas: relativePathZodSchemas ?? undefined,\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 const dataContractImportToken = '/*__DATA_CONTRACT_IMPORTS__*/';\n const contractsResult =\n contractsCode != null && typeof contractsCode === 'object'\n ? contractsCode\n : null;\n const zodImportLine =\n contractsResult != null ? 'import * as z from \"zod\";' : '';\n const zodSchemasImportLine =\n contractsResult?.zodSchemaImportNames?.length && relativePathZodSchemas\n ? `import { ${contractsResult.zodSchemaImportNames.join(', ')} } from \"${relativePathZodSchemas}\";`\n : '';\n const contractsBlock =\n contractsResult != null ? `\\n\\n${contractsResult.content}\\n\\n` : '';\n const zodImportsBlock = [zodImportLine, zodSchemasImportLine]\n .filter(Boolean)\n .join('\\n');\n const contentWithImportToken = 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 ${zodImportsBlock}\n ${dataContractImportToken}\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 ${contractsBlock}\n ${endpointJSDocTmpl({\n ...params,\n route,\n })}\n export const ${_.camelCase(route.routeName.usage)} = ${requestInfoInstanceContent}\n `);\n\n const escapeRegExp = (value: string) =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n const usedDataContractNames = configuration.modelTypes\n .map((modelType: AnyObject) => modelType.name as string)\n .filter(\n (modelTypeName) =>\n !dataContractNamesInThisFile.includes(modelTypeName) &&\n dataContactNames.has(modelTypeName) &&\n new RegExp(`\\\\b${escapeRegExp(modelTypeName)}\\\\b`).test(\n contentWithImportToken,\n ),\n );\n\n const dataContractImportLine =\n usedDataContractNames.length > 0\n ? `import { ${usedDataContractNames.join(', ')} } from \"${relativePathDataContracts}\";`\n : '';\n\n return {\n reservedDataContractNames: dataContractNamesInThisFile,\n content: contentWithImportToken.replace(\n dataContractImportToken,\n dataContractImportLine,\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: iterative AST traversal\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 isKeepType = unpackFilterOption(keepTypes, (name) => name, false);\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 && !isKeepType(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 fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { cloneDeep } from 'lodash-es';\nimport {\n type GenerateApiConfiguration,\n generateApi as generateApiFromSwagger,\n type Hooks,\n type ParsedRoute,\n} from 'swagger-typescript-api';\nimport type { AnyObject, Defined, 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';\nimport { buildCentralZodSchemasFile } from './utils/zod/build-endpoint-zod-contracts-code.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: orchestration with many code paths\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 = {\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 const result = {\n ...(constructs as any),\n object: () => `Record<string, any>`,\n float: () => `number`,\n };\n\n if (params.otherCodegenParams?.primitiveTypeConstructs) {\n if (\n typeof params.otherCodegenParams?.primitiveTypeConstructs ===\n 'function'\n ) {\n Object.assign(\n result,\n params.otherCodegenParams.primitiveTypeConstructs(result),\n );\n } else {\n Object.assign(\n result,\n params.otherCodegenParams.primitiveTypeConstructs,\n );\n }\n }\n\n return result;\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 prepareConfig: Defined<Hooks['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 params.otherCodegenParams?.hooks?.onPrepareConfig?.(config);\n };\n\n const formatRouteName: Defined<Hooks['onFormatRouteName']> = (\n routeInfo,\n usageRouteName,\n ) => {\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 const resultRouteName =\n params?.formatEndpointName?.(endpointName, routeInfo) ??\n swaggerTypescriptApiCodegenBaseParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n endpointName,\n ) ??\n endpointName;\n\n return (\n params.otherCodegenParams?.hooks?.onFormatRouteName?.(\n routeInfo,\n resultRouteName,\n ) ?? resultRouteName\n );\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, _codegenProcess) => {\n mixinSwaggerSchema = cloneDeep(configuration.swaggerSchema);\n },\n onPrepareConfig: prepareConfig,\n onFormatRouteName: formatRouteName,\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: prepareConfig,\n onFormatRouteName: formatRouteName,\n },\n });\n\n //#endregion\n\n const utils = codegenProcess.getRenderTemplateData()\n .utils as CodegenDataUtils;\n\n const { _ } = utils;\n\n const outputType = params.outputType ?? 'one-endpoint-per-file';\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 await Promise.resolve(codegenFs.cleanDir(paths.outputDir));\n // swagger-typescript-api FileSystem.createDir не создает вложенные директории рекурсивно,\n // а нам важно поддерживать output вида \".../__generated__/subdir\".\n await fs.mkdir(paths.outputDir, { recursive: true });\n await Promise.resolve(codegenFs.createDir(paths.outputDir));\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 componentsSchemasForZod =\n (generated.configuration as AnyObject).config?.swaggerSchema?.components\n ?.schemas ??\n (generated.configuration as AnyObject).swaggerSchema?.components?.schemas;\n const hasZodSchemasFile =\n (params.zodContracts === true ||\n (typeof params.zodContracts === 'object' &&\n params.zodContracts != null)) &&\n componentsSchemasForZod &&\n typeof componentsSchemasForZod === 'object' &&\n Object.keys(componentsSchemasForZod).length > 0;\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 (outputType === 'one-endpoint-per-file') {\n // #region кодогенерация 1 эндпоинт - 1 файл без группировки\n await fs.mkdir(path.resolve(paths.outputDir, 'endpoints'), {\n recursive: true,\n });\n await Promise.resolve(\n codegenFs.createDir(path.resolve(params.output, 'endpoints')),\n );\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 relativePathZodSchemas: hasZodSchemasFile ? '../schemas' : null,\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 relativePathZodSchemas: hasZodSchemasFile ? './schemas' : null,\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: paths.outputDir,\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 (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 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 (hasZodSchemasFile && componentsSchemasForZod) {\n const schemasTsContent = buildCentralZodSchemasFile({\n componentsSchemas: componentsSchemasForZod as Record<string, AnyObject>,\n utils,\n });\n const formattedSchemasContent = await generated.formatTSContent(\n `${LINTERS_IGNORE}\\n${schemasTsContent}`,\n );\n codegenFs.createFile({\n path: paths.outputDir,\n fileName: 'schemas.ts',\n withPrefix: false,\n content: formattedSchemasContent,\n });\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 exportSchemas: hasZodSchemasFile,\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 exportSchemas: hasZodSchemasFile,\n }),\n });\n }\n }\n\n if (params.removeUnusedTypes) {\n await removeUnusedTypes({\n directory: paths.outputDir,\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","schemaKeyToVarName","base","modelType","_","generateApiFromSwagger"],"mappings":"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"}
|