foca-openapi
Version:
根据openapi文档生成请求客户端
1 lines • 43.9 kB
Source Map (JSON)
{"version":3,"sources":["../src/bin.ts","../src/lib/path-to-openapi.ts","../src/lib/save-to-file.ts","../src/lib/generate-template.ts","../src/lib/adapter.ts","../src/lib/document-to-meta.ts","../src/lib/ref-to-object.ts","../src/lib/generate-comments.ts","../src/lib/parse-schema.ts","../src/lib/parse-parameters.ts","../src/lib/parse-request-body.ts","../src/lib/parse-response.ts","../src/lib/template.ts","../src/lib/filter-tag.ts","../src/lib/filter-uri.ts","../src/lib/read-config.ts","../src/silent-spinner.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport timers from 'node:timers/promises';\nimport { Listr } from 'listr2';\nimport minimist from 'minimist';\nimport colors from 'yoctocolors';\nimport { OpenAPIV3 } from 'openapi-types';\nimport type { OpenapiClientConfig } from './define-config';\nimport { pathToOpenapi } from './lib/path-to-openapi';\nimport { saveToFile } from './lib/save-to-file';\nimport { generateTemplate } from './lib/generate-template';\nimport { filterTag } from './lib/filter-tag';\nimport { filterUri } from './lib/filter-uri';\nimport { readConfig } from './lib/read-config';\nimport { SilentSpinner } from './silent-spinner';\n\nconst argv = minimist(process.argv.slice(2), {\n alias: { config: ['c'], env: ['e'] },\n});\nconst silent = Boolean(argv['silent']);\nconst env = argv['env'] || process.env['NODE_ENV'] || 'development';\nconst configFile = argv['config'];\n\nconst sleep = () => timers.setTimeout(300);\nconst toArray = (value: any) => (Array.isArray(value) ? value : [value]);\n\nconst spinner = (silent ? new SilentSpinner([]) : new Listr([])) as Listr<{\n configs: OpenapiClientConfig[];\n docs: OpenAPIV3.Document[];\n projects: Record<string, string>;\n}>;\n\nspinner.add({\n title: '读取配置文件openapi.config.ts',\n task: async (ctx, task) => {\n const userConfig = readConfig(configFile);\n\n if (typeof userConfig === 'function') {\n task.title += ` ${colors.gray(env)}`;\n ctx.configs = toArray(await userConfig(env));\n } else {\n ctx.configs = toArray(userConfig);\n }\n\n await sleep();\n },\n});\n\nspinner.add({\n title: '获取openapi文档',\n task: async (ctx) => {\n ctx.docs = await Promise.all(\n ctx.configs.map((config) => pathToOpenapi(config.url, config.onDocumentLoaded)),\n );\n await sleep();\n },\n});\n\nspinner.add({\n title: '过滤指定标签',\n skip: (ctx) => {\n return ctx.configs.every(\n ({ includeTag: value }) => !value || (Array.isArray(value) && !value.length),\n );\n },\n task: async (ctx) => {\n ctx.configs.forEach((config, i) => {\n filterTag(ctx.docs[i]!, config);\n });\n await sleep();\n },\n});\n\nspinner.add({\n title: '过滤指定前缀',\n skip: (ctx) => {\n return ctx.configs.every(\n ({ includeUriPrefix: value }) => !value || (Array.isArray(value) && !value.length),\n );\n },\n task: async (ctx) => {\n ctx.configs.forEach((config, i) => {\n filterUri(ctx.docs[i]!, config);\n });\n await sleep();\n },\n});\n\nspinner.add({\n title: '生成客户端',\n task: async (ctx) => {\n ctx.projects = {};\n\n await Promise.all(\n ctx.configs.map(async (config, i) => {\n const project = await generateTemplate(ctx.docs[i]!, config);\n ctx.projects = { ...ctx.projects, ...project };\n }),\n );\n\n await sleep();\n },\n});\n\nspinner.add({\n title: '写入指定文件',\n task: async (ctx, task) => {\n const files = await Promise.all(\n ctx.configs.map((config) => {\n return saveToFile(config, ctx.projects);\n }),\n );\n task.title += ' ' + colors.gray(files.join(', '));\n },\n});\n\nawait spinner.run();\n","import { readFile } from 'fs/promises';\nimport path from 'node:path';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport YAML from 'yaml';\nimport type { OpenapiClientConfig } from '../define-config';\nimport axios from 'foca-axios';\n\nexport const pathToOpenapi = async (\n uri: string,\n onLoaded?: OpenapiClientConfig['onDocumentLoaded'],\n): Promise<OpenAPIV3.Document> => {\n let originContent: string;\n if (uri.startsWith('http:') || uri.startsWith('https:')) {\n // 使用fetch时会出现偶发性错误:`connect ECONNREFUSED 0.0.0.0:443`\n originContent = await axios.get(uri, { responseType: 'text' });\n } else {\n originContent = await readFile(path.resolve(uri), 'utf8');\n }\n\n let document: OpenAPIV3.Document;\n try {\n document = JSON.parse(originContent);\n } catch {\n document = YAML.parse(originContent);\n }\n\n return onLoaded?.(document) || document;\n};\n","import path from 'node:path';\nimport { kebabCase } from 'lodash-es';\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport type { OpenapiClientConfig } from '../define-config';\n\nexport const saveToFile = async (\n config: Pick<OpenapiClientConfig, 'projectName' | 'outputFile'>,\n projects: Record<string, string>,\n) => {\n const outputFile =\n config.outputFile?.replaceAll(path.sep, path.posix.sep) ||\n path.posix.join(\n 'src',\n 'openapi',\n `${config.projectName ? kebabCase(config.projectName) : 'openapi'}.ts`,\n );\n const fullPath = path.posix.resolve(outputFile);\n const projectContent = projects[config.projectName ?? '']!;\n await mkdir(path.posix.dirname(fullPath), { recursive: true });\n await writeFile(fullPath, projectContent);\n return outputFile;\n};\n","import type { OpenAPIV3 } from 'openapi-types';\nimport { upperFirst, camelCase, snakeCase } from 'lodash-es';\nimport { documentToMeta, type Metas } from './document-to-meta';\nimport { methods } from './adapter';\nimport prettier from 'prettier';\nimport { generateComments } from './generate-comments';\nimport type { OpenapiClientConfig } from '../define-config';\nimport { pickContentTypes } from './template';\n\nexport const generateTemplate = async (\n docs: OpenAPIV3.Document,\n config: Pick<\n OpenapiClientConfig,\n 'projectName' | 'classMode' | 'rpcName' | 'looseInputNumber'\n >,\n) => {\n const {\n projectName = '',\n classMode = 'rest',\n rpcName = 'method+uri',\n looseInputNumber = false,\n } = config;\n const className = `OpenapiClient${upperFirst(camelCase(projectName))}`;\n const metas = documentToMeta(docs, rpcName, looseInputNumber);\n\n const classTpl =\n classMode === 'rest'\n ? generateMethodModeClass(className, metas)\n : classMode === 'rpc-group'\n ? generateRpcModelClassWithGroup(className, metas)\n : generateRpcModelClass(className, metas);\n\n let content = `\n ${generateNamespaceTpl(className, metas)}\n ${classTpl}\n ${generatePathRelationTpl(className, metas)}\n ${generateContentTypeTpl(metas)}\n`;\n\n if (content.includes('string.')) {\n content = `import { BaseOpenapiClient, type string } from 'foca-openapi';\\n${content}`;\n } else {\n content = `import { BaseOpenapiClient } from 'foca-openapi';\\n${content}`;\n }\n\n content = `/* Autogenerated file. Do not edit manually */\\n/* eslint-disable */\\n/* @ts-nocheck */\\n\\n${content}`;\n\n let configuration: prettier.Options | null;\n try {\n configuration = await prettier.resolveConfig(import.meta.filename);\n } catch {\n configuration = null;\n }\n\n return {\n [projectName]: await prettier.format(content, {\n ...configuration,\n parser: 'typescript',\n }),\n };\n};\n\nexport const generateNamespaceTpl = (className: string, metas: Metas) => {\n return `\nexport namespace ${className} {\n ${methods\n .flatMap((method) => {\n let content = metas[method].flatMap((meta) => {\n let opts: string[] = [];\n\n (<const>['query', 'params', 'body', 'response']).forEach((key) => {\n const interfaceName = upperFirst(camelCase(meta.key + '_' + key));\n if (meta[key].types.length) {\n opts.push(`export type ${interfaceName} = ${meta[key].types.join(' | ')}\\n`);\n }\n });\n\n return opts;\n });\n return content;\n })\n .join('')}\n}`;\n};\n\nexport const generateMethodModeClass = (className: string, metas: Metas) => {\n return `\nexport class ${className}<T extends object = object> extends BaseOpenapiClient<T> {\n ${methods\n .map((method) => {\n if (!metas[method].length) return '';\n\n const uris = metas[method].map((meta) => meta.uri);\n const optionalUris = metas[method]\n .filter(\n (meta) => meta.query.optional && meta.params.optional && meta.body.optional,\n )\n .map((meta) => meta.uri);\n\n let opts: string;\n const optType = `${className}_${method}_paths[K]['request'] & BaseOpenapiClient.UserInputOpts<T>`;\n if (optionalUris.length === uris.length) {\n opts = `[opts?: ${optType}]`;\n } else if (optionalUris.length === 0) {\n opts = `[opts: ${optType}]`;\n } else {\n opts = `K extends '${optionalUris.join(\"' | '\")}' ? [opts?: ${optType}] : [opts: ${optType}]`;\n }\n\n return `${method}<K extends keyof ${className}_${method}_paths>(\n uri: K, ...rest: ${opts}\n ): Promise<${className}_${method}_paths[K]['response']> {\n return this.request(uri, \"${method}\", ...rest);\n }\n `;\n })\n .join('\\n')}\n\n ${pickContentTypes}\n}`;\n};\n\nexport const generateRpcModelClass = (className: string, metas: Metas) => {\n return `\nexport class ${className}<T extends object = object> extends BaseOpenapiClient<T> {\n ${methods\n .flatMap((method) => {\n return metas[method].map((meta) => {\n const optional =\n meta.query.optional && meta.params.optional && meta.body.optional;\n\n return `\n ${generateComments(meta)}${camelCase(meta.key)}(opts${optional ? '?' : ''}: ${className}_${method}_paths['${meta.uri}']['request'] & BaseOpenapiClient.UserInputOpts<T>): Promise<${className}_${method}_paths['${meta.uri}']['response']> {\n return this.request('${meta.uri}', \"${method}\", opts);\n }\n `;\n });\n })\n .join('\\n')}\n\n ${pickContentTypes}\n}`;\n};\n\nexport const generateRpcModelClassWithGroup = (className: string, metas: Metas) => {\n const namespaces = [\n ...new Set(\n methods.flatMap((method) => metas[method].flatMap((meta) => meta.tags || [])),\n ),\n ];\n\n return `\nexport class ${className}<T extends object = object> extends BaseOpenapiClient<T> {\n ${namespaces\n .map((ns) => {\n return `readonly ${snakeCase(ns)} = {\n ${methods\n .flatMap((method) => {\n return metas[method]\n .filter((meta) => meta.tags.includes(ns))\n .map((meta) => {\n const optional =\n meta.query.optional && meta.params.optional && meta.body.optional;\n\n return `${generateComments(meta)}${camelCase(meta.key)}: (opts${optional ? '?' : ''}: ${className}_${method}_paths['${meta.uri}']['request'] & BaseOpenapiClient.UserInputOpts<T>): Promise<${className}_${method}_paths['${meta.uri}']['response']> => {\n return this.request('${meta.uri}', '${method}', opts);\n }`;\n });\n })\n .join(',\\n')}\n }`;\n })\n .join('\\n')}\n\n ${pickContentTypes}\n}`;\n};\n\nexport const generateContentTypeTpl = (metas: Metas) => {\n return `\n const contentTypes: Record<string, [BaseOpenapiClient.UserInputOpts['requestBodyType'],\n BaseOpenapiClient.UserInputOpts['responseType']]> = {\n ${methods\n .map((method) => {\n if (!metas[method].length) return '';\n\n return `\n ${metas[method]\n .map(({ uri, contentTypes, responseTypes }) => {\n const requestContentType = contentTypes[0] || 'application/json';\n const responseContentType = responseTypes.some((item) =>\n item.startsWith('text/'),\n )\n ? 'text'\n : 'json';\n const isJSONRequest = requestContentType === 'application/json';\n const isJSONResponse = responseContentType === 'json';\n\n if (isJSONRequest && isJSONResponse) return '';\n\n return `'${method} ${uri}': [${isJSONRequest ? 'void 0' : `'${requestContentType}'`}, ${isJSONResponse ? 'void 0' : `'${responseContentType}'`}],`;\n })\n .join('\\n')}\n `;\n })\n .join('')}\n};\n `;\n};\n\nexport const generatePathRelationTpl = (className: string, metas: Metas) => {\n return methods\n .map((method) => {\n if (!metas[method].length) return '';\n\n return `\ninterface ${className}_${method}_paths {\n ${metas[method]\n .map((meta) => {\n return `'${meta.uri}': BaseOpenapiClient.Prettify<{\n request: {\n ${meta.query.types.length ? `query${meta.query.optional ? '?' : ''}: ${className}.${upperFirst(camelCase(meta.key + '_query'))};` : 'query?: object;'}\n ${meta.params.types.length ? `params${meta.params.optional ? '?' : ''}: ${className}.${upperFirst(camelCase(meta.key + '_params'))};` : ''}\n ${meta.body.types.length ? `body${meta.body.optional ? '?' : ''}: ${className}.${upperFirst(camelCase(meta.key + '_body'))};` : ''}\n };\n response: ${meta.response.types.length ? `${className}.${upperFirst(camelCase(meta.key + '_response'))}` : 'unknown'}\n }>`;\n })\n .join('\\n')}\n}`;\n })\n .join('');\n};\n","import type { utils } from '../utils';\n\nexport const methods = <const>['get', 'post', 'put', 'patch', 'delete'];\n\nexport type Methods = (typeof methods)[number];\n\nexport interface OpenapiClientAdapter<T extends object = object> {\n request(\n opts: {\n /**\n * 路由\n */\n uri: string;\n /**\n * 请求方法\n */\n method: Methods;\n /**\n * 路径参数\n */\n params?: Record<string, any>;\n /**\n * 查询字符串\n */\n query?: Record<string, any>;\n /**\n * 请求实体\n */\n body?: Record<string, any>;\n /**\n * 超时时间。单位:`ms`\n */\n timeout?: number;\n /**\n * 携带cookie\n */\n credentials?: boolean | 'same-origin' | 'include' | 'omit';\n /**\n * 请求实体类型\n */\n requestBodyType: 'multipart/form-data' | 'application/json' | (string & {});\n /**\n * 响应类型\n */\n responseType: 'json' | 'text';\n /**\n * 请求报文\n */\n headers: Record<string, any>;\n /**\n * 请求之前动态修改配置\n */\n onBeforeRequest?: (options: T) => T | void;\n },\n helper: typeof utils,\n ): Promise<any>;\n}\n","import type { OpenAPIV3 } from 'openapi-types';\nimport { methods, type Methods } from './adapter';\nimport { snakeCase } from 'lodash-es';\nimport { parseParameters } from './parse-parameters';\nimport { parseRequestBody } from './parse-request-body';\nimport { parseResponse } from './parse-response';\nimport type { OpenapiClientConfig } from '../define-config';\n\nexport type Metas = Record<\n Methods,\n {\n key: string;\n uri: string;\n method: Methods;\n operationId?: string;\n contentTypes: string[];\n query: { optional: boolean; types: [string] | [] };\n params: { optional: boolean; types: [string] | [] };\n body: { optional: boolean; types: string[] };\n response: { types: string[] };\n responseTypes: string[];\n description?: string;\n deprecated?: boolean;\n tags: string[];\n }[]\n>;\n\nexport const documentToMeta = (\n docs: OpenAPIV3.Document,\n rpcName: OpenapiClientConfig['rpcName'],\n looseInputNumber?: boolean,\n) => {\n const metas: Metas = {\n get: [],\n post: [],\n put: [],\n patch: [],\n delete: [],\n };\n\n Object.entries(docs.paths).forEach(([uri, pathItem]) => {\n methods.forEach((method) => {\n if (!pathItem || !pathItem[method]) return;\n const methodItem = pathItem[method]!;\n metas[method].push({\n uri,\n method,\n key: snakeCase(\n rpcName === 'operationId' && methodItem.operationId\n ? methodItem.operationId\n : `${method}_${uri.replaceAll(/{(.+?)}/g, '_by_$1')}`,\n ),\n query: parseParameters(docs, pathItem, methodItem, 'query', looseInputNumber),\n params: parseParameters(docs, pathItem, methodItem, 'path', looseInputNumber),\n ...parseRequestBody(docs, methodItem),\n ...parseResponse(docs, methodItem),\n deprecated: methodItem.deprecated,\n description: methodItem.description,\n tags: methodItem.tags && methodItem.tags.length ? methodItem.tags : ['default'],\n });\n });\n });\n\n return metas;\n};\n","import type { OpenAPIV3 } from 'openapi-types';\n\nexport const refToObject = <T extends object>(\n docs: OpenAPIV3.Document,\n data: T | OpenAPIV3.ReferenceObject,\n): T => {\n if ('$ref' in data) {\n const target = data.$ref.split('/').reduce<any>((carry, pathName) => {\n if (pathName === '#') return carry;\n return carry[pathName] || carry[decodeURIComponent(pathName)];\n }, docs);\n return target as T;\n }\n return data;\n};\n","export const generateComments = (opts: {\n deprecated?: boolean;\n description?: string;\n uri?: string;\n method?: string;\n}) => {\n let comments: string[] = [];\n if (opts.description) comments.push(`* ${opts.description}`);\n if (opts.uri) comments.push(` * @uri ${opts.uri}`);\n if (opts.method) comments.push(` * @method ${opts.method.toUpperCase()}`);\n if (opts.deprecated) comments.push('* @deprecated');\n\n return comments.length\n ? `\\n/**\\n${comments.join('\\n').replaceAll('*/', '*\\\\/')}\\n*/\\n`\n : '';\n};\n","import type { OpenAPIV3 } from 'openapi-types';\nimport { refToObject } from './ref-to-object';\nimport { generateComments } from './generate-comments';\n\nexport const parseSchema = (\n docs: OpenAPIV3.Document,\n schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject,\n): string => {\n const parsed = refToObject(docs, schema);\n const { ofType, nullable } = parseOf(docs, parsed);\n\n if (ofType) return `(${ofType}${nullable})`;\n\n if (parsed.enum?.length) {\n return `(${parsed.enum.map((item) => (typeof item === 'number' || typeof item === 'boolean' ? item : `\"${item}\"`)).join(' | ')}${nullable})`;\n }\n\n switch (parsed.type) {\n case 'boolean':\n return `(boolean${nullable})`;\n case 'integer':\n case 'number':\n if (parsed.format === 'int64') {\n // bigint 在传输过程中会转为字符串\n return `(string.BigInt${nullable})`;\n }\n return `(number${nullable})`;\n case 'string':\n switch (parsed.format) {\n case 'binary':\n return `(Blob${nullable})`;\n case 'date':\n return `(string.Date${nullable})`;\n case 'date-time':\n return `(string.DateTime${nullable})`;\n case 'time':\n return `(string.Time${nullable})`;\n case 'email':\n return `(string.Email${nullable})`;\n case 'uri':\n return `(string.Uri${nullable})`;\n case 'ipv4':\n return `(string.IPv4${nullable})`;\n case 'ipv6':\n return `(string.IPv6${nullable})`;\n default:\n return `(string${nullable})`;\n }\n\n case 'array':\n return `((${parseSchema(docs, parsed.items)})[]${nullable})`;\n case 'object': {\n const requiredProperties = parsed.required || [];\n const properties = Object.entries(parsed.properties || {}).map(([key, schema]) => {\n const schemaObj = refToObject(docs, schema);\n return `${generateComments(schemaObj)}\"${key}\"${requiredProperties.includes(key) ? '' : '?'}: ${parseSchema(docs, schemaObj)}`;\n });\n\n let additionalType: string = '';\n if (parsed.additionalProperties === true) {\n additionalType = `{ [key: string]: unknown; }`;\n } else if (typeof parsed.additionalProperties === 'object') {\n additionalType = `{ [key: string]: ${parseSchema(docs, refToObject(docs, parsed.additionalProperties))} }`;\n }\n if (additionalType) {\n additionalType = ' & ' + additionalType;\n }\n\n return `({ ${properties.join(';')} }${additionalType}${nullable})`;\n }\n default:\n return 'unknown';\n }\n};\n\nconst parseOf = (\n docs: OpenAPIV3.Document,\n schema: OpenAPIV3.SchemaObject,\n): { nullable: string; ofType: string } => {\n if (!schema.oneOf?.length && !schema.anyOf?.length && !schema.allOf?.length) {\n return {\n nullable: schema.nullable ? ' | null' : '',\n ofType: '',\n };\n }\n\n const { oneOf = [], anyOf = [], allOf = [], nullable = false, ...rest } = schema;\n const oneTypes = new Set<string>();\n const anyTypes = new Set<string>();\n const allTypes = new Set<string>();\n\n const nullableSet = new Set<boolean>(\n oneOf\n .concat(anyOf)\n .concat(allOf)\n .map((item) => {\n const { nullable: itemNullable } = refToObject(docs, item);\n if (itemNullable !== undefined) return itemNullable;\n return nullable;\n }),\n );\n const additionalMergeOpts = nullableSet.size > 1 ? { nullable } : {};\n\n for (const one of oneOf) {\n oneTypes.add(\n parseSchema(docs, { ...rest, ...additionalMergeOpts, ...refToObject(docs, one) }),\n );\n }\n\n for (const any of anyOf) {\n anyTypes.add(\n parseSchema(docs, { ...rest, ...additionalMergeOpts, ...refToObject(docs, any) }),\n );\n }\n\n for (const all of allOf) {\n allTypes.add(\n parseSchema(docs, { ...rest, ...additionalMergeOpts, ...refToObject(docs, all) }),\n );\n }\n\n let oneType = oneTypes.size ? `(${[...oneTypes].join(' | ')})` : '';\n let anyType = anyTypes.size ? `(${[...anyTypes].join(' | ')})` : '';\n let allType = allTypes.size ? `(${[...allTypes].join(' & ')})` : '';\n\n if (oneType && oneType === anyType) anyType = '';\n if (oneType && oneType === allType) {\n allType = '';\n anyType = '';\n } else if (anyType && anyType === allType) {\n allType = '';\n oneType = '';\n }\n\n let unionType = [oneType, anyType].filter(Boolean).join(' | ');\n if (unionType) unionType = `(${unionType})`;\n\n let finalType = [unionType, allType].filter(Boolean).join(' & ');\n if (finalType) finalType = `(${finalType})`;\n\n return {\n nullable: nullableSet.size === 1 && [...nullableSet][0] === true ? ' | null' : '',\n ofType: finalType,\n };\n};\n","import type { OpenAPIV3 } from 'openapi-types';\nimport { refToObject } from './ref-to-object';\nimport { generateComments } from './generate-comments';\nimport { parseSchema } from './parse-schema';\n\nexport const parseParameters = (\n docs: OpenAPIV3.Document,\n pathItem: OpenAPIV3.PathItemObject,\n methodItem: OpenAPIV3.OperationObject,\n key: string,\n looseInputNumber?: boolean,\n): { optional: boolean; types: [string] | [] } => {\n const parameters = (methodItem.parameters || [])\n .concat(pathItem.parameters || [])\n .map((parameter) => refToObject(docs, parameter))\n .filter((parameter) => parameter.in === key);\n\n const types = parameters\n .map((parameter) => {\n if (!parameter.schema) return '';\n return `${generateComments(parameter)}${parameter.name}${parameter.required ? '' : '?'}: ${parseSchema(docs, parameter.schema)}\n `;\n })\n .filter(Boolean)\n .map((type) => {\n if (!looseInputNumber) return type;\n return type\n .replaceAll('(number)', '(number | string.Number)')\n .replaceAll('(number | null)', '(number | string.Number | null)');\n });\n\n return {\n optional: parameters.every((parameter) => !parameter.required),\n types: types.length ? [`{ ${types.join(';\\n')} }`] : [],\n };\n};\n","import type { OpenAPIV3 } from 'openapi-types';\nimport { parseSchema } from './parse-schema';\nimport { refToObject } from './ref-to-object';\n\nexport const parseRequestBody = (\n docs: OpenAPIV3.Document,\n methodItem: OpenAPIV3.OperationObject,\n) => {\n const requestBody = refToObject(\n docs,\n methodItem.requestBody || ({ content: {} } satisfies OpenAPIV3.RequestBodyObject),\n );\n const contentTypes = Object.keys(requestBody.content).filter(\n (item) => !!requestBody.content[item]!.schema,\n );\n const types = contentTypes.map((contentType) => {\n const { schema } = requestBody.content[contentType]!;\n return parseSchema(docs, schema!);\n });\n return {\n contentTypes: contentTypes.filter((item) => item !== '*/*'),\n body: {\n types,\n optional: contentTypes.length === 0,\n },\n };\n};\n","import type { OpenAPIV3 } from 'openapi-types';\nimport { parseSchema } from './parse-schema';\nimport { refToObject } from './ref-to-object';\n\nexport const parseResponse = (\n docs: OpenAPIV3.Document,\n methodItem: OpenAPIV3.OperationObject,\n) => {\n const response = refToObject(docs, methodItem.responses || {});\n const filteredResponse = Object.entries(response)\n .filter(([code]) => code.startsWith('2') || code === 'default')\n .map(([_, schema]) => refToObject(docs, schema));\n\n const contentTypes = filteredResponse\n .flatMap((item) => Object.keys(item.content || {}))\n .filter((item) => item !== '*/*');\n const types = filteredResponse\n .flatMap((item) => Object.values(item.content || {}))\n .map((item) => item.schema && refToObject(docs, item.schema))\n .filter(Boolean)\n .map((schema) => parseSchema(docs, schema || {}));\n\n return {\n responseTypes: [...new Set(contentTypes)],\n response: { types },\n };\n};\n","export const pickContentTypes = `\nprotected override pickContentTypes(uri: string, method: string) {\n return contentTypes[method + \" \" + uri] || [void 0, void 0];\n}\n`;\n","import type { OpenAPIV3 } from 'openapi-types';\nimport type { OpenapiClientConfig } from '../define-config';\nimport { methods } from './adapter';\nimport { intersection } from 'lodash-es';\n\nexport const filterTag = (docs: OpenAPIV3.Document, config: OpenapiClientConfig) => {\n if (!config.includeTag) return;\n const tags = Array.isArray(config.includeTag) ? config.includeTag : [config.includeTag];\n if (!tags.length) return;\n\n Object.keys(docs.paths).forEach((uri) => {\n const pathItem = docs.paths[uri]!;\n methods.forEach((method) => {\n const methodItem = pathItem[method];\n if (\n !methodItem ||\n !methodItem.tags ||\n !intersection(methodItem.tags, tags).length\n ) {\n Reflect.deleteProperty(pathItem, method);\n }\n });\n });\n};\n","import type { OpenAPIV3 } from 'openapi-types';\nimport type { OpenapiClientConfig } from '../define-config';\n\nexport const filterUri = (docs: OpenAPIV3.Document, config: OpenapiClientConfig) => {\n if (!config.includeUriPrefix) return;\n const patterns = Array.isArray(config.includeUriPrefix)\n ? config.includeUriPrefix\n : [config.includeUriPrefix];\n if (!patterns.length) return;\n\n Object.keys(docs.paths).forEach((uri) => {\n const keep = patterns.some((pattern) => {\n return typeof pattern === 'string' ? uri.startsWith(pattern) : pattern.test(uri);\n });\n keep || Reflect.deleteProperty(docs.paths, uri);\n });\n};\n","import path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { require } from 'tsx/cjs/api';\nimport type { DefineConfigOptions } from '../define-config';\n\nexport const readConfig = (configFile: string = 'openapi.config.ts') => {\n const { default: content } = require(pathToFileURL(\n path.resolve(configFile),\n ).toString(), import.meta.url);\n return content as DefineConfigOptions;\n};\n","export class SilentSpinner {\n constructor(protected readonly tasks: Task[]) {}\n\n add(task: Task) {\n this.tasks.push(task);\n }\n\n async run(ctx: object = {}) {\n for (const task of this.tasks) {\n if (task.skip) {\n if (task.skip === true) continue;\n if (await task.skip(ctx)) continue;\n }\n await task.task(ctx, { title: task.title });\n }\n }\n}\n\ninterface Task {\n title: string;\n skip?: boolean | ((ctx: object) => boolean | Promise<boolean>);\n task: (ctx: object, task: { title: string }) => Promise<any>;\n}\n"],"mappings":"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","names":["path","snakeCase","schema","snakeCase","path","require","configFile"]}