Deno v1.28.2
Deno v1.28.2がリリースされました。
CPUプロファイリング
新機能として、以下の3メソッドが実装されています。
console.profileconsole.profileEndconsole.timeStamp
これらのAPIはDenoを実行する際に--inspectを指定した場合のみ有効化されます。
--inspectオプションが指定された状態でconsole.profile(label)が呼ばれると、console.profileEnd(label)の呼び出しまでの間に実行された処理に関するCPUプロファイルを計測することができます。
計測結果はChrome DevToolsの「Profile」タブから閲覧することができます。
Node.js互換性の改善
Import Mapsファイルの定義に
/が含まれれているとマッピングがうまく動作しない問題が解消されています{ "imports": { "preact/": "npm:preact/" } }module.createRequire()でURLオブジェクトがサポートdeno infoで循環したnpm依存が適切に取り扱われるように改善型定義ファイルの検出に関する挙動の改善
importのパスにディレクトリが指定された際の型定義ファイルの検出が改善 (import * as mod from ./sub_dirとすると、./sub_dir/index.d.tsなどのファイルが自動で探索されます)package.jsonでexportsとtypesの両方が定義されているときに、exportsから先に処理されるように修正package.jsonでtypesエントリが未定義だった際に、mainで指定されたエントリポイントを元に型定義が解決されるように挙動が改善
その他の変更点
Deno.serveと--watchオプションを併用したときに、AddrInUseエラーが出る問題が解消されています。
https://github.com/denoland/deno/releases/tag/v1.28.2
deno_std v0.166.0
deno_std v0.166.0がリリースされました。
std/fmtに関する破壊的変更
std/fmt/bytesのprettyBytes()関数がformat()にリネームされています。
既存のprettyBytes()は非推奨化されており、今後のバージョンで削除される予定です。
また、std/fmt/durationのprettyDuration()も同様にformat()へリネームされています。
std/node - Node.js互換性の改善
Deno本体でのNode.js互換性の改善に向けた様々な修正が行われています。
node:console: Deno v1.28.2に合わせて、consoleにprofile/profileEnd/timeStampが追加されています。node:timers:timeout.refresh()が実装されています。node:process:argvがexportされました。process.kill(pid, 0)が適切に動作するように修正 (第2引数に0を指定すると、pidで指定されたプロセスの生存確認ができます)
node:crypto: HMACサポートが追加されています。 (crypto.Hmac/crypto.createHmac)node:http:http.request()のheadersオプションで指定されたヘッダが渡されない問題が修正IncomingMessage.statusMessageの上書きができない問題が解消- 下記いずれかの条件を満たす場合、
ClientRequestでリクエストボディのchunk送信が無効化されるように修正Transfer-Encoding: chunkedが未指定の場合Content-Lengthが指定された場合
node:fs:fs.ReadStreamとfs.WriteStreamの型定義が改善 (instanceofによるnarrowingが適切に機能するように)
std/http/cookieの改善
setCookieのexpiresオプションで数値の指定がサポートされています。
また、setCookieのvalueに空白を含む文字列を渡した際のエラーメッセージも改善されています。
https://github.com/denoland/deno_std/releases/tag/0.166.0
Deno.CommandAPIの見直しについて
Deno v1.28で実装されたDeno.Commandに関して、APIの見直しが検討されているようです。
Split state and configuration in new subprocess API (#16799)
具体的には、下記のようにAPIが変更されることが検討されているようです:
Deno.ChildProcessという新しい型を導入Deno.Commandの下記プロパティをDeno.ChildProcessへ移動stdinstdoutstderrpidstatus
Deno.Command.spawnの戻り値がvoidからDeno.ChildProcessへ変更
この変更に関する背景として、サブプロセスに関する設定(CLI引数やパイプなど)とサブプロセスに関する状態(プロセスIDや終了コードなど)をDeno.Commandという単一のAPIが持つことにより、混乱を生んでしまうということが背景にあるようです。
Deno.Commandにはサブプロセスの設定を、Deno.ChildProcessにサブプロセスの状態を保持させることで、この問題を解消する狙いがあるようです。
この変更に関してはすでにPRが作成されており、早ければDeno v1.29あたりでリリースされる可能性もありそうです。
tea
Homebrewの作者によるDenoで実装された新しいパッケージマネージャが公開されています。
https://twitter.com/Linda_pp/status/1594487254281379840
JSConf JP 2022
JSConf JP 2022でのスライドが公開されています。
いくつかのスライドでDenoに関して言及されています: