UNPKG

3.01 kBTypeScriptView Raw
1/* eslint-disable @typescript-eslint/no-explicit-any */
2
3import { Buffer } from 'buffer'
4import { RawServerBase, RawServerDefault, RawRequestDefaultExpression } from './utils'
5import { FastifyRequest } from './request'
6import { RouteGenericInterface } from './route'
7
8type ContentTypeParserDoneFunction = (err: Error | null, body?: any) => void
9
10/**
11 * Body parser method that operatoes on request body
12 */
13export type FastifyBodyParser<
14 RawBody extends string | Buffer,
15 RawServer extends RawServerBase = RawServerDefault,
16 RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
17 RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
18> = ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest>, rawBody: RawBody, done: ContentTypeParserDoneFunction) => void)
19| ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest>, rawBody: RawBody) => Promise<any>)
20
21/**
22 * Content Type Parser method that operates on request content
23 */
24export type FastifyContentTypeParser<
25 RawServer extends RawServerBase = RawServerDefault,
26 RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
27 RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
28> = ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest>, payload: RawRequest) => Promise<any>)
29| ((request: FastifyRequest<RouteGeneric, RawServer, RawRequest>, payload: RawRequest, done: ContentTypeParserDoneFunction) => void)
30
31/**
32 * Natively, Fastify only supports 'application/json' and 'text/plain' content types. The default charset is utf-8. If you need to support different content types, you can use the addContentTypeParser API. The default JSON and/or plain text parser can be changed.
33 */
34export interface AddContentTypeParser<
35 RawServer extends RawServerBase = RawServerDefault,
36 RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>
37> {
38 (
39 contentType: string | string[],
40 opts: {
41 bodyLimit?: number;
42 },
43 parser: FastifyContentTypeParser<RawServer, RawRequest>
44 ): void;
45}
46
47export interface AddContentTypeParser<
48 RawServer extends RawServerBase = RawServerDefault,
49 RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>
50> {
51 (contentType: string | string[], parser: FastifyContentTypeParser<RawServer, RawRequest>): void;
52}
53
54export interface AddContentTypeParser<
55 RawServer extends RawServerBase = RawServerDefault,
56 RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>
57>{
58 <parseAs extends string | Buffer>(
59 contentType: string | string[],
60 opts: {
61 parseAs: parseAs extends Buffer ? 'buffer' : 'string';
62 bodyLimit?: number;
63 },
64 parser: FastifyBodyParser<parseAs, RawServer, RawRequest>
65 ): void;
66}
67
68/**
69 * Checks for a type parser of a content type
70 */
71export type hasContentTypeParser = (contentType: string) => boolean