diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index 725751894..12482efc1 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -3663,24 +3663,6 @@ } } }, - "UnderlyingSource": { - "typeParameters": [ - { - "name": "R", - "default": "any" - } - ], - "members": { - "member": { - "start": { - "overrideType": "UnderlyingSourceStartCallback" - }, - "pull": { - "overrideType": "UnderlyingSourcePullCallback" - } - } - } - }, "UIEventInit": { "members": { "member": { diff --git a/inputfiles/patches/readable-stream.kdl b/inputfiles/patches/readable-stream.kdl index 7a8a6f6a0..a3fdbacfd 100644 --- a/inputfiles/patches/readable-stream.kdl +++ b/inputfiles/patches/readable-stream.kdl @@ -7,3 +7,9 @@ dictionary ReadableStreamReadValueResult typeParameters=T { member done required=#true overrideType="false" member value required=#true overrideType="T" } + +dictionary UnderlyingSource { + typeParameters R default = "any" + member start overrideType = "UnderlyingSourceStartCallback" + member pull overrideType = "UnderlyingSourcePullCallback" +} diff --git a/src/build/patches.ts b/src/build/patches.ts index 7c949ebce..719660e9d 100644 --- a/src/build/patches.ts +++ b/src/build/patches.ts @@ -63,14 +63,25 @@ function handleTyped(type: Node): Typed { }; } -function handleTypeParameters(value: Value) { +function handleTypeParameters(value: Value | Node) { if (!value) { return {}; } + if (typeof value === "string") { + return { + typeParameters: [ + { + name: string(value), + }, + ], + }; + } + const node = value as Node; return { typeParameters: [ { - name: string(value), + name: string(node.values[0]), + ...optionalMember("default", "string", node.properties?.default), }, ], }; @@ -318,6 +329,7 @@ function handleMethod(child: Node): DeepPartial { function handleDictionary(child: Node): DeepPartial { const name = string(child.values[0]); const member: Record> = {}; + let typeParameters = {}; for (const c of child.children) { switch (c.name) { @@ -326,6 +338,10 @@ function handleDictionary(child: Node): DeepPartial { member[memberName] = handleMember(c); break; } + case "typeParameters": { + typeParameters = handleTypeParameters(c); + break; + } default: throw new Error(`Unknown node name: ${c.name}`); } @@ -334,6 +350,7 @@ function handleDictionary(child: Node): DeepPartial { return { name, members: { member }, + ...typeParameters, ...handleTypeParameters(child.properties?.typeParameters), ...optionalMember( "legacyNamespace",