summaryrefslogtreecommitdiff
path: root/extensions/crypto/01_crypto.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/crypto/01_crypto.js')
-rw-r--r--extensions/crypto/01_crypto.js84
1 files changed, 49 insertions, 35 deletions
diff --git a/extensions/crypto/01_crypto.js b/extensions/crypto/01_crypto.js
index f18b6d5aa..2b3982c32 100644
--- a/extensions/crypto/01_crypto.js
+++ b/extensions/crypto/01_crypto.js
@@ -3,48 +3,62 @@
((window) => {
const core = window.Deno.core;
+ const webidl = window.__bootstrap.webidl;
- function getRandomValues(arrayBufferView) {
- if (!ArrayBuffer.isView(arrayBufferView)) {
- throw new TypeError(
- "Argument 1 does not implement interface ArrayBufferView",
- );
+ class Crypto {
+ constructor() {
+ webidl.illegalConstructor();
}
- if (
- !(
- arrayBufferView instanceof Int8Array ||
- arrayBufferView instanceof Uint8Array ||
- arrayBufferView instanceof Int16Array ||
- arrayBufferView instanceof Uint16Array ||
- arrayBufferView instanceof Int32Array ||
- arrayBufferView instanceof Uint32Array ||
- arrayBufferView instanceof Uint8ClampedArray
- )
- ) {
- throw new DOMException(
- "The provided ArrayBufferView is not an integer array type",
- "TypeMismatchError",
+
+ getRandomValues(arrayBufferView) {
+ webidl.assertBranded(this, Crypto);
+ const prefix = "Failed to execute 'getRandomValues' on 'Crypto'";
+ webidl.requiredArguments(arguments.length, 1, { prefix });
+ arrayBufferView = webidl.converters.ArrayBufferView(arrayBufferView, {
+ prefix,
+ context: "Argument 1",
+ });
+ if (
+ !(
+ arrayBufferView instanceof Int8Array ||
+ arrayBufferView instanceof Uint8Array ||
+ arrayBufferView instanceof Int16Array ||
+ arrayBufferView instanceof Uint16Array ||
+ arrayBufferView instanceof Int32Array ||
+ arrayBufferView instanceof Uint32Array ||
+ arrayBufferView instanceof Uint8ClampedArray
+ )
+ ) {
+ throw new DOMException(
+ "The provided ArrayBufferView is not an integer array type",
+ "TypeMismatchError",
+ );
+ }
+ const ui8 = new Uint8Array(
+ arrayBufferView.buffer,
+ arrayBufferView.byteOffset,
+ arrayBufferView.byteLength,
);
+ core.opSync("op_crypto_get_random_values", ui8);
+ return arrayBufferView;
+ }
+
+ randomUUID() {
+ webidl.assertBranded(this, Crypto);
+ return core.opSync("op_crypto_random_uuid");
}
- const ui8 = new Uint8Array(
- arrayBufferView.buffer,
- arrayBufferView.byteOffset,
- arrayBufferView.byteLength,
- );
- core.opSync("op_crypto_get_random_values", ui8);
- return arrayBufferView;
- }
- function randomUUID() {
- return core.opSync("op_crypto_random_uuid");
+ get [Symbol.toStringTag]() {
+ return "Crypto";
+ }
+
+ [Symbol.for("Deno.customInspect")](inspect) {
+ return `${this.constructor.name} ${inspect({})}`;
+ }
}
- window.crypto = {
- getRandomValues,
- randomUUID,
- };
window.__bootstrap.crypto = {
- getRandomValues,
- randomUUID,
+ crypto: webidl.createBranded(Crypto),
+ Crypto,
};
})(this);