main
js 2,720 lines 64.6 KB
Raw
1 // flow-typed signature: 09630545c584c3b212588a2390c257d0
2 // flow-typed version: baae4b8bcc/bom/flow_>=v0.261.x
3
4 /* BOM */
5
6 declare class Screen {
7 +availHeight: number;
8 +availWidth: number;
9 +availLeft: number;
10 +availTop: number;
11 +top: number;
12 +left: number;
13 +colorDepth: number;
14 +pixelDepth: number;
15 +width: number;
16 +height: number;
17 +orientation?: {
18 lock(): Promise<void>,
19 unlock(): void,
20 angle: number,
21 onchange: () => mixed,
22 type:
23 | 'portrait-primary'
24 | 'portrait-secondary'
25 | 'landscape-primary'
26 | 'landscape-secondary',
27 ...
28 };
29 // deprecated
30 mozLockOrientation?: (orientation: string | Array<string>) => boolean;
31 mozUnlockOrientation?: () => void;
32 mozOrientation?: string;
33 onmozorientationchange?: (...args: any[]) => mixed;
34 }
35
36 declare var screen: Screen;
37
38 declare interface Crypto {
39 // Not using $TypedArray as that would include Float32Array and Float64Array which are not accepted
40 getRandomValues: <
41 T:
42 | Int8Array
43 | Uint8Array
44 | Uint8ClampedArray
45 | Int16Array
46 | Uint16Array
47 | Int32Array
48 | Uint32Array
49 | BigInt64Array
50 | BigUint64Array,
51 >(
52 typedArray: T
53 ) => T;
54 randomUUID: () => string;
55 }
56 declare var crypto: Crypto;
57
58 declare var window: any;
59
60 type GamepadButton = {
61 pressed: boolean,
62 value: number,
63 ...
64 };
65 type GamepadHapticActuator = {
66 type: 'vibration',
67 pulse(value: number, duration: number): Promise<boolean>,
68 ...
69 };
70 type GamepadPose = {
71 angularAcceleration: null | Float32Array,
72 angularVelocity: null | Float32Array,
73 hasOrientation: boolean,
74 hasPosition: boolean,
75 linearAcceleration: null | Float32Array,
76 linearVelocity: null | Float32Array,
77 orientation: null | Float32Array,
78 position: null | Float32Array,
79 ...
80 };
81 type Gamepad = {
82 axes: number[],
83 buttons: GamepadButton[],
84 connected: boolean,
85 displayId?: number,
86 hapticActuators?: GamepadHapticActuator[],
87 hand?: '' | 'left' | 'right',
88 id: string,
89 index: number,
90 mapping: string,
91 pose?: null | GamepadPose,
92 timestamp: number,
93 ...
94 };
95
96 // deprecated
97 type BatteryManager = {
98 +charging: boolean,
99 +chargingTime: number,
100 +dischargingTime: number,
101 +level: number,
102 onchargingchange: ?(event: any) => mixed,
103 onchargingtimechange: ?(event: any) => mixed,
104 ondischargingtimechange: ?(event: any) => mixed,
105 onlevelchange: ?(event: any) => mixed,
106 ...
107 };
108
109 // https://wicg.github.io/web-share
110 type ShareData = {
111 title?: string,
112 text?: string,
113 url?: string,
114 ...
115 };
116
117 type PermissionName =
118 | 'geolocation'
119 | 'notifications'
120 | 'push'
121 | 'midi'
122 | 'camera'
123 | 'microphone'
124 | 'speaker'
125 | 'usb'
126 | 'device-info'
127 | 'background-sync'
128 | 'bluetooth'
129 | 'persistent-storage'
130 | 'ambient-light-sensor'
131 | 'accelerometer'
132 | 'gyroscope'
133 | 'magnetometer'
134 | 'clipboard-read'
135 | 'clipboard-write';
136
137 type PermissionState = 'granted' | 'denied' | 'prompt';
138
139 type PermissionDescriptor = {|
140 name: PermissionName,
141 |};
142
143 type DevicePermissionDescriptor = {|
144 deviceId?: string,
145 name: 'camera' | 'microphone' | 'speaker',
146 |};
147
148 type MidiPermissionDescriptor = {|
149 name: 'midi',
150 sysex?: boolean,
151 |};
152
153 type PushPermissionDescriptor = {|
154 name: 'push',
155 userVisibleOnly?: boolean,
156 |};
157
158 type ClipboardPermissionDescriptor = {|
159 name: 'clipboard-read' | 'clipboard-write',
160 allowWithoutGesture: boolean,
161 |};
162
163 type USBPermissionDescriptor = {|
164 name: 'usb',
165 filters: Array<USBDeviceFilter>,
166 exclusionFilters: Array<USBDeviceFilter>,
167 |};
168
169 type FileSystemHandlePermissionDescriptor = {|
170 mode: 'read' | 'readwrite',
171 |};
172
173 declare class PermissionStatus extends EventTarget {
174 onchange: ?(event: any) => mixed;
175 +state: PermissionState;
176 }
177
178 declare class Permissions {
179 query(
180 permissionDesc:
181 | DevicePermissionDescriptor
182 | MidiPermissionDescriptor
183 | PushPermissionDescriptor
184 | ClipboardPermissionDescriptor
185 | USBPermissionDescriptor
186 | PermissionDescriptor
187 ): Promise<PermissionStatus>;
188 }
189
190 type MIDIPortType = 'input' | 'output';
191 type MIDIPortDeviceState = 'connected' | 'disconnected';
192 type MIDIPortConnectionState = 'open' | 'closed' | 'pending';
193
194 type MIDIOptions = {|
195 sysex: boolean,
196 software: boolean,
197 |};
198
199 type MIDIMessageEvent$Init = Event$Init & {
200 data: Uint8Array,
201 ...
202 };
203
204 declare class MIDIMessageEvent extends Event {
205 constructor(type: string, eventInitDict: MIDIMessageEvent$Init): void;
206 +data: Uint8Array;
207 }
208
209 type MIDIConnectionEvent$Init = Event$Init & {
210 port: MIDIPort,
211 ...
212 };
213
214 declare class MIDIConnectionEvent extends Event {
215 constructor(type: string, eventInitDict: MIDIConnectionEvent$Init): void;
216 +port: MIDIPort;
217 }
218
219 declare class MIDIPort extends EventTarget {
220 +id: string;
221 +manufacturer?: string;
222 +name?: string;
223 +type: MIDIPortType;
224 +version?: string;
225 +state: MIDIPortDeviceState;
226 +connection: MIDIPortConnectionState;
227 onstatechange: ?(ev: MIDIConnectionEvent) => mixed;
228 open(): Promise<MIDIPort>;
229 close(): Promise<MIDIPort>;
230 }
231
232 declare class MIDIInput extends MIDIPort {
233 onmidimessage: ?(ev: MIDIMessageEvent) => mixed;
234 }
235
236 declare class MIDIOutput extends MIDIPort {
237 send(data: Iterable<number>, timestamp?: number): void;
238 clear(): void;
239 }
240
241 declare class MIDIInputMap extends $ReadOnlyMap<string, MIDIInput> {}
242
243 declare class MIDIOutputMap extends $ReadOnlyMap<string, MIDIOutput> {}
244
245 declare class MIDIAccess extends EventTarget {
246 +inputs: MIDIInputMap;
247 +outputs: MIDIOutputMap;
248 +sysexEnabled: boolean;
249 onstatechange: ?(ev: MIDIConnectionEvent) => mixed;
250 }
251
252 declare class NavigatorID {
253 appName: 'Netscape';
254 appCodeName: 'Mozilla';
255 product: 'Gecko';
256 appVersion: string;
257 platform: string;
258 userAgent: string;
259 }
260
261 declare class NavigatorLanguage {
262 +language: string;
263 +languages: $ReadOnlyArray<string>;
264 }
265
266 declare class NavigatorContentUtils {
267 registerContentHandler(mimeType: string, uri: string, title: string): void;
268 registerProtocolHandler(protocol: string, uri: string, title: string): void;
269 }
270
271 declare class NavigatorCookies {
272 +cookieEnabled: boolean;
273 }
274
275 declare class NavigatorPlugins {
276 +plugins: PluginArray;
277 +mimeTypes: MimeTypeArray;
278 javaEnabled(): boolean;
279 }
280
281 declare class NavigatorOnLine {
282 +onLine: boolean;
283 }
284
285 declare class NavigatorConcurrentHardware {
286 +hardwareConcurrency: number;
287 }
288
289 declare class NavigatorStorage {
290 storage?: StorageManager;
291 }
292
293 declare class StorageManager {
294 persist: () => Promise<boolean>;
295 persisted: () => Promise<boolean>;
296 estimate?: () => Promise<StorageEstimate>;
297 getDirectory: () => Promise<FileSystemDirectoryHandle>;
298 }
299
300 type StorageManagerRegisteredEndpoint =
301 | 'caches'
302 | 'indexedDB'
303 | 'localStorage'
304 | 'serviceWorkerRegistrations'
305 | 'sessionStorage';
306
307 type StorageManagerUsageDetails = {[StorageManagerRegisteredEndpoint]: number};
308
309 declare class StorageEstimate {
310 constructor(
311 usage: number,
312 quota: number,
313 usageDetails?: StorageManagerUsageDetails
314 ): void;
315 +usage: number;
316 +quota: number;
317
318 // Not a part of the standard
319 +usageDetails?: StorageManagerUsageDetails;
320 }
321
322 declare class Navigator
323 mixins
324 NavigatorID,
325 NavigatorLanguage,
326 NavigatorOnLine,
327 NavigatorContentUtils,
328 NavigatorCookies,
329 NavigatorPlugins,
330 NavigatorConcurrentHardware,
331 NavigatorStorage
332 {
333 productSub: '20030107' | '20100101';
334 vendor: '' | 'Google Inc.' | 'Apple Computer, Inc';
335 vendorSub: '';
336
337 activeVRDisplays?: VRDisplay[];
338 appCodeName: 'Mozilla';
339 buildID: string;
340 doNotTrack: string | null;
341 geolocation: Geolocation;
342 mediaDevices?: MediaDevices;
343 usb?: USB;
344 maxTouchPoints: number;
345 permissions: Permissions;
346 serviceWorker?: ServiceWorkerContainer;
347 getGamepads?: () => Array<Gamepad | null>;
348 webkitGetGamepads?: Function;
349 mozGetGamepads?: Function;
350 mozGamepads?: any;
351 gamepads?: any;
352 webkitGamepads?: any;
353 getVRDisplays?: () => Promise<VRDisplay[]>;
354 registerContentHandler(mimeType: string, uri: string, title: string): void;
355 registerProtocolHandler(protocol: string, uri: string, title: string): void;
356 requestMIDIAccess?: (options?: MIDIOptions) => Promise<MIDIAccess>;
357 requestMediaKeySystemAccess?: (
358 keySystem: string,
359 supportedConfigurations: any[]
360 ) => Promise<any>;
361 sendBeacon?: (url: string, data?: BodyInit) => boolean;
362 vibrate?: (pattern: number | number[]) => boolean;
363 mozVibrate?: (pattern: number | number[]) => boolean;
364 webkitVibrate?: (pattern: number | number[]) => boolean;
365 canShare?: (shareData?: ShareData) => boolean;
366 share?: (shareData: ShareData) => Promise<void>;
367 clipboard: Clipboard;
368 credentials?: CredMgmtCredentialsContainer;
369 globalPrivacyControl?: boolean;
370
371 // deprecated
372 getBattery?: () => Promise<BatteryManager>;
373 mozGetBattery?: () => Promise<BatteryManager>;
374
375 // deprecated
376 getUserMedia?: Function;
377 webkitGetUserMedia?: Function;
378 mozGetUserMedia?: Function;
379 msGetUserMedia?: Function;
380
381 // Gecko
382 taintEnabled?: () => false;
383 oscpu: string;
384 }
385
386 declare class Clipboard extends EventTarget {
387 read(): Promise<DataTransfer>;
388 readText(): Promise<string>;
389 write(data: $ReadOnlyArray<ClipboardItem>): Promise<void>;
390 writeText(data: string): Promise<void>;
391 }
392
393 declare var navigator: Navigator;
394
395 declare class MimeType {
396 type: string;
397 description: string;
398 suffixes: string;
399 enabledPlugin: Plugin;
400 }
401
402 declare class MimeTypeArray {
403 length: number;
404 item(index: number): MimeType;
405 namedItem(name: string): MimeType;
406 [key: number | string]: MimeType;
407 }
408
409 declare class Plugin {
410 description: string;
411 filename: string;
412 name: string;
413 version?: string; // Gecko only
414 length: number;
415 item(index: number): MimeType;
416 namedItem(name: string): MimeType;
417 [key: number | string]: MimeType;
418 }
419
420 declare class PluginArray {
421 length: number;
422 item(index: number): Plugin;
423 namedItem(name: string): Plugin;
424 refresh(): void;
425 [key: number | string]: Plugin;
426 }
427
428 // https://www.w3.org/TR/hr-time-2/#dom-domhighrestimestamp
429 // https://developer.mozilla.org/en-US/docs/Web/API/DOMHighResTimeStamp
430 declare type DOMHighResTimeStamp = number;
431
432 // https://www.w3.org/TR/navigation-timing-2/
433 declare class PerformanceTiming {
434 connectEnd: number;
435 connectStart: number;
436 domainLookupEnd: number;
437 domainLookupStart: number;
438 domComplete: number;
439 domContentLoadedEventEnd: number;
440 domContentLoadedEventStart: number;
441 domInteractive: number;
442 domLoading: number;
443 fetchStart: number;
444 loadEventEnd: number;
445 loadEventStart: number;
446 navigationStart: number;
447 redirectEnd: number;
448 redirectStart: number;
449 requestStart: number;
450 responseEnd: number;
451 responseStart: number;
452 secureConnectionStart: number;
453 unloadEventEnd: number;
454 unloadEventStart: number;
455 }
456
457 declare class PerformanceNavigation {
458 TYPE_NAVIGATE: 0;
459 TYPE_RELOAD: 1;
460 TYPE_BACK_FORWARD: 2;
461 TYPE_RESERVED: 255;
462
463 type: 0 | 1 | 2 | 255;
464 redirectCount: number;
465 }
466
467 type PerformanceEntryFilterOptions = {
468 name: string,
469 entryType: string,
470 initiatorType: string,
471 ...
472 };
473
474 // https://www.w3.org/TR/performance-timeline-2/
475 declare class PerformanceEntry {
476 name: string;
477 entryType: string;
478 startTime: DOMHighResTimeStamp;
479 duration: DOMHighResTimeStamp;
480 toJSON(): string;
481 }
482
483 // https://w3c.github.io/server-timing/#the-performanceservertiming-interface
484 declare class PerformanceServerTiming {
485 description: string;
486 duration: DOMHighResTimeStamp;
487 name: string;
488 toJSON(): string;
489 }
490
491 // https://www.w3.org/TR/resource-timing-2/#sec-performanceresourcetiming
492 // https://w3c.github.io/server-timing/#extension-to-the-performanceresourcetiming-interface
493 declare class PerformanceResourceTiming extends PerformanceEntry {
494 initiatorType: string;
495 nextHopProtocol: string;
496 workerStart: number;
497 redirectStart: number;
498 redirectEnd: number;
499 fetchStart: number;
500 domainLookupStart: number;
501 domainLookupEnd: number;
502 connectStart: number;
503 connectEnd: number;
504 secureConnectionStart: number;
505 requestStart: number;
506 responseStart: number;
507 responseEnd: number;
508 transferSize: string;
509 encodedBodySize: number;
510 decodedBodySize: number;
511 serverTiming: Array<PerformanceServerTiming>;
512 }
513
514 // https://w3c.github.io/event-timing/#sec-performance-event-timing
515 declare class PerformanceEventTiming extends PerformanceEntry {
516 processingStart: number;
517 processingEnd: number;
518 cancelable: boolean;
519 target: ?Node;
520 interactionId: number;
521 }
522
523 // https://w3c.github.io/longtasks/#taskattributiontiming
524 declare class TaskAttributionTiming extends PerformanceEntry {
525 containerType: string;
526 containerSrc: string;
527 containerId: string;
528 containerName: string;
529 }
530
531 // https://w3c.github.io/longtasks/#sec-PerformanceLongTaskTiming
532 declare class PerformanceLongTaskTiming extends PerformanceEntry {
533 attribution: $ReadOnlyArray<TaskAttributionTiming>;
534 }
535
536 // https://www.w3.org/TR/navigation-timing-2/
537 declare class PerformanceNavigationTiming extends PerformanceResourceTiming {
538 unloadEventStart: number;
539 unloadEventEnd: number;
540 domInteractive: number;
541 domContentLoadedEventStart: number;
542 domContentLoadedEventEnd: number;
543 domComplete: number;
544 loadEventStart: number;
545 loadEventEnd: number;
546 type: 'navigate' | 'reload' | 'back_forward' | 'prerender';
547 redirectCount: number;
548 }
549
550 // https://www.w3.org/TR/user-timing/#extensions-performance-interface
551 declare type PerformanceMarkOptions = {|
552 detail?: mixed,
553 startTime?: number,
554 |};
555
556 declare type PerformanceMeasureOptions = {|
557 detail?: mixed,
558 start?: number | string,
559 end?: number | string,
560 duration?: number,
561 |};
562
563 type EventCountsForEachCallbackType =
564 | (() => void)
565 | ((value: number) => void)
566 | ((value: number, key: string) => void)
567 | ((value: number, key: string, map: Map<string, number>) => void);
568
569 // https://www.w3.org/TR/event-timing/#eventcounts
570 declare interface EventCounts {
571 size: number;
572
573 entries(): Iterator<[string, number]>;
574 forEach(callback: EventCountsForEachCallbackType): void;
575 get(key: string): ?number;
576 has(key: string): boolean;
577 keys(): Iterator<string>;
578 values(): Iterator<number>;
579 }
580
581 declare class Performance {
582 eventCounts: EventCounts;
583
584 // deprecated
585 navigation: PerformanceNavigation;
586 timing: PerformanceTiming;
587
588 onresourcetimingbufferfull: (ev: any) => mixed;
589 clearMarks(name?: string): void;
590 clearMeasures(name?: string): void;
591 clearResourceTimings(): void;
592 getEntries(options?: PerformanceEntryFilterOptions): Array<PerformanceEntry>;
593 getEntriesByName(name: string, type?: string): Array<PerformanceEntry>;
594 getEntriesByType(type: string): Array<PerformanceEntry>;
595 mark(name: string, options?: PerformanceMarkOptions): void;
596 measure(
597 name: string,
598 startMarkOrOptions?: string | PerformanceMeasureOptions,
599 endMark?: string
600 ): void;
601 now(): DOMHighResTimeStamp;
602 setResourceTimingBufferSize(maxSize: number): void;
603 toJSON(): string;
604 }
605
606 declare var performance: Performance;
607
608 type PerformanceEntryList = PerformanceEntry[];
609
610 declare interface PerformanceObserverEntryList {
611 getEntries(): PerformanceEntryList;
612 getEntriesByType(type: string): PerformanceEntryList;
613 getEntriesByName(name: string, type: ?string): PerformanceEntryList;
614 }
615
616 type PerformanceObserverInit = {
617 entryTypes?: string[],
618 type?: string,
619 buffered?: boolean,
620 ...
621 };
622
623 declare class PerformanceObserver {
624 constructor(
625 callback: (
626 entries: PerformanceObserverEntryList,
627 observer: PerformanceObserver
628 ) => mixed
629 ): void;
630
631 observe(options: ?PerformanceObserverInit): void;
632 disconnect(): void;
633 takeRecords(): PerformanceEntryList;
634
635 static supportedEntryTypes: string[];
636 }
637
638 declare class History {
639 length: number;
640 scrollRestoration: 'auto' | 'manual';
641 state: any;
642 back(): void;
643 forward(): void;
644 go(delta?: number): void;
645 pushState(statedata: any, title: string, url?: string): void;
646 replaceState(statedata: any, title: string, url?: string): void;
647 }
648
649 declare var history: History;
650
651 declare class Location {
652 ancestorOrigins: string[];
653 hash: string;
654 host: string;
655 hostname: string;
656 href: string;
657 origin: string;
658 pathname: string;
659 port: string;
660 protocol: string;
661 search: string;
662 assign(url: string): void;
663 reload(flag?: boolean): void;
664 replace(url: string): void;
665 toString(): string;
666 }
667
668 declare var location: Location;
669
670 ///////////////////////////////////////////////////////////////////////////////
671
672 declare class DOMParser {
673 parseFromString(source: string | TrustedHTML, mimeType: string): Document;
674 }
675
676 type FormDataEntryValue = string | File;
677
678 declare class FormData {
679 constructor(form?: HTMLFormElement, submitter?: HTMLElement | null): void;
680
681 has(name: string): boolean;
682 get(name: string): ?FormDataEntryValue;
683 getAll(name: string): Array<FormDataEntryValue>;
684
685 set(name: string, value: FormDataEntryValue): void;
686 set(name: string, value: Blob, filename?: string): void;
687 set(name: string, value: File, filename?: string): void;
688
689 append(name: string, value: FormDataEntryValue): void;
690 append(name: string, value: Blob, filename?: string): void;
691 append(name: string, value: File, filename?: string): void;
692
693 delete(name: string): void;
694
695 keys(): Iterator<string>;
696 values(): Iterator<FormDataEntryValue>;
697 entries(): Iterator<[string, FormDataEntryValue]>;
698 }
699
700 declare type IntersectionObserverEntry = {
701 boundingClientRect: DOMRectReadOnly,
702 intersectionRatio: number,
703 intersectionRect: DOMRectReadOnly,
704 isIntersecting: boolean,
705 rootBounds: DOMRectReadOnly,
706 target: Element,
707 time: DOMHighResTimeStamp,
708 ...
709 };
710
711 declare type IntersectionObserverCallback = (
712 entries: Array<IntersectionObserverEntry>,
713 observer: IntersectionObserver
714 ) => mixed;
715
716 declare type IntersectionObserverOptions = {
717 root?: Node | null,
718 rootMargin?: string,
719 threshold?: number | Array<number>,
720 ...
721 };
722
723 declare class IntersectionObserver {
724 constructor(
725 callback: IntersectionObserverCallback,
726 options?: IntersectionObserverOptions
727 ): void;
728 root: Element | null;
729 rootMargin: string;
730 scrollMargin: string;
731 thresholds: number[];
732 observe(target: Element): void;
733 unobserve(target: Element): void;
734 takeRecords(): Array<IntersectionObserverEntry>;
735 disconnect(): void;
736 }
737
738 declare interface ResizeObserverSize {
739 +inlineSize: number;
740 +blockSize: number;
741 }
742
743 declare interface ResizeObserverEntry {
744 /**
745 * The Element whose size has changed.
746 */
747 +target: Element;
748 /**
749 * Element's content rect when ResizeObserverCallback is invoked.
750 *
751 * Legacy, may be deprecated in the future.
752 */
753 +contentRect: DOMRectReadOnly;
754 /**
755 * An array containing the Element's border box size when
756 * ResizeObserverCallback is invoked.
757 */
758 +borderBoxSize: $ReadOnlyArray<ResizeObserverSize>;
759 /**
760 * An array containing the Element's content rect size when
761 * ResizeObserverCallback is invoked.
762 */
763 +contentBoxSize: $ReadOnlyArray<ResizeObserverSize>;
764 /**
765 * An array containing the Element's content rect size in integral device
766 * pixels when ResizeObserverCallback is invoked.
767 *
768 * Not implemented in Firefox or Safari as of July 2021
769 */
770 +devicePixelContentBoxSize?: $ReadOnlyArray<ResizeObserverSize> | void;
771 }
772
773 /**
774 * ResizeObserver can observe different kinds of CSS sizes:
775 * - border-box : size of box border area as defined in CSS2.
776 * - content-box : size of content area as defined in CSS2.
777 * - device-pixel-content-box : size of content area as defined in CSS2, in device
778 * pixels, before applying any CSS transforms on the element or its ancestors.
779 * This size must contain integer values.
780 */
781 type ResizeObserverBoxOptions =
782 | 'border-box'
783 | 'content-box'
784 | 'device-pixel-content-box';
785
786 declare type ResizeObserverOptions = {
787 box?: ResizeObserverBoxOptions,
788 ...
789 };
790
791 /**
792 * The ResizeObserver interface is used to observe changes to Element's size.
793 */
794 declare class ResizeObserver {
795 constructor(
796 callback: (
797 entries: ResizeObserverEntry[],
798 observer: ResizeObserver
799 ) => mixed
800 ): void;
801 /**
802 * Adds target to the list of observed elements.
803 */
804 observe(target: Element, options?: ResizeObserverOptions): void;
805 /**
806 * Removes target from the list of observed elements.
807 */
808 unobserve(target: Element): void;
809 disconnect(): void;
810 }
811
812 declare class CloseEvent extends Event {
813 code: number;
814 reason: string;
815 wasClean: boolean;
816 }
817
818 declare class WebSocket extends EventTarget {
819 static CONNECTING: 0;
820 static OPEN: 1;
821 static CLOSING: 2;
822 static CLOSED: 3;
823 constructor(url: string, protocols?: string | Array<string>): void;
824 protocol: string;
825 readyState: number;
826 bufferedAmount: number;
827 extensions: string;
828 onopen: (ev: any) => mixed;
829 onmessage: (ev: MessageEvent<>) => mixed;
830 onclose: (ev: CloseEvent) => mixed;
831 onerror: (ev: any) => mixed;
832 binaryType: 'blob' | 'arraybuffer';
833 url: string;
834 close(code?: number, reason?: string): void;
835 send(data: string): void;
836 send(data: Blob): void;
837 send(data: ArrayBuffer): void;
838 send(data: $ArrayBufferView): void;
839 CONNECTING: 0;
840 OPEN: 1;
841 CLOSING: 2;
842 CLOSED: 3;
843 }
844
845 type WorkerOptions = {
846 type?: WorkerType,
847 credentials?: CredentialsType,
848 name?: string,
849 ...
850 };
851
852 declare class Worker extends EventTarget {
853 constructor(
854 stringUrl: string | TrustedScriptURL,
855 workerOptions?: WorkerOptions
856 ): void;
857 onerror: null | ((ev: any) => mixed);
858 onmessage: null | ((ev: MessageEvent<>) => mixed);
859 onmessageerror: null | ((ev: MessageEvent<>) => mixed);
860 postMessage(message: any, ports?: any): void;
861 terminate(): void;
862 }
863
864 declare class SharedWorker extends EventTarget {
865 constructor(stringUrl: string | TrustedScriptURL, name?: string): void;
866 constructor(
867 stringUrl: string | TrustedScriptURL,
868 workerOptions?: WorkerOptions
869 ): void;
870 port: MessagePort;
871 onerror: (ev: any) => mixed;
872 }
873
874 declare function importScripts(...urls: Array<string | TrustedScriptURL>): void;
875
876 declare class WorkerGlobalScope extends EventTarget {
877 // $FlowFixMe[incompatible-variance]
878 self: this;
879 location: WorkerLocation;
880 navigator: WorkerNavigator;
881 close(): void;
882 importScripts(...urls: Array<string | TrustedScriptURL>): void;
883 onerror: (ev: any) => mixed;
884 onlanguagechange: (ev: any) => mixed;
885 onoffline: (ev: any) => mixed;
886 ononline: (ev: any) => mixed;
887 onrejectionhandled: (ev: PromiseRejectionEvent) => mixed;
888 onunhandledrejection: (ev: PromiseRejectionEvent) => mixed;
889 }
890
891 declare class DedicatedWorkerGlobalScope extends WorkerGlobalScope {
892 onmessage: (ev: MessageEvent<>) => mixed;
893 onmessageerror: (ev: MessageEvent<>) => mixed;
894 postMessage(message: any, transfer?: Iterable<any>): void;
895 }
896
897 declare class SharedWorkerGlobalScope extends WorkerGlobalScope {
898 name: string;
899 onconnect: (ev: MessageEvent<>) => mixed;
900 }
901
902 declare class WorkerLocation {
903 origin: string;
904 protocol: string;
905 host: string;
906 hostname: string;
907 port: string;
908 pathname: string;
909 search: string;
910 hash: string;
911 }
912
913 declare class WorkerNavigator
914 mixins
915 NavigatorID,
916 NavigatorLanguage,
917 NavigatorOnLine,
918 NavigatorConcurrentHardware,
919 NavigatorStorage
920 {
921 permissions: Permissions;
922 }
923
924 // deprecated
925 declare class XDomainRequest {
926 timeout: number;
927 onerror: () => mixed;
928 onload: () => mixed;
929 onprogress: () => mixed;
930 ontimeout: () => mixed;
931 +responseText: string;
932 +contentType: string;
933 open(method: 'GET' | 'POST', url: string): void;
934 abort(): void;
935 send(data?: string): void;
936
937 statics: {create(): XDomainRequest, ...};
938 }
939
940 declare class XMLHttpRequest extends EventTarget {
941 static LOADING: number;
942 static DONE: number;
943 static UNSENT: number;
944 static OPENED: number;
945 static HEADERS_RECEIVED: number;
946 responseBody: any;
947 status: number;
948 readyState: number;
949 responseText: string;
950 responseXML: any;
951 responseURL: string;
952 ontimeout: ProgressEventHandler;
953 statusText: string;
954 onreadystatechange: (ev: any) => mixed;
955 timeout: number;
956 onload: ProgressEventHandler;
957 response: any;
958 withCredentials: boolean;
959 onprogress: ProgressEventHandler;
960 onabort: ProgressEventHandler;
961 responseType: string;
962 onloadend: ProgressEventHandler;
963 upload: XMLHttpRequestEventTarget;
964 onerror: ProgressEventHandler;
965 onloadstart: ProgressEventHandler;
966 msCaching: string;
967 open(
968 method: string,
969 url: string,
970 async?: boolean,
971 user?: string,
972 password?: string
973 ): void;
974 send(data?: any): void;
975 abort(): void;
976 getAllResponseHeaders(): string;
977 setRequestHeader(header: string, value: string): void;
978 getResponseHeader(header: string): string;
979 msCachingEnabled(): boolean;
980 overrideMimeType(mime: string): void;
981 LOADING: number;
982 DONE: number;
983 UNSENT: number;
984 OPENED: number;
985 HEADERS_RECEIVED: number;
986
987 statics: {create(): XMLHttpRequest, ...};
988 }
989
990 declare class XMLHttpRequestEventTarget extends EventTarget {
991 onprogress: ProgressEventHandler;
992 onerror: ProgressEventHandler;
993 onload: ProgressEventHandler;
994 ontimeout: ProgressEventHandler;
995 onabort: ProgressEventHandler;
996 onloadstart: ProgressEventHandler;
997 onloadend: ProgressEventHandler;
998 }
999
1000 declare class XMLSerializer {
1001 serializeToString(target: Node): string;
1002 }
1003
1004 declare class Geolocation {
1005 getCurrentPosition(
1006 success: (position: Position) => mixed,
1007 error?: (error: PositionError) => mixed,
1008 options?: PositionOptions
1009 ): void;
1010 watchPosition(
1011 success: (position: Position) => mixed,
1012 error?: (error: PositionError) => mixed,
1013 options?: PositionOptions
1014 ): number;
1015 clearWatch(id: number): void;
1016 }
1017
1018 declare class Position {
1019 coords: Coordinates;
1020 timestamp: number;
1021 }
1022
1023 declare class Coordinates {
1024 latitude: number;
1025 longitude: number;
1026 altitude?: number;
1027 accuracy: number;
1028 altitudeAccuracy?: number;
1029 heading?: number;
1030 speed?: number;
1031 }
1032
1033 declare class PositionError {
1034 code: number;
1035 message: string;
1036 PERMISSION_DENIED: 1;
1037 POSITION_UNAVAILABLE: 2;
1038 TIMEOUT: 3;
1039 }
1040
1041 type PositionOptions = {
1042 enableHighAccuracy?: boolean,
1043 timeout?: number,
1044 maximumAge?: number,
1045 ...
1046 };
1047
1048 type AudioContextState = 'suspended' | 'running' | 'closed';
1049
1050 // deprecated
1051 type AudioProcessingEvent$Init = Event$Init & {
1052 playbackTime: number,
1053 inputBuffer: AudioBuffer,
1054 outputBuffer: AudioBuffer,
1055 ...
1056 };
1057
1058 // deprecated
1059 declare class AudioProcessingEvent extends Event {
1060 constructor(type: string, eventInitDict: AudioProcessingEvent$Init): void;
1061
1062 +playbackTime: number;
1063 +inputBuffer: AudioBuffer;
1064 +outputBuffer: AudioBuffer;
1065 }
1066
1067 type OfflineAudioCompletionEvent$Init = Event$Init & {
1068 renderedBuffer: AudioBuffer,
1069 ...
1070 };
1071
1072 declare class OfflineAudioCompletionEvent extends Event {
1073 constructor(
1074 type: string,
1075 eventInitDict: OfflineAudioCompletionEvent$Init
1076 ): void;
1077
1078 +renderedBuffer: AudioBuffer;
1079 }
1080
1081 declare class BaseAudioContext extends EventTarget {
1082 currentTime: number;
1083 destination: AudioDestinationNode;
1084 listener: AudioListener;
1085 sampleRate: number;
1086 state: AudioContextState;
1087 onstatechange: (ev: any) => mixed;
1088 createBuffer(
1089 numOfChannels: number,
1090 length: number,
1091 sampleRate: number
1092 ): AudioBuffer;
1093 createBufferSource(myMediaElement?: HTMLMediaElement): AudioBufferSourceNode;
1094 createMediaElementSource(
1095 myMediaElement: HTMLMediaElement
1096 ): MediaElementAudioSourceNode;
1097 createMediaStreamSource(stream: MediaStream): MediaStreamAudioSourceNode;
1098 createMediaStreamDestination(): MediaStreamAudioDestinationNode;
1099
1100 // deprecated
1101 createScriptProcessor(
1102 bufferSize: number,
1103 numberOfInputChannels: number,
1104 numberOfOutputChannels: number
1105 ): ScriptProcessorNode;
1106
1107 createAnalyser(): AnalyserNode;
1108 createBiquadFilter(): BiquadFilterNode;
1109 createChannelMerger(numberOfInputs?: number): ChannelMergerNode;
1110 createChannelSplitter(numberOfInputs?: number): ChannelSplitterNode;
1111 createConstantSource(): ConstantSourceNode;
1112 createConvolver(): ConvolverNode;
1113 createDelay(maxDelayTime?: number): DelayNode;
1114 createDynamicsCompressor(): DynamicsCompressorNode;
1115 createGain(): GainNode;
1116 createIIRFilter(
1117 feedforward: Float32Array,
1118 feedback: Float32Array
1119 ): IIRFilterNode;
1120 createOscillator(): OscillatorNode;
1121 createPanner(): PannerNode;
1122 createStereoPanner(): StereoPannerNode;
1123 createPeriodicWave(
1124 real: Float32Array,
1125 img: Float32Array,
1126 options?: {disableNormalization: boolean, ...}
1127 ): PeriodicWave;
1128 createStereoPanner(): StereoPannerNode;
1129 createWaveShaper(): WaveShaperNode;
1130 decodeAudioData(
1131 arrayBuffer: ArrayBuffer,
1132 decodeSuccessCallback: (decodedData: AudioBuffer) => mixed,
1133 decodeErrorCallback: (err: DOMError) => mixed
1134 ): void;
1135 decodeAudioData(arrayBuffer: ArrayBuffer): Promise<AudioBuffer>;
1136 }
1137
1138 declare class AudioTimestamp {
1139 contextTime: number;
1140 performanceTime: number;
1141 }
1142
1143 declare class AudioContext extends BaseAudioContext {
1144 constructor(options?: {|
1145 latencyHint?: 'balanced' | 'interactive' | 'playback' | number,
1146 sampleRate?: number,
1147 |}): AudioContext;
1148 baseLatency: number;
1149 outputLatency: number;
1150 getOutputTimestamp(): AudioTimestamp;
1151 resume(): Promise<void>;
1152 suspend(): Promise<void>;
1153 close(): Promise<void>;
1154 createMediaElementSource(
1155 myMediaElement: HTMLMediaElement
1156 ): MediaElementAudioSourceNode;
1157 createMediaStreamSource(
1158 myMediaStream: MediaStream
1159 ): MediaStreamAudioSourceNode;
1160 createMediaStreamTrackSource(
1161 myMediaStreamTrack: MediaStreamTrack
1162 ): MediaStreamTrackAudioSourceNode;
1163 createMediaStreamDestination(): MediaStreamAudioDestinationNode;
1164 }
1165
1166 declare class OfflineAudioContext extends BaseAudioContext {
1167 startRendering(): Promise<AudioBuffer>;
1168 suspend(suspendTime: number): Promise<void>;
1169 length: number;
1170 oncomplete: (ev: OfflineAudioCompletionEvent) => mixed;
1171 }
1172
1173 declare class AudioNode extends EventTarget {
1174 context: AudioContext;
1175 numberOfInputs: number;
1176 numberOfOutputs: number;
1177 channelCount: number;
1178 channelCountMode: 'max' | 'clamped-max' | 'explicit';
1179 channelInterpretation: 'speakers' | 'discrete';
1180 connect(audioNode: AudioNode, output?: number, input?: number): AudioNode;
1181 connect(destination: AudioParam, output?: number): void;
1182 disconnect(destination?: AudioNode, output?: number, input?: number): void;
1183 }
1184
1185 declare class AudioParam extends AudioNode {
1186 value: number;
1187 defaultValue: number;
1188 setValueAtTime(value: number, startTime: number): this;
1189 linearRampToValueAtTime(value: number, endTime: number): this;
1190 exponentialRampToValueAtTime(value: number, endTime: number): this;
1191 setTargetAtTime(
1192 target: number,
1193 startTime: number,
1194 timeConstant: number
1195 ): this;
1196 setValueCurveAtTime(
1197 values: Float32Array,
1198 startTime: number,
1199 duration: number
1200 ): this;
1201 cancelScheduledValues(startTime: number): this;
1202 }
1203
1204 declare class AudioDestinationNode extends AudioNode {
1205 maxChannelCount: number;
1206 }
1207
1208 declare class AudioListener extends AudioNode {
1209 positionX: AudioParam;
1210 positionY: AudioParam;
1211 positionZ: AudioParam;
1212 forwardX: AudioParam;
1213 forwardY: AudioParam;
1214 forwardZ: AudioParam;
1215 upX: AudioParam;
1216 upY: AudioParam;
1217 upZ: AudioParam;
1218 setPosition(x: number, y: number, c: number): void;
1219 setOrientation(
1220 x: number,
1221 y: number,
1222 z: number,
1223 xUp: number,
1224 yUp: number,
1225 zUp: number
1226 ): void;
1227 }
1228
1229 declare class AudioBuffer {
1230 sampleRate: number;
1231 length: number;
1232 duration: number;
1233 numberOfChannels: number;
1234 getChannelData(channel: number): Float32Array;
1235 copyFromChannel(
1236 destination: Float32Array,
1237 channelNumber: number,
1238 startInChannel?: number
1239 ): void;
1240 copyToChannel(
1241 source: Float32Array,
1242 channelNumber: number,
1243 startInChannel?: number
1244 ): void;
1245 }
1246
1247 declare class AudioBufferSourceNode extends AudioNode {
1248 buffer: AudioBuffer;
1249 detune: AudioParam;
1250 loop: boolean;
1251 loopStart: number;
1252 loopEnd: number;
1253 playbackRate: AudioParam;
1254 onended: (ev: any) => mixed;
1255 start(when?: number, offset?: number, duration?: number): void;
1256 stop(when?: number): void;
1257 }
1258
1259 declare class CanvasCaptureMediaStream extends MediaStream {
1260 canvas: HTMLCanvasElement;
1261 requestFrame(): void;
1262 }
1263
1264 type DoubleRange = {
1265 max?: number,
1266 min?: number,
1267 ...
1268 };
1269
1270 type LongRange = {
1271 max?: number,
1272 min?: number,
1273 ...
1274 };
1275
1276 type ConstrainBooleanParameters = {
1277 exact?: boolean,
1278 ideal?: boolean,
1279 ...
1280 };
1281
1282 type ConstrainDOMStringParameters = {
1283 exact?: string | string[],
1284 ideal?: string | string[],
1285 ...
1286 };
1287
1288 type ConstrainDoubleRange = {
1289 ...DoubleRange,
1290 exact?: number,
1291 ideal?: number,
1292 ...
1293 };
1294
1295 type ConstrainLongRange = {
1296 ...LongRange,
1297 exact?: number,
1298 ideal?: number,
1299 ...
1300 };
1301
1302 type MediaTrackSupportedConstraints = {|
1303 width: boolean,
1304 height: boolean,
1305 aspectRatio: boolean,
1306 frameRate: boolean,
1307 facingMode: boolean,
1308 resizeMode: boolean,
1309 volume: boolean,
1310 sampleRate: boolean,
1311 sampleSize: boolean,
1312 echoCancellation: boolean,
1313 autoGainControl: boolean,
1314 noiseSuppression: boolean,
1315 latency: boolean,
1316 channelCount: boolean,
1317 deviceId: boolean,
1318 groupId: boolean,
1319 |};
1320
1321 type MediaTrackConstraintSet = {
1322 width?: number | ConstrainLongRange,
1323 height?: number | ConstrainLongRange,
1324 aspectRatio?: number | ConstrainDoubleRange,
1325 frameRate?: number | ConstrainDoubleRange,
1326 facingMode?: string | string[] | ConstrainDOMStringParameters,
1327 resizeMode?: string | string[] | ConstrainDOMStringParameters,
1328 volume?: number | ConstrainDoubleRange,
1329 sampleRate?: number | ConstrainLongRange,
1330 sampleSize?: number | ConstrainLongRange,
1331 echoCancellation?: boolean | ConstrainBooleanParameters,
1332 autoGainControl?: boolean | ConstrainBooleanParameters,
1333 noiseSuppression?: boolean | ConstrainBooleanParameters,
1334 latency?: number | ConstrainDoubleRange,
1335 channelCount?: number | ConstrainLongRange,
1336 deviceId?: string | string[] | ConstrainDOMStringParameters,
1337 groupId?: string | string[] | ConstrainDOMStringParameters,
1338 ...
1339 };
1340
1341 type MediaTrackConstraints = {
1342 ...MediaTrackConstraintSet,
1343 advanced?: Array<MediaTrackConstraintSet>,
1344 ...
1345 };
1346
1347 type DisplayMediaStreamConstraints = {
1348 video?: boolean | MediaTrackConstraints,
1349 audio?: boolean | MediaTrackConstraints,
1350 ...
1351 };
1352
1353 type MediaStreamConstraints = {
1354 audio?: boolean | MediaTrackConstraints,
1355 video?: boolean | MediaTrackConstraints,
1356 peerIdentity?: string,
1357 ...
1358 };
1359
1360 type MediaTrackSettings = {
1361 aspectRatio?: number,
1362 deviceId?: string,
1363 displaySurface?: 'application' | 'browser' | 'monitor' | 'window',
1364 echoCancellation?: boolean,
1365 facingMode?: string,
1366 frameRate?: number,
1367 groupId?: string,
1368 height?: number,
1369 logicalSurface?: boolean,
1370 sampleRate?: number,
1371 sampleSize?: number,
1372 volume?: number,
1373 width?: number,
1374 ...
1375 };
1376
1377 type MediaTrackCapabilities = {
1378 aspectRatio?: number | DoubleRange,
1379 deviceId?: string,
1380 echoCancellation?: boolean[],
1381 facingMode?: string,
1382 frameRate?: number | DoubleRange,
1383 groupId?: string,
1384 height?: number | LongRange,
1385 sampleRate?: number | LongRange,
1386 sampleSize?: number | LongRange,
1387 volume?: number | DoubleRange,
1388 width?: number | LongRange,
1389 ...
1390 };
1391
1392 declare class MediaDevices extends EventTarget {
1393 ondevicechange: (ev: any) => mixed;
1394 enumerateDevices: () => Promise<Array<MediaDeviceInfo>>;
1395 getSupportedConstraints: () => MediaTrackSupportedConstraints;
1396 getDisplayMedia: (
1397 constraints?: DisplayMediaStreamConstraints
1398 ) => Promise<MediaStream>;
1399 getUserMedia: (constraints: MediaStreamConstraints) => Promise<MediaStream>;
1400 }
1401
1402 declare class MediaDeviceInfo {
1403 +deviceId: string;
1404 +groupId: string;
1405 +kind: 'videoinput' | 'audioinput' | 'audiooutput';
1406 +label: string;
1407 }
1408
1409 type MediaRecorderOptions = {
1410 mimeType?: string,
1411 audioBitsPerSecond?: number,
1412 videoBitsPerSecond?: number,
1413 bitsPerSecond?: number,
1414 audioBitrateMode?: 'cbr' | 'vbr',
1415 ...
1416 };
1417
1418 declare class MediaRecorder extends EventTarget {
1419 constructor(stream: MediaStream, options?: MediaRecorderOptions): void;
1420 +stream: MediaStream;
1421 +mimeType: string;
1422 +state: 'inactive' | 'recording' | 'paused';
1423
1424 onstart: (ev: any) => mixed;
1425 onstop: (ev: any) => mixed;
1426 ondataavailable: (ev: any) => mixed;
1427 onpause: (ev: any) => mixed;
1428 onresume: (ev: any) => mixed;
1429 onerror: (ev: any) => mixed;
1430
1431 +videoBitsPerSecond: number;
1432 +audioBitsPerSecond: number;
1433 +audioBitrateMode: 'cbr' | 'vbr';
1434
1435 start(timeslice?: number): void;
1436 stop(): void;
1437 pause(): void;
1438 resume(): void;
1439 requestData(): void;
1440
1441 static isTypeSupported(type: string): boolean;
1442 }
1443
1444 declare class MediaStream extends EventTarget {
1445 active: boolean;
1446 ended: boolean;
1447 id: string;
1448 onactive: (ev: any) => mixed;
1449 oninactive: (ev: any) => mixed;
1450 onended: (ev: any) => mixed;
1451 onaddtrack: (ev: MediaStreamTrackEvent) => mixed;
1452 onremovetrack: (ev: MediaStreamTrackEvent) => mixed;
1453 addTrack(track: MediaStreamTrack): void;
1454 clone(): MediaStream;
1455 getAudioTracks(): MediaStreamTrack[];
1456 getTrackById(trackid?: string): ?MediaStreamTrack;
1457 getTracks(): MediaStreamTrack[];
1458 getVideoTracks(): MediaStreamTrack[];
1459 removeTrack(track: MediaStreamTrack): void;
1460 }
1461
1462 declare class MediaStreamTrack extends EventTarget {
1463 enabled: boolean;
1464 id: string;
1465 kind: string;
1466 label: string;
1467 muted: boolean;
1468 readonly: boolean;
1469 readyState: 'live' | 'ended';
1470 remote: boolean;
1471 contentHint?: string;
1472 onstarted: (ev: any) => mixed;
1473 onmute: (ev: any) => mixed;
1474 onunmute: (ev: any) => mixed;
1475 onoverconstrained: (ev: any) => mixed;
1476 onended: (ev: any) => mixed;
1477 getConstraints(): MediaTrackConstraints;
1478 applyConstraints(constraints?: MediaTrackConstraints): Promise<void>;
1479 getSettings(): MediaTrackSettings;
1480 getCapabilities(): MediaTrackCapabilities;
1481 clone(): MediaStreamTrack;
1482 stop(): void;
1483 }
1484
1485 declare class MediaStreamTrackEvent extends Event {
1486 track: MediaStreamTrack;
1487 }
1488
1489 declare class MediaElementAudioSourceNode extends AudioNode {}
1490 declare class MediaStreamAudioSourceNode extends AudioNode {}
1491 declare class MediaStreamTrackAudioSourceNode extends AudioNode {}
1492
1493 declare class MediaStreamAudioDestinationNode extends AudioNode {
1494 stream: MediaStream;
1495 }
1496
1497 // deprecated
1498 declare class ScriptProcessorNode extends AudioNode {
1499 bufferSize: number;
1500 onaudioprocess: (ev: AudioProcessingEvent) => mixed;
1501 }
1502
1503 declare class AnalyserNode extends AudioNode {
1504 fftSize: number;
1505 frequencyBinCount: number;
1506 minDecibels: number;
1507 maxDecibels: number;
1508 smoothingTimeConstant: number;
1509 getFloatFrequencyData(array: Float32Array): Float32Array;
1510 getByteFrequencyData(array: Uint8Array): Uint8Array;
1511 getFloatTimeDomainData(array: Float32Array): Float32Array;
1512 getByteTimeDomainData(array: Uint8Array): Uint8Array;
1513 }
1514
1515 declare class BiquadFilterNode extends AudioNode {
1516 frequency: AudioParam;
1517 detune: AudioParam;
1518 Q: AudioParam;
1519 gain: AudioParam;
1520 type:
1521 | 'lowpass'
1522 | 'highpass'
1523 | 'bandpass'
1524 | 'lowshelf'
1525 | 'highshelf'
1526 | 'peaking'
1527 | 'notch'
1528 | 'allpass';
1529 getFrequencyResponse(
1530 frequencyHz: Float32Array,
1531 magResponse: Float32Array,
1532 phaseResponse: Float32Array
1533 ): void;
1534 }
1535
1536 declare class ChannelMergerNode extends AudioNode {}
1537 declare class ChannelSplitterNode extends AudioNode {}
1538
1539 type ConstantSourceOptions = {offset?: number, ...};
1540 declare class ConstantSourceNode extends AudioNode {
1541 constructor(context: BaseAudioContext, options?: ConstantSourceOptions): void;
1542 offset: AudioParam;
1543 onended: (ev: any) => mixed;
1544 start(when?: number): void;
1545 stop(when?: number): void;
1546 }
1547
1548 declare class ConvolverNode extends AudioNode {
1549 buffer: AudioBuffer;
1550 normalize: boolean;
1551 }
1552
1553 declare class DelayNode extends AudioNode {
1554 delayTime: number;
1555 }
1556
1557 declare class DynamicsCompressorNode extends AudioNode {
1558 threshold: AudioParam;
1559 knee: AudioParam;
1560 ratio: AudioParam;
1561 reduction: AudioParam;
1562 attack: AudioParam;
1563 release: AudioParam;
1564 }
1565
1566 declare class GainNode extends AudioNode {
1567 gain: AudioParam;
1568 }
1569
1570 declare class IIRFilterNode extends AudioNode {
1571 getFrequencyResponse(
1572 frequencyHz: Float32Array,
1573 magResponse: Float32Array,
1574 phaseResponse: Float32Array
1575 ): void;
1576 }
1577
1578 declare class OscillatorNode extends AudioNode {
1579 frequency: AudioParam;
1580 detune: AudioParam;
1581 type: 'sine' | 'square' | 'sawtooth' | 'triangle' | 'custom';
1582 start(when?: number): void;
1583 stop(when?: number): void;
1584 setPeriodicWave(periodicWave: PeriodicWave): void;
1585 onended: (ev: any) => mixed;
1586 }
1587
1588 declare class StereoPannerNode extends AudioNode {
1589 pan: AudioParam;
1590 }
1591
1592 declare class PannerNode extends AudioNode {
1593 panningModel: 'equalpower' | 'HRTF';
1594 distanceModel: 'linear' | 'inverse' | 'exponential';
1595 refDistance: number;
1596 maxDistance: number;
1597 rolloffFactor: number;
1598 coneInnerAngle: number;
1599 coneOuterAngle: number;
1600 coneOuterGain: number;
1601 setPosition(x: number, y: number, z: number): void;
1602 setOrientation(x: number, y: number, z: number): void;
1603 }
1604
1605 declare class PeriodicWave extends AudioNode {}
1606 declare class WaveShaperNode extends AudioNode {
1607 curve: Float32Array;
1608 oversample: 'none' | '2x' | '4x';
1609 }
1610
1611 // this part of spec is not finished yet, apparently
1612 // https://stackoverflow.com/questions/35296664/can-fetch-get-object-as-headers
1613 type HeadersInit =
1614 | Headers
1615 | Array<[string, string]>
1616 | {[key: string]: string, ...};
1617
1618 // TODO Heades and URLSearchParams are almost the same thing.
1619 // Could it somehow be abstracted away?
1620 declare class Headers {
1621 @@iterator(): Iterator<[string, string]>;
1622 constructor(init?: HeadersInit): void;
1623 append(name: string, value: string): void;
1624 delete(name: string): void;
1625 entries(): Iterator<[string, string]>;
1626 forEach<This>(
1627 callback: (
1628 this: This,
1629 value: string,
1630 name: string,
1631 headers: Headers
1632 ) => mixed,
1633 thisArg: This
1634 ): void;
1635 get(name: string): null | string;
1636 has(name: string): boolean;
1637 keys(): Iterator<string>;
1638 set(name: string, value: string): void;
1639 values(): Iterator<string>;
1640 }
1641
1642 declare class URLSearchParams {
1643 @@iterator(): Iterator<[string, string]>;
1644
1645 size: number;
1646
1647 constructor(
1648 init?:
1649 | string
1650 | URLSearchParams
1651 | Array<[string, string]>
1652 | {[string]: string, ...}
1653 ): void;
1654 append(name: string, value: string): void;
1655 delete(name: string, value?: string): void;
1656 entries(): Iterator<[string, string]>;
1657 forEach<This>(
1658 callback: (
1659 this: This,
1660 value: string,
1661 name: string,
1662 params: URLSearchParams
1663 ) => mixed,
1664 thisArg: This
1665 ): void;
1666 get(name: string): null | string;
1667 getAll(name: string): Array<string>;
1668 has(name: string, value?: string): boolean;
1669 keys(): Iterator<string>;
1670 set(name: string, value: string): void;
1671 sort(): void;
1672 values(): Iterator<string>;
1673 toString(): string;
1674 }
1675
1676 type CacheType =
1677 | 'default'
1678 | 'no-store'
1679 | 'reload'
1680 | 'no-cache'
1681 | 'force-cache'
1682 | 'only-if-cached';
1683 type CredentialsType = 'omit' | 'same-origin' | 'include';
1684 type ModeType = 'cors' | 'no-cors' | 'same-origin' | 'navigate';
1685 type RedirectType = 'follow' | 'error' | 'manual';
1686 type ReferrerPolicyType =
1687 | ''
1688 | 'no-referrer'
1689 | 'no-referrer-when-downgrade'
1690 | 'same-origin'
1691 | 'origin'
1692 | 'strict-origin'
1693 | 'origin-when-cross-origin'
1694 | 'strict-origin-when-cross-origin'
1695 | 'unsafe-url';
1696
1697 type ResponseType =
1698 | 'basic'
1699 | 'cors'
1700 | 'default'
1701 | 'error'
1702 | 'opaque'
1703 | 'opaqueredirect';
1704
1705 type BodyInit =
1706 | string
1707 | URLSearchParams
1708 | FormData
1709 | Blob
1710 | ArrayBuffer
1711 | $ArrayBufferView
1712 | ReadableStream;
1713
1714 type RequestInfo = Request | URL | string;
1715
1716 type RequestOptions = {
1717 body?: ?BodyInit,
1718 cache?: CacheType,
1719 credentials?: CredentialsType,
1720 headers?: HeadersInit,
1721 integrity?: string,
1722 keepalive?: boolean,
1723 method?: string,
1724 mode?: ModeType,
1725 redirect?: RedirectType,
1726 referrer?: string,
1727 referrerPolicy?: ReferrerPolicyType,
1728 signal?: ?AbortSignal,
1729 window?: any,
1730 ...
1731 };
1732
1733 type ResponseOptions = {
1734 status?: number,
1735 statusText?: string,
1736 headers?: HeadersInit,
1737 ...
1738 };
1739
1740 declare class Response {
1741 constructor(input?: ?BodyInit, init?: ResponseOptions): void;
1742 clone(): Response;
1743 static error(): Response;
1744 static redirect(url: string, status?: number): Response;
1745
1746 redirected: boolean;
1747 type: ResponseType;
1748 url: string;
1749 ok: boolean;
1750 status: number;
1751 statusText: string;
1752 headers: Headers;
1753 trailer: Promise<Headers>;
1754
1755 // Body methods and attributes
1756 bodyUsed: boolean;
1757 body: ?ReadableStream;
1758
1759 arrayBuffer(): Promise<ArrayBuffer>;
1760 blob(): Promise<Blob>;
1761 formData(): Promise<FormData>;
1762 json(): Promise<any>;
1763 text(): Promise<string>;
1764 }
1765
1766 declare class Request {
1767 constructor(input: RequestInfo, init?: RequestOptions): void;
1768 clone(): Request;
1769
1770 url: string;
1771
1772 cache: CacheType;
1773 credentials: CredentialsType;
1774 headers: Headers;
1775 integrity: string;
1776 method: string;
1777 mode: ModeType;
1778 redirect: RedirectType;
1779 referrer: string;
1780 referrerPolicy: ReferrerPolicyType;
1781 +signal: AbortSignal;
1782
1783 // Body methods and attributes
1784 bodyUsed: boolean;
1785
1786 arrayBuffer(): Promise<ArrayBuffer>;
1787 blob(): Promise<Blob>;
1788 formData(): Promise<FormData>;
1789 json(): Promise<any>;
1790 text(): Promise<string>;
1791 }
1792
1793 declare function fetch(
1794 input: RequestInfo,
1795 init?: RequestOptions
1796 ): Promise<Response>;
1797
1798 type TextEncoder$availableEncodings =
1799 | 'utf-8'
1800 | 'utf8'
1801 | 'unicode-1-1-utf-8'
1802 | 'utf-16be'
1803 | 'utf-16'
1804 | 'utf-16le';
1805
1806 declare class TextEncoder {
1807 constructor(encoding?: TextEncoder$availableEncodings): void;
1808 encode(buffer: string, options?: {stream: boolean, ...}): Uint8Array;
1809 encoding: TextEncoder$availableEncodings;
1810 }
1811
1812 type TextDecoder$availableEncodings =
1813 | '866'
1814 | 'ansi_x3.4-1968'
1815 | 'arabic'
1816 | 'ascii'
1817 | 'asmo-708'
1818 | 'big5-hkscs'
1819 | 'big5'
1820 | 'chinese'
1821 | 'cn-big5'
1822 | 'cp1250'
1823 | 'cp1251'
1824 | 'cp1252'
1825 | 'cp1253'
1826 | 'cp1254'
1827 | 'cp1255'
1828 | 'cp1256'
1829 | 'cp1257'
1830 | 'cp1258'
1831 | 'cp819'
1832 | 'cp866'
1833 | 'csbig5'
1834 | 'cseuckr'
1835 | 'cseucpkdfmtjapanese'
1836 | 'csgb2312'
1837 | 'csibm866'
1838 | 'csiso2022jp'
1839 | 'csiso2022kr'
1840 | 'csiso58gb231280'
1841 | 'csiso88596e'
1842 | 'csiso88596i'
1843 | 'csiso88598e'
1844 | 'csiso88598i'
1845 | 'csisolatin1'
1846 | 'csisolatin2'
1847 | 'csisolatin3'
1848 | 'csisolatin4'
1849 | 'csisolatin5'
1850 | 'csisolatin6'
1851 | 'csisolatin9'
1852 | 'csisolatinarabic'
1853 | 'csisolatincyrillic'
1854 | 'csisolatingreek'
1855 | 'csisolatinhebrew'
1856 | 'cskoi8r'
1857 | 'csksc56011987'
1858 | 'csmacintosh'
1859 | 'csshiftjis'
1860 | 'cyrillic'
1861 | 'dos-874'
1862 | 'ecma-114'
1863 | 'ecma-118'
1864 | 'elot_928'
1865 | 'euc-jp'
1866 | 'euc-kr'
1867 | 'gb_2312-80'
1868 | 'gb_2312'
1869 | 'gb18030'
1870 | 'gb2312'
1871 | 'gbk'
1872 | 'greek'
1873 | 'greek8'
1874 | 'hebrew'
1875 | 'hz-gb-2312'
1876 | 'ibm819'
1877 | 'ibm866'
1878 | 'iso_8859-1:1987'
1879 | 'iso_8859-1'
1880 | 'iso_8859-2:1987'
1881 | 'iso_8859-2'
1882 | 'iso_8859-3:1988'
1883 | 'iso_8859-3'
1884 | 'iso_8859-4:1988'
1885 | 'iso_8859-4'
1886 | 'iso_8859-5:1988'
1887 | 'iso_8859-5'
1888 | 'iso_8859-6:1987'
1889 | 'iso_8859-6'
1890 | 'iso_8859-7:1987'
1891 | 'iso_8859-7'
1892 | 'iso_8859-8:1988'
1893 | 'iso_8859-8'
1894 | 'iso_8859-9:1989'
1895 | 'iso_8859-9'
1896 | 'iso-2022-cn-ext'
1897 | 'iso-2022-cn'
1898 | 'iso-2022-jp'
1899 | 'iso-2022-kr'
1900 | 'iso-8859-1'
1901 | 'iso-8859-10'
1902 | 'iso-8859-11'
1903 | 'iso-8859-13'
1904 | 'iso-8859-14'
1905 | 'iso-8859-15'
1906 | 'iso-8859-16'
1907 | 'iso-8859-2'
1908 | 'iso-8859-3'
1909 | 'iso-8859-4'
1910 | 'iso-8859-5'
1911 | 'iso-8859-6-e'
1912 | 'iso-8859-6-i'
1913 | 'iso-8859-6'
1914 | 'iso-8859-7'
1915 | 'iso-8859-8-e'
1916 | 'iso-8859-8-i'
1917 | 'iso-8859-8'
1918 | 'iso-8859-9'
1919 | 'iso-ir-100'
1920 | 'iso-ir-101'
1921 | 'iso-ir-109'
1922 | 'iso-ir-110'
1923 | 'iso-ir-126'
1924 | 'iso-ir-127'
1925 | 'iso-ir-138'
1926 | 'iso-ir-144'
1927 | 'iso-ir-148'
1928 | 'iso-ir-149'
1929 | 'iso-ir-157'
1930 | 'iso-ir-58'
1931 | 'iso8859-1'
1932 | 'iso8859-10'
1933 | 'iso8859-11'
1934 | 'iso8859-13'
1935 | 'iso8859-14'
1936 | 'iso8859-15'
1937 | 'iso8859-2'
1938 | 'iso8859-3'
1939 | 'iso8859-4'
1940 | 'iso8859-6'
1941 | 'iso8859-7'
1942 | 'iso8859-8'
1943 | 'iso8859-9'
1944 | 'iso88591'
1945 | 'iso885910'
1946 | 'iso885911'
1947 | 'iso885913'
1948 | 'iso885914'
1949 | 'iso885915'
1950 | 'iso88592'
1951 | 'iso88593'
1952 | 'iso88594'
1953 | 'iso88595'
1954 | 'iso88596'
1955 | 'iso88597'
1956 | 'iso88598'
1957 | 'iso88599'
1958 | 'koi'
1959 | 'koi8_r'
1960 | 'koi8-r'
1961 | 'koi8-u'
1962 | 'koi8'
1963 | 'korean'
1964 | 'ks_c_5601-1987'
1965 | 'ks_c_5601-1989'
1966 | 'ksc_5601'
1967 | 'ksc5601'
1968 | 'l1'
1969 | 'l2'
1970 | 'l3'
1971 | 'l4'
1972 | 'l5'
1973 | 'l6'
1974 | 'l9'
1975 | 'latin1'
1976 | 'latin2'
1977 | 'latin3'
1978 | 'latin4'
1979 | 'latin5'
1980 | 'latin6'
1981 | 'latin9'
1982 | 'logical'
1983 | 'mac'
1984 | 'macintosh'
1985 | 'ms_kanji'
1986 | 'shift_jis'
1987 | 'shift-jis'
1988 | 'sjis'
1989 | 'sun_eu_greek'
1990 | 'tis-620'
1991 | 'unicode-1-1-utf-8'
1992 | 'us-ascii'
1993 | 'utf-16'
1994 | 'utf-16be'
1995 | 'utf-16le'
1996 | 'utf-8'
1997 | 'utf8'
1998 | 'visual'
1999 | 'windows-1250'
2000 | 'windows-1251'
2001 | 'windows-1252'
2002 | 'windows-1253'
2003 | 'windows-1254'
2004 | 'windows-1255'
2005 | 'windows-1256'
2006 | 'windows-1257'
2007 | 'windows-1258'
2008 | 'windows-31j'
2009 | 'windows-874'
2010 | 'windows-949'
2011 | 'x-cp1250'
2012 | 'x-cp1251'
2013 | 'x-cp1252'
2014 | 'x-cp1253'
2015 | 'x-cp1254'
2016 | 'x-cp1255'
2017 | 'x-cp1256'
2018 | 'x-cp1257'
2019 | 'x-cp1258'
2020 | 'x-euc-jp'
2021 | 'x-gbk'
2022 | 'x-mac-cyrillic'
2023 | 'x-mac-roman'
2024 | 'x-mac-ukrainian'
2025 | 'x-sjis'
2026 | 'x-user-defined'
2027 | 'x-x-big5';
2028
2029 declare class TextDecoder {
2030 constructor(
2031 encoding?: TextDecoder$availableEncodings,
2032 options?: {fatal: boolean, ...}
2033 ): void;
2034 encoding: TextDecoder$availableEncodings;
2035 fatal: boolean;
2036 ignoreBOM: boolean;
2037 decode(
2038 buffer?: ArrayBuffer | $ArrayBufferView,
2039 options?: {stream: boolean, ...}
2040 ): string;
2041 }
2042
2043 declare class TextDecoderStream {
2044 constructor(
2045 encoding?: TextDecoder$availableEncodings,
2046 options?: {fatal?: boolean, ignoreBOM?: boolean, ...}
2047 ): void;
2048 encoding: TextDecoder$availableEncodings;
2049 fatal: boolean;
2050 ignoreBOM: boolean;
2051 readable: ReadableStream;
2052 writable: WritableStream;
2053 }
2054
2055 declare class MessagePort extends EventTarget {
2056 postMessage(message: any, transfer?: Iterable<any>): void;
2057 start(): void;
2058 close(): void;
2059
2060 onmessage: null | ((ev: MessageEvent<>) => mixed);
2061 onmessageerror: null | ((ev: MessageEvent<>) => mixed);
2062 }
2063
2064 declare class MessageChannel {
2065 port1: MessagePort;
2066 port2: MessagePort;
2067 }
2068
2069 declare class VRDisplay extends EventTarget {
2070 capabilities: VRDisplayCapabilities;
2071 depthFar: number;
2072 depthNear: number;
2073 displayId: number;
2074 displayName: string;
2075 isPresenting: boolean;
2076 stageParameters: null | VRStageParameters;
2077
2078 cancelAnimationFrame(number): void;
2079 exitPresent(): Promise<void>;
2080 getEyeParameters(VREye): VREyeParameters;
2081 getFrameData(VRFrameData): boolean;
2082 getLayers(): VRLayerInit[];
2083 requestAnimationFrame(cb: (number) => mixed): number;
2084 requestPresent(VRLayerInit[]): Promise<void>;
2085 submitFrame(): void;
2086 }
2087
2088 type VRSource = HTMLCanvasElement;
2089
2090 type VRLayerInit = {
2091 leftBounds?: number[],
2092 rightBounds?: number[],
2093 source?: null | VRSource,
2094 ...
2095 };
2096
2097 type VRDisplayCapabilities = {
2098 canPresent: boolean,
2099 hasExternalDisplay: boolean,
2100 hasPosition: boolean,
2101 maxLayers: number,
2102 ...
2103 };
2104
2105 type VREye = 'left' | 'right';
2106
2107 type VRPose = {
2108 angularAcceleration?: Float32Array,
2109 angularVelocity?: Float32Array,
2110 linearAcceleration?: Float32Array,
2111 linearVelocity?: Float32Array,
2112 orientation?: Float32Array,
2113 position?: Float32Array,
2114 ...
2115 };
2116
2117 declare class VRFrameData {
2118 leftProjectionMatrix: Float32Array;
2119 leftViewMatrix: Float32Array;
2120 pose: VRPose;
2121 rightProjectionMatrix: Float32Array;
2122 rightViewMatrix: Float32Array;
2123 timestamp: number;
2124 }
2125
2126 type VREyeParameters = {
2127 offset: Float32Array,
2128 renderWidth: number,
2129 renderHeight: number,
2130 ...
2131 };
2132
2133 type VRStageParameters = {
2134 sittingToStandingTransform: Float32Array,
2135 sizeX: number,
2136 sizeZ: number,
2137 ...
2138 };
2139
2140 type VRDisplayEventReason =
2141 | 'mounted'
2142 | 'navigation'
2143 | 'requested'
2144 | 'unmounted';
2145
2146 type VRDisplayEventInit = {
2147 display: VRDisplay,
2148 reason: VRDisplayEventReason,
2149 ...
2150 };
2151
2152 declare class VRDisplayEvent extends Event {
2153 constructor(type: string, eventInitDict: VRDisplayEventInit): void;
2154 display: VRDisplay;
2155 reason?: VRDisplayEventReason;
2156 }
2157
2158 declare class MediaQueryListEvent {
2159 matches: boolean;
2160 media: string;
2161 }
2162
2163 declare type MediaQueryListListener = (MediaQueryListEvent) => void;
2164
2165 declare class MediaQueryList extends EventTarget {
2166 matches: boolean;
2167 media: string;
2168 addListener: MediaQueryListListener => void;
2169 removeListener: MediaQueryListListener => void;
2170 onchange: MediaQueryListListener;
2171 }
2172
2173 declare var matchMedia: string => MediaQueryList;
2174
2175 // https://w3c.github.io/webappsec-credential-management/#idl-index
2176 declare type CredMgmtCredentialRequestOptions = {
2177 mediation?: 'silent' | 'optional' | 'required',
2178 signal?: AbortSignal,
2179 ...
2180 };
2181
2182 declare type CredMgmtCredentialCreationOptions = {signal: AbortSignal, ...};
2183
2184 declare interface CredMgmtCredential {
2185 id: string;
2186 type: string;
2187 }
2188
2189 declare interface CredMgmtPasswordCredential extends CredMgmtCredential {
2190 password: string;
2191 }
2192
2193 declare interface CredMgmtCredentialsContainer {
2194 get(option?: CredMgmtCredentialRequestOptions): Promise<?CredMgmtCredential>;
2195 store(credential: CredMgmtCredential): Promise<CredMgmtCredential>;
2196 create(
2197 creationOption?: CredMgmtCredentialCreationOptions
2198 ): Promise<?CredMgmtCredential>;
2199 preventSilentAccess(): Promise<void>;
2200 }
2201
2202 type SpeechSynthesisErrorCode =
2203 | 'canceled'
2204 | 'interrupted'
2205 | 'audio-busy'
2206 | 'audio-hardware'
2207 | 'network'
2208 | 'synthesis-unavailable'
2209 | 'synthesis-failed'
2210 | 'language-unavailable'
2211 | 'voice-unavailable'
2212 | 'text-too-long'
2213 | 'invalid-argument'
2214 | 'not-allowed';
2215
2216 declare class SpeechSynthesis extends EventTarget {
2217 +pending: boolean;
2218 +speaking: boolean;
2219 +paused: boolean;
2220
2221 onvoiceschanged: ?(ev: Event) => mixed;
2222
2223 speak(utterance: SpeechSynthesisUtterance): void;
2224 cancel(): void;
2225 pause(): void;
2226 resume(): void;
2227 getVoices(): Array<SpeechSynthesisVoice>;
2228 }
2229
2230 declare var speechSynthesis: SpeechSynthesis;
2231
2232 declare class SpeechSynthesisUtterance extends EventTarget {
2233 constructor(text?: string): void;
2234
2235 text: string;
2236 lang: string;
2237 voice: SpeechSynthesisVoice | null;
2238 volume: number;
2239 rate: number;
2240 pitch: number;
2241
2242 onstart: ?(ev: SpeechSynthesisEvent) => mixed;
2243 onend: ?(ev: SpeechSynthesisEvent) => mixed;
2244 onerror: ?(ev: SpeechSynthesisErrorEvent) => mixed;
2245 onpause: ?(ev: SpeechSynthesisEvent) => mixed;
2246 onresume: ?(ev: SpeechSynthesisEvent) => mixed;
2247 onmark: ?(ev: SpeechSynthesisEvent) => mixed;
2248 onboundary: ?(ev: SpeechSynthesisEvent) => mixed;
2249 }
2250
2251 type SpeechSynthesisEvent$Init = Event$Init & {
2252 utterance: SpeechSynthesisUtterance,
2253 charIndex?: number,
2254 charLength?: number,
2255 elapsedTime?: number,
2256 name?: string,
2257 ...
2258 };
2259
2260 declare class SpeechSynthesisEvent extends Event {
2261 constructor(type: string, eventInitDict?: SpeechSynthesisEvent$Init): void;
2262
2263 +utterance: SpeechSynthesisUtterance;
2264 charIndex: number;
2265 charLength: number;
2266 elapsedTime: number;
2267 name: string;
2268 }
2269
2270 type SpeechSynthesisErrorEvent$Init = SpeechSynthesisEvent$Init & {
2271 error: SpeechSynthesisErrorCode,
2272 ...
2273 };
2274
2275 declare class SpeechSynthesisErrorEvent extends SpeechSynthesisEvent {
2276 constructor(
2277 type: string,
2278 eventInitDict?: SpeechSynthesisErrorEvent$Init
2279 ): void;
2280 +error: SpeechSynthesisErrorCode;
2281 }
2282
2283 declare class SpeechSynthesisVoice {
2284 +voiceURI: string;
2285 +name: string;
2286 +lang: string;
2287 +localService: boolean;
2288 +default: boolean;
2289 }
2290
2291 type SpeechRecognitionErrorCode =
2292 | 'no-speech'
2293 | 'aborted'
2294 | 'audio-capture'
2295 | 'not-allowed'
2296 | 'service-not-allowed'
2297 | 'bad-grammar'
2298 | 'language-not-supported';
2299
2300 declare class SpeechGrammar {
2301 constructor(): void;
2302
2303 src: string;
2304 weight?: number;
2305 }
2306
2307 declare class SpeechGrammarList {
2308 +length: number;
2309
2310 item(index: number): SpeechGrammar;
2311 addFromURI(src: string, weight?: number): void;
2312 addFromString(string: string, weight?: number): void;
2313 }
2314
2315 declare class SpeechRecognitionAlternative {
2316 +transcript: string;
2317 +confidence: number;
2318 }
2319
2320 declare class SpeechRecognitionResult {
2321 +isFinal: boolean;
2322 +length: number;
2323
2324 item(index: number): SpeechRecognitionAlternative;
2325 }
2326
2327 declare class SpeechRecognitionResultList {
2328 +length: number;
2329
2330 item(index: number): SpeechRecognitionResult;
2331 }
2332
2333 type SpeechRecognitionEvent$Init = Event$Init & {
2334 emma: any,
2335 interpretation: any,
2336 resultIndex: number,
2337 results: SpeechRecognitionResultList,
2338 ...
2339 };
2340
2341 declare class SpeechRecognitionEvent extends Event {
2342 constructor(type: string, eventInitDict?: SpeechRecognitionEvent$Init): void;
2343
2344 +emma: any;
2345 +interpretation: any;
2346 +resultIndex: number;
2347 +results: SpeechRecognitionResultList;
2348 }
2349
2350 type SpeechRecognitionErrorEvent$Init = SpeechRecognitionEvent$Init & {
2351 error: SpeechRecognitionErrorCode,
2352 ...
2353 };
2354
2355 declare class SpeechRecognitionErrorEvent extends SpeechRecognitionEvent {
2356 constructor(
2357 type: string,
2358 eventInitDict?: SpeechRecognitionErrorEvent$Init
2359 ): void;
2360 +error: SpeechRecognitionErrorCode;
2361 +message: string;
2362 }
2363
2364 declare class SpeechRecognition extends EventTarget {
2365 constructor(): void;
2366
2367 +grammars: SpeechGrammar[];
2368 +lang: string;
2369 +continuous: boolean;
2370 +interimResults: boolean;
2371 +maxAlternatives: number;
2372 +serviceURI: string;
2373
2374 onaudiostart: ?(ev: Event) => mixed;
2375 onaudioend: ?(ev: Event) => mixed;
2376 onend: ?(ev: Event) => mixed;
2377 onerror: ?(ev: Event) => mixed;
2378 onnomatch: ?(ev: Event) => mixed;
2379 onsoundstart: ?(ev: Event) => mixed;
2380 onsoundend: ?(ev: Event) => mixed;
2381 onspeechstart: ?(ev: Event) => mixed;
2382 onspeechend: ?(ev: Event) => mixed;
2383 onstart: ?(ev: Event) => mixed;
2384
2385 abort(): void;
2386 start(): void;
2387 stop(): void;
2388 }
2389
2390 /* Trusted Types
2391 * https://w3c.github.io/trusted-types/dist/spec/#trusted-types
2392 */
2393 declare class TrustedHTML {
2394 toString(): string;
2395 toJSON(): string;
2396 }
2397
2398 declare class TrustedScript {
2399 toString(): string;
2400 toJSON(): string;
2401 }
2402
2403 declare class TrustedScriptURL {
2404 toString(): string;
2405 toJSON(): string;
2406 }
2407
2408 declare class TrustedTypePolicy {
2409 +name: string;
2410 createHTML(input: string, ...args: Array<mixed>): TrustedHTML;
2411 createScript(input: string, ...args: Array<mixed>): TrustedScript;
2412 createScriptURL(input: string, ...args: Array<mixed>): TrustedScriptURL;
2413 }
2414
2415 declare type TrustedTypePolicyOptions = {|
2416 createHTML?: (string, ...args: Array<mixed>) => string,
2417 createScript?: (string, ...args: Array<mixed>) => string,
2418 createScriptURL?: (string, ...args: Array<mixed>) => string,
2419 |};
2420
2421 // window.trustedTypes?: TrustedTypePolicyFactory
2422 declare class TrustedTypePolicyFactory {
2423 +emptyHTML: TrustedHTML;
2424 +emptyScript: TrustedScript;
2425 +defaultPolicy: ?TrustedTypePolicy;
2426 +isHTML: (value: mixed) => value is TrustedHTML;
2427 +isScript: (value: mixed) => value is TrustedScript;
2428 +isScriptURL: (value: mixed) => value is TrustedScriptURL;
2429 createPolicy(
2430 policyName: string,
2431 policyOptions?: TrustedTypePolicyOptions
2432 ): TrustedTypePolicy;
2433 getAttributeType(
2434 tagName: string,
2435 attribute?: string,
2436 elementNS?: string,
2437 attrNS?: string
2438 ): null | string;
2439 getPropertyType(
2440 tagName: string,
2441 property: string,
2442 elementNS?: string
2443 ): null | string;
2444 }
2445
2446 // https://wicg.github.io/webusb/
2447 // https://developer.mozilla.org/en-US/docs/Web/API/USBDevice
2448 declare class USBDevice {
2449 configuration: USBConfiguration;
2450 configurations: Array<USBConfiguration>;
2451 deviceClass: number;
2452 deviceProtocol: number;
2453 deviceSubclass: number;
2454 deviceVersionMajor: number;
2455 deviceVersionMinor: number;
2456 deviceVersionSubminor: number;
2457 manufacturerName: ?string;
2458 opened: boolean;
2459 productId: number;
2460 productName: ?string;
2461 serialNumber: ?string;
2462 usbVersionMajor: number;
2463 usbVersionMinor: number;
2464 usbVersionSubminor: number;
2465 vendorId: number;
2466 claimInterface(interfaceNumber: number): Promise<void>;
2467 clearHalt(direction: 'in' | 'out', endpointNumber: number): Promise<void>;
2468 close(): Promise<void>;
2469 controlTransferIn(
2470 setup: SetUpOptions,
2471 length: number
2472 ): Promise<USBInTransferResult>;
2473 controlTransferOut(
2474 setup: SetUpOptions,
2475 data: ArrayBuffer
2476 ): Promise<USBOutTransferResult>;
2477 forget(): Promise<void>;
2478 isochronousTransferIn(
2479 endpointNumber: number,
2480 packetLengths: Array<number>
2481 ): Promise<USBIsochronousInTransferResult>;
2482 isochronousTransferOut(
2483 endpointNumber: number,
2484 data: ArrayBuffer,
2485 packetLengths: Array<number>
2486 ): Promise<USBIsochronousOutTransferResult>;
2487 open(): Promise<void>;
2488 releaseInterface(interfaceNumber: number): Promise<void>;
2489 reset(): Promise<void>;
2490 selectAlternateInterface(
2491 interfaceNumber: number,
2492 alternateSetting: number
2493 ): Promise<void>;
2494 selectConfiguration(configurationValue: number): Promise<void>;
2495 transferIn(
2496 endpointNumber: number,
2497 length: number
2498 ): Promise<USBInTransferResult>;
2499 transferOut(
2500 endpointNumber: number,
2501 data: ArrayBuffer
2502 ): Promise<USBOutTransferResult>;
2503 }
2504
2505 declare class USB extends EventTarget {
2506 getDevices(): Promise<Array<USBDevice>>;
2507 requestDevice(options: USBDeviceRequestOptions): Promise<USBDevice>;
2508 }
2509
2510 declare type USBDeviceFilter = {|
2511 vendorId?: number,
2512 productId?: number,
2513 classCode?: number,
2514 subclassCode?: number,
2515 protocolCode?: number,
2516 serialNumber?: string,
2517 |};
2518
2519 declare type USBDeviceRequestOptions = {|
2520 filters: Array<USBDeviceFilter>,
2521 exclusionFilters?: Array<USBDeviceFilter>,
2522 |};
2523
2524 declare class USBConfiguration {
2525 constructor(): void;
2526 configurationName: ?string;
2527 configurationValue: number;
2528 interfaces: $ReadOnlyArray<USBInterface>;
2529 }
2530
2531 declare class USBInterface {
2532 constructor(): void;
2533 interfaceNumber: number;
2534 alternate: USBAlternateInterface;
2535 alternates: Array<USBAlternateInterface>;
2536 claimed: boolean;
2537 }
2538
2539 declare class USBAlternateInterface {
2540 constructor(): void;
2541 alternateSetting: number;
2542 interfaceClass: number;
2543 interfaceSubclass: number;
2544 interfaceProtocol: number;
2545 interfaceName: ?string;
2546 endpoints: Array<USBEndpoint>;
2547 }
2548
2549 declare class USBEndpoint {
2550 constructor(): void;
2551 endpointNumber: number;
2552 direction: 'in' | 'out';
2553 type: 'bulk' | 'interrupt' | 'isochronous';
2554 packetSize: number;
2555 }
2556
2557 declare class USBOutTransferResult {
2558 constructor(): void;
2559 bytesWritten: number;
2560 status: 'ok' | 'stall';
2561 }
2562
2563 declare class USBInTransferResult {
2564 constructor(): void;
2565 data: DataView;
2566 status: 'ok' | 'stall' | 'babble';
2567 }
2568
2569 declare class USBIsochronousInTransferResult {
2570 constructor(): void;
2571 data: DataView;
2572 packets: Array<USBIsochronousInTransferPacket>;
2573 }
2574
2575 declare class USBIsochronousInTransferPacket {
2576 constructor(): void;
2577 data: DataView;
2578 status: 'ok' | 'stall' | 'babble';
2579 }
2580
2581 declare class USBIsochronousOutTransferResult {
2582 constructor(): void;
2583 packets: Array<USBIsochronousOutTransferPacket>;
2584 }
2585
2586 declare class USBIsochronousOutTransferPacket {
2587 constructor(): void;
2588 bytesWritten: number;
2589 status: 'ok' | 'stall';
2590 }
2591
2592 type SetUpOptions = {
2593 requestType: string,
2594 recipient: string,
2595 request: number,
2596 value: number,
2597 index: number,
2598 ...
2599 };
2600
2601 declare type FileSystemHandleKind = 'file' | 'directory';
2602
2603 // https://wicg.github.io/file-system-access/#api-filesystemhandle
2604 declare class FileSystemHandle {
2605 +kind: FileSystemHandleKind;
2606 +name: string;
2607
2608 isSameEntry: (other: FileSystemHandle) => Promise<boolean>;
2609 queryPermission?: (
2610 descriptor: FileSystemHandlePermissionDescriptor
2611 ) => Promise<PermissionStatus>;
2612 requestPermission?: (
2613 descriptor: FileSystemHandlePermissionDescriptor
2614 ) => Promise<PermissionStatus>;
2615 }
2616
2617 // https://fs.spec.whatwg.org/#api-filesystemfilehandle
2618 declare class FileSystemFileHandle extends FileSystemHandle {
2619 +kind: 'file';
2620
2621 constructor(name: string): void;
2622
2623 getFile(): Promise<File>;
2624 createSyncAccessHandle(): Promise<FileSystemSyncAccessHandle>;
2625 createWritable(options?: {|
2626 keepExistingData?: boolean,
2627 |}): Promise<FileSystemWritableFileStream>;
2628 }
2629
2630 // https://fs.spec.whatwg.org/#api-filesystemdirectoryhandle
2631 declare class FileSystemDirectoryHandle extends FileSystemHandle {
2632 +kind: 'directory';
2633
2634 constructor(name: string): void;
2635
2636 getDirectoryHandle(
2637 name: string,
2638 options?: {|create?: boolean|}
2639 ): Promise<FileSystemDirectoryHandle>;
2640 getFileHandle(
2641 name: string,
2642 options?: {|create?: boolean|}
2643 ): Promise<FileSystemFileHandle>;
2644 removeEntry(name: string, options?: {|recursive?: boolean|}): Promise<void>;
2645 resolve(possibleDescendant: FileSystemHandle): Promise<Array<string> | null>;
2646
2647 // Async iterator functions
2648 @@asyncIterator(): AsyncIterator<[string, FileSystemHandle]>;
2649 entries(): AsyncIterator<[string, FileSystemHandle]>;
2650 keys(): AsyncIterator<string>;
2651 values(): AsyncIterator<FileSystemHandle>;
2652 }
2653
2654 // https://fs.spec.whatwg.org/#api-filesystemsyncaccesshandle
2655 declare class FileSystemSyncAccessHandle {
2656 close(): void;
2657 flush(): void;
2658 getSize(): number;
2659 read(buffer: ArrayBuffer, options?: {|at: number|}): number;
2660 truncate(newSize: number): void;
2661 write(buffer: ArrayBuffer, options?: {|at: number|}): number;
2662 }
2663
2664 // https://streams.spec.whatwg.org/#default-writer-class
2665 declare class WritableStreamDefaultWriter {
2666 +closed: Promise<void>;
2667 +desiredSize: number;
2668 +ready: Promise<void>;
2669
2670 constructor(): void;
2671
2672 abort(reason?: string): Promise<void>;
2673 close(): Promise<void>;
2674 releaseLock(): void;
2675 write(chunk: any): Promise<void>;
2676 }
2677
2678 // https://streams.spec.whatwg.org/#ws-class
2679 declare class WriteableStream {
2680 +locked: boolean;
2681
2682 constructor(): void;
2683
2684 abort(reason: string): Promise<string>;
2685 close(): Promise<void>;
2686 getWriter(): WritableStreamDefaultWriter;
2687 }
2688
2689 // https://fs.spec.whatwg.org/#dictdef-writeparams
2690 declare type FileSystemWriteableFileStreamDataTypes =
2691 | ArrayBuffer
2692 | $TypedArray
2693 | DataView
2694 | Blob
2695 | string;
2696
2697 // https://fs.spec.whatwg.org/#dictdef-writeparams
2698 declare type FileSystemWriteableFileStreamData =
2699 | FileSystemWriteableFileStreamDataTypes
2700 | {|
2701 type: 'write',
2702 position?: number,
2703 data: FileSystemWriteableFileStreamDataTypes,
2704 |}
2705 | {|
2706 type: 'seek',
2707 position: number,
2708 data: FileSystemWriteableFileStreamDataTypes,
2709 |}
2710 | {|
2711 type: 'size',
2712 size: number,
2713 |};
2714
2715 // https://fs.spec.whatwg.org/#api-filesystemwritablefilestream
2716 declare class FileSystemWritableFileStream extends WriteableStream {
2717 write(data: FileSystemWriteableFileStreamData): Promise<void>;
2718 truncate(size: number): Promise<void>;
2719 seek(position: number): Promise<void>;
2720 }