openapi-client-sdk-loader
Version:
An Open API loader for webpack. Compiles yaml to client sdk.
77 lines (60 loc) • 2.78 kB
JavaScript
;
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;