Deno v1.28.2
Deno v1.28.2がリリースされました。
CPUプロファイリング
新機能として、以下の3メソッドが実装されています。
console.profile
console.profileEnd
console.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.Command
APIの見直しについて
Deno v1.28で実装されたDeno.Command
に関して、APIの見直しが検討されているようです。
Split state and configuration in new subprocess API (#16799)
具体的には、下記のようにAPIが変更されることが検討されているようです:
Deno.ChildProcess
という新しい型を導入Deno.Command
の下記プロパティをDeno.ChildProcess
へ移動stdin
stdout
stderr
pid
status
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に関して言及されています: