Skip to content

Commit c214d51

Browse files
committed
feat(emitter): support additional-types
Closes microsoft#17
1 parent 5c1219f commit c214d51

8 files changed

+29
-25
lines changed

baselines/dom.generated.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14090,7 +14090,7 @@ declare var SubmitEvent: {
1409014090
interface SubtleCrypto {
1409114091
decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
1409214092
deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
14093-
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
14093+
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
1409414094
digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;
1409514095
encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
1409614096
exportKey(format: "jwk", key: CryptoKey): Promise<JsonWebKey>;
@@ -18336,7 +18336,7 @@ type GLsizeiptr = number;
1833618336
type GLuint = number;
1833718337
type GLuint64 = number;
1833818338
type HashAlgorithmIdentifier = AlgorithmIdentifier;
18339-
type HeadersInit = Headers | string[][] | Record<string, string>;
18339+
type HeadersInit = string[][] | Record<string, string> | Headers;
1834018340
type HTMLOrSVGImageElement = HTMLImageElement | SVGImageElement;
1834118341
type HTMLOrSVGScriptElement = HTMLScriptElement | SVGScriptElement;
1834218342
type IDBKeyPath = string;

baselines/dom.iterable.generated.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ interface StyleSheetList {
232232
}
233233

234234
interface SubtleCrypto {
235-
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
235+
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
236236
generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
237237
generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
238238
generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKeyPair | CryptoKey>;

baselines/webworker.generated.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2950,7 +2950,7 @@ declare var StorageManager: {
29502950
interface SubtleCrypto {
29512951
decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
29522952
deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length: number): Promise<ArrayBuffer>;
2953-
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
2953+
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
29542954
digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;
29552955
encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise<any>;
29562956
exportKey(format: "jwk", key: CryptoKey): Promise<JsonWebKey>;
@@ -5846,7 +5846,7 @@ type GLsizeiptr = number;
58465846
type GLuint = number;
58475847
type GLuint64 = number;
58485848
type HashAlgorithmIdentifier = AlgorithmIdentifier;
5849-
type HeadersInit = Headers | string[][] | Record<string, string>;
5849+
type HeadersInit = string[][] | Record<string, string> | Headers;
58505850
type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey;
58515851
type ImageBitmapSource = CanvasImageSource | Blob | ImageData;
58525852
type Int32List = Int32Array | GLint[];

baselines/webworker.iterable.generated.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ interface ReadableStream<R = any> {
7878
}
7979

8080
interface SubtleCrypto {
81-
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: string | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
81+
deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKey>;
8282
generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
8383
generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
8484
generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable<KeyUsage>): Promise<CryptoKeyPair | CryptoKey>;

inputfiles/addedTypes.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@
387387
"param": [
388388
{
389389
"name": "init",
390-
"override-type": "string[][] | Record<string, string> | string | URLSearchParams"
390+
"additional-types": ["URLSearchParams"]
391391
}
392392
]
393393
}
@@ -2110,7 +2110,7 @@
21102110
"new-type": "InsertPosition"
21112111
},
21122112
{
2113-
"override-type": "Headers | string[][] | Record<string, string>",
2113+
"additional-types": ["Headers"],
21142114
"new-type": "HeadersInit"
21152115
},
21162116
{

inputfiles/overridingTypes.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@
190190
"param": [
191191
{
192192
"name": "param",
193-
"override-type": "GLint | GLboolean"
193+
"additional-types": ["GLboolean"]
194194
}
195195
]
196196
}
@@ -1372,7 +1372,7 @@
13721372
"param": [
13731373
{
13741374
"name": "algorithm",
1375-
"override-type": "AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams"
1375+
"additional-types": ["RsaOaepParams", "AesCtrParams", "AesCbcParams", "AesGcmParams"]
13761376
}
13771377
]
13781378
}
@@ -1384,7 +1384,7 @@
13841384
"param": [
13851385
{
13861386
"name": "algorithm",
1387-
"override-type": "AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params"
1387+
"additional-types": ["EcdhKeyDeriveParams", "HkdfParams", "Pbkdf2Params"]
13881388
}
13891389
]
13901390
}
@@ -1396,11 +1396,11 @@
13961396
"param": [
13971397
{
13981398
"name": "algorithm",
1399-
"override-type": "AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params"
1399+
"additional-types": ["EcdhKeyDeriveParams", "HkdfParams", "Pbkdf2Params"]
14001400
},
14011401
{
14021402
"name": "derivedKeyType",
1403-
"override-type": "string | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params"
1403+
"additional-types": ["AesDerivedKeyParams", "HmacImportParams", "HkdfParams", "Pbkdf2Params"]
14041404
}
14051405
],
14061406
"override-type": "Promise<CryptoKey>"
@@ -1421,7 +1421,7 @@
14211421
"param": [
14221422
{
14231423
"name": "algorithm",
1424-
"override-type": "AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams"
1424+
"additional-types": ["RsaOaepParams", "AesCtrParams", "AesCbcParams", "AesGcmParams"]
14251425
}
14261426
]
14271427
}
@@ -1473,7 +1473,7 @@
14731473
},
14741474
{
14751475
"name": "algorithm",
1476-
"override-type": "AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm"
1476+
"additional-types": ["RsaHashedImportParams", "EcKeyImportParams", "HmacImportParams", "AesKeyAlgorithm"]
14771477
}
14781478
]
14791479
}
@@ -1490,7 +1490,7 @@
14901490
"param": [
14911491
{
14921492
"name": "algorithm",
1493-
"override-type": "AlgorithmIdentifier | RsaPssParams | EcdsaParams"
1493+
"additional-types": ["RsaPssParams", "EcdsaParams"]
14941494
}
14951495
],
14961496
"override-type": "Promise<ArrayBuffer>"
@@ -1503,11 +1503,11 @@
15031503
"param": [
15041504
{
15051505
"name": "unwrapAlgorithm",
1506-
"override-type": "AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams"
1506+
"additional-types": ["RsaOaepParams", "AesCtrParams", "AesCbcParams", "AesGcmParams"]
15071507
},
15081508
{
15091509
"name": "unwrappedKeyAlgorithm",
1510-
"override-type": "AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm"
1510+
"additional-types": ["RsaHashedImportParams", "EcKeyImportParams", "HmacImportParams", "AesKeyAlgorithm"]
15111511
}
15121512
]
15131513
}
@@ -1519,7 +1519,7 @@
15191519
"param": [
15201520
{
15211521
"name": "algorithm",
1522-
"override-type": "AlgorithmIdentifier | RsaPssParams | EcdsaParams"
1522+
"additional-types": ["RsaPssParams", "EcdsaParams"]
15231523
}
15241524
],
15251525
"override-type": "Promise<boolean>"
@@ -1532,7 +1532,7 @@
15321532
"param": [
15331533
{
15341534
"name": "wrapAlgorithm",
1535-
"override-type": "AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams"
1535+
"additional-types": ["RsaOaepParams", "AesCtrParams", "AesCbcParams", "AesGcmParams"]
15361536
}
15371537
],
15381538
"override-type": "Promise<ArrayBuffer>"

src/build/emitter.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -280,12 +280,15 @@ export function emitWebIdl(webidl: Browser.WebIdl, flavor: Flavor, iterator: boo
280280

281281
function convertDomTypeToTsTypeWorker(obj: Browser.Typed): { name: string; nullable: boolean } {
282282
let type;
283-
if (typeof obj.type === "string") {
283+
if (!obj["additional-types"] && typeof obj.type === "string") {
284284
type = { name: convertDomTypeToTsTypeSimple(obj.type), nullable: !!obj.nullable };
285285
}
286286
else {
287-
const types = obj.type.map(convertDomTypeToTsTypeWorker);
288-
const isAny = types.some(t => t.name === "any");
287+
const types = typeof obj.type === "string" ? [{ ...obj, "additional-types": undefined }] : obj.type;
288+
types.push(...(obj["additional-types"] ?? []).map(t => ({ type: t })));
289+
290+
const converted = types.map(convertDomTypeToTsTypeWorker);
291+
const isAny = converted.some(t => t.name === "any");
289292
if (isAny) {
290293
type = {
291294
name: "any",
@@ -294,8 +297,8 @@ export function emitWebIdl(webidl: Browser.WebIdl, flavor: Flavor, iterator: boo
294297
}
295298
else {
296299
type = {
297-
name: types.map(t => t.name).join(" | "),
298-
nullable: types.some(t => t.nullable) || !!obj.nullable
300+
name: converted.map(t => t.name).join(" | "),
301+
nullable: converted.some(t => t.nullable) || !!obj.nullable
299302
};
300303
}
301304
}

src/build/types.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export interface Typed {
44
nullable?: 1;
55
"type-original"?: string;
66
"override-type"?: string;
7+
"additional-types"?: string[];
78
}
89

910
export interface Param extends Typed {

0 commit comments

Comments
 (0)