123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- // Definitions by: Jacob Baskin <https://github.com/jacobbaskin>
- // BendingBender <https://github.com/BendingBender>
- // Igor Savin <https://github.com/kibertoad>
- /// <reference types="node" />
- import * as http from 'http';
- import { Readable, Writable } from 'stream';
- export { Dicer } from "../deps/dicer/lib/dicer";
- export const Busboy: BusboyConstructor;
- export default Busboy;
- export interface BusboyConfig {
- /**
- * These are the HTTP headers of the incoming request, which are used by individual parsers.
- */
- headers: BusboyHeaders;
- /**
- * `highWaterMark` to use for this Busboy instance.
- * @default WritableStream default.
- */
- highWaterMark?: number | undefined;
- /**
- * highWaterMark to use for file streams.
- * @default ReadableStream default.
- */
- fileHwm?: number | undefined;
- /**
- * Default character set to use when one isn't defined.
- * @default 'utf8'
- */
- defCharset?: string | undefined;
- /**
- * Detect if a Part is a file.
- *
- * By default a file is detected if contentType
- * is application/octet-stream or fileName is not
- * undefined.
- *
- * Modify this to handle e.g. Blobs.
- */
- isPartAFile?: (fieldName: string | undefined, contentType: string | undefined, fileName: string | undefined) => boolean;
- /**
- * If paths in the multipart 'filename' field shall be preserved.
- * @default false
- */
- preservePath?: boolean | undefined;
- /**
- * Various limits on incoming data.
- */
- limits?:
- | {
- /**
- * Max field name size (in bytes)
- * @default 100 bytes
- */
- fieldNameSize?: number | undefined;
- /**
- * Max field value size (in bytes)
- * @default 1MB
- */
- fieldSize?: number | undefined;
- /**
- * Max number of non-file fields
- * @default Infinity
- */
- fields?: number | undefined;
- /**
- * For multipart forms, the max file size (in bytes)
- * @default Infinity
- */
- fileSize?: number | undefined;
- /**
- * For multipart forms, the max number of file fields
- * @default Infinity
- */
- files?: number | undefined;
- /**
- * For multipart forms, the max number of parts (fields + files)
- * @default Infinity
- */
- parts?: number | undefined;
- /**
- * For multipart forms, the max number of header key=>value pairs to parse
- * @default 2000
- */
- headerPairs?: number | undefined;
- /**
- * For multipart forms, the max size of a header part
- * @default 81920
- */
- headerSize?: number | undefined;
- }
- | undefined;
- }
- export type BusboyHeaders = { 'content-type': string } & http.IncomingHttpHeaders;
- export interface BusboyFileStream extends
- Readable {
- truncated: boolean;
- /**
- * The number of bytes that have been read so far.
- */
- bytesRead: number;
- }
- export interface Busboy extends Writable {
- addListener<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- addListener(event: string | symbol, listener: (...args: any[]) => void): this;
- on<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- on(event: string | symbol, listener: (...args: any[]) => void): this;
- once<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- once(event: string | symbol, listener: (...args: any[]) => void): this;
- removeListener<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
- off<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- off(event: string | symbol, listener: (...args: any[]) => void): this;
- prependListener<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
- prependOnceListener<Event extends keyof BusboyEvents>(event: Event, listener: BusboyEvents[Event]): this;
- prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
- }
- export interface BusboyEvents {
- /**
- * Emitted for each new file form field found.
- *
- * * Note: if you listen for this event, you should always handle the `stream` no matter if you care about the
- * file contents or not (e.g. you can simply just do `stream.resume();` if you want to discard the contents),
- * otherwise the 'finish' event will never fire on the Busboy instance. However, if you don't care about **any**
- * incoming files, you can simply not listen for the 'file' event at all and any/all files will be automatically
- * and safely discarded (these discarded files do still count towards `files` and `parts` limits).
- * * If a configured file size limit was reached, `stream` will both have a boolean property `truncated`
- * (best checked at the end of the stream) and emit a 'limit' event to notify you when this happens.
- *
- * @param listener.transferEncoding Contains the 'Content-Transfer-Encoding' value for the file stream.
- * @param listener.mimeType Contains the 'Content-Type' value for the file stream.
- */
- file: (
- fieldname: string,
- stream: BusboyFileStream,
- filename: string,
- transferEncoding: string,
- mimeType: string,
- ) => void;
- /**
- * Emitted for each new non-file field found.
- */
- field: (
- fieldname: string,
- value: string,
- fieldnameTruncated: boolean,
- valueTruncated: boolean,
- transferEncoding: string,
- mimeType: string,
- ) => void;
- finish: () => void;
- /**
- * Emitted when specified `parts` limit has been reached. No more 'file' or 'field' events will be emitted.
- */
- partsLimit: () => void;
- /**
- * Emitted when specified `files` limit has been reached. No more 'file' events will be emitted.
- */
- filesLimit: () => void;
- /**
- * Emitted when specified `fields` limit has been reached. No more 'field' events will be emitted.
- */
- fieldsLimit: () => void;
- error: (error: unknown) => void;
- }
- export interface BusboyConstructor {
- (options: BusboyConfig): Busboy;
- new(options: BusboyConfig): Busboy;
- }
|