diff --git a/inputfiles/patches/html-autocomplete.kdl b/inputfiles/patches/html-autocomplete.kdl
index 986541bcb..f6d634849 100644
--- a/inputfiles/patches/html-autocomplete.kdl
+++ b/inputfiles/patches/html-autocomplete.kdl
@@ -74,9 +74,9 @@ enum AutoFillCredentialField {
}
typedef OptionalPrefixToken overrideType=#"`${T} ` | """# {
- typeParameters T extends=string
+ typeParameter T extends=string
}
typedef OptionalPostfixToken overrideType=#"` ${T}` | """# {
- typeParameters T extends=string
+ typeParameter T extends=string
}
diff --git a/inputfiles/patches/html.kdl b/inputfiles/patches/html.kdl
index 92015674c..db73a8504 100644
--- a/inputfiles/patches/html.kdl
+++ b/inputfiles/patches/html.kdl
@@ -60,7 +60,7 @@ interface HTMLProgressElement {
}
}
-interface-mixin MessageEventTarget overrideThis=T typeParameters=T
+interface-mixin MessageEventTarget overrideThis=T typeParameter=T
interface-mixin WindowEventHandlers {
property onunload deprecated="The unload event is not reliable, consider visibilitychange or pagehide events."
diff --git a/inputfiles/patches/indexeddb.kdl b/inputfiles/patches/indexeddb.kdl
index 02a0fba2d..c8ce251fd 100644
--- a/inputfiles/patches/indexeddb.kdl
+++ b/inputfiles/patches/indexeddb.kdl
@@ -1,5 +1,5 @@
interface IDBRequest {
- typeParameters T default=any
+ typeParameter T default=any
property source {
type nullable=#false
}
diff --git a/inputfiles/patches/readable-stream.kdl b/inputfiles/patches/readable-stream.kdl
index e56076039..f475278c7 100644
--- a/inputfiles/patches/readable-stream.kdl
+++ b/inputfiles/patches/readable-stream.kdl
@@ -1,15 +1,15 @@
-dictionary ReadableStreamReadDoneResult typeParameters=T {
+dictionary ReadableStreamReadDoneResult typeParameter=T {
member done required=#true overrideType="true"
member value required=#true overrideType="T | undefined"
}
-dictionary ReadableStreamReadValueResult typeParameters=T {
+dictionary ReadableStreamReadValueResult typeParameter=T {
member done required=#true overrideType="false"
member value required=#true overrideType="T"
}
dictionary UnderlyingSource {
- typeParameters R default=any
+ typeParameter R default=any
member start overrideType="UnderlyingSourceStartCallback"
member pull overrideType="UnderlyingSourcePullCallback"
}
diff --git a/inputfiles/patches/streams.kdl b/inputfiles/patches/streams.kdl
index 3fd8228e7..b1cc50f1c 100644
--- a/inputfiles/patches/streams.kdl
+++ b/inputfiles/patches/streams.kdl
@@ -1,7 +1,7 @@
// https://streams.spec.whatwg.org/#dictdef-underlyingsource
dictionary UnderlyingDefaultSource {
- typeParameters R default=any
+ typeParameter R default=any
member type type=undefined
member start overrideType="(controller: ReadableStreamDefaultController) => any"
member pull overrideType="(controller: ReadableStreamDefaultController) => void | PromiseLike"
diff --git a/src/build/patches.ts b/src/build/patches.ts
index ec9fa5954..cf112248d 100644
--- a/src/build/patches.ts
+++ b/src/build/patches.ts
@@ -100,13 +100,9 @@ function handleTypeParameters(value: Value | Node) {
}
const node = value as Node;
return {
- typeParameters: [
- {
- name: string(node.values[0]),
- ...optionalMember("default", "string", node.properties?.default),
- ...optionalMember("extends", "string", node.properties?.extends),
- },
- ],
+ name: string(node.values[0]),
+ ...optionalMember("default", "string", node.properties?.default),
+ ...optionalMember("extends", "string", node.properties?.extends),
};
}
@@ -207,7 +203,7 @@ function handleMixinAndInterfaces(
const property: Record> = {};
let method: Record> = {};
let constructor: DeepPartial | undefined;
- let typeParameters = {};
+ const typeParameters = [];
for (const child of node.children) {
switch (child.name) {
@@ -232,8 +228,8 @@ function handleMixinAndInterfaces(
constructor = merge(constructor, c);
break;
}
- case "typeParameters": {
- typeParameters = handleTypeParameters(child);
+ case "typeParameter": {
+ typeParameters.push(handleTypeParameters(child));
break;
}
default:
@@ -242,7 +238,7 @@ function handleMixinAndInterfaces(
}
const interfaceObject = type === "interface" && {
- ...typeParameters,
+ ...optionalNestedMember("typeParameters", typeParameters, typeParameters),
...(constructor ? { constructor } : {}),
...optionalMember("exposed", "string", node.properties?.exposed),
...optionalMember("deprecated", "string", node.properties?.deprecated),
@@ -270,7 +266,7 @@ function handleMixinAndInterfaces(
"string",
node.properties?.replaceReference,
),
- ...handleTypeParameters(node.properties?.typeParameters),
+ ...handleTypeParameters(node.properties?.typeParameter),
...interfaceObject,
} as DeepPartial;
}
@@ -396,7 +392,7 @@ function handleMethodAndConstructor(
function handleDictionary(child: Node): DeepPartial {
const name = string(child.values[0]);
const member: Record> = {};
- let typeParameters = {};
+ const typeParameters = [];
for (const c of child.children) {
switch (c.name) {
@@ -405,8 +401,8 @@ function handleDictionary(child: Node): DeepPartial {
member[memberName] = handleMember(c);
break;
}
- case "typeParameters": {
- typeParameters = handleTypeParameters(c);
+ case "typeParameter": {
+ typeParameters.push(handleTypeParameters(c));
break;
}
default:
@@ -417,8 +413,8 @@ function handleDictionary(child: Node): DeepPartial {
return {
name,
members: { member },
- ...typeParameters,
- ...handleTypeParameters(child.properties?.typeParameters),
+ ...optionalNestedMember("typeParameters", typeParameters, typeParameters),
+ ...handleTypeParameters(child.properties?.typeParameter),
...optionalMember(
"legacyNamespace",
"string",
@@ -450,14 +446,14 @@ function handleMember(c: Node): DeepPartial {
*/
function handleTypedef(node: Node): DeepPartial {
const typeNodes: Node[] = [];
- let typeParameters = {};
+ const typeParameters = [];
for (const child of node.children) {
switch (child.name) {
case "type":
typeNodes.push(child);
break;
- case "typeParameters": {
- typeParameters = handleTypeParameters(child);
+ case "typeParameter": {
+ typeParameters.push(handleTypeParameters(child));
break;
}
default:
@@ -475,7 +471,7 @@ function handleTypedef(node: Node): DeepPartial {
node.properties?.legacyNamespace,
),
...optionalMember("overrideType", "string", node.properties?.overrideType),
- ...typeParameters,
+ ...optionalNestedMember("typeParameters", typeParameters, typeParameters),
};
}