UNPKG

@nestjs/platform-fastify

Version:

Run NestJS on Fastify: the HTTP adapter with Fastify's plugins, JSON schemas and serialization.

92 lines (91 loc) • 3.91 kB
import type { IncomingMultipartFile, UploadedMultipartFile } from './multipart-file.interface.js'; /** * multer's storage engine contract (`_handleFile` / `_removeFile`), kept * as-is so existing multer storage engines can be passed as `storage`. * * @publicApi */ export interface MultipartStorageEngine { _handleFile(req: any, file: IncomingMultipartFile, callback: (error?: any, info?: Partial<UploadedMultipartFile>) => void): void; _removeFile(req: any, file: UploadedMultipartFile, callback: (error: Error | null) => void): void; } /** * Same keys as platform-express's `MulterLimits`. * * Limits that are not set, or set to `null` or `undefined`, fall back to the * options `@fastify/multipart` was registered with, and then to its own * defaults. Unlike multer (which defaults `fileSize` and `parts` to * `Infinity`), `@fastify/multipart` caps `fileSize` at the Fastify * instance's `bodyLimit` (1 MiB unless configured) and `parts` at 1000. * * @publicApi */ export interface MultipartLimits { /** * Max field name size in bytes (Default: unlimited). Unlike the other * limits, it does not fall back to the options `@fastify/multipart` was * registered with. */ fieldNameSize?: number; /** Max field value size (Default: 1MB) */ fieldSize?: number; /** Max number of non-file fields (Default: Infinity) */ fields?: number; /** For multipart forms, the max file size in bytes (Default: the Fastify `bodyLimit`, 1 MiB) */ fileSize?: number; /** For multipart forms, the max number of file fields (Default: Infinity) */ files?: number; /** For multipart forms, the max number of parts (fields + files) (Default: 1000) */ parts?: number; /** For multipart forms, the max number of header key => value pairs to parse (Default: 2000) */ headerPairs?: number; /** * Max nesting depth of field names; `a[b][c]` has 2 levels (Default: 32, * where multer's own default is Infinity). Set it to `Infinity` to lift * the limit. Like `fieldNameSize`, it does not fall back to the options * `@fastify/multipart` was registered with. */ fieldNestingDepth?: number; /** * Max numeric array index accepted in field names; `a[3]` uses index 3 * (Default: 1000, where multer's own default is Infinity). Set it to * `Infinity` to lift the limit. Like `fieldNameSize`, it does not fall back * to the options `@fastify/multipart` was registered with. */ fieldArrayIndexLimit?: number; } /** * Same keys and semantics as platform-express's `MulterOptions`, so option * objects can be moved between adapters as-is. * * @publicApi */ export interface MultipartOptions { /** Where to store the files (disk storage). Ignored when `storage` is set. */ dest?: string; /** The storage engine to use for uploaded files (Default: memory storage). */ storage?: MultipartStorageEngine; /** * An object specifying the size limits, or a function of the request that * returns one. Merged over the limits `@fastify/multipart` was registered with. */ limits?: MultipartLimits | ((req: any) => MultipartLimits); /** Keep the full path of files instead of just the base name (Default: false) */ preservePath?: boolean; /** Default character set for part header values (e.g. filename) (Default: 'latin1') */ defParamCharset?: string; /** * Decides which files are stored. Call `callback(null, false)` to skip a * file, or `callback(error, false)` to fail the request with `error`. */ fileFilter?(req: any, file: IncomingMultipartFile, callback: (error: Error | null, acceptFile: boolean) => void): void; } /** * @publicApi */ export interface MultipartField { /** The field name. */ name: string; /** Optional maximum number of files per field to accept. */ maxCount?: number; }