Skip to content

Commit 17d343a

Browse files
authored
Restore FileReaderProgressEvent (#704)
This type doesn't exist, but is useful until we parametrise ProgressEvent with subtype properties. Fixes microsoft/TypeScript#25510
1 parent 7851d16 commit 17d343a

File tree

7 files changed

+72
-48
lines changed

7 files changed

+72
-48
lines changed

baselines/dom.generated.d.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4558,6 +4558,7 @@ interface Document extends Node, NonElementParentNode, DocumentOrShadowRoot, Par
45584558
createEvent(eventInterface: "ErrorEvent"): ErrorEvent;
45594559
createEvent(eventInterface: "Event"): Event;
45604560
createEvent(eventInterface: "Events"): Event;
4561+
createEvent(eventInterface: "FileReaderProgressEvent"): FileReaderProgressEvent;
45614562
createEvent(eventInterface: "FocusEvent"): FocusEvent;
45624563
createEvent(eventInterface: "FocusNavigationEvent"): FocusNavigationEvent;
45634564
createEvent(eventInterface: "GamepadEvent"): GamepadEvent;
@@ -4807,6 +4808,7 @@ interface DocumentEvent {
48074808
createEvent(eventInterface: "ErrorEvent"): ErrorEvent;
48084809
createEvent(eventInterface: "Event"): Event;
48094810
createEvent(eventInterface: "Events"): Event;
4811+
createEvent(eventInterface: "FileReaderProgressEvent"): FileReaderProgressEvent;
48104812
createEvent(eventInterface: "FocusEvent"): FocusEvent;
48114813
createEvent(eventInterface: "FocusNavigationEvent"): FocusNavigationEvent;
48124814
createEvent(eventInterface: "GamepadEvent"): GamepadEvent;
@@ -5368,23 +5370,23 @@ declare var FileList: {
53685370
};
53695371

53705372
interface FileReaderEventMap {
5371-
"abort": ProgressEvent;
5372-
"error": ProgressEvent;
5373-
"load": ProgressEvent;
5374-
"loadend": ProgressEvent;
5375-
"loadstart": ProgressEvent;
5376-
"progress": ProgressEvent;
5373+
"abort": FileReaderProgressEvent;
5374+
"error": FileReaderProgressEvent;
5375+
"load": FileReaderProgressEvent;
5376+
"loadend": FileReaderProgressEvent;
5377+
"loadstart": FileReaderProgressEvent;
5378+
"progress": FileReaderProgressEvent;
53775379
}
53785380

53795381
/** Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. */
53805382
interface FileReader extends EventTarget {
53815383
readonly error: DOMException | null;
5382-
onabort: ((this: FileReader, ev: ProgressEvent) => any) | null;
5383-
onerror: ((this: FileReader, ev: ProgressEvent) => any) | null;
5384-
onload: ((this: FileReader, ev: ProgressEvent) => any) | null;
5385-
onloadend: ((this: FileReader, ev: ProgressEvent) => any) | null;
5386-
onloadstart: ((this: FileReader, ev: ProgressEvent) => any) | null;
5387-
onprogress: ((this: FileReader, ev: ProgressEvent) => any) | null;
5384+
onabort: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
5385+
onerror: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
5386+
onload: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
5387+
onloadend: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
5388+
onloadstart: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
5389+
onprogress: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
53885390
readonly readyState: number;
53895391
readonly result: string | ArrayBuffer | null;
53905392
abort(): void;
@@ -5409,6 +5411,10 @@ declare var FileReader: {
54095411
readonly LOADING: number;
54105412
};
54115413

5414+
interface FileReaderProgressEvent extends ProgressEvent {
5415+
readonly target: FileReader | null;
5416+
}
5417+
54125418
/** Focus-related events like focus, blur, focusin, or focusout. */
54135419
interface FocusEvent extends UIEvent {
54145420
readonly relatedTarget: EventTarget;

baselines/webworker.generated.d.ts

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,23 +1525,23 @@ declare var FileList: {
15251525
};
15261526

15271527
interface FileReaderEventMap {
1528-
"abort": ProgressEvent;
1529-
"error": ProgressEvent;
1530-
"load": ProgressEvent;
1531-
"loadend": ProgressEvent;
1532-
"loadstart": ProgressEvent;
1533-
"progress": ProgressEvent;
1528+
"abort": FileReaderProgressEvent;
1529+
"error": FileReaderProgressEvent;
1530+
"load": FileReaderProgressEvent;
1531+
"loadend": FileReaderProgressEvent;
1532+
"loadstart": FileReaderProgressEvent;
1533+
"progress": FileReaderProgressEvent;
15341534
}
15351535

15361536
/** Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. */
15371537
interface FileReader extends EventTarget {
15381538
readonly error: DOMException | null;
1539-
onabort: ((this: FileReader, ev: ProgressEvent) => any) | null;
1540-
onerror: ((this: FileReader, ev: ProgressEvent) => any) | null;
1541-
onload: ((this: FileReader, ev: ProgressEvent) => any) | null;
1542-
onloadend: ((this: FileReader, ev: ProgressEvent) => any) | null;
1543-
onloadstart: ((this: FileReader, ev: ProgressEvent) => any) | null;
1544-
onprogress: ((this: FileReader, ev: ProgressEvent) => any) | null;
1539+
onabort: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
1540+
onerror: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
1541+
onload: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
1542+
onloadend: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
1543+
onloadstart: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
1544+
onprogress: ((this: FileReader, ev: FileReaderProgressEvent) => any) | null;
15451545
readonly readyState: number;
15461546
readonly result: string | ArrayBuffer | null;
15471547
abort(): void;
@@ -1566,6 +1566,10 @@ declare var FileReader: {
15661566
readonly LOADING: number;
15671567
};
15681568

1569+
interface FileReaderProgressEvent extends ProgressEvent {
1570+
readonly target: FileReader | null;
1571+
}
1572+
15691573
/** Allows to read File or Blob objects in a synchronous way. */
15701574
interface FileReaderSync {
15711575
readAsArrayBuffer(blob: Blob): ArrayBuffer;

inputfiles/addedTypes.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2174,6 +2174,21 @@
21742174
}
21752175
}
21762176
}
2177+
},
2178+
"FileReaderProgressEvent": {
2179+
"name": "FileReaderProgressEvent",
2180+
"extends": "ProgressEvent",
2181+
"no-interface-object": 1,
2182+
"properties": {
2183+
"property": {
2184+
"target": {
2185+
"name": "target",
2186+
"read-only": 1,
2187+
"nullable": 1,
2188+
"type": "FileReader"
2189+
}
2190+
}
2191+
}
21772192
}
21782193
}
21792194
},

inputfiles/overridingTypes.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1862,27 +1862,27 @@
18621862
"event": [
18631863
{
18641864
"name": "loadstart",
1865-
"type": "ProgressEvent"
1865+
"type": "FileReaderProgressEvent"
18661866
},
18671867
{
18681868
"name": "progress",
1869-
"type": "ProgressEvent"
1869+
"type": "FileReaderProgressEvent"
18701870
},
18711871
{
18721872
"name": "load",
1873-
"type": "ProgressEvent"
1873+
"type": "FileReaderProgressEvent"
18741874
},
18751875
{
18761876
"name": "abort",
1877-
"type": "ProgressEvent"
1877+
"type": "FileReaderProgressEvent"
18781878
},
18791879
{
18801880
"name": "error",
1881-
"type": "ProgressEvent"
1881+
"type": "FileReaderProgressEvent"
18821882
},
18831883
{
18841884
"name": "loadend",
1885-
"type": "ProgressEvent"
1885+
"type": "FileReaderProgressEvent"
18861886
}
18871887
]
18881888
}

inputfiles/removedTypes.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
}
8888
}
8989
},
90-
"FileReaderProgressEvent": null,
9190
"HTMLAreasCollection": null,
9291
"HTMLBodyElement": {
9392
"properties": {

src/emitter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ export function emitWebIdl(webidl: Browser.WebIdl, flavor: Flavor) {
153153
/// Interface name to its related eventhandler name list map
154154
/// Note:
155155
/// In the xml file, each event handler has
156-
/// 1. eventhanlder name: "onready", "onabort" etc.
156+
/// 1. eventhandler name: "onready", "onabort" etc.
157157
/// 2. the event name that it handles: "ready", "SVGAbort" etc.
158158
/// And they don't just differ by an "on" prefix!
159159
const iNameToEhList = arrayToMap(allInterfaces, i => i.name, i =>

src/helpers.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,36 +54,36 @@ export function exposesTo(o: { exposed?: string }, target: string) {
5454
return o.exposed.includes(target);
5555
}
5656

57-
export function merge<T>(src: T, target: T, shallow?: boolean): T {
58-
if (typeof src !== "object" || typeof target !== "object") {
59-
return target;
57+
export function merge<T>(target: T, src: T, shallow?: boolean): T {
58+
if (typeof target !== "object" || typeof src !== "object") {
59+
return src;
6060
}
61-
for (const k in target) {
62-
if (Object.getOwnPropertyDescriptor(target, k)) {
63-
if (Object.getOwnPropertyDescriptor(src, k)) {
64-
const srcProp = src[k];
61+
for (const k in src) {
62+
if (Object.getOwnPropertyDescriptor(src, k)) {
63+
if (Object.getOwnPropertyDescriptor(target, k)) {
6564
const targetProp = target[k];
66-
if (Array.isArray(srcProp) && Array.isArray(targetProp)) {
67-
mergeNamedArrays(srcProp, targetProp);
65+
const srcProp = src[k];
66+
if (Array.isArray(targetProp) && Array.isArray(srcProp)) {
67+
mergeNamedArrays(targetProp, srcProp);
6868
}
6969
else {
70-
if (Array.isArray(srcProp) !== Array.isArray(targetProp)) {
71-
throw new Error("Mismatch on property: " + k + JSON.stringify(targetProp));
70+
if (Array.isArray(targetProp) !== Array.isArray(srcProp)) {
71+
throw new Error("Mismatch on property: " + k + JSON.stringify(srcProp));
7272
}
73-
if (shallow && typeof (src[k] as any).name === "string" && typeof (target[k] as any).name === "string") {
74-
src[k] = target[k];
73+
if (shallow && typeof (target[k] as any).name === "string" && typeof (src[k] as any).name === "string") {
74+
target[k] = src[k];
7575
}
7676
else {
77-
src[k] = merge(src[k], target[k], shallow);
77+
target[k] = merge(target[k], src[k], shallow);
7878
}
7979
}
8080
}
8181
else {
82-
src[k] = target[k];
82+
target[k] = src[k];
8383
}
8484
}
8585
}
86-
return src;
86+
return target;
8787
}
8888

8989
function mergeNamedArrays<T extends { name: string; "new-type": string; }>(srcProp: T[], targetProp: T[]) {

0 commit comments

Comments
 (0)