@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
TypeScript
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;
}