Skip to content

Commit 9dffbc8

Browse files
added override and updated onerror for htmlelement
1 parent a650695 commit 9dffbc8

File tree

6 files changed

+95
-5
lines changed

6 files changed

+95
-5
lines changed

baselines/dom.generated.d.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14026,7 +14026,7 @@ interface HTMLElementEventMap extends ElementEventMap, GlobalEventHandlersEventM
1402614026
*
1402714027
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement)
1402814028
*/
14029-
interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, GlobalEventHandlers, HTMLOrSVGElement {
14029+
interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, Omit<GlobalEventHandlers, "onerror">, HTMLOrSVGElement {
1403014030
/**
1403114031
* The **`HTMLElement.accessKey`** property sets the keystroke which a user can press to jump to a given element.
1403214032
*
@@ -14117,6 +14117,13 @@ interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEdit
1411714117
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/offsetWidth)
1411814118
*/
1411914119
readonly offsetWidth: number;
14120+
/**
14121+
* The error event is fired on an element when a resource failed to load, or can't be used.
14122+
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)
14123+
*
14124+
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)
14125+
*/
14126+
onerror: (((event: Event) => any) | ((event: UIEvent) => any)) | null;
1412014127
/**
1412114128
* The **`outerText`** property of the HTMLElement interface returns the same value as HTMLElement.innerText.
1412214129
*

baselines/ts5.5/dom.generated.d.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14013,7 +14013,7 @@ interface HTMLElementEventMap extends ElementEventMap, GlobalEventHandlersEventM
1401314013
*
1401414014
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement)
1401514015
*/
14016-
interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, GlobalEventHandlers, HTMLOrSVGElement {
14016+
interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, Omit<GlobalEventHandlers, "onerror">, HTMLOrSVGElement {
1401714017
/**
1401814018
* The **`HTMLElement.accessKey`** property sets the keystroke which a user can press to jump to a given element.
1401914019
*
@@ -14104,6 +14104,13 @@ interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEdit
1410414104
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/offsetWidth)
1410514105
*/
1410614106
readonly offsetWidth: number;
14107+
/**
14108+
* The error event is fired on an element when a resource failed to load, or can't be used.
14109+
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)
14110+
*
14111+
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)
14112+
*/
14113+
onerror: (((event: Event) => any) | ((event: UIEvent) => any)) | null;
1410714114
/**
1410814115
* The **`outerText`** property of the HTMLElement interface returns the same value as HTMLElement.innerText.
1410914116
*

baselines/ts5.6/dom.generated.d.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14026,7 +14026,7 @@ interface HTMLElementEventMap extends ElementEventMap, GlobalEventHandlersEventM
1402614026
*
1402714027
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement)
1402814028
*/
14029-
interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, GlobalEventHandlers, HTMLOrSVGElement {
14029+
interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEditable, Omit<GlobalEventHandlers, "onerror">, HTMLOrSVGElement {
1403014030
/**
1403114031
* The **`HTMLElement.accessKey`** property sets the keystroke which a user can press to jump to a given element.
1403214032
*
@@ -14117,6 +14117,13 @@ interface HTMLElement extends Element, ElementCSSInlineStyle, ElementContentEdit
1411714117
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLElement/offsetWidth)
1411814118
*/
1411914119
readonly offsetWidth: number;
14120+
/**
14121+
* The error event is fired on an element when a resource failed to load, or can't be used.
14122+
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)
14123+
*
14124+
* [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)
14125+
*/
14126+
onerror: (((event: Event) => any) | ((event: UIEvent) => any)) | null;
1412014127
/**
1412114128
* The **`outerText`** property of the HTMLElement interface returns the same value as HTMLElement.innerText.
1412214129
*

inputfiles/overridingTypes.jsonc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,13 @@
404404
// Blink only as of 2024-11
405405
"overrideType": "boolean",
406406
"nullable": false
407+
},
408+
"onerror": {
409+
"name": "onerror",
410+
"nullable": true,
411+
"overrideType": "((event: Event) => any) | ((event: UIEvent) => any)",
412+
"comment": "The error event is fired on an element when a resource failed to load, or can't be used. \n [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event)",
413+
"mdnUrl": "https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/error_event"
407414
}
408415
}
409416
},

src/build/emitter.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ const extendConflictsBaseTypes: Record<
3131
},
3232
};
3333

34+
const extendConflictsInterfaces: Record<
35+
string,
36+
{ overrideMap: Record<string, string> }
37+
> = {
38+
HTMLElement: {
39+
overrideMap: {
40+
GlobalEventHandlers: 'Omit<GlobalEventHandlers, "onerror">',
41+
},
42+
},
43+
};
44+
3445
// Namespaces that have been in form of interfaces for years
3546
// and can't be converted to namespaces without breaking type packages
3647
const namespacesAsInterfaces = ["console"];
@@ -1270,7 +1281,7 @@ export function emitWebIdl(
12701281
}
12711282

12721283
function processMixinName(mixinName: string) {
1273-
if (allInterfacesMap[mixinName].typeParameters?.length === 1) {
1284+
if (allInterfacesMap[mixinName]?.typeParameters?.length === 1) {
12741285
return `${mixinName}<${i.name}>`;
12751286
}
12761287
return mixinName;
@@ -1293,11 +1304,27 @@ export function emitWebIdl(
12931304
`interface ${getNameWithTypeParameters(i.typeParameters, processedIName)}`,
12941305
);
12951306

1296-
const finalExtends = [i.extends || "Object"]
1307+
// if (i.implements && extendConflictsInterfaces[i.name]?.implements?.length) {
1308+
// i.implements = extendConflictsInterfaces[i.name]?.implements;
1309+
// }
1310+
1311+
let finalExtends = [i.extends || "Object"]
12971312
.concat(getImplementList(i.name).map(processMixinName))
1313+
// .concat(extendConflictsInterfaces[i.name]?.extendType ?? [])
12981314
.filter((i) => i !== "Object")
12991315
.map(processIName);
13001316

1317+
if (finalExtends.length && extendConflictsInterfaces[i.name]?.overrideMap) {
1318+
finalExtends = finalExtends.reduce((agg, item) => {
1319+
if (extendConflictsInterfaces[i.name]?.overrideMap[item]) {
1320+
agg.push(extendConflictsInterfaces[i.name]?.overrideMap[item]);
1321+
return agg;
1322+
}
1323+
agg.push(item);
1324+
return agg;
1325+
}, [] as string[]);
1326+
}
1327+
13011328
if (finalExtends.length) {
13021329
printer.print(` extends ${assertUnique(finalExtends).join(", ")}`);
13031330
}

unittests/files/onerror.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* window.onerror works as intended with global event handler
3+
*/
4+
window.onerror = (message, src, lineno, colno, error) => {
5+
if (message && src && lineno && colno && error) {
6+
return;
7+
}
8+
};
9+
10+
11+
const div: HTMLElement = document.createElement("div");
12+
13+
14+
/**
15+
* HTMLElement.onerror works with a single event arg, UIEvent
16+
*/
17+
div.onerror = (event: UIEvent) => {
18+
if (event) {
19+
return;
20+
}
21+
};
22+
/**
23+
* HTMLElement.onerror works with a single event arg, Event
24+
*/
25+
div.onerror = (event: Event) => {
26+
if (event) {
27+
return;
28+
}
29+
};
30+
31+
32+
/**
33+
* HTMLElement onerror is nullable
34+
*/
35+
div.onerror = null;

0 commit comments

Comments
 (0)