react-native
Version:
A framework for building native apps using React
500 lines (438 loc) • 12.4 kB
Flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall flow
*/
/* BOM */
declare var window: typeof globalThis;
declare class Navigator {
product: 'ReactNative';
appName?: ?string;
}
declare var navigator: Navigator;
// https://www.w3.org/TR/hr-time-2/#dom-domhighrestimestamp
// https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
declare type DOMHighResTimeStamp = number;
declare class Performance {
now: () => DOMHighResTimeStamp;
}
declare var performance: Performance;
type FormDataEntryValue = string | File;
declare class FormData {
append(name: string, value: string): void;
append(name: string, value: Blob, filename?: string): void;
append(name: string, value: File, filename?: string): void;
constructor(form?: HTMLFormElement, submitter?: HTMLElement | null): void;
delete(name: string): void;
entries(): Iterator<[string, FormDataEntryValue]>;
get(name: string): ?FormDataEntryValue;
getAll(name: string): Array<FormDataEntryValue>;
has(name: string): boolean;
keys(): Iterator<string>;
set(name: string, value: string): void;
set(name: string, value: Blob, filename?: string): void;
set(name: string, value: File, filename?: string): void;
values(): Iterator<FormDataEntryValue>;
}
declare class DOMRectReadOnly {
+bottom: number;
constructor(x: number, y: number, width: number, height: number): void;
static fromRect(rectangle?: {
height: number,
width: number,
x: number,
y: number,
...
}): DOMRectReadOnly;
+height: number;
+left: number;
+right: number;
+top: number;
+width: number;
+x: number;
+y: number;
}
declare class DOMRect extends DOMRectReadOnly {
bottom: number;
static fromRect(rectangle?: {
height: number,
width: number,
x: number,
y: number,
...
}): DOMRect;
height: number;
left: number;
right: number;
top: number;
width: number;
x: number;
y: number;
}
declare class DOMRectList {
@@iterator(): Iterator<DOMRect>;
item(index: number): DOMRect;
length: number;
[index: number]: DOMRect;
}
declare class CloseEvent extends Event {
code: number;
reason: string;
wasClean: boolean;
}
declare class WebSocket extends EventTarget {
binaryType: 'blob' | 'arraybuffer';
bufferedAmount: number;
close(code?: number, reason?: string): void;
static CLOSED: 3;
// eslint-disable-next-line ft-flow/no-dupe-keys
CLOSED: 3;
static CLOSING: 2;
// eslint-disable-next-line ft-flow/no-dupe-keys
CLOSING: 2;
static CONNECTING: 0;
// eslint-disable-next-line ft-flow/no-dupe-keys
CONNECTING: 0;
constructor(url: string, protocols?: string | Array<string>): void;
extensions: string;
onclose: (ev: CloseEvent) => mixed;
onerror: (ev: $FlowFixMe) => mixed;
onmessage: (ev: MessageEvent) => mixed;
onopen: (ev: $FlowFixMe) => mixed;
static OPEN: 1;
// eslint-disable-next-line ft-flow/no-dupe-keys
OPEN: 1;
protocol: string;
readyState: number;
send(data: string): void;
send(data: Blob): void;
send(data: ArrayBuffer): void;
send(data: $ArrayBufferView): void;
url: string;
}
declare class XMLHttpRequest extends EventTarget {
abort(): void;
static DONE: number;
// eslint-disable-next-line ft-flow/no-dupe-keys
DONE: number;
getAllResponseHeaders(): string;
getResponseHeader(header: string): string;
static HEADERS_RECEIVED: number;
// eslint-disable-next-line ft-flow/no-dupe-keys
HEADERS_RECEIVED: number;
static LOADING: number;
// eslint-disable-next-line ft-flow/no-dupe-keys
LOADING: number;
msCaching: string;
msCachingEnabled(): boolean;
onabort: ProgressEventHandler;
onerror: ProgressEventHandler;
onload: ProgressEventHandler;
onloadend: ProgressEventHandler;
onloadstart: ProgressEventHandler;
onprogress: ProgressEventHandler;
onreadystatechange: (ev: $FlowFixMe) => mixed;
ontimeout: ProgressEventHandler;
open(
method: string,
url: string,
async?: boolean,
user?: string,
password?: string,
): void;
static OPENED: number;
// eslint-disable-next-line ft-flow/no-dupe-keys
OPENED: number;
overrideMimeType(mime: string): void;
readyState: number;
response: $FlowFixMe;
responseBody: $FlowFixMe;
responseText: string;
responseType: string;
responseURL: string;
responseXML: $FlowFixMe;
send(data?: $FlowFixMe): void;
setRequestHeader(header: string, value: string): void;
statics: {create(): XMLHttpRequest, ...};
status: number;
statusText: string;
timeout: number;
static UNSENT: number;
// eslint-disable-next-line ft-flow/no-dupe-keys
UNSENT: number;
upload: XMLHttpRequestEventTarget;
withCredentials: boolean;
}
declare class XMLHttpRequestEventTarget extends EventTarget {
onabort: ProgressEventHandler;
onerror: ProgressEventHandler;
onload: ProgressEventHandler;
onloadend: ProgressEventHandler;
onloadstart: ProgressEventHandler;
onprogress: ProgressEventHandler;
ontimeout: ProgressEventHandler;
}
// this part of spec is not finished yet, apparently
// https://stackoverflow.com/questions/35296664/can-fetch-get-object-as-headers
type HeadersInit =
| Headers
| Array<[string, string]>
| {[key: string]: string, ...};
// TODO Heades and URLSearchParams are almost the same thing.
// Could it somehow be abstracted away?
declare class Headers {
@@iterator(): Iterator<[string, string]>;
append(name: string, value: string): void;
constructor(init?: HeadersInit): void;
delete(name: string): void;
entries(): Iterator<[string, string]>;
forEach<This>(
callback: (
this: This,
value: string,
name: string,
headers: Headers,
) => mixed,
thisArg: This,
): void;
get(name: string): null | string;
has(name: string): boolean;
keys(): Iterator<string>;
set(name: string, value: string): void;
values(): Iterator<string>;
}
declare class URLSearchParams {
@@iterator(): Iterator<[string, string]>;
append(name: string, value: string): void;
constructor(
init?:
| string
| URLSearchParams
| Array<[string, string]>
| {[string]: string, ...},
): void;
delete(name: string, value?: string): void;
entries(): Iterator<[string, string]>;
forEach<This>(
callback: (
this: This,
value: string,
name: string,
params: URLSearchParams,
) => mixed,
thisArg: This,
): void;
get(name: string): null | string;
getAll(name: string): Array<string>;
has(name: string, value?: string): boolean;
keys(): Iterator<string>;
set(name: string, value: string): void;
size: number;
sort(): void;
toString(): string;
values(): Iterator<string>;
}
type CacheType =
| 'default'
| 'no-store'
| 'reload'
| 'no-cache'
| 'force-cache'
| 'only-if-cached';
type CredentialsType = 'omit' | 'same-origin' | 'include';
type ModeType = 'cors' | 'no-cors' | 'same-origin' | 'navigate';
type RedirectType = 'follow' | 'error' | 'manual';
type ReferrerPolicyType =
| ''
| 'no-referrer'
| 'no-referrer-when-downgrade'
| 'same-origin'
| 'origin'
| 'strict-origin'
| 'origin-when-cross-origin'
| 'strict-origin-when-cross-origin'
| 'unsafe-url';
type ResponseType =
| 'basic'
| 'cors'
| 'default'
| 'error'
| 'opaque'
| 'opaqueredirect';
type BodyInit =
| string
| URLSearchParams
| FormData
| Blob
| ArrayBuffer
| $ArrayBufferView
| ReadableStream;
type RequestInfo = Request | URL | string;
type RequestOptions = {
body?: ?BodyInit,
cache?: CacheType,
credentials?: CredentialsType,
headers?: HeadersInit,
integrity?: string,
keepalive?: boolean,
method?: string,
mode?: ModeType,
redirect?: RedirectType,
referrer?: string,
referrerPolicy?: ReferrerPolicyType,
signal?: ?AbortSignal,
window?: $FlowFixMe,
...
};
type ResponseOptions = {
headers?: HeadersInit,
status?: number,
statusText?: string,
...
};
declare class Response {
arrayBuffer(): Promise<ArrayBuffer>;
blob(): Promise<Blob>;
body: ?ReadableStream;
// Body methods and attributes
bodyUsed: boolean;
clone(): Response;
constructor(input?: ?BodyInit, init?: ResponseOptions): void;
static error(): Response;
formData(): Promise<FormData>;
headers: Headers;
json(): Promise<$FlowFixMe>;
ok: boolean;
static redirect(url: string, status?: number): Response;
redirected: boolean;
status: number;
statusText: string;
text(): Promise<string>;
trailer: Promise<Headers>;
type: ResponseType;
url: string;
}
declare class Request {
arrayBuffer(): Promise<ArrayBuffer>;
blob(): Promise<Blob>;
// Body methods and attributes
bodyUsed: boolean;
cache: CacheType;
clone(): Request;
constructor(input: RequestInfo, init?: RequestOptions): void;
credentials: CredentialsType;
formData(): Promise<FormData>;
headers: Headers;
integrity: string;
json(): Promise<$FlowFixMe>;
method: string;
mode: ModeType;
redirect: RedirectType;
referrer: string;
referrerPolicy: ReferrerPolicyType;
+signal: AbortSignal;
text(): Promise<string>;
url: string;
}
declare class AbortController {
abort(reason?: $FlowFixMe): void;
constructor(): void;
+signal: AbortSignal;
}
declare class AbortSignal extends EventTarget {
abort(reason?: $FlowFixMe): AbortSignal;
+aborted: boolean;
onabort: (event: Event) => mixed;
+reason: $FlowFixMe;
throwIfAborted(): void;
timeout(time: number): AbortSignal;
}
declare function fetch(
input: RequestInfo,
init?: RequestOptions,
): Promise<Response>;
declare class Location {
ancestorOrigins: Array<string>;
assign(url: string): void;
hash: string;
host: string;
hostname: string;
href: string;
origin: string;
pathname: string;
port: string;
protocol: string;
reload(flag?: boolean): void;
replace(url: string): void;
search: string;
toString(): string;
}
declare class CanvasCaptureMediaStream extends MediaStream {
canvas: HTMLCanvasElement;
requestFrame(): void;
}
declare type FileSystemHandleKind = 'file' | 'directory';
// https://wicg.github.io/file-system-access/#api-filesystemhandle
declare class FileSystemHandle {
+kind: FileSystemHandleKind;
+name: string;
isSameEntry: (other: FileSystemHandle) => Promise<boolean>;
queryPermission?: (
descriptor: FileSystemHandlePermissionDescriptor,
) => Promise<PermissionStatus>;
requestPermission?: (
descriptor: FileSystemHandlePermissionDescriptor,
) => Promise<PermissionStatus>;
}
// https://fs.spec.whatwg.org/#api-filesystemfilehandle
declare class FileSystemFileHandle extends FileSystemHandle {
+kind: 'file';
constructor(name: string): void;
getFile(): Promise<File>;
createSyncAccessHandle(): Promise<FileSystemSyncAccessHandle>;
createWritable(options?: {|
keepExistingData?: boolean,
|}): Promise<FileSystemWritableFileStream>;
}
// https://fs.spec.whatwg.org/#api-filesystemdirectoryhandle
declare class FileSystemDirectoryHandle extends FileSystemHandle {
+kind: 'directory';
constructor(name: string): void;
getDirectoryHandle(
name: string,
options?: {|create?: boolean|},
): Promise<FileSystemDirectoryHandle>;
getFileHandle(
name: string,
options?: {|create?: boolean|},
): Promise<FileSystemFileHandle>;
removeEntry(name: string, options?: {|recursive?: boolean|}): Promise<void>;
resolve(possibleDescendant: FileSystemHandle): Promise<Array<string> | null>;
// Async iterator functions
@@asyncIterator(): AsyncIterator<[string, FileSystemHandle]>;
entries(): AsyncIterator<[string, FileSystemHandle]>;
keys(): AsyncIterator<string>;
values(): AsyncIterator<FileSystemHandle>;
}
// https://fs.spec.whatwg.org/#api-filesystemsyncaccesshandle
declare class FileSystemSyncAccessHandle {
close(): void;
flush(): void;
getSize(): number;
read(buffer: ArrayBuffer, options?: {|at: number|}): number;
truncate(newSize: number): void;
write(buffer: ArrayBuffer, options?: {|at: number|}): number;
}
declare class MediaStream {}
declare class USBDevice {}
declare class PermissionStatus {}
declare class FileSystemWritableFileStream {}
type PermissionState = 'granted' | 'denied' | 'prompt';
type FileSystemHandlePermissionDescriptor = {|
mode: 'read' | 'readwrite',
|};