Deno v1.33.4

Deno v1.33.4がリリースされました。

Node.js互換性の改善

組み込みモジュールの改善

  • node:crypto: getDiffieHellman/createDiffieHellmanが実装されました。
  • node:url: formatにURLオブジェクトを渡した際に、適切にフォーマットが行われなかった問題が修正されました。
  • node:child_process: spawnstdioオプションにStreamを渡せるようになりました。
    • これによりnpm-run-all が動くようになったようです。

Node-API

  • napi_add_finalizerが実装されました。
  • BigInt関連のAPIの互換性が改善されています。

npm

optionalDependenciesのサポートが改善されています。

Deno KV

Deno.Kv.close()の戻り値の型定義がPromise<void>からvoidへ変更されました。(実装は修正されていませんが、TypeScriptの型定義に誤りがあったようです)

Deno.serve()のバグ修正

リクエストがキャンセルされると、Denoがパニックすることがある問題が修正されました。

Web API

  • BroadcastChannelの型定義がlib.deno.unstable.d.tsへ移動されました。
    • unstable APIであるにも関わらず、--unstableなしでも型定義を参照できてしまう問題があったようです。
  • WebSocketで短い時間内で多くのメッセージを送信すると、いくつかのメッセージが失われることがある問題が修正されました。
  • fetch()でIPアドレスを指定してHTTPSリクエストを送信する(例: https://1.1.1.1/)とエラーが発生する問題が解消されました。

deno_std v0.188.0

deno_std v0.188.0がリリースされました。

std/flags

collectdefaultを併用した際に、オプションにネストされた配列が設定される問題が修正されました。

import { parse } from "https://deno.land/std@0.188.0/flags/mod.ts";

const options = parse([], {
  collect: ["values"],
  default: {
    values: ["foo", "bar"],
  },
});

console.log(options);
// v0.188.0: `{ _: [], values: [ "foo", "bar" ] }`
// v0.187.0: `{ _: [], values: [ [ "foo", "bar" ] ] }`

Deno.serveの安定化について

まだマージはされていませんが、Deno.serve()を安定化するPRが作成されています。

feat: Stabilize Deno.serve() API #19141

これに合わせてDeno.serveの戻り値を変更するPRも作られています。

BREAKING(unstable): change return type of Deno.serve() API #19189

feat(ext/http): ref/unref for server #19197

具体的には、戻り値がPromise<void>からDeno.Serverというオブジェクトへ変更されています。

今のところ、Deno.Serverは以下のようなプロパティ・メソッドが定義される想定のようです。

  • finished: HTTPサーバの終了時にresolveされるPromise (今までDeno.serveから返されていたPromiseと同様のタイミングでresolveされます)
  • unref(): HTTPサーバがプロセスの終了をブロックしなくなります。
  • ref(): HTTPサーバのunref状態を解除します。

これらの変更に合わせて、deno_std/http/server.tsserve/serveTlsも非推奨化されることが検討されているようです。

breaking(http/server): deprecate serve and serveTls #3381

kv-toolbox

Deno KVのユーティリティライブラリ

Deno KVのエントリサイズの制限を超過する値を、透過的に複数のチャンクへ分割して取り扱う機能などが提供されているようです。

Windmill

Airplaneなどの代替OSS

TypeScriptで書かれたスクリプトを実行するためにDenoが採用されているようです。

Denoの公式ブログで紹介記事が公開されています。