Deno v1.39.2

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

Node.js互換性

BYONMとImport Mapsを併用できるようになりました。


また、import.meta.resolve()npm:URLがサポートされています。

import.meta.resolve("npm:express"); // => "npm:express"

Node.jsの組み込みパッケージに関しても様々な改善が行われており、試せてはいないのですが、next buildが動作するようになったようです。

  • node:dgram: Socketunref/refが実装
  • node:http: ClientRequest#setNoDelayが実装
  • node:crypto: aes-192-ecbaes-256-ecbがサポート
  • node:process: process.abort()が実装
  • node:os: os.machine()が実装
  • node:os: os.cpus()の互換性の向上 (今まではダミーの値が返されていました。)
  • node:test: TestContext#testで2段階以上のネストがサポートされました。

deno lsp

V8インスペクターへの接続がサポートされています。

vscode_deno v3.31.0"deno.internalInspect"オプションが追加されており、これにtrueなどを設定すると有効化されるようです。

Debugger listening on ws://127.0.0.1:9222/ws/<id>
Visit chrome://inspect to connect to the debugger.

compilerOptions.jsxImportSourceで指定されたモジュールをdeno lspが自動でキャッシュするように挙動が改善されました。


Test code lensでDeno.test.only/Deno.test.ignoreを使用して定義されたテストケースが検出されるように改善されました。

deno check

deno checkコマンドでdeno.jsonexcludeの内容が反映されるように改善されました。

Deno KV

DBがクローズされたらウォッチャー(Deno.Kv#watch)も自動で停止するように挙動が改善されています。

Object.groupBy

戻り値の型がRecord<Key, Item[]>からPartial<Record<Key, Item[]>>に変更されました。

deno_std v0.211.0

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

非推奨API・モジュールの削除

std/collections

group_by.tsが削除されています。 (Object.groupByへの移行が推奨されます)

std/crypto

keystack.tsが削除されています。(std/crypto/unstable_keystack.tsへの移行が推奨されます)

std/front_matter

以下の非推奨APIが削除されています。

  • 各ファイルからFormatが削除されています。("yaml""toml"などの文字列リテラルの使用が推奨されます。)
  • {any,json,toml,yaml}.tsからdefault export(代わりにextractという名前でnamed importができます)とtest()(代わりにtest.tsから読み込めます)が削除されています。

std/http

以下のモジュールとAPIが削除されています

  • http_status.tsが削除されています。 (std/http/status.tsへの移行が推奨されます。)
  • status.tsStatusが削除されています。 (STATUS_CODEへの移行が推奨されます。)
  • std/http/util.tsが削除されています。

std/path

std

トップレベルのstd/types.d.tsが削除されています。

今のところはstd/io/types.d.tsへの移行が推奨されます。ただし、std/io/types.d.tsも非推奨化されており、こちらも将来的に削除されることが計画されているようです。

非推奨化

std/log

string形式のBaseHandler.formatterが非推奨化されています。(関数形式の値は引き続き利用できます。)

std/semver

  • compare_build.tsが非推奨化されました。
  • test_comparator.tsが非推奨化されました。(compareの使用が推奨されます。)
  • cmp.tsが非推奨化されました。(compareの使用が推奨推奨されます。)
  • formatstyle引数が非推奨化されました。(SemVerのプロパティを直接参照することが推奨されるようです。)
  • rsortreverseSortにリネームされています。

std/cli/spinner.ts

表示するメッセージを動的に切り替えられるようにするため、Spinner.messagepublicプロパティに変更されました。

std/semver

  • SemVerprereleasebuildプロパティがオプショナルに変更されています。
  • rangeMaxの戻り値がSemVer | undefinedからSemVerに変更されています。

std/expect

以下のAPIのJestとの互換性が改善されています。

  • expect().toEqual()でオブジェクト同士を比較する際に、値にundefinedが設定されているキーが比較対象から除外されるように変更されました。
  • expect().toStrictEqual()でオブジェクト同士を比較する際に、参照ではなく各プロパティの内容もきちんと比較されるように変更されました。(assertEqualsと同様の振る舞いをします)

WASMやBlobなどのimportについて

Deno公式のYoutubeチャンネルで公開されている動画でWASMやBlobなどのimportのサポートが開発中であると発表されています。

deno_coreで開発が進められているようです。

feat: Allow embedders to load custom module types (#402)

unstable APIの型チェックに関する挙動の変更について

現状、deno checkコマンドなどでunstable APIを利用したコードの型チェックをする場合、--unstableオプションが指定されていなければ、型エラーが発生します。

この挙動を変更して、--unstableオプションが指定されていない状態であっても、型チェック時は常にunstable APIを有効化することが検討されているようです。

feat: remove conditional unstable type-checking (#21825)

現在のunstable APIに関する型チェックの挙動は生産性に対して悪影響があることが考えられるということで、この変更が検討されたようです。

今のところ、この変更はDeno v1.40で導入されることが計画されているようです。

RustでWebバックエンドを書き始めてから1年くらい経った

RustでWebバックエンドを書き始めてから1年くらい経った」という記事が公開されています。

Deno Deployやその内部構成などについて解説されています。