Deno v2.3.4 & v2.3.5

Denoのv2.3.4v2.3.5がリリースされています。

CLI

--unstable-subdomain-wildcardsが追加

--unstable-subdomain-wildcardsオプションが追加されています (#29327)

--allow-netにおいてサブドメインに対するワイルドカード指定が有効化されます:

$ deno run --unstable-subdomain-wildcards --allow-net='*.github.com' main.mjs

DENO_UNSTABLE_SUBDOMAIN_WILDCARDS環境変数によって有効化することも可能です。

DENO_USR2_MEMORY_TRIM環境変数の導入

DENO_USR2_MEMORY_TRIMという環境変数が導入されています (#29295)

この環境変数が設定された場合、SIGUSR2シグナルが受信された際に、Denoがmalloc_trim(0)でヒープの開放を行ってくれます。この環境変数はLinuxでのみ利用可能です。おそらく、後述するDeno Deploy Early Accessに関連した変更ではないかと思われます。

--frozenオプションの拡充

deno uninstalldeno docなどの一部コマンドで--frozenオプションがサポートされていなかった問題が修正されています (#29508)

Web API

globalThis.performanceの取り扱いの変更

ユーザーコードとnpmパッケージとの間でglobalThis.performanceが同一のオブジェクトが共有されるよう挙動が変更されています (#29323)

今までは、ユーザーコードとnpmパッケージ中のコードにおいてglobalThis.performanceが異なるオブジェクトを参照していました。具体的には、ユーザーコードではWeb Performance APIsにおけるPerformanceオブジェクト、npmパッケージ中のコードではnode:perf_hooksモジュールのPerformanceオブジェクトがそれぞれ参照されていました。

今回のリリースに伴い、ユーザーコードとnpmパッケージ中のコードの両方がglobalThis.performanceによってnode:perf_hooksモジュールのPerformanceオブジェクトを参照するよう挙動が変更されています。

WebGPU

Deno.UnsafeWindowSurfaceresize()というメソッドが実装されています (#29254)

このメソッドはウィンドウのサイズが変更された際に呼ばれることが想定されています。

また、GPUQueue#onSubmittedWorkDoneが実装されています (#29255)

deno lsp

deno/testRunの改善

deno lspから実行したテストが失敗した際に、Deno.test()の行ではなく実際にエラーが発生した行にエラーが表示されるよう改善されています (#29221)

プロジェクト外のdeno.jsonの参照がサポート

.vscode/settings.jsondeno.configにおいて、プロジェクト外のdeno.jsonの指定がサポートされています (#29420)

Auto importの改善

Workspaceメンバーに対する相対パス形式ではなく bare specifier によってimportが追加されるよう改善されています (#29304)

また、deno.jsonpatchで指定されたjsrパッケージに対して、相対パス形式でimportが追加される問題が修正されています (#29437)

deno task - タスクのワイルドカード指定に関するバグ修正

deno task check:*のようにワイルドカード形式でタスクを指定した場合、先頭一致ではなく部分一致によってタスクが探索されてしまう問題が修正されています (#29343)

deno fmt - Tagged template内のCSSのフォーマットに関する修正

Tagged template中のCSSのフォーマット時にScssではなくLessをベースにフォーマットされるように挙動が変更されています (#29369)

deno coverage - DENO_COVERAGE_DIRに関するバグ修正

deno testの実行中にサブプロセスが生成された際に、そのサブプロセスにもDENO_COVERAGE_DIRの設定がきちんと伝播するよう修正されています (#29363)

ローカルモジュールに対するimport()の改善

ローカルモジュールに対するimport()の振る舞いが改善されています (#29413)

ローカルモジュールが動的に生成または更新されるケースにおいて、import()によって古い状態のモジュールが読み込まれることやエラーが発生してしまう問題などが解消されています。

Node.js互換性の改善

require()

require()によってnpmパッケージの読み込みを行う際にnode_modulesディレクトリへの--allow-readの指定が不要化されています (#29398, #29397)

node:fs

fchown()fchownSync()が実装されています (#29408)

node:readline

createInterface()--allow-env=TERMを要求しないよう挙動が改善されています (#29472)

node:worker_threads

Workerの作成時にprocessオブジェクトでworkerイベントが発火するように改善されています (#29345)

node:events

getEventListeners()EventTargetがサポートされました (#29480)

node:process

process.stdin.pause()が実装されています (#29330)

node:test

TestContextbefore()after()メソッドが実装されています (#29367)

また、TestContextassert.okが追加されています (#29383)

node:domain

Domain#bind, Domain#intercept 及び Domain#runにおいてコールバック関数の戻り値がこれらのメソッドの戻り値として返却されるように改善されています (#29440)

これによってgulpのサポートが改善されているようです。

node:sqlite

DatabaseSync#.execが戻り値としてundefinedを返却するよう修正されています (#29368)

OpenTelemetry - シグナル受信時の振る舞いの改善

SIGHUP/SIGINT/SIGTERMシグナルを受信した際に、バッファリングされていたシグナルがフラッシュされるように改善されています (#29515)

Deno Deploy Early Access (EA) について

Denoの公式ドキュメントに Deno Deploy Early Access (EA) に関するドキュメントが追加されています:

現時点ではプライベートベータバージョンであり、利用には明示的な有効化が必要なようです。

deploy/early-access/index.mdのページでは、Deno Deploy Early Accessと現在のDeno Deploy (Classic)との違いなどがまとめられており、OpenTelemetryとの統合など、様々な点で改良が行われているようです。

また、deploy/early-access/reference/runtime.mdによるとDeno Deploy Early Accessにおいては通常のDeno CLIが実行されているようです (権限は--allow-all)

Deno Deploy Early Accessに関する変更内容はdeploy/early-access/changelog.mdにまとめられているようです。

esbuildをベースにしたdeno bundleコマンドの再導入について

まだマージはされていませんが、Deno v2で削除されたdeno bundleコマンドを再び追加するPRが作成されています:

ae70f04時点での実装によると、以前までのdeno bundleコマンドとは異なり、esbuildをベースに実装されているようです。

deno bundleを実行すると、npmレジストリからダウンロードしたesbuildを利用して、Denoのモジュール解決方式に従いつつソースコードをバンドルしているようです。esbuildとの連携にはdenoland/esbuild_rsが利用されています。

この機能を利用するにはDENO_UNSTABLE_BUNDLEもしくは--unstable-bundleによって明示的に有効化する必要がある想定のようです。

deno_stdのリリース

deno_stdのリリースが実施されています:

@std/testing@1.0.13

@std/testing@1.0.13がリリースされています。

@std/testing/unstable-snapshotが追加

assertInlineSnapshot() (@std/testing/unstable-snapshotモジュール) が追加されています (#6530)

スナップショットの更新には--updateオプションの指定が必要です。また、デフォルトではdeno fmtコマンドでフォーマットが実施されるため--allow-runの指定も必要です (--no-formatによって無効化可能)

また、内部的にdeno lintのプラグインシステム (Deno.lint.runPlugin())を活用しているため、Deno v2.2以降でのみ動作するようです。

@std/cli@1.0.19

@std/cli@1.0.19がリリースされています。

@std/cli/unstable-progress-bar - APIの見直し

ProgressBarに関して以下の変更が実施されています:

  • ProgressBarProgressBarStreamのコンストラクターからwritable引数が削除され、代わりにProgressBarOptionswritableオプション (デフォルトはDeno.stderr.writable) が追加されています(#6409)
  • ProgressBar#addが削除され、代わりにvalueプロパティーとmaxプロパティーが追加されています (#6430)
  • Spinnerとの一貫性の改善のため、ProgressBar#endProgressBar#stopにリネームされています (#6406)
  • ProgressBarFormatter.styledTimeが関数からgetterへ変更されています (#6677)
  • ProgressBarFormatterstyledTime/styledData/progressBarがデフォルトで[...]で囲まれないよう修正されています (#6678)

また、ProgressBarでWindowsにおいてリソースリークが発生する問題が修正されています (#6675)

@std/collections@1.1.1

@std/collections@1.1.1がリリースされています

@std/collections/unstable-binary-searchが追加

@std/collections/unstable-binary-searchが追加されています (#6628)

指定された配列に対して二分探索を行うためのbinarySearch()が提供されています。

@std/dotenv@0.225.5

@std/dotenv@0.225.5がリリースされています。

プロトタイプ汚染攻撃への対策

parse()においてプロトタイプ汚染攻撃への対策が実施されています (#6661)

@std/path@1.1.0

@std/path@1.1.0がリリースされています。

URLオブジェクトのサポートが安定化

以下のモジュールで提供されていたURLオブジェクトのサポートが安定化されました (#6651)

  • @std/path/unstable-basename
  • @std/path/unstable-dirname
  • @std/path/unstable-extname
  • @std/path/unstable-join
  • @std/path/unstable-normalize

上記のモジュールは削除され、unstable-プレフィックスがつかない同名モジュールへマージされています。

@std/random@0.1.2

@std/random@0.1.2がリリースされていまうs.

@std/random/get-random-values-seeded@std/random/next-float-64が追加

実験的モジュールとして@std/random/get-random-values-seeded@std/random/next-float-64が追加されています (#6626)

@std/yaml@1.0.7

@std/yaml@1.0.7がリリースされています・

yaml/unstable_stringify.tsが追加

yaml/unstable_stringify.tsが追加されています (#6666)

@std/yaml/stringifyとの違いとしてquoteStyleオプションがサポートされており、出力される文字列で使用されるクォーテーションを柔軟にコントロールできます。

@std/toml@1.0.7

@std/toml@1.0.7がリリースされています。

@std/toml/parse - 0から始まる数値の扱いが改善

parse()0から始まる数値が検出された際に、エラーが発生するよう改善されています (#6681)

vltがJSRをサポート

vltでJSRのサポートが追加されたようです:

pnpmとYarnに続けて、JSRをサポートしたパッケージマネージャーが少しずつ増えています。