UNPKG

hono

Version:

Web framework built on Web Standards

76 lines (75 loc) 2.51 kB
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 body_limit_exports = {}; __export(body_limit_exports, { bodyLimit: () => bodyLimit }); module.exports = __toCommonJS(body_limit_exports); var import_http_exception = require("../../http-exception"); const ERROR_MESSAGE = "Payload Too Large"; const bodyLimit = (options) => { const onError = options.onError || (() => { const res = new Response(ERROR_MESSAGE, { status: 413 }); throw new import_http_exception.HTTPException(413, { res }); }); const maxSize = options.maxSize; return async function bodyLimit2(c, next) { if (!c.req.raw.body) { return next(); } const hasTransferEncoding = c.req.raw.headers.has("transfer-encoding"); const hasContentLength = c.req.raw.headers.has("content-length"); if (hasContentLength && !hasTransferEncoding) { const contentLength = parseInt(c.req.raw.headers.get("content-length") || "0", 10); return contentLength > maxSize ? onError(c) : next(); } let size = 0; const chunks = []; const rawReader = c.req.raw.body.getReader(); for (; ; ) { const { done, value } = await rawReader.read(); if (done) { break; } size += value.length; if (size > maxSize) { return onError(c); } chunks.push(value); } const requestInit = { body: new ReadableStream({ start(controller) { for (const chunk of chunks) { controller.enqueue(chunk); } controller.close(); } }), duplex: "half" }; c.req.raw = new Request(c.req.raw, requestInit); return next(); }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { bodyLimit });