From 3267a8fb855664eac9164e3d230c16830c96dc9b Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sat, 2 Aug 2025 21:08:42 +0300 Subject: [PATCH 01/12] Enhance handleProperty function to dynamically handle additional properties from child nodes --- inputfiles/overridingTypes.jsonc | 21 --------------------- inputfiles/patches/eventhandlers.kdl | 7 +++++++ src/build/patches.ts | 13 +++++++++++-- 3 files changed, 18 insertions(+), 23 deletions(-) create mode 100644 inputfiles/patches/eventhandlers.kdl diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index 0460a94ed..d22bac434 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -38,27 +38,6 @@ } } }, - "GlobalEventHandlers": { - "properties": { - "property": { - "onerror": { - "overrideType": "OnErrorEventHandler" - }, - "ontouchcancel": { - "optional": true - }, - "ontouchend": { - "optional": true - }, - "ontouchmove": { - "optional": true - }, - "ontouchstart": { - "optional": true - } - } - } - }, "HTMLOrSVGElement": { "properties": { "property": { diff --git a/inputfiles/patches/eventhandlers.kdl b/inputfiles/patches/eventhandlers.kdl new file mode 100644 index 000000000..cd06be63e --- /dev/null +++ b/inputfiles/patches/eventhandlers.kdl @@ -0,0 +1,7 @@ +interface-mixin GlobalEventHandlers { + property ontouchcancel optional=#true + property ontouchend optional=#true + property ontouchmove optional=#true + property ontouchstart optional=#true + property onerror overrideType=OnErrorEventHandler +} \ No newline at end of file diff --git a/src/build/patches.ts b/src/build/patches.ts index a6061561e..08b3f8b5a 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -119,10 +119,19 @@ function handleEvent(child: Node): Event { * @param child The child node to handle. */ function handleProperty(child: Node): Partial { - return { + const result: Partial = { name: child.values[0] as string, - exposed: child.properties?.exposed as string, }; + + const props: (keyof Property)[] = ["exposed", "optional", "overrideType"]; + + props.forEach((prop) => { + const value = child.properties[prop]; + if (value !== undefined) { + result[prop] = value as any; + } + }); + return result; } /** From 03773092b336b148192067b77eec58b6e3f1ba72 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sat, 2 Aug 2025 21:11:09 +0300 Subject: [PATCH 02/12] chore: new line --- inputfiles/patches/eventhandlers.kdl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inputfiles/patches/eventhandlers.kdl b/inputfiles/patches/eventhandlers.kdl index cd06be63e..01669e61f 100644 --- a/inputfiles/patches/eventhandlers.kdl +++ b/inputfiles/patches/eventhandlers.kdl @@ -4,4 +4,4 @@ interface-mixin GlobalEventHandlers { property ontouchmove optional=#true property ontouchstart optional=#true property onerror overrideType=OnErrorEventHandler -} \ No newline at end of file +} From 37efe71edba6dffbcd89e49d4f2cfd3aefc8d25d Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 07:20:56 +0300 Subject: [PATCH 03/12] - --- inputfiles/patches/eventhandlers.kdl | 7 ------ inputfiles/patches/events.kdl | 7 ++++++ src/build/patches.ts | 34 ++++++++++++++-------------- 3 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 inputfiles/patches/eventhandlers.kdl diff --git a/inputfiles/patches/eventhandlers.kdl b/inputfiles/patches/eventhandlers.kdl deleted file mode 100644 index 01669e61f..000000000 --- a/inputfiles/patches/eventhandlers.kdl +++ /dev/null @@ -1,7 +0,0 @@ -interface-mixin GlobalEventHandlers { - property ontouchcancel optional=#true - property ontouchend optional=#true - property ontouchmove optional=#true - property ontouchstart optional=#true - property onerror overrideType=OnErrorEventHandler -} diff --git a/inputfiles/patches/events.kdl b/inputfiles/patches/events.kdl index 7772dd592..bc9f030e1 100644 --- a/inputfiles/patches/events.kdl +++ b/inputfiles/patches/events.kdl @@ -73,6 +73,13 @@ interface-mixin GlobalEventHandlers { event transitionstart type=TransitionEvent event transitionend type=TransitionEvent event transitioncancel type=TransitionEvent + // Touch event handlers are intentionally hidden in non-mobile web browsers. + // See w3c.github.io/touch-events#dfn-expose-legacy-touch-event-apis. + property ontouchcancel optional=#true + property ontouchend optional=#true + property ontouchmove optional=#true + property ontouchstart optional=#true + property onerror overrideType=OnErrorEventHandler } interface-mixin MessageEventTarget { diff --git a/src/build/patches.ts b/src/build/patches.ts index 08b3f8b5a..d7eb0069c 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -1,4 +1,4 @@ -import { parse, type Node } from "kdljs"; +import { parse, type Value, type Node } from "kdljs"; import type { Enum, Event, Property, Interface, WebIdl } from "./types"; import { readdir, readFile } from "fs/promises"; import { merge } from "./helpers.js"; @@ -7,6 +7,16 @@ type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T; +function optionalMember(prop: string, type: T, value?: Value) { + if (value === undefined) { + return {}; + } + if (typeof value !== type) { + throw new Error(`Expected type ${value} for ${prop}`); + } + return { [prop]: value as T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never }; +} + /** * Converts patch files in KDL to match the [types](types.d.ts). */ @@ -92,15 +102,12 @@ function handleMixin(node: Node): DeepPartial { } } - const result = { + return { name, events: { event }, properties: { property }, + ...optionalMember("extends", "string", node.properties?.extends), } as DeepPartial; - if (node.properties.extends) { - result.extends = node.properties.extends as string; - } - return result; } /** @@ -119,19 +126,12 @@ function handleEvent(child: Node): Event { * @param child The child node to handle. */ function handleProperty(child: Node): Partial { - const result: Partial = { + return { name: child.values[0] as string, + ...optionalMember("exposed", "string", child.properties?.exposed), + ...optionalMember("optional", "boolean", child.properties?.optional), + ...optionalMember("overrideType", "string", child.properties?.overrideType), }; - - const props: (keyof Property)[] = ["exposed", "optional", "overrideType"]; - - props.forEach((prop) => { - const value = child.properties[prop]; - if (value !== undefined) { - result[prop] = value as any; - } - }); - return result; } /** From 38843006bcb29137b1ca4650b0d7cecfb47ef458 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 07:21:18 +0300 Subject: [PATCH 04/12] format --- src/build/patches.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/build/patches.ts b/src/build/patches.ts index d7eb0069c..d21404989 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -14,7 +14,15 @@ function optionalMember(prop: string, type: T, value?: Value) { if (typeof value !== type) { throw new Error(`Expected type ${value} for ${prop}`); } - return { [prop]: value as T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never }; + return { + [prop]: value as T extends "string" + ? string + : T extends "number" + ? number + : T extends "boolean" + ? boolean + : never, + }; } /** From afd7b3e53990869ca2b07b483930a71dc68fce4a Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 16:36:11 +0300 Subject: [PATCH 05/12] - --- inputfiles/patches/events.kdl | 7 --- inputfiles/patches/touch-events.kdl | 73 +++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 inputfiles/patches/touch-events.kdl diff --git a/inputfiles/patches/events.kdl b/inputfiles/patches/events.kdl index bc9f030e1..7772dd592 100644 --- a/inputfiles/patches/events.kdl +++ b/inputfiles/patches/events.kdl @@ -73,13 +73,6 @@ interface-mixin GlobalEventHandlers { event transitionstart type=TransitionEvent event transitionend type=TransitionEvent event transitioncancel type=TransitionEvent - // Touch event handlers are intentionally hidden in non-mobile web browsers. - // See w3c.github.io/touch-events#dfn-expose-legacy-touch-event-apis. - property ontouchcancel optional=#true - property ontouchend optional=#true - property ontouchmove optional=#true - property ontouchstart optional=#true - property onerror overrideType=OnErrorEventHandler } interface-mixin MessageEventTarget { diff --git a/inputfiles/patches/touch-events.kdl b/inputfiles/patches/touch-events.kdl new file mode 100644 index 000000000..80c9fa011 --- /dev/null +++ b/inputfiles/patches/touch-events.kdl @@ -0,0 +1,73 @@ +interface-mixin GlobalEventHandlers { + event abort type=UIEvent + event auxclick type=PointerEvent + event beforeinput type=InputEvent + event beforetoggle type=ToggleEvent + event blur type=FocusEvent + event click type=PointerEvent + event compositionend type=CompositionEvent + event compositionstart type=CompositionEvent + event compositionupdate type=CompositionEvent + event contextmenu type=PointerEvent + event dblclick type=MouseEvent + event drag type=DragEvent + event dragend type=DragEvent + event dragenter type=DragEvent + event dragleave type=DragEvent + event dragover type=DragEvent + event dragstart type=DragEvent + event drop type=DragEvent + event error type=ErrorEvent + event focus type=FocusEvent + event focusin type=FocusEvent + event focusout type=FocusEvent + event formdata type=FormDataEvent + event keydown type=KeyboardEvent + event keypress type=KeyboardEvent + event keyup type=KeyboardEvent + event mousedown type=MouseEvent + event mouseenter type=MouseEvent + event mouseleave type=MouseEvent + event mousemove type=MouseEvent + event mouseout type=MouseEvent + event mouseover type=MouseEvent + event mouseup type=MouseEvent + event progress type=ProgressEvent + event resize type=UIEvent + event securitypolicyviolation type=SecurityPolicyViolationEvent + event submit type=SubmitEvent + event toggle type=ToggleEvent + event wheel type=WheelEvent + event animationcancel type=AnimationEvent + event animationend type=AnimationEvent + event animationiteration type=AnimationEvent + event animationstart type=AnimationEvent + event cut type=ClipboardEvent + event copy type=ClipboardEvent + event paste type=ClipboardEvent + event gotpointercapture type=PointerEvent + event lostpointercapture type=PointerEvent + event pointercancel type=PointerEvent + event pointerdown type=PointerEvent + event pointerenter type=PointerEvent + event pointerleave type=PointerEvent + event pointermove type=PointerEvent + event pointerout type=PointerEvent + event pointerover type=PointerEvent + event pointerup type=PointerEvent + event touchcancel type=TouchEvent + event touchend type=TouchEvent + event touchmove type=TouchEvent + event touchstart type=TouchEvent + event transitionrun type=TransitionEvent + event transitionstart type=TransitionEvent + event transitionend type=TransitionEvent + event transitioncancel type=TransitionEvent + // Touch event handlers are intentionally hidden in non-mobile web browsers. + // See w3c.github.io/touch-events#dfn-expose-legacy-touch-event-apis. + property ontouchcancel optional=#true + property ontouchend optional=#true + property ontouchmove optional=#true + property ontouchstart optional=#true + property onerror overrideType=OnErrorEventHandler +} \ No newline at end of file From c63e69cdd59874182ce928f072cb99ef7e380522 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 16:36:53 +0300 Subject: [PATCH 06/12] - --- inputfiles/patches/touch-events.kdl | 64 ----------------------------- 1 file changed, 64 deletions(-) diff --git a/inputfiles/patches/touch-events.kdl b/inputfiles/patches/touch-events.kdl index 80c9fa011..d9e204a1d 100644 --- a/inputfiles/patches/touch-events.kdl +++ b/inputfiles/patches/touch-events.kdl @@ -1,68 +1,4 @@ interface-mixin GlobalEventHandlers { - event abort type=UIEvent - event auxclick type=PointerEvent - event beforeinput type=InputEvent - event beforetoggle type=ToggleEvent - event blur type=FocusEvent - event click type=PointerEvent - event compositionend type=CompositionEvent - event compositionstart type=CompositionEvent - event compositionupdate type=CompositionEvent - event contextmenu type=PointerEvent - event dblclick type=MouseEvent - event drag type=DragEvent - event dragend type=DragEvent - event dragenter type=DragEvent - event dragleave type=DragEvent - event dragover type=DragEvent - event dragstart type=DragEvent - event drop type=DragEvent - event error type=ErrorEvent - event focus type=FocusEvent - event focusin type=FocusEvent - event focusout type=FocusEvent - event formdata type=FormDataEvent - event keydown type=KeyboardEvent - event keypress type=KeyboardEvent - event keyup type=KeyboardEvent - event mousedown type=MouseEvent - event mouseenter type=MouseEvent - event mouseleave type=MouseEvent - event mousemove type=MouseEvent - event mouseout type=MouseEvent - event mouseover type=MouseEvent - event mouseup type=MouseEvent - event progress type=ProgressEvent - event resize type=UIEvent - event securitypolicyviolation type=SecurityPolicyViolationEvent - event submit type=SubmitEvent - event toggle type=ToggleEvent - event wheel type=WheelEvent - event animationcancel type=AnimationEvent - event animationend type=AnimationEvent - event animationiteration type=AnimationEvent - event animationstart type=AnimationEvent - event cut type=ClipboardEvent - event copy type=ClipboardEvent - event paste type=ClipboardEvent - event gotpointercapture type=PointerEvent - event lostpointercapture type=PointerEvent - event pointercancel type=PointerEvent - event pointerdown type=PointerEvent - event pointerenter type=PointerEvent - event pointerleave type=PointerEvent - event pointermove type=PointerEvent - event pointerout type=PointerEvent - event pointerover type=PointerEvent - event pointerup type=PointerEvent - event touchcancel type=TouchEvent - event touchend type=TouchEvent - event touchmove type=TouchEvent - event touchstart type=TouchEvent - event transitionrun type=TransitionEvent - event transitionstart type=TransitionEvent - event transitionend type=TransitionEvent - event transitioncancel type=TransitionEvent // Touch event handlers are intentionally hidden in non-mobile web browsers. // See w3c.github.io/touch-events#dfn-expose-legacy-touch-event-apis. property ontouchcancel optional=#true From 18881d4a5b8e81742053100a4d93aef3af50d588 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 20:14:26 +0300 Subject: [PATCH 07/12] - --- inputfiles/patches/events.kdl | 1 + inputfiles/patches/touch-events.kdl | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/inputfiles/patches/events.kdl b/inputfiles/patches/events.kdl index 7772dd592..9a553402e 100644 --- a/inputfiles/patches/events.kdl +++ b/inputfiles/patches/events.kdl @@ -73,6 +73,7 @@ interface-mixin GlobalEventHandlers { event transitionstart type=TransitionEvent event transitionend type=TransitionEvent event transitioncancel type=TransitionEvent + property onerror overrideType=OnErrorEventHandler } interface-mixin MessageEventTarget { diff --git a/inputfiles/patches/touch-events.kdl b/inputfiles/patches/touch-events.kdl index d9e204a1d..c1a48063f 100644 --- a/inputfiles/patches/touch-events.kdl +++ b/inputfiles/patches/touch-events.kdl @@ -5,5 +5,4 @@ interface-mixin GlobalEventHandlers { property ontouchend optional=#true property ontouchmove optional=#true property ontouchstart optional=#true - property onerror overrideType=OnErrorEventHandler } \ No newline at end of file From a2beb93cf97ed558c0153e7709f19f6546f81aa0 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 20:16:57 +0300 Subject: [PATCH 08/12] chore: spaces --- inputfiles/patches/events.kdl | 170 ++++++++++++++-------------- inputfiles/patches/touch-events.kdl | 12 +- inputfiles/patches/webgl.kdl | 2 +- 3 files changed, 92 insertions(+), 92 deletions(-) diff --git a/inputfiles/patches/events.kdl b/inputfiles/patches/events.kdl index 9a553402e..58fa23520 100644 --- a/inputfiles/patches/events.kdl +++ b/inputfiles/patches/events.kdl @@ -1,99 +1,99 @@ interface-mixin AbstractWorker { - event error type=ErrorEvent + event error type=ErrorEvent } interface-mixin DocumentAndElementEventHandlers { - event copy type=ClipboardEvent - event cut type=ClipboardEvent - event paste type=ClipboardEvent + event copy type=ClipboardEvent + event cut type=ClipboardEvent + event paste type=ClipboardEvent } interface-mixin GlobalEventHandlers { - event abort type=UIEvent - event auxclick type=PointerEvent - event beforeinput type=InputEvent - event beforetoggle type=ToggleEvent - event blur type=FocusEvent - event click type=PointerEvent - event compositionend type=CompositionEvent - event compositionstart type=CompositionEvent - event compositionupdate type=CompositionEvent - event contextmenu type=PointerEvent - event dblclick type=MouseEvent - event drag type=DragEvent - event dragend type=DragEvent - event dragenter type=DragEvent - event dragleave type=DragEvent - event dragover type=DragEvent - event dragstart type=DragEvent - event drop type=DragEvent - event error type=ErrorEvent - event focus type=FocusEvent - event focusin type=FocusEvent - event focusout type=FocusEvent - event formdata type=FormDataEvent - event keydown type=KeyboardEvent - event keypress type=KeyboardEvent - event keyup type=KeyboardEvent - event mousedown type=MouseEvent - event mouseenter type=MouseEvent - event mouseleave type=MouseEvent - event mousemove type=MouseEvent - event mouseout type=MouseEvent - event mouseover type=MouseEvent - event mouseup type=MouseEvent - event progress type=ProgressEvent - event resize type=UIEvent - event securitypolicyviolation type=SecurityPolicyViolationEvent - event submit type=SubmitEvent - event toggle type=ToggleEvent - event wheel type=WheelEvent - event animationcancel type=AnimationEvent - event animationend type=AnimationEvent - event animationiteration type=AnimationEvent - event animationstart type=AnimationEvent - event cut type=ClipboardEvent - event copy type=ClipboardEvent - event paste type=ClipboardEvent - event gotpointercapture type=PointerEvent - event lostpointercapture type=PointerEvent - event pointercancel type=PointerEvent - event pointerdown type=PointerEvent - event pointerenter type=PointerEvent - event pointerleave type=PointerEvent - event pointermove type=PointerEvent - event pointerout type=PointerEvent - event pointerover type=PointerEvent - event pointerup type=PointerEvent - event touchcancel type=TouchEvent - event touchend type=TouchEvent - event touchmove type=TouchEvent - event touchstart type=TouchEvent - event transitionrun type=TransitionEvent - event transitionstart type=TransitionEvent - event transitionend type=TransitionEvent - event transitioncancel type=TransitionEvent - property onerror overrideType=OnErrorEventHandler + event abort type=UIEvent + event auxclick type=PointerEvent + event beforeinput type=InputEvent + event beforetoggle type=ToggleEvent + event blur type=FocusEvent + event click type=PointerEvent + event compositionend type=CompositionEvent + event compositionstart type=CompositionEvent + event compositionupdate type=CompositionEvent + event contextmenu type=PointerEvent + event dblclick type=MouseEvent + event drag type=DragEvent + event dragend type=DragEvent + event dragenter type=DragEvent + event dragleave type=DragEvent + event dragover type=DragEvent + event dragstart type=DragEvent + event drop type=DragEvent + event error type=ErrorEvent + event focus type=FocusEvent + event focusin type=FocusEvent + event focusout type=FocusEvent + event formdata type=FormDataEvent + event keydown type=KeyboardEvent + event keypress type=KeyboardEvent + event keyup type=KeyboardEvent + event mousedown type=MouseEvent + event mouseenter type=MouseEvent + event mouseleave type=MouseEvent + event mousemove type=MouseEvent + event mouseout type=MouseEvent + event mouseover type=MouseEvent + event mouseup type=MouseEvent + event progress type=ProgressEvent + event resize type=UIEvent + event securitypolicyviolation type=SecurityPolicyViolationEvent + event submit type=SubmitEvent + event toggle type=ToggleEvent + event wheel type=WheelEvent + event animationcancel type=AnimationEvent + event animationend type=AnimationEvent + event animationiteration type=AnimationEvent + event animationstart type=AnimationEvent + event cut type=ClipboardEvent + event copy type=ClipboardEvent + event paste type=ClipboardEvent + event gotpointercapture type=PointerEvent + event lostpointercapture type=PointerEvent + event pointercancel type=PointerEvent + event pointerdown type=PointerEvent + event pointerenter type=PointerEvent + event pointerleave type=PointerEvent + event pointermove type=PointerEvent + event pointerout type=PointerEvent + event pointerover type=PointerEvent + event pointerup type=PointerEvent + event touchcancel type=TouchEvent + event touchend type=TouchEvent + event touchmove type=TouchEvent + event touchstart type=TouchEvent + event transitionrun type=TransitionEvent + event transitionstart type=TransitionEvent + event transitionend type=TransitionEvent + event transitioncancel type=TransitionEvent + property onerror overrideType=OnErrorEventHandler } interface-mixin MessageEventTarget { - event message type=MessageEvent - event messageerror type=MessageEvent + event message type=MessageEvent + event messageerror type=MessageEvent } interface-mixin WindowEventHandlers { - event beforeunload type=BeforeUnloadEvent - event gamepadconnected type=GamepadEvent - event gamepaddisconnected type=GamepadEvent - event hashchange type=HashChangeEvent - event message type=MessageEvent - event messageerror type=MessageEvent - event pagehide type=PageTransitionEvent - event pagereveal type=PageRevealEvent - event pageshow type=PageTransitionEvent - event pageswap type=PageSwapEvent - event popstate type=PopStateEvent - event rejectionhandled type=PromiseRejectionEvent - event storage type=StorageEvent - event unhandledrejection type=PromiseRejectionEvent + event beforeunload type=BeforeUnloadEvent + event gamepadconnected type=GamepadEvent + event gamepaddisconnected type=GamepadEvent + event hashchange type=HashChangeEvent + event message type=MessageEvent + event messageerror type=MessageEvent + event pagehide type=PageTransitionEvent + event pagereveal type=PageRevealEvent + event pageshow type=PageTransitionEvent + event pageswap type=PageSwapEvent + event popstate type=PopStateEvent + event rejectionhandled type=PromiseRejectionEvent + event storage type=StorageEvent + event unhandledrejection type=PromiseRejectionEvent } diff --git a/inputfiles/patches/touch-events.kdl b/inputfiles/patches/touch-events.kdl index c1a48063f..93543d76a 100644 --- a/inputfiles/patches/touch-events.kdl +++ b/inputfiles/patches/touch-events.kdl @@ -1,8 +1,8 @@ interface-mixin GlobalEventHandlers { - // Touch event handlers are intentionally hidden in non-mobile web browsers. - // See w3c.github.io/touch-events#dfn-expose-legacy-touch-event-apis. - property ontouchcancel optional=#true - property ontouchend optional=#true - property ontouchmove optional=#true - property ontouchstart optional=#true + // Touch event handlers are intentionally hidden in non-mobile web browsers. + // See w3c.github.io/touch-events#dfn-expose-legacy-touch-event-apis. + property ontouchcancel optional=#true + property ontouchend optional=#true + property ontouchmove optional=#true + property ontouchstart optional=#true } \ No newline at end of file diff --git a/inputfiles/patches/webgl.kdl b/inputfiles/patches/webgl.kdl index 44df9262d..efb9fed9f 100644 --- a/inputfiles/patches/webgl.kdl +++ b/inputfiles/patches/webgl.kdl @@ -1,3 +1,3 @@ interface-mixin WebGLRenderingContextBase { - property canvas exposed=Window + property canvas exposed=Window } From ea9284b6f929ea06d7bf53e5182e7067cb143fae Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 20:17:45 +0300 Subject: [PATCH 09/12] - --- inputfiles/patches/cssom-view.kdl | 12 ++++++++++++ inputfiles/patches/touch-events.kdl | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 inputfiles/patches/cssom-view.kdl diff --git a/inputfiles/patches/cssom-view.kdl b/inputfiles/patches/cssom-view.kdl new file mode 100644 index 000000000..29d90d250 --- /dev/null +++ b/inputfiles/patches/cssom-view.kdl @@ -0,0 +1,12 @@ +// Manually moved from Document +// See https://github.com/w3c/csswg-drafts/issues/5886 and https://github.com/w3c/csswg-drafts/issues/556 +interface-mixin DocumentOrShadowRoot { + method elementFromPoint returns=Element nullable=#true { + param x type=long + param y type=long + } + method elementsFromPoint returns="Element" array { + param x type=long + param y type=long + } +} diff --git a/inputfiles/patches/touch-events.kdl b/inputfiles/patches/touch-events.kdl index 93543d76a..e687a40e2 100644 --- a/inputfiles/patches/touch-events.kdl +++ b/inputfiles/patches/touch-events.kdl @@ -5,4 +5,4 @@ interface-mixin GlobalEventHandlers { property ontouchend optional=#true property ontouchmove optional=#true property ontouchstart optional=#true -} \ No newline at end of file +} From 36e43e3b6fac6e8ed616f7948bdd8d3d60472a2d Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 20:20:10 +0300 Subject: [PATCH 10/12] ?? --- inputfiles/patches/cssom-view.kdl | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 inputfiles/patches/cssom-view.kdl diff --git a/inputfiles/patches/cssom-view.kdl b/inputfiles/patches/cssom-view.kdl deleted file mode 100644 index 29d90d250..000000000 --- a/inputfiles/patches/cssom-view.kdl +++ /dev/null @@ -1,12 +0,0 @@ -// Manually moved from Document -// See https://github.com/w3c/csswg-drafts/issues/5886 and https://github.com/w3c/csswg-drafts/issues/556 -interface-mixin DocumentOrShadowRoot { - method elementFromPoint returns=Element nullable=#true { - param x type=long - param y type=long - } - method elementsFromPoint returns="Element" array { - param x type=long - param y type=long - } -} From 501d38e9ef285310d41188ea3201d536f9d9b224 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 20:22:33 +0300 Subject: [PATCH 11/12] - --- src/build/patches.ts | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/src/build/patches.ts b/src/build/patches.ts index d21404989..a6061561e 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -1,4 +1,4 @@ -import { parse, type Value, type Node } from "kdljs"; +import { parse, type Node } from "kdljs"; import type { Enum, Event, Property, Interface, WebIdl } from "./types"; import { readdir, readFile } from "fs/promises"; import { merge } from "./helpers.js"; @@ -7,24 +7,6 @@ type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T; -function optionalMember(prop: string, type: T, value?: Value) { - if (value === undefined) { - return {}; - } - if (typeof value !== type) { - throw new Error(`Expected type ${value} for ${prop}`); - } - return { - [prop]: value as T extends "string" - ? string - : T extends "number" - ? number - : T extends "boolean" - ? boolean - : never, - }; -} - /** * Converts patch files in KDL to match the [types](types.d.ts). */ @@ -110,12 +92,15 @@ function handleMixin(node: Node): DeepPartial { } } - return { + const result = { name, events: { event }, properties: { property }, - ...optionalMember("extends", "string", node.properties?.extends), } as DeepPartial; + if (node.properties.extends) { + result.extends = node.properties.extends as string; + } + return result; } /** @@ -136,9 +121,7 @@ function handleEvent(child: Node): Event { function handleProperty(child: Node): Partial { return { name: child.values[0] as string, - ...optionalMember("exposed", "string", child.properties?.exposed), - ...optionalMember("optional", "boolean", child.properties?.optional), - ...optionalMember("overrideType", "string", child.properties?.overrideType), + exposed: child.properties?.exposed as string, }; } From 405e38196d02d9868e1a266042eefca26956b19e Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sun, 3 Aug 2025 20:36:02 +0300 Subject: [PATCH 12/12] Revert "-" This reverts commit 501d38e9ef285310d41188ea3201d536f9d9b224. --- src/build/patches.ts | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/build/patches.ts b/src/build/patches.ts index a6061561e..d21404989 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -1,4 +1,4 @@ -import { parse, type Node } from "kdljs"; +import { parse, type Value, type Node } from "kdljs"; import type { Enum, Event, Property, Interface, WebIdl } from "./types"; import { readdir, readFile } from "fs/promises"; import { merge } from "./helpers.js"; @@ -7,6 +7,24 @@ type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T; +function optionalMember(prop: string, type: T, value?: Value) { + if (value === undefined) { + return {}; + } + if (typeof value !== type) { + throw new Error(`Expected type ${value} for ${prop}`); + } + return { + [prop]: value as T extends "string" + ? string + : T extends "number" + ? number + : T extends "boolean" + ? boolean + : never, + }; +} + /** * Converts patch files in KDL to match the [types](types.d.ts). */ @@ -92,15 +110,12 @@ function handleMixin(node: Node): DeepPartial { } } - const result = { + return { name, events: { event }, properties: { property }, + ...optionalMember("extends", "string", node.properties?.extends), } as DeepPartial; - if (node.properties.extends) { - result.extends = node.properties.extends as string; - } - return result; } /** @@ -121,7 +136,9 @@ function handleEvent(child: Node): Event { function handleProperty(child: Node): Partial { return { name: child.values[0] as string, - exposed: child.properties?.exposed as string, + ...optionalMember("exposed", "string", child.properties?.exposed), + ...optionalMember("optional", "boolean", child.properties?.optional), + ...optionalMember("overrideType", "string", child.properties?.overrideType), }; }