openapi-typescript
Version:
Generate TypeScript types from Swagger OpenAPI specs
78 lines • 3.2 kB
JavaScript
import { comment, tsReadonly } from "../utils";
import { transformSchemaObj } from "./schema";
export function transformParametersArray(parameters, options) {
const { globalParameters = {}, ...ctx } = options;
const readonly = tsReadonly(ctx.immutableTypes);
let output = "";
let mappedParams = {};
for (const paramObj of parameters) {
if (paramObj.$ref && globalParameters) {
const paramName = paramObj.$ref.split('["').pop().replace(/"\]$/, "");
if (globalParameters[paramName]) {
const reference = globalParameters[paramName];
if (!mappedParams[reference.in])
mappedParams[reference.in] = {};
switch (ctx.version) {
case 3: {
mappedParams[reference.in][reference.name || paramName] = {
...reference,
schema: { $ref: paramObj.$ref },
};
break;
}
case 2: {
mappedParams[reference.in][reference.name || paramName] = {
...reference,
$ref: paramObj.$ref,
};
break;
}
}
}
continue;
}
if (!paramObj.in || !paramObj.name)
continue;
if (!mappedParams[paramObj.in])
mappedParams[paramObj.in] = {};
mappedParams[paramObj.in][paramObj.name] = paramObj;
}
for (const [paramIn, paramGroup] of Object.entries(mappedParams)) {
output += ` ${readonly}${paramIn}: {\n`;
for (const [paramName, paramObj] of Object.entries(paramGroup)) {
let paramComment = "";
if (paramObj.deprecated)
paramComment += `@deprecated `;
if (paramObj.description)
paramComment += paramObj.description;
if (paramComment)
output += comment(paramComment);
const required = paramObj.required ? `` : `?`;
let paramType = ``;
switch (ctx.version) {
case 3: {
paramType = paramObj.schema
? transformSchemaObj(paramObj.schema, { ...ctx, required: new Set() })
: "unknown";
break;
}
case 2: {
if (paramObj.in === "body" && paramObj.schema) {
paramType = transformSchemaObj(paramObj.schema, { ...ctx, required: new Set() });
}
else if (paramObj.type) {
paramType = transformSchemaObj(paramObj, { ...ctx, required: new Set() });
}
else {
paramType = "unknown";
}
break;
}
}
output += ` ${readonly}"${paramName}"${required}: ${paramType};\n`;
}
output += ` }\n`;
}
return output;
}
//# sourceMappingURL=parameters.js.map