@celosiajs/file-upload
Version:
CelosiaJS File Upload. A framework for REST API based on Express.js
113 lines (112 loc) • 3.74 kB
TypeScript
import busboy from 'busboy';
import { CelosiaRequest, CelosiaResponse } from '@celosiajs/core';
import QueryString from 'qs';
import z from 'zod/v4';
import { ZodActualUploadedFileType } from './ZodUploadedFileType';
export declare enum ExceededLimitKind {
FileSize = 0,
FieldNameTruncated = 1,
FieldValueTruncated = 2,
Parts = 3,
Files = 4,
Fields = 5
}
export declare enum FileUploadErrorKind {
FileStream = 0,
Busboy = 1
}
export interface FileUploadErrorInfo {
kind: FileUploadErrorKind;
error: Error;
}
export type ExceededLimitInfo = {
kind: ExceededLimitKind.FileSize;
name: string;
info: busboy.FileInfo;
} | {
kind: ExceededLimitKind.FieldNameTruncated;
name: string;
value: string;
info: busboy.FieldInfo;
} | {
kind: ExceededLimitKind.FieldValueTruncated;
name: string;
value: string;
info: busboy.FieldInfo;
} | {
kind: ExceededLimitKind.Parts;
} | {
kind: ExceededLimitKind.Files;
} | {
kind: ExceededLimitKind.Fields;
};
export interface FileUploadLimitsOptions {
/**
* Max field name size (in bytes). Default: 100.
*/
fieldNameSize: number;
/**
* Max field value size (in bytes). Default: 1048576 (1MB).
*/
fieldSize: number;
/**
* Max number of non-file fields. Default: Infinity.
*/
fields: number;
/**
* For multipart forms, the max file size (in bytes). Default: Infinity.
*/
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: Infinity.
*/
parts: number;
/**
* For multipart forms, the max number of header key-value pairs to parse. Default: 2000 (same as node's http module).
*/
headerPairs: number;
}
export interface FileUploadOptions {
/**
* highWaterMark to use for the parser stream. Default: node's stream.Writable default.
*/
highWaterMark?: number;
/**
* highWaterMark to use for individual file streams. Default: node's stream.Readable default.
*/
fileHighWaterMark?: number;
/**
* Default character set to use when one isn't defined. Default: 'utf8'.
*/
defaultCharset?: string;
/**
* For multipart forms, the default character set to use for values of part header parameters (e.g. filename) that are not extended parameters (that contain an explicit charset). Default: 'latin1'.
*/
defaultParameterCharset?: string;
/**
* If paths in filenames from file parts in a 'multipart/form-data' request shall be preserved. Default: false.
*/
preservePath?: boolean;
/**
* Various limits on incoming data.
*/
limits?: FileUploadLimitsOptions;
/**
* Ignore limits. Will truncate the data if it's over the configured limit. Default: false.
*/
ignoreLimits?: boolean;
/**
* Called when a limit is exceeded while parsing body. Can be used to send a error response. Default: Send a json error response with status 422.
*/
limitExceededHandler?: (request: CelosiaRequest, response: CelosiaResponse, info: ExceededLimitInfo, options: Required<FileUploadOptions>) => void;
/**
* Called when an error occured while parsing body. Can be used to send a error response. Default: Send a json error response with status 500.
*/
errorHandler?: (request: CelosiaRequest, response: CelosiaResponse, info: FileUploadErrorInfo, options: Required<FileUploadOptions>) => void;
parser?: QueryString.IParseOptions<QueryString.BooleanOptional>;
}
export type UploadedFile = z.infer<typeof ZodActualUploadedFileType>;