UNPKG

hono

Version:

Web framework built on Web Standards

109 lines (108 loc) 3.73 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var validator_exports = {}; __export(validator_exports, { validator: () => validator }); module.exports = __toCommonJS(validator_exports); var import_cookie = require("../helper/cookie"); var import_http_exception = require("../http-exception"); var import_buffer = require("../utils/buffer"); const jsonRegex = /^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/; const multipartRegex = /^multipart\/form-data(; boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/; const urlencodedRegex = /^application\/x-www-form-urlencoded$/; const validator = (target, validationFunc) => { return async (c, next) => { let value = {}; const contentType = c.req.header("Content-Type"); switch (target) { case "json": if (!contentType || !jsonRegex.test(contentType)) { break; } try { value = await c.req.json(); } catch { const message = "Malformed JSON in request body"; throw new import_http_exception.HTTPException(400, { message }); } break; case "form": { if (!contentType || !(multipartRegex.test(contentType) || urlencodedRegex.test(contentType))) { break; } let formData; if (c.req.bodyCache.formData) { formData = await c.req.bodyCache.formData; } else { try { const arrayBuffer = await c.req.arrayBuffer(); formData = await (0, import_buffer.bufferToFormData)(arrayBuffer, contentType); c.req.bodyCache.formData = formData; } catch (e) { let message = "Malformed FormData request."; message += e instanceof Error ? ` ${e.message}` : ` ${String(e)}`; throw new import_http_exception.HTTPException(400, { message }); } } const form = {}; formData.forEach((value2, key) => { if (key.endsWith("[]")) { if (form[key] === void 0) { form[key] = [value2]; } else if (Array.isArray(form[key])) { ; form[key].push(value2); } } else { form[key] = value2; } }); value = form; break; } case "query": value = Object.fromEntries( Object.entries(c.req.queries()).map(([k, v]) => { return v.length === 1 ? [k, v[0]] : [k, v]; }) ); break; case "param": value = c.req.param(); break; case "header": value = c.req.header(); break; case "cookie": value = (0, import_cookie.getCookie)(c); break; } const res = await validationFunc(value, c); if (res instanceof Response) { return res; } c.req.addValidatedData(target, res); await next(); }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { validator });