UNPKG

openapi-client-sdk-loader

Version:
77 lines (60 loc) 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _lodash = require("lodash"); var _utils = require("../../utils"); var _utils2 = require("../utils"); var _compileModels = require("./compileModels"); const createOperations = (api, deref) => Promise.all(Object.keys(deref.paths).reduce((result, path) => { return [...result, ...Object.keys(deref.paths[path]).map(async method => { const operation = deref.paths[path][method]; // const unrefedOperation = api.paths[path][method]; let schema = { method: method.toUpperCase(), path, mimeType: 'application/json', name: operation.operationId }; if (operation.parameters) { const params = (0, _utils2.parseParams)(operation.parameters); const models = await (0, _compileModels.compile)(params, (schemas, name) => [schemas[name], `${schema.name}${(0, _utils.capitalize)(name)}${name === 'header' ? 's' : ''}`]); schema = { ...schema, ...params, models }; } if (operation.requestBody) { const models = await (0, _compileModels.compile)(operation.requestBody.content, (schemas, name) => [schemas[name].schema, `${schema.name}RequestBody${(0, _utils2.prepareMimeType)(name)}`]); schema = { ...schema, ...(0, _utils2.parseBody)(operation.requestBody.content), models: schema.models ? `${schema.models}\n${models}` : models }; } let responseModel = `export type ${(0, _utils.capitalize)(schema.name)}Response = unknown;`; if (operation.responses) { const resultResponses = (0, _utils2.parseResponses)(operation.responses); let nextResponseModel = ''; const models = await Promise.all((0, _lodash.toPairs)(resultResponses.responses).map(async ([statusCode, { response }]) => { if (response) { const modelWithStatusCode = await (0, _utils.schema2typescript)(response, `${schema.name}Response${statusCode}`); nextResponseModel = `${nextResponseModel}${nextResponseModel ? ' | ' : ''}${(0, _utils.capitalize)(schema.name)}Response${statusCode}`; return modelWithStatusCode; } return ''; })); if (nextResponseModel) { responseModel = `export type ${(0, _utils.capitalize)(schema.name)}Response = ${nextResponseModel};`; } schema = { ...schema, ...resultResponses, models: schema.models ? `${schema.models}\n${models.join('\n')}\n${responseModel}` : `${models.join('\n')}\n${responseModel}` }; } return schema; })]; }, [])); var _default = (api, options) => options.parser.dereference((0, _lodash.cloneDeep)(api)).then(deref => createOperations(api, deref)); exports.default = _default;