You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							197 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
	
	
							197 lines
						
					
					
						
							6.5 KiB
						
					
					
				// 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;
 | 
						|
}
 | 
						|
 |