Deno v2.5.2

Deno v2.5.2がリリースされています。

deno lsp

deno lspdescribe()/it()で定義されたテストの検出と実行がサポートされています (#30802)

deno bundle

deno bundle --watchHTMLエントリーポイントを指定している場合、変更の検出時に出力されたHTMLファイルが適切にビルドされない問題が修正されています (#30790)

また、deno bundle--frozenのサポートが追加されています (#30825)

deno coverage

Worker内のコードに対してもカバレッジが計測されるよう改善されています (#30807)

TypeScript

compilerOptions.pathsのサポート

deno checkコマンドでcompilerOptions.pathsがサポートされています (#30766)

Uint8Arrayに Base64/Hex 関連のAPIに関する型定義が追加

Deno v2.5.0におけるV8のアップデートに伴い、下記APIの型定義が追加されました (#30686):

Promise<undefined> から Promise<void> への変更

TypeScript 公式の型定義に合わせて、以下の各プロパティーの型定義が Promise<undefined> から Promise<void> へ変更されています (#30820):

  • ReadableStreamGenericReader#closed
  • WritableStreamDefaultWriter#closed
  • WritableStreamDefaultWriter#ready
  • WebTransport#ready

WebSocket

Deno 2.5.1からWebSocketの接続時にUser-Agentヘッダーが送信されなくなっていた問題が修正されています (#30758)

node:fs

statfs()path引数にBufferの指定がサポートされています (#30662)

また、readFile()encoding: "binary"の指定時にStringを返すよう挙動が修正されています (#30830)

node:crypto

timingSafeEqual()ArrayBufferのサポートが追加されています (#30773)

Deno の直近の変更やPRについて

パーミッションブローカー (DENO_PERMISSION_BROKER_PATH)

パーミッションブローカー という機能を実装するPRがマージされています。

DENO_PERMISSION_BROKER_PATHという環境変数が追加されており、この環境変数へUNIXドメインソケットのパスを指定することで、パーミッションブローカーが有効化されます。アプリケーションでパーミッションを要求するAPIが実行された際に、まずDenoはそのUNIXドメインソケットへJSON形式でメッセージを送信します (リクエストのスキーマ: cli/schemas/permission-broker-request.v1.json)

その後、DenoはUNIXドメインソケットからレスポンスが返却されるまで待機します (レスポンスのスキーマ: cli/schemas/permission-broker-response.v1.json)

レスポンスのresultフィールドに"deny"が設定されていた場合、Denoは要求されたAPIの実行を拒否します。

この機能は unstable という扱いのようなのでDeno v2.5.3あたりでリリースされる可能性がありそうです。

deno approve-scriptsコマンド

まだマージはされていませんが、deno approve-scriptsというコマンドを実装する PR が作成されています:

⚠️ このコマンドはまだ実装途中であり、本機能の説明には5ff6aeeのコミット時点の実装に基づいた推測も含まれます。

このコマンドはライフサイクルスクリプトを提供するnpmパッケージの管理を行いやすくすることを目的としたもののようです。

まず、Denoが未実行のライフサイクルスクリプトを持つnpmパッケージを検出すると、node_modules/.deno/.state.tomlignored-scriptsに該当のパッケージを記録してくれるようです。

その後、deno approve-scripts コマンドの引数としてnode_modules/.deno/.state.tomlに記録されたnpmパッケージを指定すると、node_modules/.deno/.state.tomlignored-scriptsから該当のパッケージが削除されます。

$ deno approve-scripts npm:esbuild

今回の修正において、deno.jsoninstall.approvedScriptsというフィールドが追加されており、ここにdeno approve-scriptsで許可したnpmパッケージを記録する想定のようです。deno.jsoninstall.approvedScriptsに記録されたnpmパッケージについては、ライフサイクルスクリプトの実行が自動的に許可されるものと推測されます。

deno.jsonへのprivate: trueフィールドの追加

まだマージはされていませんが、deno.jsonprivateフィールドを追加するPRが作成されています:

package.jsonにおける同名フィールドと同様に、deno.jsonprivate: trueを設定しておくと、Denoは該当のパッケージをdeno publishの対象から除外してくれるようです。ワークスペース機能などと併用すると便利そうです。

この機能はDeno v2.6.0のマイルストーンに含まれています。

Deploy EA Databases へのデータベースのプロビジョニング機能のサポートについて

Deno Deploy EAに関するドキュメントが更新されています。

Deploy EA Databasesにおいてデータベースのプロビジョニング機能が追加されたようで、現時点では Deno KV のみがサポートされている状況であるものの、今後、Prisma Postgresのサポートも追加が行われる想定のようです。