UNPKG

@d3vtool/kazejs

Version:

A flexible Node.js web framework built with TypeScript, focusing on dependency injection, routing, middleware, and schema validation. Supports dynamic routes, global middleware, static files, and customizable error handling for scalable apps.

66 lines (65 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseBody = parseBody; exports.jsonValidate = jsonValidate; const kaze_errors_1 = require("./kaze-errors"); function parseUrlEncoded(body) { const bodyData = body.split("&"); const parsedData = bodyData.reduce((acc, data) => { const [key, value] = data.split("="); acc[decodeURIComponent(key)] = decodeURIComponent(value); return acc; }, {}); return parsedData; } function parseBody() { return function (ctx, next) { const contentType = ctx.req.headers["content-type"]?.toLowerCase(); if (!contentType || !['POST', 'PUT', 'PATCH'].includes(ctx.req.method ?? "")) { return next(); } const chunks = []; ctx.req.on("data", (chunk) => { chunks.push(chunk); }); ctx.req.on("end", () => { try { const data = Buffer.concat(chunks).toString(); if (contentType.includes("application/x-www-form-urlencoded")) { ctx.req.body = parseUrlEncoded(data); } else if (contentType.includes("application/json")) { ctx.req.body = JSON.parse(data); } else { ctx.req.body = null; } } catch (err) { ctx.req.body = null; } finally { next(); } }); }; } function jsonValidate(schema, noJsonErrorMsg = "No json found to validate") { return function (ctx, next) { if (!(schema instanceof Object)) { throw new kaze_errors_1.KazeValidationError({ error: ["Invalid schema"] }); } if (!ctx.req.body) { throw new Error(noJsonErrorMsg); } const errors = schema.validateSafely(ctx.req.body); if (Object.keys(errors).length > 0) { // send all errors to global error handler // let user decide what to do with them. throw new kaze_errors_1.KazeValidationError(errors); } next(); }; }