diff --git a/packages/react-native/flow/bom.js.flow b/packages/react-native/flow/bom.js.flow index 2d93d0e6fa0..9b0d4d94f49 100644 --- a/packages/react-native/flow/bom.js.flow +++ b/packages/react-native/flow/bom.js.flow @@ -88,12 +88,169 @@ declare var navigator: Navigator; // https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp declare type DOMHighResTimeStamp = number; +type PerformanceEntryFilterOptions = { + entryType: string, + name: string, + ... +}; + +// https://www.w3.org/TR/performance-timeline-2/ +declare class PerformanceEntry { + duration: DOMHighResTimeStamp; + entryType: string; + name: string; + startTime: DOMHighResTimeStamp; + toJSON(): string; +} + +// https://w3c.github.io/user-timing/#performancemark +declare class PerformanceMark extends PerformanceEntry { + constructor(name: string, markOptions?: PerformanceMarkOptions): void; + +detail: mixed; +} + +// https://w3c.github.io/user-timing/#performancemeasure +declare class PerformanceMeasure extends PerformanceEntry { + +detail: mixed; +} + +// https://w3c.github.io/server-timing/#the-performanceservertiming-interface +declare class PerformanceServerTiming { + description: string; + duration: DOMHighResTimeStamp; + name: string; + toJSON(): string; +} + +// https://www.w3.org/TR/resource-timing-2/#sec-performanceresourcetiming +// https://w3c.github.io/server-timing/#extension-to-the-performanceresourcetiming-interface +declare class PerformanceResourceTiming extends PerformanceEntry { + connectEnd: number; + connectStart: number; + decodedBodySize: number; + domainLookupEnd: number; + domainLookupStart: number; + encodedBodySize: number; + fetchStart: number; + initiatorType: string; + nextHopProtocol: string; + redirectEnd: number; + redirectStart: number; + requestStart: number; + responseEnd: number; + responseStart: number; + secureConnectionStart: number; + serverTiming: Array; + transferSize: number; + workerStart: number; +} + +// https://w3c.github.io/event-timing/#sec-performance-event-timing +declare class PerformanceEventTiming extends PerformanceEntry { + cancelable: boolean; + interactionId: number; + processingEnd: number; + processingStart: number; + target: ?Node; +} + +// https://w3c.github.io/longtasks/#taskattributiontiming +declare class TaskAttributionTiming extends PerformanceEntry { + containerId: string; + containerName: string; + containerSrc: string; + containerType: string; +} + +// https://w3c.github.io/longtasks/#sec-PerformanceLongTaskTiming +declare class PerformanceLongTaskTiming extends PerformanceEntry { + attribution: $ReadOnlyArray; +} + +// https://www.w3.org/TR/user-timing/#extensions-performance-interface +declare type PerformanceMarkOptions = { + detail?: mixed, + startTime?: number, +}; + +declare type PerformanceMeasureOptions = { + detail?: mixed, + duration?: number, + end?: number | string, + start?: number | string, +}; + +type EventCountsForEachCallbackType = + | (() => void) + | ((value: number) => void) + | ((value: number, key: string) => void) + | ((value: number, key: string, map: Map) => void); + +// https://www.w3.org/TR/event-timing/#eventcounts +declare interface EventCounts { + entries(): Iterator<[string, number]>; + + forEach(callback: EventCountsForEachCallbackType): void; + get(key: string): ?number; + has(key: string): boolean; + keys(): Iterator; + size: number; + values(): Iterator; +} + declare class Performance { + clearMarks(name?: string): void; + + clearMeasures(name?: string): void; + + eventCounts: EventCounts; + getEntries: ( + options?: PerformanceEntryFilterOptions, + ) => Array; + getEntriesByName: (name: string, type?: string) => Array; + getEntriesByType: (type: string) => Array; + mark(name: string, options?: PerformanceMarkOptions): PerformanceMark; + measure( + name: string, + startMarkOrOptions?: string | PerformanceMeasureOptions, + endMark?: string, + ): PerformanceMeasure; now: () => DOMHighResTimeStamp; + toJSON(): string; } declare var performance: Performance; +type PerformanceEntryList = Array; + +declare interface PerformanceObserverEntryList { + getEntries(): PerformanceEntryList; + getEntriesByName(name: string, type: ?string): PerformanceEntryList; + getEntriesByType(type: string): PerformanceEntryList; +} + +type PerformanceObserverInit = { + buffered?: boolean, + entryTypes?: Array, + type?: string, + ... +}; + +declare class PerformanceObserver { + constructor( + callback: ( + entries: PerformanceObserverEntryList, + observer: PerformanceObserver, + ) => mixed, + ): void; + + disconnect(): void; + observe(options: ?PerformanceObserverInit): void; + static supportedEntryTypes: Array; + + takeRecords(): PerformanceEntryList; +} + type FormDataEntryValue = string | File; declare class FormData {