import { StorecraftError } from '../../api/utils.func.js'; import type { Trouter } from './trouter/index.js'; export type PartialURL = Partial; export type VPolkaRequest = Partial & { // path params params?: Record // query search params query?: URLSearchParams, //current processed path path?: string, // a parsed url parsedUrl?: PartialURL, // Parsed body parsedBody?: string | Blob | FormData | any; // Optional raw body rawBody?: string; [k: string]: any } type ResponseBody = ReadableStream | Blob | ArrayBufferView | ArrayBuffer | FormData | URLSearchParams | string | undefined; export interface VPolkaResponseCreator { headers?: Headers; status?: number; statusText?: string; body?: ResponseBody; finished?: boolean; /** * finish and create a Response out of it * @param body * @returns {Response} */ send?: (body?: ResponseBody) => VPolkaResponseCreator end?: () => VPolkaResponseCreator sendJson?: (o: Object) => VPolkaResponseCreator sendHtml?: (o: string) => VPolkaResponseCreator sendText?: (o: string) => VPolkaResponseCreator sendBlob?: (o: Blob) => VPolkaResponseCreator sendReadableStream?: (o: ReadableStream) => VPolkaResponseCreator sendArrayBuffer?: (o: ArrayBuffer) => VPolkaResponseCreator sendSearchParams?: (o: URLSearchParams) => VPolkaResponseCreator sendFormData?: (o: FormData) => VPolkaResponseCreator sendServerSentEvents?: (o: ReadableStream) => VPolkaResponseCreator setStatus?: (code: number, text?: string) => VPolkaResponseCreator } export interface IError extends Error { code?: number; status?: number; details?: any; } export type ErrorHandler = (err: string | IError, req: VPolkaRequest, res: VPolkaResponseCreator) => Promise; export type Middleware = (req: Req, res: Res) => Promise; export interface IPolka extends Trouter> { readonly onError: ErrorHandler; readonly onNoMatch: Middleware; readonly handler: Middleware; use(pattern: RegExp | string, ...handlers: (IPolka | Middleware)[]): this; use(...handlers: (IPolka | Middleware)[]): this; } export type PolkaOptions = { onNoMatch?: Middleware; onError?: ErrorHandler; prefix?: string; } export type ErrorLike = StorecraftError | Error | string | { message: any, code: number }; export type Logger = { active: boolean error: ( e: ErrorLike, req: VPolkaRequest, res: VPolkaResponseCreator, code: number, messages: any[] ) => void; } export * from './index.js';