From 8cb7272817c7062238d7a815fc6c24aa11cd2aed Mon Sep 17 00:00:00 2001 From: Josh Vlk Date: Fri, 26 Jun 2026 13:29:12 -0400 Subject: [PATCH] split event owner types without rescript 13 --- rescript.json | 1 + src/Canvas/CanvasTypes.res | 2 +- .../ChannelMessagingTypes.res | 2 +- src/Clipboard/ClipboardTypes.res | 2 +- .../CredentialManagementTypes.res | 4 +- src/DOM/Document.res | 2 +- src/DOM/DomGlobal.res | 70 --------- src/DOM/DomTypes.res | 3 +- src/DOM/Element.res | 4 +- src/DOM/Window.res | 4 +- src/Event/AbortController.res | 6 +- src/Event/AbortSignal.res | 12 +- src/Event/Event.res | 65 +++++++-- src/Event/EventTarget.res | 30 ++-- src/Event/EventType.res | 110 +++++++++++++++ src/Event/EventTypes.res | 133 ++---------------- src/Event/ExtendableEvent.res | 6 +- src/Fetch/FetchTypes.res | 4 +- src/File/FileTypes.res | 4 +- src/IndexedDB/IndexedDbTypes.res | 6 +- .../MediaCaptureAndStreamsTypes.res | 6 +- src/Notification/NotificationTypes.res | 4 +- src/Performance/PerformanceTypes.res | 2 +- src/Permissions/PermissionsTypes.res | 2 +- .../PictureInPictureTypes.res | 2 +- src/Push/PushTypes.res | 2 +- src/RemotePlayback/RemotePlaybackTypes.res | 2 +- src/ScreenWakeLock/ScreenWakeLockTypes.res | 2 +- src/ServiceWorker/ServiceWorkerTypes.res | 6 +- src/UIEvents/UiEventsTypes.res | 16 +-- src/VisualViewport/VisualViewportTypes.res | 2 +- src/WebAudio/WebAudioTypes.res | 12 +- src/WebLocks/WebLocksTypes.res | 2 +- src/WebMIDI/WebMidiTypes.res | 2 +- src/WebSockets/MessageEvent.res | 4 +- src/WebSockets/WebSocketsTypes.res | 10 +- src/WebSpeech/WebSpeechTypes.res | 4 +- src/WebStorage/WebStorageTypes.res | 4 +- src/WebVTT/WebVttTypes.res | 4 +- src/WebWorkers/WebWorkersTypes.res | 2 +- tests/DOMAPI/AddEventListener__test.res | 21 +-- tests/DOMAPI/EventTarget__test.res | 15 ++ tests/DOMAPI/EventType__test.res | 5 + tests/DOMAPI/Event__test.res | 28 ++++ tests/Fetch__test.res | 6 - .../ServiceWorkerAPI/ServiceWorker__test.res | 4 +- 46 files changed, 325 insertions(+), 314 deletions(-) create mode 100644 src/Event/EventType.res create mode 100644 tests/DOMAPI/EventTarget__test.res create mode 100644 tests/DOMAPI/EventType__test.res create mode 100644 tests/DOMAPI/Event__test.res diff --git a/rescript.json b/rescript.json index 965cdcf7..1cbd32f0 100644 --- a/rescript.json +++ b/rescript.json @@ -214,6 +214,7 @@ "AbortController", "AbortSignal", "Event", + "EventType", "EventTarget", "ExtendableEvent" ] diff --git a/src/Canvas/CanvasTypes.res b/src/Canvas/CanvasTypes.res index 22f5d77e..922c531d 100644 --- a/src/Canvas/CanvasTypes.res +++ b/src/Canvas/CanvasTypes.res @@ -122,7 +122,7 @@ TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(OffscreenCanvas) type offscreenCanvas = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** These attributes return the dimensions of the OffscreenCanvas object's bitmap. diff --git a/src/ChannelMessaging/ChannelMessagingTypes.res b/src/ChannelMessaging/ChannelMessagingTypes.res index 1e3b5eeb..9aeee66a 100644 --- a/src/ChannelMessaging/ChannelMessagingTypes.res +++ b/src/ChannelMessaging/ChannelMessagingTypes.res @@ -6,7 +6,7 @@ This Channel Messaging API interface represents one of the two ports of a Messag */ @editor.completeFrom(MessagePort) type messagePort = private { - ...EventTypes.eventTarget, + ...EventTarget.t, } type structuredSerializeOptions = {mutable transfer?: array>} diff --git a/src/Clipboard/ClipboardTypes.res b/src/Clipboard/ClipboardTypes.res index bc20a0a7..94af9c2f 100644 --- a/src/Clipboard/ClipboardTypes.res +++ b/src/Clipboard/ClipboardTypes.res @@ -25,7 +25,7 @@ type clipboardItem = private { */ @editor.completeFrom(WebApiClipboard) type clipboard = private { - ...EventTypes.eventTarget, + ...EventTarget.t, } type clipboardItemOptions = {mutable presentationStyle?: presentationStyle} diff --git a/src/CredentialManagement/CredentialManagementTypes.res b/src/CredentialManagement/CredentialManagementTypes.res index 5fa16f2c..60f6f792 100644 --- a/src/CredentialManagement/CredentialManagementTypes.res +++ b/src/CredentialManagement/CredentialManagementTypes.res @@ -91,7 +91,7 @@ type publicKeyCredentialRequestOptions = { type credentialRequestOptions = { mutable mediation?: credentialMediationRequirement, - mutable signal?: EventTypes.abortSignal, + mutable signal?: AbortSignal.t, mutable publicKey?: publicKeyCredentialRequestOptions, } @@ -133,6 +133,6 @@ type publicKeyCredentialCreationOptions = { } type credentialCreationOptions = { - mutable signal?: EventTypes.abortSignal, + mutable signal?: AbortSignal.t, mutable publicKey?: publicKeyCredentialCreationOptions, } diff --git a/src/DOM/Document.res b/src/DOM/Document.res index abe9d20a..dd246f96 100644 --- a/src/DOM/Document.res +++ b/src/DOM/Document.res @@ -301,7 +301,7 @@ external createAttributeNS: ( [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Document/createEvent) */ @send -external createEvent: (DomTypes.document, string) => EventTypes.event = "createEvent" +external createEvent: (DomTypes.document, string) => Event.t = "createEvent" /** Returns an empty range object that has both of its boundary points positioned at the beginning of the document. diff --git a/src/DOM/DomGlobal.res b/src/DOM/DomGlobal.res index d6e7cf28..ff508451 100644 --- a/src/DOM/DomGlobal.res +++ b/src/DOM/DomGlobal.res @@ -294,76 +294,6 @@ external requestAnimationFrame: (float => unit) => int = "requestAnimationFrame" */ external cancelAnimationFrame: int => unit = "cancelAnimationFrame" -/** -Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched. - -The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture. - -When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET. - -When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners. - -When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed. - -If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted. - -The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture. -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) -*/ -external addEventListener: ( - EventTypes.eventType, - EventTypes.eventListener<'event>, - ~options: EventTypes.addEventListenerOptions=?, -) => unit = "addEventListener" - -/** -Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched. - -The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture. - -When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET. - -When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in § 2.8 Observing event listeners. - -When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed. - -If an AbortSignal is passed for options's signal, then the event listener will be removed when signal is aborted. - -The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture. -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) -*/ -external addEventListenerWithCapture: ( - EventTypes.eventType, - EventTypes.eventListener<'event>, - @as(json`true`) _, -) => unit = "addEventListener" - -/** -Removes the event listener in target's event listener list with the same type, callback, and options. -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener) -*/ -external removeEventListener: ( - EventTypes.eventType, - EventTypes.eventListener<'event>, - ~options: EventTypes.eventListenerOptions=?, -) => unit = "removeEventListener" - -/** -Removes the event listener in target's event listener list with the same type, callback, and options. -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener) -*/ -external removeEventListenerUseCapture: ( - EventTypes.eventType, - EventTypes.eventListener<'event>, - @as(json`true`) _, -) => unit = "removeEventListener" - -/** -Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent) -*/ -external dispatchEvent: EventTypes.event => bool = "dispatchEvent" - /** Closes the window. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Window/close) diff --git a/src/DOM/DomTypes.res b/src/DOM/DomTypes.res index 12ffacd8..195aa84b 100644 --- a/src/DOM/DomTypes.res +++ b/src/DOM/DomTypes.res @@ -1,8 +1,7 @@ @@warning("-30") type domStringList = DOM.domStringList -type eventTarget = EventTypes.eventTarget -type eventType = EventTypes.eventType +type eventTarget = EventTarget.t type file = FileTypes.file type blob = FileTypes.blob type fileSystemEntry = FileAndDirectoryEntriesTypes.fileSystemEntry diff --git a/src/DOM/Element.res b/src/DOM/Element.res index 64a21f31..424efb55 100644 --- a/src/DOM/Element.res +++ b/src/DOM/Element.res @@ -5,8 +5,6 @@ module Impl = ( ) => { include Node.Impl({type t = T.t}) - external asElement: T.t => DomTypes.element = "%identity" - /** Inserts nodes just after node, while replacing strings in nodes with equivalent Text nodes. @@ -505,3 +503,5 @@ Returns true if qualifiedName is now present, and false otherwise. include Impl({type t = DomTypes.element}) let isInstanceOf = (_: 't): bool => %raw(`param instanceof Element`) + +include EventTarget.Impl({type t = DomTypes.element}) diff --git a/src/DOM/Window.res b/src/DOM/Window.res index 62c8576c..1dac1230 100644 --- a/src/DOM/Window.res +++ b/src/DOM/Window.res @@ -6,8 +6,8 @@ include EventTarget.Impl({type t = t}) external current: t = "window" /** - [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Window/window) - */ +[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Window/window) +*/ @get external window: t => t = "window" diff --git a/src/Event/AbortController.res b/src/Event/AbortController.res index b02abe30..2ebaf0e3 100644 --- a/src/Event/AbortController.res +++ b/src/Event/AbortController.res @@ -1,12 +1,14 @@ /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortController) */ +type t = EventTypes.abortController = private {...EventTypes.abortController} + @new -external make: unit => EventTypes.abortController = "AbortController" +external make: unit => t = "AbortController" /** Invoking this method will set this object's AbortSignal's aborted flag and signal to any observers that the associated activity is to be aborted. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortController/abort) */ @send -external abort: (EventTypes.abortController, ~reason: JSON.t=?) => unit = "abort" +external abort: (t, ~reason: JSON.t=?) => unit = "abort" diff --git a/src/Event/AbortSignal.res b/src/Event/AbortSignal.res index 00b170b9..b9c038f1 100644 --- a/src/Event/AbortSignal.res +++ b/src/Event/AbortSignal.res @@ -1,25 +1,27 @@ -include EventTarget.Impl({type t = EventTypes.abortSignal}) +type t = EventTypes.abortSignal = private {...EventTypes.abortSignal} + +include EventTarget.Impl({type t = t}) /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_static) */ @scope("AbortSignal") -external abort: (~reason: JSON.t=?) => EventTypes.abortSignal = "abort" +external abort: (~reason: JSON.t=?) => t = "abort" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/timeout_static) */ @scope("AbortSignal") -external timeout: int => EventTypes.abortSignal = "timeout" +external timeout: int => t = "timeout" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/any_static) */ @scope("AbortSignal") -external any: array => EventTypes.abortSignal = "any" +external any: array => t = "any" /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal/throwIfAborted) */ @send -external throwIfAborted: EventTypes.abortSignal => unit = "throwIfAborted" +external throwIfAborted: t => unit = "throwIfAborted" diff --git a/src/Event/Event.res b/src/Event/Event.res index 3be950e6..3e8c8cdd 100644 --- a/src/Event/Event.res +++ b/src/Event/Event.res @@ -1,23 +1,72 @@ -/** -[Read more on MDN](https://developer.mozilla.org/docs/Web/API/Event) -*/ +type t = EventTypes.event = private {...EventTypes.event} + +type eventTarget = EventTypes.eventTarget = private {...EventTypes.eventTarget} + +type eventListener<'event> = EventTypes.eventListener<'event> + +type eventListenerOptions = EventTypes.eventListenerOptions = {mutable capture?: bool} + +type abortSignal = EventTypes.abortSignal = private {...EventTypes.abortSignal} + +type eventInit = EventTypes.eventInit = { + mutable bubbles?: bool, + mutable cancelable?: bool, + mutable composed?: bool, +} + +type addEventListenerOptions = EventTypes.addEventListenerOptions = { + ...eventListenerOptions, + mutable passive?: bool, + mutable once?: bool, + mutable signal?: abortSignal, +} + @new -external make: (~type_: string, ~eventInitDict: EventTypes.eventInit=?) => EventTypes.event = - "Event" +external make: (~type_: string, ~eventInitDict: eventInit=?) => t = "Event" + +@get +external type_: t => EventType.t = "type" + +@get +external target: t => Null.t = "target" + +@get +external currentTarget: t => Null.t = "currentTarget" + +@get +external eventPhase: t => int = "eventPhase" + +@get +external bubbles: t => bool = "bubbles" + +@get +external cancelable: t => bool = "cancelable" + +@get +external defaultPrevented: t => bool = "defaultPrevented" + +@get +external composed: t => bool = "composed" + +@get +external isTrusted: t => bool = "isTrusted" + +@get +external timeStamp: t => float = "timeStamp" module Impl = ( T: { type t }, ) => { - external asEvent: T.t => EventTypes.event = "%identity" + external asEvent: T.t => t = "%identity" /** Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Event/composedPath) */ @send - external composedPath: T.t => array = "composedPath" + external composedPath: T.t => array = "composedPath" /** If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled. @@ -41,4 +90,4 @@ When dispatched in a tree, invoking this method prevents event from reaching any external stopPropagation: T.t => unit = "stopPropagation" } -include Impl({type t = EventTypes.event}) +include Impl({type t = t}) diff --git a/src/Event/EventTarget.res b/src/Event/EventTarget.res index c2f697cf..0eaeef34 100644 --- a/src/Event/EventTarget.res +++ b/src/Event/EventTarget.res @@ -1,16 +1,16 @@ /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget) */ +type t = EventTypes.eventTarget = private {...EventTypes.eventTarget} + @new -external make: unit => EventTypes.eventTarget = "EventTarget" +external make: unit => t = "EventTarget" module Impl = ( T: { type t }, ) => { - external asEventTarget: T.t => EventTypes.eventTarget = "%identity" - /** Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched. @@ -30,9 +30,9 @@ The event listener is appended to target's event listener list and is not append @send external addEventListener: ( T.t, - EventTypes.eventType, - EventTypes.eventListener<'event>, - ~options: EventTypes.addEventListenerOptions=?, + EventType.t, + Event.eventListener<'event>, + ~options: Event.addEventListenerOptions=?, ) => unit = "addEventListener" /** @@ -54,8 +54,8 @@ The event listener is appended to target's event listener list and is not append @send external addEventListenerWithCapture: ( T.t, - EventTypes.eventType, - EventTypes.eventListener<'event>, + EventType.t, + Event.eventListener<'event>, @as(json`true`) _, ) => unit = "addEventListener" @@ -66,9 +66,9 @@ Removes the event listener in target's event listener list with the same type, c @send external removeEventListener: ( T.t, - EventTypes.eventType, - EventTypes.eventListener<'event>, - ~options: EventTypes.eventListenerOptions=?, + EventType.t, + Event.eventListener<'event>, + ~options: Event.eventListenerOptions=?, ) => unit = "removeEventListener" /** @@ -78,8 +78,8 @@ Removes the event listener in target's event listener list with the same type, c @send external removeEventListenerUseCapture: ( T.t, - EventTypes.eventType, - EventTypes.eventListener<'event>, + EventType.t, + Event.eventListener<'event>, @as(json`true`) _, ) => unit = "removeEventListener" @@ -88,7 +88,7 @@ Dispatches a synthetic event event to target and returns true if either event's [Read more on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent) */ @send - external dispatchEvent: (T.t, EventTypes.event) => bool = "dispatchEvent" + external dispatchEvent: (T.t, Event.t) => bool = "dispatchEvent" } -include Impl({type t = EventTypes.eventTarget}) +include Impl({type t = t}) diff --git a/src/Event/EventType.res b/src/Event/EventType.res new file mode 100644 index 00000000..e2c43f65 --- /dev/null +++ b/src/Event/EventType.res @@ -0,0 +1,110 @@ +@@warning("-30") + +@unboxed +type t = + | @as("abort") Abort + | @as("activate") Activate + | @as("auxclick") Auxclick + | @as("beforeinput") Beforeinput + | @as("beforetoggle") Beforetoggle + | @as("blur") Blur + | @as("cancel") Cancel + | @as("canplay") Canplay + | @as("canplaythrough") Canplaythrough + | @as("change") Change + | @as("click") Click + | @as("close") Close + | @as("contextlost") Contextlost + | @as("contextmenu") Contextmenu + | @as("contextrestored") Contextrestored + | @as("copy") Copy + | @as("cuechange") Cuechange + | @as("cut") Cut + | @as("dblclick") Dblclick + | @as("DOMContentLoaded") DOMContentLoaded + | @as("drag") Drag + | @as("dragend") Dragend + | @as("dragenter") Dragenter + | @as("dragleave") Dragleave + | @as("dragover") Dragover + | @as("dragstart") Dragstart + | @as("drop") Drop + | @as("durationchange") Durationchange + | @as("emptied") Emptied + | @as("ended") Ended + | @as("error") Error + | @as("focus") Focus + | @as("formdata") Formdata + | @as("input") Input + | @as("install") Install + | @as("invalid") Invalid + | @as("keydown") Keydown + | @as("keypress") Keypress + | @as("keyup") Keyup + | @as("load") Load + | @as("loadeddata") Loadeddata + | @as("loadedmetadata") Loadedmetadata + | @as("loadstart") Loadstart + | @as("message") Message + | @as("messageerror") MessageError + | @as("mousedown") Mousedown + | @as("mouseenter") Mouseenter + | @as("mouseleave") Mouseleave + | @as("mousemove") Mousemove + | @as("mouseout") Mouseout + | @as("mouseover") Mouseover + | @as("mouseup") Mouseup + | @as("notificationclick") NotificationClick + | @as("paste") Paste + | @as("pause") Pause + | @as("play") Play + | @as("playing") Playing + | @as("progress") Progress + | @as("ratechange") Ratechange + | @as("reset") Reset + | @as("resize") Resize + | @as("scroll") Scroll + | @as("scrollend") Scrollend + | @as("securitypolicyviolation") Securitypolicyviolation + | @as("seeked") Seeked + | @as("seeking") Seeking + | @as("select") Select + | @as("slotchange") Slotchange + | @as("stalled") Stalled + | @as("submit") Submit + | @as("suspend") Suspend + | @as("timeupdate") Timeupdate + | @as("toggle") Toggle + | @as("volumechange") Volumechange + | @as("waiting") Waiting + | @as("webkitanimationend") Webkitanimationend + | @as("webkitanimationiteration") Webkitanimationiteration + | @as("webkitanimationstart") Webkitanimationstart + | @as("webkittransitionend") Webkittransitionend + | @as("wheel") Wheel + | @as("animationstart") Animationstart + | @as("animationiteration") Animationiteration + | @as("animationend") Animationend + | @as("animationcancel") Animationcancel + | @as("transitionrun") Transitionrun + | @as("transitionstart") Transitionstart + | @as("transitionend") Transitionend + | @as("transitioncancel") Transitioncancel + | @as("pointerover") Pointerover + | @as("pointerenter") Pointerenter + | @as("pointerdown") Pointerdown + | @as("pointermove") Pointermove + | @as("pointerup") Pointerup + | @as("pointercancel") Pointercancel + | @as("pointerout") Pointerout + | @as("pointerleave") Pointerleave + | @as("push") Push + | @as("gotpointercapture") Gotpointercapture + | @as("lostpointercapture") Lostpointercapture + | @as("selectstart") Selectstart + | @as("selectionchange") Selectionchange + | @as("touchstart") Touchstart + | @as("touchend") Touchend + | @as("touchmove") Touchmove + | @as("touchcancel") Touchcancel + | Custom(string) diff --git a/src/Event/EventTypes.res b/src/Event/EventTypes.res index 502d2c0c..011832ca 100644 --- a/src/Event/EventTypes.res +++ b/src/Event/EventTypes.res @@ -1,135 +1,22 @@ @@warning("-30") -@unboxed -type eventType = - | @as("abort") Abort - | @as("activate") Activate - | @as("auxclick") Auxclick - | @as("beforeinput") Beforeinput - | @as("beforetoggle") Beforetoggle - | @as("blur") Blur - | @as("cancel") Cancel - | @as("canplay") Canplay - | @as("canplaythrough") Canplaythrough - | @as("change") Change - | @as("click") Click - | @as("close") Close - | @as("contextlost") Contextlost - | @as("contextmenu") Contextmenu - | @as("contextrestored") Contextrestored - | @as("copy") Copy - | @as("cuechange") Cuechange - | @as("cut") Cut - | @as("dblclick") Dblclick - | @as("DOMContentLoaded") DOMContentLoaded - | @as("drag") Drag - | @as("dragend") Dragend - | @as("dragenter") Dragenter - | @as("dragleave") Dragleave - | @as("dragover") Dragover - | @as("dragstart") Dragstart - | @as("drop") Drop - | @as("durationchange") Durationchange - | @as("emptied") Emptied - | @as("ended") Ended - | @as("error") Error - | @as("focus") Focus - | @as("formdata") Formdata - | @as("input") Input - | @as("install") Install - | @as("invalid") Invalid - | @as("keydown") Keydown - | @as("keypress") Keypress - | @as("keyup") Keyup - | @as("load") Load - | @as("loadeddata") Loadeddata - | @as("loadedmetadata") Loadedmetadata - | @as("loadstart") Loadstart - | @as("message") Message - | @as("messageerror") MessageError - | @as("mousedown") Mousedown - | @as("mouseenter") Mouseenter - | @as("mouseleave") Mouseleave - | @as("mousemove") Mousemove - | @as("mouseout") Mouseout - | @as("mouseover") Mouseover - | @as("mouseup") Mouseup - | @as("notificationclick") NotificationClick - | @as("paste") Paste - | @as("pause") Pause - | @as("play") Play - | @as("playing") Playing - | @as("progress") Progress - | @as("ratechange") Ratechange - | @as("reset") Reset - | @as("resize") Resize - | @as("scroll") Scroll - | @as("scrollend") Scrollend - | @as("securitypolicyviolation") Securitypolicyviolation - | @as("seeked") Seeked - | @as("seeking") Seeking - | @as("select") Select - | @as("slotchange") Slotchange - | @as("stalled") Stalled - | @as("submit") Submit - | @as("suspend") Suspend - | @as("timeupdate") Timeupdate - | @as("toggle") Toggle - | @as("volumechange") Volumechange - | @as("waiting") Waiting - | @as("webkitanimationend") Webkitanimationend - | @as("webkitanimationiteration") Webkitanimationiteration - | @as("webkitanimationstart") Webkitanimationstart - | @as("webkittransitionend") Webkittransitionend - | @as("wheel") Wheel - | @as("animationstart") Animationstart - | @as("animationiteration") Animationiteration - | @as("animationend") Animationend - | @as("animationcancel") Animationcancel - | @as("transitionrun") Transitionrun - | @as("transitionstart") Transitionstart - | @as("transitionend") Transitionend - | @as("transitioncancel") Transitioncancel - | @as("pointerover") Pointerover - | @as("pointerenter") Pointerenter - | @as("pointerdown") Pointerdown - | @as("pointermove") Pointermove - | @as("pointerup") Pointerup - | @as("pointercancel") Pointercancel - | @as("pointerout") Pointerout - | @as("pointerleave") Pointerleave - | @as("push") Push - | @as("gotpointercapture") Gotpointercapture - | @as("lostpointercapture") Lostpointercapture - | @as("selectstart") Selectstart - | @as("selectionchange") Selectionchange - | @as("touchstart") Touchstart - | @as("touchend") Touchend - | @as("touchmove") Touchmove - | @as("touchcancel") Touchcancel - | Custom(string) - -type eventListener<'event> = 'event => unit - /** EventTarget is a WebApiDOM interface implemented by objects that can receive events and may have listeners for them. [See EventTarget on MDN](https://developer.mozilla.org/docs/Web/API/EventTarget) */ -@editor.completeFrom(EventTarget) type eventTarget = BaseEvent.eventTarget = private {...BaseEvent.eventTarget} /** An event which takes place in the DOM. [See WebApiEvent on MDN](https://developer.mozilla.org/docs/Web/API/Event) */ -@editor.completeFrom(WebApiEvent) type event = private { /** Returns the type of event, e.g. "click", "hashchange", or "submit". [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Event/type) */ @as("type") - type_: eventType, + type_: EventType.t, /** Returns the object to which event is dispatched (its target). [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Event/target) @@ -181,7 +68,6 @@ type event = private { A controller object that allows you to abort one or more WebApiDOM requests as and when desired. [See AbortController on MDN](https://developer.mozilla.org/docs/Web/API/AbortController) */ -@editor.completeFrom(AbortController) type rec abortController = private { /** Returns the AbortSignal object associated with this object. @@ -194,7 +80,7 @@ type rec abortController = private { A signal object that allows you to communicate with a WebApiDOM request (such as a WebApiFetch) and abort it if required via an AbortController object. [See AbortSignal on MDN](https://developer.mozilla.org/docs/Web/API/AbortSignal) */ -@editor.completeFrom(AbortSignal) and abortSignal = private { +and abortSignal = private { ...eventTarget, /** Returns true if this AbortSignal's AbortController has signaled to abort, and false otherwise. @@ -207,8 +93,16 @@ A signal object that allows you to communicate with a WebApiDOM request (such as reason: JSON.t, } +type eventListener<'event> = 'event => unit + type eventListenerOptions = {mutable capture?: bool} +type eventInit = { + mutable bubbles?: bool, + mutable cancelable?: bool, + mutable composed?: bool, +} + type addEventListenerOptions = { ...eventListenerOptions, mutable passive?: bool, @@ -216,17 +110,10 @@ type addEventListenerOptions = { mutable signal?: abortSignal, } -type eventInit = { - mutable bubbles?: bool, - mutable cancelable?: bool, - mutable composed?: bool, -} - /** The ExtendableEvent interface extends the lifetime of the install and activate events dispatched on the global scope as part of the service worker lifecycle. [See ExtendableEvent on MDN](https://developer.mozilla.org/docs/Web/API/ExtendableEvent) */ -@editor.completeFrom(ExtendableEvent) type extendableEvent = private { ...event, } diff --git a/src/Event/ExtendableEvent.res b/src/Event/ExtendableEvent.res index b9321c29..aa94677e 100644 --- a/src/Event/ExtendableEvent.res +++ b/src/Event/ExtendableEvent.res @@ -1,9 +1,11 @@ +type t = EventTypes.extendableEvent = private {...EventTypes.extendableEvent} + module Impl = ( T: { type t }, ) => { - external asExtendableEvent: T.t => EventTypes.extendableEvent = "%identity" + external asExtendableEvent: T.t => t = "%identity" include Event.Impl({type t = T.t}) @@ -11,4 +13,4 @@ module Impl = ( external waitUntil: (T.t, promise<'a>) => unit = "waitUntil" } -include Impl({type t = EventTypes.extendableEvent}) +include Impl({type t = t}) diff --git a/src/Fetch/FetchTypes.res b/src/Fetch/FetchTypes.res index 45a499ff..26469fcd 100644 --- a/src/Fetch/FetchTypes.res +++ b/src/Fetch/FetchTypes.res @@ -145,7 +145,7 @@ type request = private { Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request/signal) */ - signal: EventTypes.abortSignal, + signal: AbortSignal.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Request/body) */ @@ -267,7 +267,7 @@ type requestInit = { /** An AbortSignal to set request's signal. */ - mutable signal?: Null.t, + mutable signal?: Null.t, mutable priority?: requestPriority, /** Can only be null. Used to disassociate request from any Window. diff --git a/src/File/FileTypes.res b/src/File/FileTypes.res index c8635d3b..04241c2b 100644 --- a/src/File/FileTypes.res +++ b/src/File/FileTypes.res @@ -63,7 +63,7 @@ type writableStreamDefaultController = private { /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController/signal) */ - signal: EventTypes.abortSignal, + signal: AbortSignal.t, } /** @@ -200,7 +200,7 @@ The signal option can be set to an AbortSignal to allow aborting an ongoing pipe mutable preventClose?: bool, mutable preventAbort?: bool, mutable preventCancel?: bool, - mutable signal?: EventTypes.abortSignal, + mutable signal?: AbortSignal.t, } type filePropertyBag = { diff --git a/src/IndexedDB/IndexedDbTypes.res b/src/IndexedDB/IndexedDbTypes.res index 6aeca46f..ad4f499d 100644 --- a/src/IndexedDB/IndexedDbTypes.res +++ b/src/IndexedDB/IndexedDbTypes.res @@ -33,7 +33,7 @@ This WebApiIndexedDB API interface provides a connection to a database; you can */ @editor.completeFrom(IDBDatabase) type idbDatabase = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** Returns the name of the database. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/IDBDatabase/name) @@ -56,7 +56,7 @@ type idbDatabase = private { */ @editor.completeFrom(IDBTransaction) type idbTransaction = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** Returns a list of the names of object stores in the transaction's scope. For an upgrade transaction this is all object stores in the database. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/IDBTransaction/objectStoreNames) @@ -88,7 +88,7 @@ The request object does not initially contain any information about the result o [See IDBRequest on MDN](https://developer.mozilla.org/docs/Web/API/IDBRequest) */ type idbRequest<'t> = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** When a request is completed, returns the result, or undefined if the request failed. Throws a "InvalidStateError" DOMException if the request is still pending. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/IDBRequest/result) diff --git a/src/MediaCaptureAndStreams/MediaCaptureAndStreamsTypes.res b/src/MediaCaptureAndStreams/MediaCaptureAndStreamsTypes.res index fc98e8d0..0f4a1cd7 100644 --- a/src/MediaCaptureAndStreams/MediaCaptureAndStreamsTypes.res +++ b/src/MediaCaptureAndStreams/MediaCaptureAndStreamsTypes.res @@ -15,7 +15,7 @@ Provides access to connected media input devices like cameras and microphones, a */ @editor.completeFrom(MediaDevices) type mediaDevices = private { - ...EventTypes.eventTarget, + ...EventTarget.t, } /** @@ -48,7 +48,7 @@ A stream of media content. A stream consists of several tracks such as video or */ @editor.completeFrom(MediaStream) type mediaStream = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaStream/id) */ @@ -66,7 +66,7 @@ TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(MediaStreamTrack) type mediaStreamTrack = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MediaStreamTrack/kind) */ diff --git a/src/Notification/NotificationTypes.res b/src/Notification/NotificationTypes.res index 3f63104a..eec81bad 100644 --- a/src/Notification/NotificationTypes.res +++ b/src/Notification/NotificationTypes.res @@ -16,7 +16,7 @@ This Notifications API interface is used to configure and display desktop notifi */ @editor.completeFrom(WebApiNotification) type notification = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Notification/permission_static) */ @@ -95,7 +95,7 @@ type getNotificationOptions = {mutable tag?: string} type notificationPermissionCallback = notificationPermission => unit type notificationEvent = { - ...EventTypes.extendableEvent, + ...ExtendableEvent.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/NotificationEvent/action) */ diff --git a/src/Performance/PerformanceTypes.res b/src/Performance/PerformanceTypes.res index f47cf514..dba3b557 100644 --- a/src/Performance/PerformanceTypes.res +++ b/src/Performance/PerformanceTypes.res @@ -11,7 +11,7 @@ Provides access to performance-related information for the current page. It's pa */ @editor.completeFrom(WebApiPerformance) type performance = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Performance/timeOrigin) */ diff --git a/src/Permissions/PermissionsTypes.res b/src/Permissions/PermissionsTypes.res index 84c3c4a3..43885434 100644 --- a/src/Permissions/PermissionsTypes.res +++ b/src/Permissions/PermissionsTypes.res @@ -24,7 +24,7 @@ type permissions = private {} [See PermissionStatus on MDN](https://developer.mozilla.org/docs/Web/API/PermissionStatus) */ type permissionStatus = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/PermissionStatus/state) */ diff --git a/src/PictureInPicture/PictureInPictureTypes.res b/src/PictureInPicture/PictureInPictureTypes.res index ff556ae9..21cddc60 100644 --- a/src/PictureInPicture/PictureInPictureTypes.res +++ b/src/PictureInPicture/PictureInPictureTypes.res @@ -4,7 +4,7 @@ [See PictureInPictureWindow on MDN](https://developer.mozilla.org/docs/Web/API/PictureInPictureWindow) */ type pictureInPictureWindow = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/PictureInPictureWindow/width) */ diff --git a/src/Push/PushTypes.res b/src/Push/PushTypes.res index 33b1228d..39297490 100644 --- a/src/Push/PushTypes.res +++ b/src/Push/PushTypes.res @@ -80,7 +80,7 @@ type pushMessageData @editor.completeFrom(PushEvent) type pushEvent = private { - ...EventTypes.extendableEvent, + ...ExtendableEvent.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/PushEvent/data) */ diff --git a/src/RemotePlayback/RemotePlaybackTypes.res b/src/RemotePlayback/RemotePlaybackTypes.res index 975cc56d..021a5175 100644 --- a/src/RemotePlayback/RemotePlaybackTypes.res +++ b/src/RemotePlayback/RemotePlaybackTypes.res @@ -10,7 +10,7 @@ type remotePlaybackState = */ @editor.completeFrom(WebApiRemotePlayback) type remotePlayback = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/RemotePlayback/state) */ diff --git a/src/ScreenWakeLock/ScreenWakeLockTypes.res b/src/ScreenWakeLock/ScreenWakeLockTypes.res index 5d23df6c..7f19073b 100644 --- a/src/ScreenWakeLock/ScreenWakeLockTypes.res +++ b/src/ScreenWakeLock/ScreenWakeLockTypes.res @@ -13,7 +13,7 @@ type wakeLock = private {} */ @editor.completeFrom(WakeLockSentinel) type wakeLockSentinel = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/WakeLockSentinel/released) */ diff --git a/src/ServiceWorker/ServiceWorkerTypes.res b/src/ServiceWorker/ServiceWorkerTypes.res index d7415b57..a15b5786 100644 --- a/src/ServiceWorker/ServiceWorkerTypes.res +++ b/src/ServiceWorker/ServiceWorkerTypes.res @@ -23,7 +23,7 @@ This WebApiServiceWorker API interface provides a reference to a service worker. */ @editor.completeFrom(WebApiServiceWorker) type serviceWorker = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/ServiceWorker/scriptURL) */ @@ -46,7 +46,7 @@ This WebApiServiceWorker API interface represents the service worker registratio */ @editor.completeFrom(ServiceWorkerRegistration) type serviceWorkerRegistration = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/installing) */ @@ -83,7 +83,7 @@ The ServiceWorkerContainer interface of the WebApiServiceWorker API provides */ @editor.completeFrom(ServiceWorkerContainer) type serviceWorkerContainer = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/controller) */ diff --git a/src/UIEvents/UiEventsTypes.res b/src/UIEvents/UiEventsTypes.res index 44347325..fb00c4b0 100644 --- a/src/UIEvents/UiEventsTypes.res +++ b/src/UIEvents/UiEventsTypes.res @@ -10,7 +10,7 @@ Simple user interface events. */ @editor.completeFrom(UIEvent) type uiEvent = private { - ...EventTypes.event, + ...Event.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/UIEvent/view) */ @@ -44,7 +44,7 @@ type focusEvent = private { /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/FocusEvent/relatedTarget) */ - relatedTarget: Null.t, + relatedTarget: Null.t, } /** @@ -248,7 +248,7 @@ type mouseEvent = private { /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MouseEvent/relatedTarget) */ - relatedTarget: Null.t, + relatedTarget: Null.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MouseEvent/pageX) */ @@ -321,7 +321,7 @@ type touch = private { /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Touch/target) */ - target: EventTypes.eventTarget, + target: EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/Touch/screenX) */ @@ -471,7 +471,7 @@ type pointerEvent = private { } type uiEventInit = { - ...EventTypes.eventInit, + ...Event.eventInit, mutable view?: Null.t, mutable detail?: int, mutable which?: int, @@ -503,14 +503,14 @@ type mouseEventInit = { mutable clientY?: int, mutable button?: int, mutable buttons?: int, - mutable relatedTarget?: Null.t, + mutable relatedTarget?: Null.t, mutable movementX?: float, mutable movementY?: float, } type focusEventInit = { ...uiEventInit, - mutable relatedTarget?: Null.t, + mutable relatedTarget?: Null.t, } type compositionEventInit = { @@ -548,7 +548,7 @@ type inputEventInit = { type touchInit = { mutable identifier: int, - mutable target: EventTypes.eventTarget, + mutable target: EventTarget.t, mutable clientX?: float, mutable clientY?: float, mutable screenX?: float, diff --git a/src/VisualViewport/VisualViewportTypes.res b/src/VisualViewport/VisualViewportTypes.res index dd1df336..db1c2135 100644 --- a/src/VisualViewport/VisualViewportTypes.res +++ b/src/VisualViewport/VisualViewportTypes.res @@ -4,7 +4,7 @@ [See WebApiVisualViewport on MDN](https://developer.mozilla.org/docs/Web/API/VisualViewport) */ type visualViewport = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/VisualViewport/offsetLeft) */ diff --git a/src/WebAudio/WebAudioTypes.res b/src/WebAudio/WebAudioTypes.res index c65d1be1..63d7c75d 100644 --- a/src/WebAudio/WebAudioTypes.res +++ b/src/WebAudio/WebAudioTypes.res @@ -80,7 +80,7 @@ The Web Audio API events that occur when a ScriptProcessorNode input buffer is r */ @editor.completeFrom(AudioProcessingEvent) type audioProcessingEvent = private { - ...EventTypes.event, + ...Event.t, } /** @@ -89,7 +89,7 @@ The Web Audio API OfflineAudioCompletionEvent interface represents events that o */ @editor.completeFrom(OfflineAudioCompletionEvent) type offlineAudioCompletionEvent = private { - ...EventTypes.event, + ...Event.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/OfflineAudioCompletionEvent/renderedBuffer) */ @@ -109,7 +109,7 @@ TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(AudioNode) type rec audioNode = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/AudioNode/context) */ @@ -178,7 +178,7 @@ and audioDestinationNode = { [See BaseAudioContext on MDN](https://developer.mozilla.org/docs/Web/API/BaseAudioContext) */ @editor.completeFrom(BaseAudioContext) and baseAudioContext = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/destination) */ @@ -1136,14 +1136,14 @@ type audioBufferOptions = { } type audioProcessingEventInit = { - ...EventTypes.eventInit, + ...Event.eventInit, mutable playbackTime: float, mutable inputBuffer: audioBuffer, mutable outputBuffer: audioBuffer, } type offlineAudioCompletionEventInit = { - ...EventTypes.eventInit, + ...Event.eventInit, mutable renderedBuffer: audioBuffer, } diff --git a/src/WebLocks/WebLocksTypes.res b/src/WebLocks/WebLocksTypes.res index 266a4910..997e60f4 100644 --- a/src/WebLocks/WebLocksTypes.res +++ b/src/WebLocks/WebLocksTypes.res @@ -39,7 +39,7 @@ type lockOptions = { mutable mode?: lockMode, mutable ifAvailable?: bool, mutable steal?: bool, - mutable signal?: EventTypes.abortSignal, + mutable signal?: AbortSignal.t, } type lockGrantedCallback = lock => promise diff --git a/src/WebMIDI/WebMidiTypes.res b/src/WebMIDI/WebMidiTypes.res index 0ccb3c06..6d493a70 100644 --- a/src/WebMIDI/WebMidiTypes.res +++ b/src/WebMIDI/WebMidiTypes.res @@ -14,7 +14,7 @@ type midiOutputMap = {} [See MIDIAccess on MDN](https://developer.mozilla.org/docs/Web/API/MIDIAccess) */ type midiAccess = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MIDIAccess/inputs) */ diff --git a/src/WebSockets/MessageEvent.res b/src/WebSockets/MessageEvent.res index 480b3b93..cf5a022f 100644 --- a/src/WebSockets/MessageEvent.res +++ b/src/WebSockets/MessageEvent.res @@ -1,5 +1,5 @@ -type event = EventTypes.event -type eventTarget = EventTypes.eventTarget +type event = Event.t +type eventTarget = EventTarget.t type messageEventSource = WebSocketsTypes.messageEventSource type messageEvent<'t> = WebSocketsTypes.messageEvent<'t> diff --git a/src/WebSockets/WebSocketsTypes.res b/src/WebSockets/WebSocketsTypes.res index f3574108..79f7cc2e 100644 --- a/src/WebSockets/WebSocketsTypes.res +++ b/src/WebSockets/WebSocketsTypes.res @@ -13,7 +13,7 @@ TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(WebSocket) type webSocket = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** Returns the WebApiURL that was used to establish the WebSocket connection. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/WebSocket/url) @@ -56,7 +56,7 @@ A CloseEvent is sent to clients using WebApiWebSockets when the connection is cl */ @editor.completeFrom(CloseEvent) type closeEvent = private { - ...EventTypes.event, + ...Event.t, /** Returns true if the connection closed cleanly; false otherwise. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/CloseEvent/wasClean) @@ -79,7 +79,7 @@ A message received by a target object. [See MessageEvent on MDN](https://developer.mozilla.org/docs/Web/API/MessageEvent) */ type messageEvent<'t> = { - ...EventTypes.event, + ...Event.t, /** Returns the data of the message. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/MessageEvent/data) @@ -108,14 +108,14 @@ type messageEvent<'t> = { } type closeEventInit = { - ...EventTypes.eventInit, + ...Event.eventInit, mutable wasClean?: bool, mutable code?: int, mutable reason?: string, } type messageEventInit<'t> = { - ...EventTypes.eventInit, + ...Event.eventInit, mutable data?: 't, mutable origin?: string, mutable lastEventId?: string, diff --git a/src/WebSpeech/WebSpeechTypes.res b/src/WebSpeech/WebSpeechTypes.res index d4028d8a..448409fd 100644 --- a/src/WebSpeech/WebSpeechTypes.res +++ b/src/WebSpeech/WebSpeechTypes.res @@ -6,7 +6,7 @@ This Web Speech API interface is the controller interface for the speech service */ @editor.completeFrom(SpeechSynthesis) type speechSynthesis = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/SpeechSynthesis/pending) */ @@ -55,7 +55,7 @@ TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(SpeechSynthesisUtterance) type speechSynthesisUtterance = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/docs/Web/API/SpeechSynthesisUtterance/text) */ diff --git a/src/WebStorage/WebStorageTypes.res b/src/WebStorage/WebStorageTypes.res index 1b210cf2..353182d8 100644 --- a/src/WebStorage/WebStorageTypes.res +++ b/src/WebStorage/WebStorageTypes.res @@ -19,7 +19,7 @@ A StorageEvent is sent to a window when a storage area it has access to is chang */ @editor.completeFrom(StorageEvent) type storageEvent = private { - ...EventTypes.event, + ...Event.t, /** Returns the key of the storage item being changed. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/StorageEvent/key) @@ -48,7 +48,7 @@ type storageEvent = private { } type storageEventInit = { - ...EventTypes.eventInit, + ...Event.eventInit, mutable key?: Null.t, mutable oldValue?: Null.t, mutable newValue?: Null.t, diff --git a/src/WebVTT/WebVttTypes.res b/src/WebVTT/WebVttTypes.res index c0416343..e9d97dff 100644 --- a/src/WebVTT/WebVttTypes.res +++ b/src/WebVTT/WebVttTypes.res @@ -31,7 +31,7 @@ TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(TextTrack) type rec textTrackCue = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** Returns the TextTrack object to which this text track cue belongs, if any, or null otherwise. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/TextTrackCue/track) @@ -73,7 +73,7 @@ This interface also inherits properties from EventTarget. TODO: mark as private once mutating fields of private records is allowed */ @editor.completeFrom(TextTrack) and textTrack = { - ...EventTypes.eventTarget, + ...EventTarget.t, /** Returns the text track kind string. [Read more on MDN](https://developer.mozilla.org/docs/Web/API/TextTrack/kind) diff --git a/src/WebWorkers/WebWorkersTypes.res b/src/WebWorkers/WebWorkersTypes.res index 78068fa7..ebd87b57 100644 --- a/src/WebWorkers/WebWorkersTypes.res +++ b/src/WebWorkers/WebWorkersTypes.res @@ -34,7 +34,7 @@ Each WorkerGlobalScope has its own event loop. */ @editor.completeFrom(WorkerGlobalScope) type workerGlobalScope = private { - ...EventTypes.eventTarget, + ...EventTarget.t, /** [Read more on MDN](https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/caches) */ diff --git a/tests/DOMAPI/AddEventListener__test.res b/tests/DOMAPI/AddEventListener__test.res index ef052991..9f223249 100644 --- a/tests/DOMAPI/AddEventListener__test.res +++ b/tests/DOMAPI/AddEventListener__test.res @@ -1,18 +1,5 @@ -let button = DomGlobal.document->Document.querySelector("button")->Null.toOption -let h2 = DomGlobal.document->Document.querySelector("h2")->Null.toOption +let target = EventTarget.make() -switch (button, h2) { -| (Some(button), Some(h2)) => - button->Element.addEventListener(EventTypes.Click, (e: UiEventsTypes.mouseEvent) => { - Console.log(`Button clicked, ${Int.toString(e.button)}`) - switch h2.textContent { - | Null => h2.textContent = Value("1") - | Value(text) => - switch Int.fromString(text) { - | None => h2.textContent = Value("1") - | Some(number) => h2.textContent = Value(Int.toString(number + 1)) - } - } - }) -| _ => Console.log("Stuff not found") -} +target->EventTarget.addEventListener(EventType.Click, (event: Event.t) => { + event->Event.preventDefault +}) diff --git a/tests/DOMAPI/EventTarget__test.res b/tests/DOMAPI/EventTarget__test.res new file mode 100644 index 00000000..51f78fdd --- /dev/null +++ b/tests/DOMAPI/EventTarget__test.res @@ -0,0 +1,15 @@ +let acceptsDOMEventTarget = (_target: EventTarget.t) => () +let acceptsEventTargetLeaf = (_target: EventTarget.t) => () + +let _ = (target: EventTarget.t) => { + acceptsEventTargetLeaf(target) +} + +let _ = (target: EventTarget.t) => { + acceptsDOMEventTarget(target) +} + +let el = switch Document.make()->Document.getElementById("foo") { +| Null => () +| Value(el) => el->Element.addEventListener(Click, () => ()) +} diff --git a/tests/DOMAPI/EventType__test.res b/tests/DOMAPI/EventType__test.res new file mode 100644 index 00000000..a20b570c --- /dev/null +++ b/tests/DOMAPI/EventType__test.res @@ -0,0 +1,5 @@ +let click: EventType.t = Click + +let custom: EventType.t = Custom("custom-event") + +let _ = (click, custom) diff --git a/tests/DOMAPI/Event__test.res b/tests/DOMAPI/Event__test.res new file mode 100644 index 00000000..0f121ce1 --- /dev/null +++ b/tests/DOMAPI/Event__test.res @@ -0,0 +1,28 @@ +let acceptsDOMEvent = (_event: Event.t) => () +let acceptsEvent = (_event: Event.t) => () + +let _ = (event: Event.t) => { + acceptsEvent(event) +} + +let _ = (event: Event.t) => { + acceptsDOMEvent(event) +} + +let handleClick = (event: Event.t) => { + event->Event.preventDefault + switch event->Event.target { + | Value(target) => Console.log(target) + | Null => Console.log("No target found") + } +} + +let target: EventTarget.t = {} + +let fn = (target: Event.eventTarget) => + target->EventTarget.addEventListener(Click, () => Console.log("Click 1")) + +let x = fn(target) + +// Testing out global event listeners +Window.current->Window.addEventListener(Click, () => Console.log("Click 2")) diff --git a/tests/Fetch__test.res b/tests/Fetch__test.res index 9428890f..ef5d648a 100644 --- a/tests/Fetch__test.res +++ b/tests/Fetch__test.res @@ -26,12 +26,6 @@ let response3 = await Fetch.fetchWithRequest( }, ) -DomGlobal.removeEventListener( - EventTypes.Mousedown, - MouseEvent.preventDefault, - ~options={capture: false}, -) - let registrationResult = await Window.current ->Window.navigator ->Navigator.serviceWorker diff --git a/tests/ServiceWorkerAPI/ServiceWorker__test.res b/tests/ServiceWorkerAPI/ServiceWorker__test.res index c0fbdb60..e6083688 100644 --- a/tests/ServiceWorkerAPI/ServiceWorker__test.res +++ b/tests/ServiceWorkerAPI/ServiceWorker__test.res @@ -1,6 +1,6 @@ let self = ServiceWorkerScope.current -self->ServiceWorkerScope.addEventListener(EventTypes.Push, (event: PushEvent.t) => { +self->ServiceWorkerScope.addEventListener(EventType.Push, (event: PushEvent.t) => { Console.log("received push event") // Extract data @@ -32,7 +32,7 @@ self->ServiceWorkerScope.addEventListener(EventTypes.Push, (event: PushEvent.t) ->Promise.ignore }) -self->ServiceWorkerScope.addEventListener(EventTypes.NotificationClick, ( +self->ServiceWorkerScope.addEventListener(EventType.NotificationClick, ( event: Notification.notificationEvent, ) => { Console.log(`notification clicked: ${event.action}`)