UNPKG

@frostup/swr-request-generator

Version:

A tool for generating TypeScript code and interface from swagger by using SWR and axios as client.

54 lines (53 loc) 3.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateResponseType = exports.generateHeader = exports.generateRequestArguments = exports.generateClientName = exports.generateFunctionName = exports.generateEnums = void 0; const lodash_1 = require("lodash"); const specifications_1 = require("./specifications"); const constants_1 = require("../constants"); const formatters_1 = require("./formatters"); const generateEnums = (definitions, key) => { if (lodash_1.isEmpty(definitions)) { return ""; } const enums = definitions[key]; const hasNumber = lodash_1.some(enums, (enumValue) => specifications_1.isNumber(enumValue)); const enumName = lodash_1.replace(key, constants_1.ENUM_SUFFIX, ""); return hasNumber ? `export type ${enumName} = ${enums.map((item) => JSON.stringify(item)).join("|")}` : `export enum ${enumName} ${JSON.stringify(formatters_1.arrayToObject(enums)).replace(/:/gi, "=")}`; }; exports.generateEnums = generateEnums; const generateFunctionName = (method, operationId) => method === "get" ? `use${formatters_1.toCapitalCase(lodash_1.camelCase(operationId))}Request` : `${lodash_1.camelCase(operationId)}Request`; exports.generateFunctionName = generateFunctionName; const generateClientName = (method, responseType) => method === "get" ? `useRequest<${responseType || undefined}, IResponseError>` : `client.request<${responseType || undefined}, AxiosResponse<${responseType || undefined}>>`; exports.generateClientName = generateClientName; // TODO: 1.refactor THeader logic to align with resolvedPath.xxxParams // TODO: 2.add response type for download file const generateRequestArguments = (resolvedPath) => { const argumentTypes = !lodash_1.isEmpty(Object.assign(Object.assign({}, resolvedPath.TReq), resolvedPath.THeader)) ? formatters_1.toTypes(Object.assign(Object.assign({}, resolvedPath.TReq), resolvedPath.THeader)) : undefined; const requestParamList = lodash_1.compact([ ...resolvedPath.pathParams, ...resolvedPath.queryParams, ...resolvedPath.bodyParams, ...resolvedPath.formDataParams, ...Object.keys(resolvedPath.THeader), resolvedPath.requestBody, ]).map((param) => lodash_1.camelCase(param)); const requestParams = requestParamList.length === 0 ? "" : `{${requestParamList.join(",")}}:${argumentTypes}`; return resolvedPath.method === "get" ? `${requestParams ? requestParams + ", " : ""}SWRConfig?: ISWRConfig<${resolvedPath.TResp || undefined}, IResponseError>, axiosConfig?: AxiosRequestConfig` : `${requestParams ? requestParams + ", " : ""}axiosConfig?: AxiosRequestConfig`; }; exports.generateRequestArguments = generateRequestArguments; const generateHeader = (hasBody, contentTypes, operationId, header) => { const result = lodash_1.reduce(header, (result, _, key) => result + `"${key}": ` + lodash_1.camelCase(key) + ", ", ""); const contentType = hasBody ? `"Content-Type": "${lodash_1.get(contentTypes, operationId !== null && operationId !== void 0 ? operationId : "", "application/json")}"` : ""; return `headers: { ${result}${contentType}},`; }; exports.generateHeader = generateHeader; const generateResponseType = (axiosHeaderConfig) => axiosHeaderConfig.includes('"Accept":') ? 'responseType: "blob",' : ""; exports.generateResponseType = generateResponseType;