@qubitcodes/qcreq
v1.0.1
Published
Unified, high-performance request parser and multi-format files extractor for Node.js and Next.js APIs.
Maintainers
Readme
@qubitcodes/qcreq
Unified, high-performance request parser and multi-format files extractor for Next.js (App Router, Edge Runtime, Serverless, Turbopack) and Node.js APIs.
Allows extracting route variables, query strings, and dynamic request bodies (supporting both strict JSON payloads and multipart files) into a clean, flat, and fully-typed QcRequest object.
Installation
npm install @qubitcodes/qcreqFeatures
- 🧬 Unified Extractor: Automatically merges
params(route parameters),searchParams(query strings), and body/files into a single unified context. - 📁 Seamless File Upload Support: Automatically extracts
multipart/form-datauploads into the.filesproperty (supporting single and multi-file arrays) as raw standardFileobjects. - ⚡ Edge & Turbopack Ready: Built with zero external dependencies to operate natively on standard Web APIs (
NextRequest,File,FormData) under Serverless and Edge compilation.
API Reference
parseRequest
import { parseRequest, type QcRequest } from '@qubitcodes/qcreq';
const parsed: QcRequest = await parseRequest(
req: NextRequest,
paramsPromise?: Promise<Record<string, string>> | Record<string, string>
);Returns QcRequest:
params: A record mapping route keys (e.g.[id]) to values.searchParams: A record containing parsed query parameters.body: A record containing the parsed JSON or form body key-value pairs.files: A record containing uploaded files mapped to their form keys, holding either a singleFileobject or an array ofFileobjects.
Example Usage
Inside a Next.js API Route Controller (route.ts / Controller.ts)
import { NextRequest } from 'next/server';
import { parseRequest } from '@qubitcodes/qcreq';
import { resp } from '@qubitcodes/qcresp';
export async function POST(
req: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
// Parse routing variables, query strings, JSON payloads, and files in one go
const parsed = await parseRequest(req, params);
// 1. Access Route Params (e.g. /api/v1/enquiries/:id)
const enquiryId = parsed.params.id;
// 2. Access JSON/Form fields
const { name, email, message } = parsed.body;
// 3. Access uploaded files (e.g. avatar file)
const avatarFile = parsed.files.avatar; // holds standard File / File[]
if (avatarFile instanceof File) {
console.log(`Processing file: ${avatarFile.name} (${avatarFile.size} bytes)`);
}
return resp.success('Request parsed successfully!', {
enquiryId,
fields: { name, email }
});
} catch (error) {
return resp.failure('Failed to parse request.', 201);
}
}License
MIT License - Copyright (c) 2026 QubitCodes
