From a373784dd5dd381bb86b9d80ab073f4d0c6c4d1d Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Sat, 16 Dec 2023 20:53:45 +0100 Subject: [PATCH 1/4] Use `@webref/events` to detect event types --- baselines/dom.generated.d.ts | 52 +++++++++++++------------- baselines/serviceworker.generated.d.ts | 18 ++++----- baselines/sharedworker.generated.d.ts | 12 +++--- baselines/webworker.generated.d.ts | 22 +++++------ inputfiles/overridingTypes.jsonc | 2 +- package-lock.json | 7 ++++ package.json | 1 + src/build.ts | 6 ++- src/build/emitter.ts | 5 +++ src/build/types.d.ts | 1 + src/build/utils/map.ts | 11 ++++++ src/build/webref/events.ts | 19 ++++++++++ src/build/webref/webref-events.d.ts | 19 ++++++++++ 13 files changed, 121 insertions(+), 54 deletions(-) create mode 100644 src/build/webref/events.ts create mode 100644 src/build/webref/webref-events.d.ts diff --git a/baselines/dom.generated.d.ts b/baselines/dom.generated.d.ts index 725439f82..9c6e0ef1a 100644 --- a/baselines/dom.generated.d.ts +++ b/baselines/dom.generated.d.ts @@ -2418,7 +2418,7 @@ interface Animatable { interface AnimationEventMap { "cancel": AnimationPlaybackEvent; "finish": AnimationPlaybackEvent; - "remove": Event; + "remove": AnimationPlaybackEvent; } /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation) */ @@ -2436,7 +2436,7 @@ interface Animation extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/finish_event) */ onfinish: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/remove_event) */ - onremove: ((this: Animation, ev: Event) => any) | null; + onremove: ((this: Animation, ev: AnimationPlaybackEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/pending) */ readonly pending: boolean; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Animation/playState) */ @@ -2877,7 +2877,7 @@ declare var AudioWorklet: { }; interface AudioWorkletNodeEventMap { - "processorerror": Event; + "processorerror": ErrorEvent; } /** @@ -2887,7 +2887,7 @@ interface AudioWorkletNodeEventMap { */ interface AudioWorkletNode extends AudioNode { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode/processorerror_event) */ - onprocessorerror: ((this: AudioWorkletNode, ev: Event) => any) | null; + onprocessorerror: ((this: AudioWorkletNode, ev: ErrorEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode/parameters) */ readonly parameters: AudioParamMap; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioWorkletNode/port) */ @@ -8573,19 +8573,19 @@ declare var FontFace: { }; interface FontFaceSetEventMap { - "loading": Event; - "loadingdone": Event; - "loadingerror": Event; + "loading": FontFaceSetLoadEvent; + "loadingdone": FontFaceSetLoadEvent; + "loadingerror": FontFaceSetLoadEvent; } /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet) */ interface FontFaceSet extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loading_event) */ - onloading: ((this: FontFaceSet, ev: Event) => any) | null; + onloading: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingdone_event) */ - onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingdone: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingerror_event) */ - onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingerror: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/ready) */ readonly ready: Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/status) */ @@ -13379,8 +13379,8 @@ declare var HTMLUnknownElement: { }; interface HTMLVideoElementEventMap extends HTMLMediaElementEventMap { - "enterpictureinpicture": Event; - "leavepictureinpicture": Event; + "enterpictureinpicture": PictureInPictureEvent; + "leavepictureinpicture": PictureInPictureEvent; } /** @@ -13398,9 +13398,9 @@ interface HTMLVideoElement extends HTMLMediaElement { */ height: number; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement/enterpictureinpicture_event) */ - onenterpictureinpicture: ((this: HTMLVideoElement, ev: Event) => any) | null; + onenterpictureinpicture: ((this: HTMLVideoElement, ev: PictureInPictureEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement/leavepictureinpicture_event) */ - onleavepictureinpicture: ((this: HTMLVideoElement, ev: Event) => any) | null; + onleavepictureinpicture: ((this: HTMLVideoElement, ev: PictureInPictureEvent) => any) | null; /** Gets or sets the playsinline of the video element. for example, On iPhone, video elements will now be allowed to play inline, and will not automatically enter fullscreen mode when playback begins. */ playsInline: boolean; /** @@ -14654,7 +14654,7 @@ declare var LockManager: { }; interface MIDIAccessEventMap { - "statechange": Event; + "statechange": MIDIConnectionEvent; } /** @@ -14666,7 +14666,7 @@ interface MIDIAccess extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MIDIAccess/inputs) */ readonly inputs: MIDIInputMap; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MIDIAccess/statechange_event) */ - onstatechange: ((this: MIDIAccess, ev: Event) => any) | null; + onstatechange: ((this: MIDIAccess, ev: MIDIConnectionEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MIDIAccess/outputs) */ readonly outputs: MIDIOutputMap; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MIDIAccess/sysexEnabled) */ @@ -15175,7 +15175,7 @@ declare var MediaQueryListEvent: { interface MediaRecorderEventMap { "dataavailable": BlobEvent; - "error": Event; + "error": ErrorEvent; "pause": Event; "resume": Event; "start": Event; @@ -15191,7 +15191,7 @@ interface MediaRecorder extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaRecorder/dataavailable_event) */ ondataavailable: ((this: MediaRecorder, ev: BlobEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaRecorder/error_event) */ - onerror: ((this: MediaRecorder, ev: Event) => any) | null; + onerror: ((this: MediaRecorder, ev: ErrorEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaRecorder/pause_event) */ onpause: ((this: MediaRecorder, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaRecorder/resume_event) */ @@ -16928,7 +16928,7 @@ declare var PaymentMethodChangeEvent: { }; interface PaymentRequestEventMap { - "paymentmethodchange": Event; + "paymentmethodchange": PaymentMethodChangeEvent; } /** @@ -16941,7 +16941,7 @@ interface PaymentRequest extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PaymentRequest/id) */ readonly id: string; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PaymentRequest/paymentmethodchange_event) */ - onpaymentmethodchange: ((this: PaymentRequest, ev: Event) => any) | null; + onpaymentmethodchange: ((this: PaymentRequest, ev: PaymentMethodChangeEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PaymentRequest/abort) */ abort(): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PaymentRequest/canMakePayment) */ @@ -17903,7 +17903,7 @@ interface RTCDataChannelEventMap { "bufferedamountlow": Event; "close": Event; "closing": Event; - "error": Event; + "error": RTCErrorEvent; "message": MessageEvent; "open": Event; } @@ -17933,7 +17933,7 @@ interface RTCDataChannel extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/closing_event) */ onclosing: ((this: RTCDataChannel, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/error_event) */ - onerror: ((this: RTCDataChannel, ev: Event) => any) | null; + onerror: ((this: RTCDataChannel, ev: RTCErrorEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/message_event) */ onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/open_event) */ @@ -17974,7 +17974,7 @@ declare var RTCDataChannelEvent: { }; interface RTCDtlsTransportEventMap { - "error": Event; + "error": RTCErrorEvent; "statechange": Event; } @@ -17982,7 +17982,7 @@ interface RTCDtlsTransportEventMap { interface RTCDtlsTransport extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/iceTransport) */ readonly iceTransport: RTCIceTransport; - onerror: ((this: RTCDtlsTransport, ev: Event) => any) | null; + onerror: ((this: RTCDtlsTransport, ev: RTCErrorEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/statechange_event) */ onstatechange: ((this: RTCDtlsTransport, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDtlsTransport/state) */ @@ -18144,7 +18144,7 @@ interface RTCPeerConnectionEventMap { "connectionstatechange": Event; "datachannel": RTCDataChannelEvent; "icecandidate": RTCPeerConnectionIceEvent; - "icecandidateerror": Event; + "icecandidateerror": RTCPeerConnectionIceErrorEvent; "iceconnectionstatechange": Event; "icegatheringstatechange": Event; "negotiationneeded": Event; @@ -18179,7 +18179,7 @@ interface RTCPeerConnection extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnection/icecandidate_event) */ onicecandidate: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnection/icecandidateerror_event) */ - onicecandidateerror: ((this: RTCPeerConnection, ev: Event) => any) | null; + onicecandidateerror: ((this: RTCPeerConnection, ev: RTCPeerConnectionIceErrorEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnection/iceconnectionstatechange_event) */ oniceconnectionstatechange: ((this: RTCPeerConnection, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCPeerConnection/icegatheringstatechange_event) */ diff --git a/baselines/serviceworker.generated.d.ts b/baselines/serviceworker.generated.d.ts index 7c066d549..9f7360310 100644 --- a/baselines/serviceworker.generated.d.ts +++ b/baselines/serviceworker.generated.d.ts @@ -2705,19 +2705,19 @@ declare var FontFace: { }; interface FontFaceSetEventMap { - "loading": Event; - "loadingdone": Event; - "loadingerror": Event; + "loading": FontFaceSetLoadEvent; + "loadingdone": FontFaceSetLoadEvent; + "loadingerror": FontFaceSetLoadEvent; } /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet) */ interface FontFaceSet extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loading_event) */ - onloading: ((this: FontFaceSet, ev: Event) => any) | null; + onloading: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingdone_event) */ - onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingdone: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingerror_event) */ - onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingerror: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/ready) */ readonly ready: Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/status) */ @@ -4873,7 +4873,7 @@ interface ServiceWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { "notificationclick": NotificationEvent; "notificationclose": NotificationEvent; "push": PushEvent; - "pushsubscriptionchange": Event; + "pushsubscriptionchange": PushSubscriptionChangeEvent; } /** @@ -4901,7 +4901,7 @@ interface ServiceWorkerGlobalScope extends WorkerGlobalScope { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ - onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null; + onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) */ readonly registration: ServiceWorkerRegistration; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) */ @@ -8432,7 +8432,7 @@ declare var onnotificationclose: ((this: ServiceWorkerGlobalScope, ev: Notificat /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ declare var onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ -declare var onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null; +declare var onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) */ declare var registration: ServiceWorkerRegistration; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) */ diff --git a/baselines/sharedworker.generated.d.ts b/baselines/sharedworker.generated.d.ts index 64239955e..df636a77c 100644 --- a/baselines/sharedworker.generated.d.ts +++ b/baselines/sharedworker.generated.d.ts @@ -2594,19 +2594,19 @@ declare var FontFace: { }; interface FontFaceSetEventMap { - "loading": Event; - "loadingdone": Event; - "loadingerror": Event; + "loading": FontFaceSetLoadEvent; + "loadingdone": FontFaceSetLoadEvent; + "loadingerror": FontFaceSetLoadEvent; } /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet) */ interface FontFaceSet extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loading_event) */ - onloading: ((this: FontFaceSet, ev: Event) => any) | null; + onloading: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingdone_event) */ - onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingdone: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingerror_event) */ - onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingerror: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/ready) */ readonly ready: Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/status) */ diff --git a/baselines/webworker.generated.d.ts b/baselines/webworker.generated.d.ts index eecf63d74..0ab688cbc 100644 --- a/baselines/webworker.generated.d.ts +++ b/baselines/webworker.generated.d.ts @@ -2231,7 +2231,7 @@ declare var DecompressionStream: { interface DedicatedWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { "message": MessageEvent; "messageerror": MessageEvent; - "rtctransform": Event; + "rtctransform": RTCTransformEvent; } /** @@ -2251,7 +2251,7 @@ interface DedicatedWorkerGlobalScope extends WorkerGlobalScope, AnimationFramePr /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/messageerror_event) */ onmessageerror: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event) */ - onrtctransform: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; + onrtctransform: ((this: DedicatedWorkerGlobalScope, ev: RTCTransformEvent) => any) | null; /** * Aborts dedicatedWorkerGlobal. * @@ -2965,19 +2965,19 @@ declare var FontFace: { }; interface FontFaceSetEventMap { - "loading": Event; - "loadingdone": Event; - "loadingerror": Event; + "loading": FontFaceSetLoadEvent; + "loadingdone": FontFaceSetLoadEvent; + "loadingerror": FontFaceSetLoadEvent; } /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet) */ interface FontFaceSet extends EventTarget { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loading_event) */ - onloading: ((this: FontFaceSet, ev: Event) => any) | null; + onloading: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingdone_event) */ - onloadingdone: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingdone: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingerror_event) */ - onloadingerror: ((this: FontFaceSet, ev: Event) => any) | null; + onloadingerror: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/ready) */ readonly ready: Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/status) */ @@ -5195,7 +5195,7 @@ interface ServiceWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { "notificationclick": NotificationEvent; "notificationclose": NotificationEvent; "push": PushEvent; - "pushsubscriptionchange": Event; + "pushsubscriptionchange": PushSubscriptionChangeEvent; } /** @@ -5223,7 +5223,7 @@ interface ServiceWorkerGlobalScope extends WorkerGlobalScope { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ - onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null; + onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) */ readonly registration: ServiceWorkerRegistration; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) */ @@ -9152,7 +9152,7 @@ declare var onmessage: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/messageerror_event) */ declare var onmessageerror: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event) */ -declare var onrtctransform: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; +declare var onrtctransform: ((this: DedicatedWorkerGlobalScope, ev: RTCTransformEvent) => any) | null; /** * Aborts dedicatedWorkerGlobal. * diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index a2ca6d224..eef22ad37 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -1768,7 +1768,7 @@ "overrideType": "NodeListOf" }, "type": { - "overrideType": "\"submit\" | \"reset\" | \"button\" + "overrideType": "\"submit\" | \"reset\" | \"button\"" } } } diff --git a/package-lock.json b/package-lock.json index 9291b9ae5..becdbd373 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@typescript-eslint/parser": "^6.12.0", "@webref/css": "^6.9.1", "@webref/elements": "^2.2.2", + "@webref/events": "^1.9.1", "@webref/idl": "^3.41.1", "bcd-idl-mapper": "^2.3.0", "cpx2": "^6.0.1", @@ -847,6 +848,12 @@ "integrity": "sha512-gl6IaktIBI8xufIFozMKGjqlvRty1iZ4EuD+ksSKir6MV8Qkc1Sxy36FCbAmmyoUx6ODGFXCGu06hJJ2V+/tlg==", "dev": true }, + "node_modules/@webref/events": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@webref/events/-/events-1.9.1.tgz", + "integrity": "sha512-Y3TWKPtxD1z4xv3wVCPjhF7mtnbSqcuDwy5l48xJDYSiFTA7OSFFVkvTxjBPkduf8kGUofitQW5IxJ0T8QpE9g==", + "dev": true + }, "node_modules/@webref/idl": { "version": "3.41.3", "resolved": "https://registry.npmjs.org/@webref/idl/-/idl-3.41.3.tgz", diff --git a/package.json b/package.json index 29879428f..5cb2d2f18 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@typescript-eslint/parser": "^6.12.0", "@webref/css": "^6.9.1", "@webref/elements": "^2.2.2", + "@webref/events": "^1.9.1", "@webref/idl": "^3.41.1", "bcd-idl-mapper": "^2.3.0", "cpx2": "^6.0.1", diff --git a/src/build.ts b/src/build.ts index faf5772d4..995970773 100644 --- a/src/build.ts +++ b/src/build.ts @@ -10,6 +10,7 @@ import { getRemovalData, } from "./build/bcd.js"; import { getInterfaceElementMergeData } from "./build/webref/elements.js"; +import { getInterfaceToEventMap } from "./build/webref/events.js"; import { getWebidls } from "./build/webref/idl.js"; import jsonc from "jsonc-parser"; @@ -45,6 +46,7 @@ async function emitFlavor( ) { const exposed = getExposedTypes(webidl, options.global, forceKnownTypes); mergeNamesakes(exposed); + exposed.events = webidl.events; const result = emitWebIdl(exposed, options.global[0], ""); await fs.writeFile( @@ -201,7 +203,9 @@ async function emitDom() { } /// Load the input file - let webidl: Browser.WebIdl = {}; + let webidl: Browser.WebIdl = { + events: await getInterfaceToEventMap(), + }; for (const w of widlStandardTypes) { webidl = merge(webidl, w.browser, true); diff --git a/src/build/emitter.ts b/src/build/emitter.ts index 296e9642c..dd994abcc 100644 --- a/src/build/emitter.ts +++ b/src/build/emitter.ts @@ -337,6 +337,11 @@ export function emitWebIdl( return getGenericEventType(event.type); } } + + const event = webidl.events?.get(i.name)?.get(eName); + if (event) { + return getGenericEventType(event); + } return "Event"; } diff --git a/src/build/types.d.ts b/src/build/types.d.ts index 056a314d4..b3c68a68f 100644 --- a/src/build/types.d.ts +++ b/src/build/types.d.ts @@ -263,4 +263,5 @@ export interface WebIdl { typedef: TypeDef[]; }; namespaces?: Interface[]; + events?: Map>; } diff --git a/src/build/utils/map.ts b/src/build/utils/map.ts index 552d48429..592890415 100644 --- a/src/build/utils/map.ts +++ b/src/build/utils/map.ts @@ -16,3 +16,14 @@ export function addToStringMap( const old = map.get(name) || ""; map.set(name, `${old}\n${value}\n`); } + +export function addToNestedMap( + map: Map>, + name: string, + key: string, + value: string, +): void { + const nested = map.get(name) || new Map(); + nested.set(key, value); + map.set(name, nested); +} diff --git a/src/build/webref/events.ts b/src/build/webref/events.ts new file mode 100644 index 000000000..19d415965 --- /dev/null +++ b/src/build/webref/events.ts @@ -0,0 +1,19 @@ +import { listAll } from "@webref/events"; +import { addToNestedMap } from "../utils/map.js"; + +export async function getInterfaceToEventMap(): Promise< + Map> +> { + const all = await listAll(); + const map = new Map>(); + for (const item of Object.values(all)) { + const { targets } = item; + for (const target of targets) { + addToNestedMap(map, target.target, item.type, item.interface); + for (const path of target.bubblingPath ?? []) { + addToNestedMap(map, path, item.type, item.interface); + } + } + } + return map; +} diff --git a/src/build/webref/webref-events.d.ts b/src/build/webref/webref-events.d.ts new file mode 100644 index 000000000..4a6d6eda1 --- /dev/null +++ b/src/build/webref/webref-events.d.ts @@ -0,0 +1,19 @@ +declare module "@webref/events" { + interface Src { + format: string; + href: string; + } + interface Target { + target: string; + bubbles?: boolean; + bubblingPath?: string[]; + } + interface Item { + src: Src; + href: string; + type: string; + targets: Target[]; + interface: string; + } + function listAll(): Promise>; +} From 76b9dee04cb40dc986aa11fb1d7628866bec97a3 Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Sat, 16 Dec 2023 21:02:23 +0100 Subject: [PATCH 2/4] fix test --- baselines/serviceworker.generated.d.ts | 6 +++--- baselines/webworker.generated.d.ts | 4 ++-- inputfiles/overridingTypes.jsonc | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/baselines/serviceworker.generated.d.ts b/baselines/serviceworker.generated.d.ts index 9f7360310..33fac6d1a 100644 --- a/baselines/serviceworker.generated.d.ts +++ b/baselines/serviceworker.generated.d.ts @@ -4873,7 +4873,7 @@ interface ServiceWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { "notificationclick": NotificationEvent; "notificationclose": NotificationEvent; "push": PushEvent; - "pushsubscriptionchange": PushSubscriptionChangeEvent; + "pushsubscriptionchange": Event; } /** @@ -4901,7 +4901,7 @@ interface ServiceWorkerGlobalScope extends WorkerGlobalScope { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ - onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; + onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) */ readonly registration: ServiceWorkerRegistration; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) */ @@ -8432,7 +8432,7 @@ declare var onnotificationclose: ((this: ServiceWorkerGlobalScope, ev: Notificat /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ declare var onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ -declare var onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; +declare var onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) */ declare var registration: ServiceWorkerRegistration; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) */ diff --git a/baselines/webworker.generated.d.ts b/baselines/webworker.generated.d.ts index 0ab688cbc..50ac5c2bc 100644 --- a/baselines/webworker.generated.d.ts +++ b/baselines/webworker.generated.d.ts @@ -5195,7 +5195,7 @@ interface ServiceWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { "notificationclick": NotificationEvent; "notificationclose": NotificationEvent; "push": PushEvent; - "pushsubscriptionchange": PushSubscriptionChangeEvent; + "pushsubscriptionchange": Event; } /** @@ -5223,7 +5223,7 @@ interface ServiceWorkerGlobalScope extends WorkerGlobalScope { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ - onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; + onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: Event) => any) | null; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) */ readonly registration: ServiceWorkerRegistration; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) */ diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index eef22ad37..0ed442822 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -2173,6 +2173,11 @@ { "name": "push", "type": "PushEvent" + }, + { + "name": "pushsubscriptionchange", + // No PushSubscriptionChangeEvent implementation as of 2023-12 + "type": "Event" } ], "methods": { From 5591d3fa99b33f39be58773ddfbe0d34bbf4abaf Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Sat, 16 Dec 2023 21:04:45 +0100 Subject: [PATCH 3/4] better fix --- inputfiles/overridingTypes.jsonc | 5 ----- src/build/emitter.ts | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index 0ed442822..eef22ad37 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -2173,11 +2173,6 @@ { "name": "push", "type": "PushEvent" - }, - { - "name": "pushsubscriptionchange", - // No PushSubscriptionChangeEvent implementation as of 2023-12 - "type": "Event" } ], "methods": { diff --git a/src/build/emitter.ts b/src/build/emitter.ts index dd994abcc..4502494b6 100644 --- a/src/build/emitter.ts +++ b/src/build/emitter.ts @@ -339,7 +339,7 @@ export function emitWebIdl( } const event = webidl.events?.get(i.name)?.get(eName); - if (event) { + if (event && allInterfacesMap[event]) { return getGenericEventType(event); } return "Event"; From 265773207a9fc673afd6fb6c83910379b885b525 Mon Sep 17 00:00:00 2001 From: Kagami Sascha Rosylight Date: Sun, 17 Dec 2023 11:00:43 +0100 Subject: [PATCH 4/4] Update src/build/utils/map.ts Co-authored-by: Holger Jeromin --- src/build/utils/map.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/build/utils/map.ts b/src/build/utils/map.ts index 592890415..c79035e34 100644 --- a/src/build/utils/map.ts +++ b/src/build/utils/map.ts @@ -23,7 +23,7 @@ export function addToNestedMap( key: string, value: string, ): void { - const nested = map.get(name) || new Map(); + const nested = map.get(name) ?? new Map(); nested.set(key, value); map.set(name, nested); }