UNPKG

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
"use strict"; 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;