Files
SnowLuma/.pnpm-store/v11/files/04/b0d3b9e803e256741b77bae32447f11cbb989cdfe616cb80292d40c4b9c97d07d61cbc808c3fee06b56fcc9608297645cdf7870476ef401a824d24936ce4a9
TanTan 2a69b23b47
Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

66 lines
2.5 KiB
Plaintext

Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_http_exception = require("../http-exception.js");
const require_utils_buffer = require("../utils/buffer.js");
const require_helper_cookie_index = require("../helper/cookie/index.js");
//#region src/validator/validator.ts
const jsonRegex = /^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/i;
const multipartRegex = /^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/i;
const urlencodedRegex = /^application\/x-www-form-urlencoded(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/i;
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 {
throw new require_http_exception.HTTPException(400, { message: "Malformed JSON in request body" });
}
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 require_utils_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 require_http_exception.HTTPException(400, { message });
}
const form = Object.create(null);
formData.forEach((value, key) => {
if (key.endsWith("[]")) (form[key] ??= []).push(value);
else if (Array.isArray(form[key])) form[key].push(value);
else if (Object.hasOwn(form, key)) form[key] = [form[key], value];
else form[key] = value;
});
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 = require_helper_cookie_index.getCookie(c);
}
const res = await validationFunc(value, c);
if (res instanceof Response) return res;
c.req.addValidatedData(target, res);
return await next();
};
};
//#endregion
exports.validator = validator;