UNPKG

hono

Version:

Web framework built on Web Standards

82 lines (81 loc) 2.65 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 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"; class BodyLimitError extends Error { constructor(message) { super(message); this.name = "BodyLimitError"; } } 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(); } if (c.req.raw.headers.has("content-length")) { const contentLength = parseInt(c.req.raw.headers.get("content-length") || "0", 10); return contentLength > maxSize ? onError(c) : next(); } let size = 0; const rawReader = c.req.raw.body.getReader(); const reader = new ReadableStream({ async start(controller) { try { for (; ; ) { const { done, value } = await rawReader.read(); if (done) { break; } size += value.length; if (size > maxSize) { controller.error(new BodyLimitError(ERROR_MESSAGE)); break; } controller.enqueue(value); } } finally { controller.close(); } } }); const requestInit = { body: reader, duplex: "half" }; c.req.raw = new Request(c.req.raw, requestInit); await next(); if (c.error instanceof BodyLimitError) { c.res = await onError(c); } }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { bodyLimit });