Skip to content

Commit 96fd961

Browse files
committed
Generating extension of generic event types by code instead of overriding JSON
1 parent d618a12 commit 96fd961

File tree

3 files changed

+23
-93
lines changed

3 files changed

+23
-93
lines changed

Diff for: inputfiles/overridingTypes.jsonc

-88
Original file line numberDiff line numberDiff line change
@@ -1729,55 +1729,7 @@
17291729
}
17301730
}
17311731
},
1732-
"CompositionEvent": {
1733-
"typeParameters": [
1734-
{
1735-
"name": "T",
1736-
"default": "EventTarget",
1737-
"extends": "EventTarget"
1738-
}
1739-
],
1740-
"extends": "UIEvent<T>"
1741-
},
1742-
"FocusEvent": {
1743-
"typeParameters": [
1744-
{
1745-
"name": "T",
1746-
"default": "EventTarget",
1747-
"extends": "EventTarget"
1748-
}
1749-
],
1750-
"extends": "UIEvent<T>"
1751-
},
1752-
"InputEvent": {
1753-
"typeParameters": [
1754-
{
1755-
"name": "T",
1756-
"default": "EventTarget",
1757-
"extends": "EventTarget"
1758-
}
1759-
],
1760-
"extends": "UIEvent<T>"
1761-
},
1762-
"KeyboardEvent": {
1763-
"typeParameters": [
1764-
{
1765-
"name": "T",
1766-
"default": "EventTarget",
1767-
"extends": "EventTarget"
1768-
}
1769-
],
1770-
"extends": "UIEvent<T>"
1771-
},
17721732
"MouseEvent": {
1773-
"typeParameters": [
1774-
{
1775-
"name": "T",
1776-
"default": "EventTarget",
1777-
"extends": "EventTarget"
1778-
}
1779-
],
1780-
"extends": "UIEvent<T>" ,
17811733
"methods": {
17821734
"method": {
17831735
"initMouseEvent": {
@@ -1789,46 +1741,6 @@
17891741
}
17901742
}
17911743
},
1792-
"TouchEvent": {
1793-
"typeParameters": [
1794-
{
1795-
"name": "T",
1796-
"default": "EventTarget",
1797-
"extends": "EventTarget"
1798-
}
1799-
],
1800-
"extends": "UIEvent<T>"
1801-
},
1802-
"DragEvent": {
1803-
"typeParameters": [
1804-
{
1805-
"name": "T",
1806-
"default": "EventTarget",
1807-
"extends": "EventTarget"
1808-
}
1809-
],
1810-
"extends": "MouseEvent<T>"
1811-
},
1812-
"PointerEvent": {
1813-
"typeParameters": [
1814-
{
1815-
"name": "T",
1816-
"default": "EventTarget",
1817-
"extends": "EventTarget"
1818-
}
1819-
],
1820-
"extends": "MouseEvent<T>"
1821-
},
1822-
"WheelEvent": {
1823-
"typeParameters": [
1824-
{
1825-
"name": "T",
1826-
"default": "EventTarget",
1827-
"extends": "EventTarget"
1828-
}
1829-
],
1830-
"extends": "MouseEvent<T>"
1831-
},
18321744
"DOMException": {
18331745
"extends": "Error"
18341746
},

Diff for: src/build/emitter.ts

+21-5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
integerTypes,
1010
baseTypeConversionMap,
1111
assertUnique,
12+
genericEventSupertypes,
1213
} from "./helpers.js";
1314
import { collectLegacyNamespaceTypes } from "./legacy-namespace.js";
1415

@@ -1202,17 +1203,32 @@ export function emitWebIdl(
12021203

12031204
emitComments(i, printer.printLine);
12041205

1205-
printer.print(
1206-
`interface ${getNameWithTypeParameter(i.typeParameters, processedIName)}`
1207-
);
1208-
12091206
const finalExtends = [i.extends || "Object"]
12101207
.concat(getImplementList(i.name))
12111208
.filter((i) => i !== "Object")
12121209
.map(processIName);
12131210

1211+
const extendedGenericEventSupertype = i.typeParameters
1212+
? undefined
1213+
: finalExtends.find((name) => genericEventSupertypes.has(name));
1214+
1215+
printer.print(
1216+
`interface ${getNameWithTypeParameter(
1217+
extendedGenericEventSupertype
1218+
? [{ name: "T", default: "EventTarget", extends: "EventTarget" }]
1219+
: i.typeParameters,
1220+
processedIName
1221+
)}`
1222+
);
1223+
12141224
if (finalExtends.length) {
1215-
printer.print(` extends ${assertUnique(finalExtends).join(", ")}`);
1225+
printer.print(
1226+
` extends ${assertUnique(
1227+
finalExtends.map((name) =>
1228+
name === extendedGenericEventSupertype ? `${name}<T>` : name
1229+
)
1230+
).join(", ")}`
1231+
);
12161232
}
12171233
printer.print(" {");
12181234
printer.endLine();

Diff for: src/build/helpers.ts

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ export const baseTypeConversionMap = new Map<string, string>([
6262
["EventHandler", "EventHandler"],
6363
]);
6464

65+
export const genericEventSupertypes = new Set(["UIEvent", "MouseEvent"]);
66+
6567
export function deepFilter<T>(
6668
obj: T,
6769
fn: (o: any, n: string | undefined) => boolean

0 commit comments

Comments
 (0)