Deno v1.18.0
Deno v1.18.0がリリースされました。
設定ファイルの自動読み込みがサポート
今までは、設定ファイルを読み込むためには--configの指定が必要でした。
$ deno run --config ./deno.json ./main.ts
今後は、--configが指定されなかった場合、deno.jsonまたはdeno.jsoncという名前の設定ファイルを自動で読み込まれるようになります。
Deno.testのsub-steps APIが安定化
Deno.testでテストケースのグループ化を行うためのsub-steps APIが安定化されました。
今後は--unstableを指定しなくても利用できます。
Deno.test("nested test case", async (t) => {
const success = await t.step("step 1", async (t) => {
const success = await t.step("step 1-1", () => {
throw new Error("Failed!");
});
if (!success) throw new Error("Failed!");
await t.step("step 1-2", () => {});
});
if (success) throw new Error("Failed!");
});
Web Cryptography APIの実装が完了
このリリースでは、下記の変更が実施されています。
SubtleCrypto.encrypt()及びSubtleCrypto.decrypt()でAES-GCM及びAES-CTRがサポートSubtleCrypto.wrapKey()及びSubtleCrypto.unwrapKey()でAES-KWがサポートSubtleCrypto.importKey()でECDSA及びECDHキーとP-384曲線の組み合わせがサポートSubtleCrypto.exportKey()でECDSA及びECDHキーのjwkやpkcs8, 及びspki形式でのエクスポートがサポートSubtleCrypto.wrapKey()とSubtleCrypto.unwrapKey()でjwk形式がサポート
今回のリリースでWeb Cryptography APIの実装が完了したようです。
Deno.dlopen(FFI)への機能追加
まず、外部関数の型がシンボル定義を元に自動で推論されるようになりました。
const dylib = Deno.dlopen("./add.so", {
add: {
parameters: ["i32", "i32"],
result: "i32",
} as const,
});
const result = dylib.symbols.add("1", 2); // NG! (型エラー)
シンボルへの別名の設定もサポートされています。
const dylib = Deno.dlopen("./add.so", {
plus: {
name: "add",
parameters: ["i32", "i32"],
result: "i32",
} as const,
});
dylib.symbols.plus(1, 2)
また、Deno.UnsafeFnPointerが実装され、関数ポインタを取り扱えるようになりました。
Node.js互換モードの変更
deno repl --compatでNode.jsの組み込みモジュール( events, assertなど)がグローバルにあらかじめ読み込まれるようになりました。
また、deno testコマンドでもNode.js互換モード(--compat)がサポートされました。
WebSocket関連の変更
WebSocketStreamでハンドシェイク時に送信されるHTTPヘッダを指定できるようになりました (Denoの独自拡張です)
const wss = new WebSocketStream("wss://localhost:4000/ws", {
headers: { "X-FOO": "foo" },
});
また、WebSocketサーバ(Deno.upgradeWebSocket)でping/pongメッセージのハンドリングがサポートされました。
サーバがクライアントへpingメッセージを送信する間隔はidleTimeoutオプションで制御できます (デフォルトは120秒)
Uncaught Error発生時のログ出力の強化
Uncaught Errorが発生した際に、Error.causeの内容が表示されるようになりました。
deno lspの改善
import節のホバーでモジュールの情報などが表示されるようになりました

その他の修正
- Denoランタイムの起動が33%、Deno内部のtscの起動が10%高速化されました (v8スナップショットの圧縮に
zlibではなくlz4とzstdが使用されるようになりました) deno bundleによるバンドル後のソースに// deno-fmt-ignore-fileと// deno-lint-ignore-fileコメントが出力されるようになりましたdeno installで--promptオプションがサポートされました。- 実行途中の
read()が存在する状態でReadableStreamDefaultReaderまたはReadableStreamBYOBReaderのreleaseLock()を呼ぶと、read()がrejectするように変更されました (今までは、同じ状況でreleaseLock()を呼ぶと、TypeErrorが発生しました) window変数をdeleteで削除すると、プロセスがパニックする問題が修正されましたglobalThisを削除すると、console.logなどがクラッシュする問題が修正されましたIntl.ListFormatの型定義が追加されましたDeno.errors.NotSupportedの型定義が追加されました
deno_std v0.122.0
deno_std v0.122.0がリリースされました。
csv
parse()の戻り値の型が改善されています。
また、破壊的変更として、ParseOptions.parseとParseOptions.columns[].parseオプションが削除されています。
node
Timeoutクラスが実装されました。
log
FileHandlerの内部バッファが満杯になった際に、バッファの内容が強制的にフラッシュされるように修正が行われました。
https://github.com/denoland/deno_std/releases/tag/0.122.0
テストステップメタデータの実装について (#13399)
テストステップメタデータの実装が検討されています。
まず、現状のsub-steps APIの問題点として、--filterオプションによるフィルタリングが困難であるという問題があります。
この問題を緩和するために、stepMetadataオプションをDeno.testに追加することが検討されています。
Deno.test({
name: "group",
async fn(t) {
await t.step("step 1", () => {
await t.step("sub step 1", () => {});
});
await t.step("step 2", () => {});
},
stepMetadata: [
{ name: "step 1", steps: [{ name: "sub step 1" }] },
{ name: "step 2" },
],
});
このようにしてメタデータを定義しておくことで、ネストされたテストケースのフィルタリングが可能になります。
$ deno test --filter "sub step 1”
https://github.com/denoland/deno/issues/13399
Velociraptor v1.4.0
Velociraptor v1.4.0がリリースされました。
Import mapファイルを指定するためのimapオプションがimportmapにリネームされています。
scripts:
dev:
cmd: deno run --unstable dev.ts
importmap: import_map.json
imapオプションは非推奨化されており、今後はimportmapオプションの使用が推奨されます。
その他の変更点として、deno.json(c)での設定のサポートが追加されています。
以下のように、deno.json(c)ファイルのvelociraptorキーでスクリプトの定義が行えます。
{
"velociraptor": {
"scripts": {
"check": [
"deno lint",
"deno fmt --check"
]
}
}
}
https://github.com/jurassiscripts/velociraptor/releases/tag/1.4.0
Astrodon
TauriとFFI(Deno.dlopen)をベースにしたデスクトップアプリケーションフレームワーク