Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions inputfiles/addedTypes.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -511,24 +511,6 @@
"name": "EventListenerOrEventListenerObject",
"overrideType": "EventListener | EventListenerObject"
},
{
"name": "OptionalPrefixToken",
"typeParameters": [
{
"name": "T extends string"
}
],
"overrideType": "`${T} ` | \"\""
},
{
"name": "OptionalPostfixToken",
"typeParameters": [
{
"name": "T extends string"
}
],
"overrideType": "` ${T}` | \"\""
},
{
"name": "AutoFillSection",
// Note: this will also eagerly match any invalid string
Expand Down
8 changes: 8 additions & 0 deletions inputfiles/patches/html-autocomplete.kdl
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,11 @@ enum AutoFillContactField {
enum AutoFillCredentialField {
webauthn
}

typedef OptionalPrefixToken overrideType=#"`${T} ` | """# {
typeParameters T extends=string
}

typedef OptionalPostfixToken overrideType=#"` ${T}` | """# {
typeParameters T extends=string
}
20 changes: 19 additions & 1 deletion src/build/patches.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ function handleTypeParameters(value: Value | Node) {
{
name: string(node.values[0]),
...optionalMember("default", "string", node.properties?.default),
...optionalMember("extends", "string", node.properties?.extends),
},
],
};
Expand Down Expand Up @@ -448,7 +449,23 @@ function handleMember(c: Node): DeepPartial<Member> {
* @param node The typedef node to handle.
*/
function handleTypedef(node: Node): DeepPartial<TypeDef> {
const typeNodes = node.children.filter((c) => c.name === "type");
const typeNodes: Node[] = [];
let typeParameters = {};
for (const child of node.children) {
switch (child.name) {
case "type":
typeNodes.push(child);
break;
case "typeParameters": {
Copy link
Collaborator

@saschanaz saschanaz Jan 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW this shouldn't be plural, it should be typeParameter. Next PR?

(And typeParameters should ultimately be an array)

typeParameters = handleTypeParameters(child);
break;
}
default:
throw new Error(
`Unexpected child "${child.name}" in typedef "${node.values[0]}"`,
);
}
}
return {
name: string(node.values[0]),
...handleTyped(typeNodes),
Expand All @@ -458,6 +475,7 @@ function handleTypedef(node: Node): DeepPartial<TypeDef> {
node.properties?.legacyNamespace,
),
...optionalMember("overrideType", "string", node.properties?.overrideType),
...typeParameters,
};
}

Expand Down