import querystring from 'node:querystring'; import { type BodyParserClass } from './types'; import { type Middleware } from '@zenweb/core'; /** * 请求数据解析器基类 */ export declare abstract class BodyParser { /** * 是否为对象化的数据,可以被转换为 `ObjectBody` */ abstract objected: boolean; /** * 支持的 mimetype 类型,使用 `ctx.is` 判断 */ abstract types: string[]; /** * 解析处理方法 */ abstract parse(data: Buffer | string): unknown | Promise; /** * 处理失败调用异常 */ fail(n: number, ...args: (Error | string | Record)[]): never; } /** * 原始数据解析 */ export declare abstract class RawBodyParser extends BodyParser { /** * 解析处理方法 * @param data 原始数据 */ abstract parse(data: Buffer): unknown | Promise; } /** * 文本数据解析 - 经过编码转换后的文本数据 */ export declare abstract class TextBodyParser extends BodyParser { /** * 解析处理方法 * @param text 编码转换后的文本数据 */ abstract parse(text: string): unknown | Promise; } /** * JSON 解析处理 */ export declare class JSONParser extends TextBodyParser { objected: boolean; types: string[]; parse(text: string): any; } /** * form-urlencoded 表单解析 */ export declare class URLEncodedParser extends TextBodyParser { objected: boolean; types: string[]; parse(text: string): querystring.ParsedUrlQuery; } export declare const USE_BODY_PARSER: unique symbol; /** * 使用指定的解析器 * @param parserClass 解析器类对象 */ export declare function useBodyParser(parserClass: BodyParserClass): Middleware; declare module '@zenweb/core' { interface Context { [USE_BODY_PARSER]: BodyParserClass; } }