koas-parameters
Version:
Koas parameters attempts to coerce path and query parameters to the type specified in their respective JSON schema.
63 lines (62 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parameters = void 0;
const utils_1 = require("./utils");
const defaultParsers = {
boolean(value) {
switch (value) {
case 'false':
return false;
case 'true':
return true;
default:
return value;
}
},
integer(value) {
const integer = Number(value);
if (Number.isInteger(integer)) {
return integer;
}
return value;
},
number(value) {
const number = Number(value);
if (Number.isFinite(number)) {
return number;
}
return value;
},
string: String,
};
/**
* Create a Koas plugin for parsing path and query parameters.
*
* @param options - The options for parsing the parameters.
* @returns A Koas plugin for parsing path and query parameters.
*/
function parameters({ parsers = {} } = {}) {
const combinedParsers = {
...defaultParsers,
...parsers,
};
return ({ document, resolveRef, validate }) => {
const handlers = new Map();
for (const { delete: del, get, head, options, parameters: parametersObjects, patch, post, put, trace, } of Object.values(document.paths)) {
for (const operationObject of [del, get, head, options, patch, post, put, trace]) {
if (operationObject) {
handlers.set(operationObject, (0, utils_1.createParameterHandler)(operationObject, parametersObjects, combinedParsers, validate, resolveRef));
}
}
}
return (ctx, next) => {
const { operationObject } = ctx.openApi;
if (handlers.has(operationObject)) {
const handler = handlers.get(operationObject);
handler(ctx);
}
return next();
};
};
}
exports.parameters = parameters;