直近のDenoの変更について
直近でDenoのmainブランチにいくつかの機能がマージされているため紹介します。
⚠️ これらの機能はまだ正式にはリリースされていないため、今後、使用方法などが変更される可能性があります
deno compile - フレームワークの検出機能
deno compileコマンドにフレームワークの検出機能が追加されています:
deno compileの引数としてディレクトリが指定された場合、指定されたディレクトリ内に存在する設定ファイル (例: next.config.js)などに基づいてDenoが自動的にプロジェクトで使用されているフレームワークを検出し、必要に応じて該当フレームワーク向けのビルドコマンドを実行した上で、最終的に実行可能ファイルを作成してくれます。
現状、以下のフレームワークがサポートされているようです:
- Next.js
- Fresh
- Astro
- Nuxt
- SvelteKit
- Remix
- SolidStart
- TanStack Start
- Vite (SSR)
先週に紹介したdeno desktopコマンドにおいてフレームワークの検出機能の導入が検討されており、その一環の対応であると思われます。
catalog:プロトコル
カタログ機能を実装するPRがマージされています:
ワークスペースのルートにおけるdeno.jsonまたはpackage.jsonにおいてcatalogもしくはcatalogsプロパティーを定義しておくことで、pnpmなどと同様にワークスペースメンバーの各package.jsonにおいてカタログで定義されたパッケージのバージョンをcatalog:形式で参照することができます。
deno transpile
昨年に提案されていたdeno transpileコマンドが実装されています:
TypeScriptファイルをJavaScriptファイルにトランスパイルするためのコマンドで、--declarationオプションを指定することで.d.tsファイルの生成も行えるようです。
現在はクローズされていますが、以前にDenoからnpmパッケージの公開を行えるようにするためのdeno publish –npmの実装が進められており、deno transpileコマンドの追加はその一環である可能性もありそうです。
OffscreenCanvas
OffscreenCanvasが実装されています:
この対応に合わせてDeno.UnsafeWindowSurfaceのgetContext()メソッドにおける"bitmaprenderer"のサポートやheight/widthプロパティーの追加なども行われています。
Deno v2.7.14
Deno v2.7.14がリリースされています。
deno upgrade
bsdiffを活用したアップデートの効率化が行われています (#33274)
今回のリリースからGitHub Releaseに*.bsdiffファイルがアップロードされており、これをダウンロードすることで差分アップデートが実現されるようです。
本挙動は--no-deltaオプションにより無効化できるようです。
deno x
deno xコマンドでjsrパッケージやhttps:形式のモジュールを実行した際に、引数の--unstable-*オプションが無視されてしまう問題が修正されています (#33450)
deno deploy
ワークスペースのルートでdeno deployを実行すると、各メンバーがデプロイ対象から除外されてしまう問題が修正されています (#33562)
Permissions
Deno v2.7.10におけるWindows向けの修正に続いて、macOSにおいても--allow-readなどのファイルシステム関連のパーミッションオプションが大文字や小文字の違いなどを考慮せずに権限チェックを行うように挙動が変更されています (#33451)
macOSのAPFSの挙動に合わせた変更のようです。
Web API
structuredClone()
シリアライズに対応していないオブジェクトをstructuredClone()に渡した際にDataCloneErrorがthrowされるように挙動が修正されています (#33465, #33491)
Cache API
CacheStorageのkeys()及びmatch()メソッドが実装されています (#33275)
MessageEvent
MessageEventの生成時にsourceオプションを指定した際に、生成されたMessageEventのsourceプロパティーが設定されない問題が修正されています (#33500)
ReadableStreamBYOBRequest
ReadableStreamBYOBRequestのviewプロパティーの型がArrayBufferViewからUint8Array<ArrayBuffer>に変更されています (#33477)
直近のSpec変更 (whatwg/streams#1367) に合わせた対応のようです。
Node.js互換性の改善
node:fs
下記APIが実装されています:
Utf8Stream(#33485)mkdtempDisposableSync()/mkdtempDisposable()(#33533)watch()のignoreオプション (#33610)StatWatcherのref()/unref()メソッド (#33408)stat()及びlstat()のthrowIfNoEntryオプション (#33436)
node:net
下記APIが実装されています:
Server#listen()のreusePortオプション (#33416)createServer()及びcreateConnection()のblockListオプション (#33417, #33414)createConnection()のsignalオプション (#33414)Server#[Symbol.asyncDispose]()(#33417)BlockListのtoJSON()/fromJSON()メソッド,rulesプロパティー, 及びBlockList.isBlockList()(#33445)Socket#resetAndDestroy()(#33415)
node:http2
様々なバグ修正に加え、下記新規APIが実装されています:
ServerHttp2Stream#pushStream()(#33516)createSecureServer()のALPNCallbackオプション (#33521)createServer()のstrictFieldWhitespaceValidation,maxSessionInvalidFrames及びsettings.maxHeaderListSizeオプション (#33506, #33515, #33494)
node:dns
下記APIが実装されています:
node:cluster
下記APIの実装が行われています (#33493):
Workerfork()setupPrimary()disconnect()isMasterisPrimaryworkersschedulingPolicysettingsworkerisWorker
node:child_process
spawn()のstdioオプションにおけるStreamオブジェクトの指定がサポートされています (#33525)
node:perf_hooks
eventLoopUtilization()が追加されています (#33581)
node:process
process.debugPortが実装されています (#33403)
node:timers
Timeout及びImmediateで[Symbol.dispose]()メソッドが実装されています(#33528)
Node-API
napi_async_init()及びnapi_async_destroy()が実装されています (#33282)
dax v0.46.0
dax v0.46.0がリリースされています。
破壊的変更
Deno.*からnode:*への移行
daxの内部実装におけるファイルシステム関連の操作などにおいてDeno.* APIではなくnode:fsやnode:processなどを使用するように変更されています (#364)。これにより各プラットフォーム間におけるdaxの互換性の改善が期待されるようです。
ユーザーへの影響として、エラー発生時にDeno.errors.*ではなくNode.js互換のエラーが発生するように挙動が変わります。
set -e
dax内部のシェルの実装が@david/shellパッケージとして独立されたようです。これに伴い、シェルにおいてset -eがデフォルトで有効化されているようです。以前までの振る舞いに戻したい場合は明示的にset +eを実行する必要があります。
$.select()
$.select()の戻り値がPromise<number>からPromise<SelectionItem>に変更されています。SelectionItemはindexプロパティーとvalueプロパティーを提供します (#374)
新規API
新規APIとしてコマンドの出力内容をAsyncIterableIterator<string>として取り扱うためのlinesIter()メソッド (dsherret/shell#3) やユーザーに対して警告を表示するための$.alert() (#368)、beforeRequest()やbeforeCommand()などのライフサイクルフック (#373) などが追加されています。