edge-master
Version:
A Micro Framework for Edges
116 lines (115 loc) • 2.62 kB
JavaScript
/**
* 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;
}