/* @flow */ type CredentialsType = "omit" | "same-origin" | "include"; type ResponseType = "basic" | "error"; type CacheType = "no-store" | "no-cache"; type BodyInit = | string | URLSearchParams | FormData | Blob | ArrayBuffer | ReadableStream | $ArrayBufferView; type RequestInfo = Request | URL | string; type RequestOptions = {| body?: ?BodyInit, credentials?: CredentialsType, headers?: HeadersInit, method?: string, mode?: string, referrer?: string, signal?: ?AbortSignal, cache?: ?CacheType, |}; type ResponseOptions = {| status?: number, statusText?: string, headers?: HeadersInit, url?: string, |}; type HeadersInit = Headers | { [string]: string }; // https://github.com/facebook/flow/blob/f68b89a5012bd995ab3509e7a41b7325045c4045/lib/bom.js#L902-L914 declare class Headers { @@iterator(): Iterator<[string, string]>; constructor(init?: HeadersInit): void; append(name: string, value: string): void; delete(name: string): void; entries(): Iterator<[string, string]>; forEach( (value: string, name: string, headers: Headers) => any, thisArg?: any ): void; get(name: string): null | string; has(name: string): boolean; keys(): Iterator; set(name: string, value: string): void; values(): Iterator; } // https://github.com/facebook/flow/pull/6548 interface AbortSignal { aborted: boolean; addEventListener( type: string, listener: (Event) => void, options?: EventListenerOptionsOrUseCapture ): void; removeEventListener( type: string, listener: (Event) => void, options?: EventListenerOptionsOrUseCapture ): void; } // https://github.com/facebook/flow/blob/f68b89a5012bd995ab3509e7a41b7325045c4045/lib/bom.js#L994-L1018 // unsupported in polyfill: // - cache // - integrity // - redirect // - referrerPolicy declare class Request { constructor(input: RequestInfo, init?: RequestOptions): void; clone(): Request; url: string; credentials: CredentialsType; headers: Headers; method: string; mode: ModeType; referrer: string; signal: ?AbortSignal; // Body methods and attributes bodyUsed: boolean; arrayBuffer(): Promise; blob(): Promise; formData(): Promise; json(): Promise; text(): Promise; } // https://github.com/facebook/flow/blob/f68b89a5012bd995ab3509e7a41b7325045c4045/lib/bom.js#L968-L992 // unsupported in polyfill: // - redirected // - trailer declare class Response { constructor(input?: ?BodyInit, init?: ResponseOptions): void; clone(): Response; static error(): Response; static redirect(url: string, status?: number): Response; type: ResponseType; url: string; ok: boolean; status: number; statusText: string; headers: Headers; // Body methods and attributes bodyUsed: boolean; body: ReadableStream; arrayBuffer(): Promise; blob(): Promise; formData(): Promise; json(): Promise; text(): Promise; } declare class AbortError extends Error { constructor(message?: string, name?: string): void; } declare module.exports: { fetch(input: RequestInfo, init?: RequestOptions): Promise, Headers: typeof Headers, Request: typeof Request, Response: typeof Response, AbortError: typeof AbortError, };