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.jsonexportstypesの両方が定義されているときに、exportsから先に処理されるように修正
    • package.jsontypesエントリが未定義だった際に、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/bytesprettyBytes()関数がformat()にリネームされています。

既存のprettyBytes()は非推奨化されており、今後のバージョンで削除される予定です。

また、std/fmt/durationprettyDuration()も同様にformat()へリネームされています。

std/node - Node.js互換性の改善

Deno本体でのNode.js互換性の改善に向けた様々な修正が行われています。

  • node:console: Deno v1.28.2に合わせて、consoleprofile/profileEnd/timeStampが追加されています。
  • node:timers: timeout.refresh()が実装されています。
  • node:process:
    • argvexportされました。
    • 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.ReadStreamfs.WriteStreamの型定義が改善 (instanceofによるnarrowingが適切に機能するように)

std/http/cookieの改善

setCookieexpiresオプションで数値の指定がサポートされています。

また、setCookievalueに空白を含む文字列を渡した際のエラーメッセージも改善されています。


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へ移動
    • 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に関して言及されています: