Denoの最近のバージョンでは、暗号化やネットワーク、メッセージに関するWeb APIサポートが強化されている。Deno 1.11ではWeb Crypto APIとBroadcastChannelAPIのサポートが導入され、Deno 1.12ではChannel Messaging APIのMessageChannel
とMessagePort
に関する部分のサポートが追加された。Deno 1.13はnavigator.hardwareConcurrency APIを実装している。
Deno 1.11ではWeb Crypt APIのサポートが導入された。・Web Crypt APIは、スクリプトで低レベルの暗号プリミティブを使用することで、セキュアなシステムの構築を可能にするインターフェースである。Deno 1.0でもCrypto.getRandomValues()
がすでにサポートされていたが、Deno 1.11には、パラメータとして渡されたデータのダイジェストを求めるSubtleCrypto.digest APIが実装されている。
import { encodeToString } from "https://deno.land/std@0.97.0/encoding/hex.ts";
const data = new TextEncoder().encode("Deno 1.11 has been released!");
const digest = await crypto.subtle.digest("sha-256", data.buffer);
console.log("Digest:", encodeToString(new Uint8Array(digest)));
さらにDeno 1.11では、RFC 4122 version 4識別子("6e4decd0-6066-4a25-98e3-0227317cda52
"というような)を生成するcrypto.randomUUID
APIも実装されている。UUIDメソッドを標準化して、暗号的に安全な疑似乱数ジェネレータの使用を要件とすることは、開発者がセキュリティの落とし穴に陥ることを回避する上でも有用だ。
console.log("Random UUID:", crypto.randomUUID());
さらにDeno 1.12では、generateKey
、sign
、verify
というweb crypt APIがサポートされている。
const keyPair = await crypto.subtle.generateKey(
{
name: "RSA-PSS",
modulusLength: 2048,
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
hash: { name: "SHA-256" },
},
true,
["sign", "verify"],
);
const data = new TextEncoder().encode("hello world");
const signature = await crypto.subtle.sign(
{ name: "RSA-PSS", saltLength: 32 },
keyPair.privateKey,
data,
);
const isValid = await crypto.subtle.verify(
{ name: "RSA-PSS", saltLength: 32 },
keyPair.publicKey,
signature,
data,
);
続くDeno 1.13では、crypto.subtle.importKey()
とcrypto.subtle.exportKey()
が実装されている。
Deno 1.11は、webワーカにメッセージをブロードキャストするBroadcastChannelブラウザAPIをサポートしているが、リリースノートには、現行の実装に関する制限が警告されている。
今回のリリースでは、
BroadcastChannel
を--unstable
としてプロトタイプサポートしています。BroadcastChannel
は、複雑なJavaScriptオブジェクトで構成されたメッセージを、ワーカ間でブロードキャストするために使用することができますが、現時点では同じプロセス内のワーカに制限されています [...]
Deno 1.12ではさらに、Channel Messaging APIがサポートされた。Channel Messaging APIを使用すれば、異なるブラウジングコンテキスト(2つのIFrame、メインフレームとIFrame、SharedWorker
を介した2つのドキュメント、2つのワーカなど)内で動作する2つのスクリプトが、同じドキュメントにアタッチして、直接コミュニケーションしたり、2方向チャネル(あるいはパイプライン)を通じて、それぞれの末端のポートで相互にメッセージを送受信することが可能になる。ただし、現在のDenoの実装では、同じプロセス内のワーカに制限されている。
navigator.hardwareConcurrency
APIを使えば、ユーザのコンピュータ上でスレッドを実行可能な論理プロセッサの数(一般には2コアないし4コア)を取得することができる。これにより、コンテキストスイッチを発生させずに、効率的に実行可能なスレッドの数を決定することが可能になる。
最新バージョンのDenoにアップグレードするには、次のコマンドを実行すればよい。
deno upgrade