diff --git a/types/node-fetch/index.d.ts b/types/node-fetch/index.d.ts index a480fb00e4..78363bfb7d 100644 --- a/types/node-fetch/index.d.ts +++ b/types/node-fetch/index.d.ts @@ -116,9 +116,17 @@ export class Headers implements Iterable<[string, string]> { [Symbol.iterator](): Iterator<[string, string]>; } +type BlobPart = ArrayBuffer | ArrayBufferView | Blob | string; + +interface BlobOptions { + type?: string; + endings?: "transparent" | "native"; +} + export class Blob { - type: string; - size: number; + constructor(blobParts?: BlobPart[], options?: BlobOptions); + readonly type: string; + readonly size: number; slice(start?: number, end?: number): Blob; } @@ -174,7 +182,12 @@ export interface ResponseInit { export type HeadersInit = Headers | string[][] | { [key: string]: string }; // HeaderInit is exported to support backwards compatibility. See PR #34382 export type HeaderInit = HeadersInit; -export type BodyInit = ArrayBuffer | ArrayBufferView | NodeJS.ReadableStream | string | URLSearchParams; +export type BodyInit = + ArrayBuffer + | ArrayBufferView + | NodeJS.ReadableStream + | string + | URLSearchParams; export type RequestInfo = string | Request; declare function fetch( diff --git a/types/node-fetch/node-fetch-tests.ts b/types/node-fetch/node-fetch-tests.ts index 165ac24800..92c5354c1e 100644 --- a/types/node-fetch/node-fetch-tests.ts +++ b/types/node-fetch/node-fetch-tests.ts @@ -1,81 +1,101 @@ -import fetch, { Headers, Request, RequestInit, Response, FetchError } from 'node-fetch'; +import fetch, { + Blob, + Headers, + Request, + RequestInit, + Response, + FetchError +} from "node-fetch"; import { Agent } from "http"; function test_fetchUrlWithOptions() { - const headers = new Headers(); - headers.append("Content-Type", "application/json"); - const requestOptions: RequestInit = { - compress: true, - follow: 10, - headers, - method: "POST", - redirect: 'manual', - size: 100, - timeout: 5000, - }; - handlePromise(fetch("http://www.andlabs.net/html5/uCOR.php", requestOptions)); + const headers = new Headers(); + headers.append("Content-Type", "application/json"); + const requestOptions: RequestInit = { + compress: true, + follow: 10, + headers, + method: "POST", + redirect: "manual", + size: 100, + timeout: 5000 + }; + handlePromise( + fetch("http://www.andlabs.net/html5/uCOR.php", requestOptions) + ); } function test_fetchUrlWithHeadersObject() { - const requestOptions: RequestInit = { - headers: { - 'Content-Type': 'application/json' - }, - method: "POST", - }; - handlePromise(fetch("http://www.andlabs.net/html5/uCOR.php", requestOptions)); + const requestOptions: RequestInit = { + headers: { + "Content-Type": "application/json" + }, + method: "POST" + }; + handlePromise( + fetch("http://www.andlabs.net/html5/uCOR.php", requestOptions) + ); } function test_fetchUrl() { - handlePromise(fetch("http://www.andlabs.net/html5/uCOR.php")); + handlePromise(fetch("http://www.andlabs.net/html5/uCOR.php")); } function test_fetchUrlArrayBuffer() { - handlePromise(fetch("http://www.andlabs.net/html5/uCOR.php"), true); + handlePromise(fetch("http://www.andlabs.net/html5/uCOR.php"), true); } function test_fetchUrlWithRequestObject() { - const requestOptions: RequestInit = { - method: "POST", - headers: { - 'Content-Type': 'application/json' - } - }; - const request: Request = new Request("http://www.andlabs.net/html5/uCOR.php", requestOptions); - const timeout: number = request.timeout; - const size: number = request.size; - const agent: Agent | undefined = request.agent; - const protocol: string = request.protocol; + const requestOptions: RequestInit = { + method: "POST", + headers: { + "Content-Type": "application/json" + } + }; + const request: Request = new Request( + "http://www.andlabs.net/html5/uCOR.php", + requestOptions + ); + const timeout: number = request.timeout; + const size: number = request.size; + const agent: Agent | undefined = request.agent; + const protocol: string = request.protocol; - handlePromise(fetch(request)); + handlePromise(fetch(request)); } function test_globalFetchVar() { - fetch('http://test.com', {}) - .then(response => { - // for test only - }); + fetch("http://test.com", {}).then(response => { + // for test only + }); } -function handlePromise(promise: Promise, isArrayBuffer: boolean = false) { - promise.then((response): Promise => { - if (response.type === 'basic') { - // for test only - } - if (isArrayBuffer) { - return response.arrayBuffer(); - } else { - return response.text(); - } - }).then((text: string | ArrayBuffer) => { - console.log(text); - }); +function handlePromise( + promise: Promise, + isArrayBuffer: boolean = false +) { + promise + .then( + (response): Promise => { + if (response.type === "basic") { + // for test only + } + if (isArrayBuffer) { + return response.arrayBuffer(); + } else { + return response.text(); + } + } + ) + .then((text: string | ArrayBuffer) => { + console.log(text); + }); } function test_headersRaw() { - const headers = new Headers(); - const myHeader = 'foo'; - headers.raw()[myHeader]; // $ExpectType string[] + const headers = new Headers(); + const myHeader = "foo"; + headers.raw()[myHeader]; // $ExpectType string[] } function test_isRedirect() { @@ -84,6 +104,13 @@ function test_isRedirect() { } function test_FetchError() { - new FetchError('message', 'type', 'systemError'); - new FetchError('message', 'type'); + new FetchError("message", "type", "systemError"); + new FetchError("message", "type"); +} + +function test_Blob() { + new Blob(); + new Blob(["beep", "boop"]); + new Blob(["beep", "boop"], { endings: "native" }); + new Blob(["beep", "boop"], { type: "text/plain" }); }