diff --git a/baselines/dom.generated.d.ts b/baselines/dom.generated.d.ts index c4a1e58bd..776295c71 100644 --- a/baselines/dom.generated.d.ts +++ b/baselines/dom.generated.d.ts @@ -21839,6 +21839,7 @@ interface SubtleCrypto { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey) */ exportKey(format: "jwk", key: CryptoKey): Promise; exportKey(format: Exclude, key: CryptoKey): Promise; + exportKey(format: KeyFormat, key: CryptoKey): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) */ generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray): Promise; generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray): Promise; diff --git a/baselines/serviceworker.generated.d.ts b/baselines/serviceworker.generated.d.ts index 7b3b420c0..acb3fc37a 100644 --- a/baselines/serviceworker.generated.d.ts +++ b/baselines/serviceworker.generated.d.ts @@ -5016,6 +5016,7 @@ interface SubtleCrypto { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey) */ exportKey(format: "jwk", key: CryptoKey): Promise; exportKey(format: Exclude, key: CryptoKey): Promise; + exportKey(format: KeyFormat, key: CryptoKey): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) */ generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray): Promise; generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray): Promise; diff --git a/baselines/sharedworker.generated.d.ts b/baselines/sharedworker.generated.d.ts index 234617a85..e28f1c794 100644 --- a/baselines/sharedworker.generated.d.ts +++ b/baselines/sharedworker.generated.d.ts @@ -4827,6 +4827,7 @@ interface SubtleCrypto { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey) */ exportKey(format: "jwk", key: CryptoKey): Promise; exportKey(format: Exclude, key: CryptoKey): Promise; + exportKey(format: KeyFormat, key: CryptoKey): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) */ generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray): Promise; generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray): Promise; diff --git a/baselines/webworker.generated.d.ts b/baselines/webworker.generated.d.ts index e2b747f88..78abc74f6 100644 --- a/baselines/webworker.generated.d.ts +++ b/baselines/webworker.generated.d.ts @@ -5322,6 +5322,7 @@ interface SubtleCrypto { /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey) */ exportKey(format: "jwk", key: CryptoKey): Promise; exportKey(format: Exclude, key: CryptoKey): Promise; + exportKey(format: KeyFormat, key: CryptoKey): Promise; /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) */ generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray): Promise; generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray): Promise; diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index 750dec6cb..1525bfd1c 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -1572,17 +1572,18 @@ }, "exportKey": { "additionalSignatures": [ - "exportKey(format: \"jwk\", key: CryptoKey): Promise" + "exportKey(format: \"jwk\", key: CryptoKey): Promise", + "exportKey(format: Exclude, key: CryptoKey): Promise" ], "signature": { "0": { "param": [ { "name": "format", - "overrideType": "Exclude" + "overrideType": "KeyFormat" } ], - "overrideType": "Promise" + "overrideType": "Promise" } } }, diff --git a/unittests/files/keyusage.ts b/unittests/files/keyusage.ts index fab5b4e94..7e037c4e6 100644 --- a/unittests/files/keyusage.ts +++ b/unittests/files/keyusage.ts @@ -1,15 +1,46 @@ -const usageInline = crypto.subtle.generateKey({ - name: "AES-GCM", - length: 256, -}, true, ['encrypt', 'decrypt']) - -const usageConst = crypto.subtle.generateKey( { - name: "AES-GCM", - length: 256, -}, true, ['encrypt', 'decrypt'] as const) - -const keyUsage: ReadonlyArray = ['encrypt', 'decrypt'] -const usageAsReadonly = crypto.subtle.generateKey( { - name: "AES-GCM", - length: 256, -}, true, keyUsage) \ No newline at end of file +function assertType(_x: T) {} + +const mockKey = {} as CryptoKey; + +assertType>(crypto.subtle.exportKey("jwk", mockKey)); +assertType>(crypto.subtle.exportKey("pkcs8", mockKey)); +assertType>(crypto.subtle.exportKey("raw", mockKey)); +assertType>(crypto.subtle.exportKey("spki", mockKey)); + +assertType>( + crypto.subtle + .exportKey("" as KeyFormat, mockKey) + .then((ambiguousExportedKeyData) => + ambiguousExportedKeyData instanceof ArrayBuffer + ? (ambiguousExportedKeyData satisfies ArrayBuffer) + : (ambiguousExportedKeyData satisfies JsonWebKey) + ) +); + +const usageInline = crypto.subtle.generateKey( + { + name: "AES-GCM", + length: 256, + }, + true, + ["encrypt", "decrypt"] +); + +const usageConst = crypto.subtle.generateKey( + { + name: "AES-GCM", + length: 256, + }, + true, + ["encrypt", "decrypt"] as const +); + +const keyUsage: ReadonlyArray = ["encrypt", "decrypt"]; +const usageAsReadonly = crypto.subtle.generateKey( + { + name: "AES-GCM", + length: 256, + }, + true, + keyUsage +);