From 8e14c86c5436ea2b9a7a77b6a298f0b470329c8a Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sat, 4 Oct 2025 09:34:26 +0300 Subject: [PATCH 1/2] Enhance optionalMember function to accept multiple types for 'type' parameter and update usage in handleMixinandInterfaces for 'deprecated' property. --- inputfiles/addedTypes.jsonc | 1 - inputfiles/patches/cssom.kdl | 2 ++ src/build/patches.ts | 10 ++++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/inputfiles/addedTypes.jsonc b/inputfiles/addedTypes.jsonc index 7fe2c8824..c7ccd5d4e 100644 --- a/inputfiles/addedTypes.jsonc +++ b/inputfiles/addedTypes.jsonc @@ -400,7 +400,6 @@ "name": "StyleMedia", "exposed": "Window", "noInterfaceObject": true, - "deprecated": true, "properties": { "property": { "type": { diff --git a/inputfiles/patches/cssom.kdl b/inputfiles/patches/cssom.kdl index a3baf2c5c..fdb03b695 100644 --- a/inputfiles/patches/cssom.kdl +++ b/inputfiles/patches/cssom.kdl @@ -7,3 +7,5 @@ interface CSSStyleDeclaration \ forwardExtends=CSSStyleProperties interface CSSStyleProperties replaceReference=CSSStyleDeclaration + +interface StyleMedia deprecated=#true diff --git a/src/build/patches.ts b/src/build/patches.ts index 6bf60fa05..869382ea8 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -15,12 +15,14 @@ type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T; -function optionalMember(prop: string, type: T, value?: Value) { +function optionalMember(prop: string, type: T | T[], value?: Value) { if (value === undefined) { return {}; } - if (typeof value !== type) { - throw new Error(`Expected type ${value} for ${prop}`); + const types = Array.isArray(type) ? type : [type]; + const valueType = typeof value; + if (!types.includes(valueType as T)) { + throw new Error(`Expected type ${types.join(" or ")} for ${prop}, but got ${valueType}`); } return { [prop]: value as T extends "string" @@ -169,7 +171,7 @@ function handleMixinandInterfaces( const interfaceObject = type === "interface" && { ...optionalMember("exposed", "string", node.properties?.exposed), - ...optionalMember("deprecated", "string", node.properties?.deprecated), + ...optionalMember("deprecated", ["string", "boolean"], node.properties?.deprecated), ...optionalMember( "noInterfaceObject", "boolean", From 7e3aac1d743adf21ff1059083e16030deef87d52 Mon Sep 17 00:00:00 2001 From: Bashamega Date: Sat, 4 Oct 2025 09:38:17 +0300 Subject: [PATCH 2/2] - --- src/build/patches.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/build/patches.ts b/src/build/patches.ts index 869382ea8..3a31e0d95 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -22,7 +22,9 @@ function optionalMember(prop: string, type: T | T[], value?: Value) { const types = Array.isArray(type) ? type : [type]; const valueType = typeof value; if (!types.includes(valueType as T)) { - throw new Error(`Expected type ${types.join(" or ")} for ${prop}, but got ${valueType}`); + throw new Error( + `Expected type ${types.join(" or ")} for ${prop}, but got ${valueType}`, + ); } return { [prop]: value as T extends "string" @@ -171,7 +173,11 @@ function handleMixinandInterfaces( const interfaceObject = type === "interface" && { ...optionalMember("exposed", "string", node.properties?.exposed), - ...optionalMember("deprecated", ["string", "boolean"], node.properties?.deprecated), + ...optionalMember( + "deprecated", + ["string", "boolean"], + node.properties?.deprecated, + ), ...optionalMember( "noInterfaceObject", "boolean",