UNPKG

edge-master

Version:
116 lines (115 loc) 2.62 kB
/** * Request parsing utilities with error handling */ export class RequestParseError extends Error { constructor(message, cause) { super(message); this.cause = cause; this.name = 'RequestParseError'; } } /** * Parses request body as JSON */ export async function parseJSON(req) { try { const text = await req.text(); if (!text) { throw new RequestParseError('Request body is empty'); } return JSON.parse(text); } catch (error) { if (error instanceof RequestParseError) { throw error; } throw new RequestParseError('Failed to parse JSON', error); } } /** * Parses request body as FormData */ export async function parseFormData(req) { try { return await req.formData(); } catch (error) { throw new RequestParseError('Failed to parse FormData', error); } } /** * Parses request body as text */ export async function parseText(req) { try { return await req.text(); } catch (error) { throw new RequestParseError('Failed to parse text', error); } } /** * Parses request body as ArrayBuffer */ export async function parseArrayBuffer(req) { try { return await req.arrayBuffer(); } catch (error) { throw new RequestParseError('Failed to parse ArrayBuffer', error); } } /** * Parses request body as Blob */ export async function parseBlob(req) { try { return await req.blob(); } catch (error) { throw new RequestParseError('Failed to parse Blob', error); } } /** * Parses query parameters from URL */ export function parseQuery(req) { const url = new URL(req.url); return url.searchParams; } /** * Gets query parameter as string */ export function getQuery(req, key) { return parseQuery(req).get(key); } /** * Gets query parameter as string with default value */ export function getQueryOr(req, key, defaultValue) { return parseQuery(req).get(key) || defaultValue; } /** * Gets all values for a query parameter */ export function getQueryAll(req, key) { return parseQuery(req).getAll(key); } /** * Checks if a query parameter exists */ export function hasQuery(req, key) { return parseQuery(req).has(key); } /** * Parses query parameters as an object */ export function parseQueryObject(req) { const params = parseQuery(req); const result = {}; for (const [key, value] of params.entries()) { const all = params.getAll(key); result[key] = all.length > 1 ? all : value; } return result; }