Deno v2.3.4 & v2.3.5
Denoのv2.3.4とv2.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 uninstallやdeno 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.UnsafeWindowSurfaceにresize()というメソッドが実装されています (#29254)
このメソッドはウィンドウのサイズが変更された際に呼ばれることが想定されています。
また、GPUQueue#onSubmittedWorkDoneが実装されています (#29255)
deno lsp
deno/testRunの改善
deno lspから実行したテストが失敗した際に、Deno.test()の行ではなく実際にエラーが発生した行にエラーが表示されるよう改善されています (#29221)
プロジェクト外のdeno.jsonの参照がサポート
.vscode/settings.jsonのdeno.configにおいて、プロジェクト外のdeno.jsonの指定がサポートされています (#29420)
Auto importの改善
Workspaceメンバーに対する相対パス形式ではなく bare specifier によってimportが追加されるよう改善されています (#29304)
また、deno.jsonのpatchで指定された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
TestContextのbefore()とafter()メソッドが実装されています (#29367)
また、TestContextにassert.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に関して以下の変更が実施されています:
ProgressBarとProgressBarStreamのコンストラクターからwritable引数が削除され、代わりにProgressBarOptionsにwritableオプション (デフォルトはDeno.stderr.writable) が追加されています(#6409)ProgressBar#addが削除され、代わりにvalueプロパティーとmaxプロパティーが追加されています (#6430)Spinnerとの一貫性の改善のため、ProgressBar#endがProgressBar#stopにリネームされています (#6406)ProgressBarFormatter.styledTimeが関数からgetterへ変更されています (#6677)ProgressBarFormatterのstyledTime/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をサポートしたパッケージマネージャーが少しずつ増えています。