index.d.ts
 1  // Definitions by: Carlos Ballesteros Velasco <https://github.com/soywiz>
 2  //                 Leon Yu <https://github.com/leonyu>
 3  //                 BendingBender <https://github.com/BendingBender>
 4  //                 Maple Miao <https://github.com/mapleeit>
 5  
 6  /// <reference types="node" />
 7  import * as stream from 'stream';
 8  import * as http from 'http';
 9  
10  export = FormData;
11  
12  // Extracted because @types/node doesn't export interfaces.
13  interface ReadableOptions {
14    highWaterMark?: number;
15    encoding?: string;
16    objectMode?: boolean;
17    read?(this: stream.Readable, size: number): void;
18    destroy?(this: stream.Readable, error: Error | null, callback: (error: Error | null) => void): void;
19    autoDestroy?: boolean;
20  }
21  
22  interface Options extends ReadableOptions {
23    writable?: boolean;
24    readable?: boolean;
25    dataSize?: number;
26    maxDataSize?: number;
27    pauseStreams?: boolean;
28  }
29  
30  declare class FormData extends stream.Readable {
31    constructor(options?: Options);
32    append(key: string, value: any, options?: FormData.AppendOptions | string): void;
33    getHeaders(userHeaders?: FormData.Headers): FormData.Headers;
34    submit(
35      params: string | FormData.SubmitOptions,
36      callback?: (error: Error | null, response: http.IncomingMessage) => void
37    ): http.ClientRequest;
38    getBuffer(): Buffer;
39    setBoundary(boundary: string): void;
40    getBoundary(): string;
41    getLength(callback: (err: Error | null, length: number) => void): void;
42    getLengthSync(): number;
43    hasKnownLength(): boolean;
44  }
45  
46  declare namespace FormData {
47    interface Headers {
48      [key: string]: any;
49    }
50  
51    interface AppendOptions {
52      header?: string | Headers;
53      knownLength?: number;
54      filename?: string;
55      filepath?: string;
56      contentType?: string;
57    }
58  
59    interface SubmitOptions extends http.RequestOptions {
60      protocol?: 'https:' | 'http:';
61    }
62  }