Deno v1.43.0について

Deno v1.43.0は先週にリリース予定だったようですが、延期されることになりました。

ただし、直近でv1.43.0向けと思われる機能がいくつか入っていたので紹介します。(⚠️正式にリリースされる際には仕様などが変わる可能性があります)

deno serveコマンド

deno serveコマンドが追加されています。

以下のようにfetch関数を実装したオブジェクトをdefault exportしたファイルを用意します。

// main.ts
export default {
  fetch(req: Request) {
    return new Response("OK");
  },
};

このファイルを指定してdeno serveコマンドを実行すると、HTTPサーバーが起動されます。

$ deno serve main.ts
deno serve: Listening on http://localhost:8000/

$ curl http://localhost:8000
OK

ポートはデフォルトで8000が使用されますが、--portオプションで変更が可能です。

Deno.serveRequest.signalがサポート

Deno.serveのハンドラーに渡されれるRequestオブジェクトでsignalプロパティがサポートされています。先程のdeno serveコマンドでも利用可能です。

export default {
  fetch(req: Request) {
    // レスポンスがクライアントへ送信されると`abort`が発火します
    req.signal.addEventListener("abort", () => console.info("aborted"));
    return new Promise<void>((resolve) => {
      setTimeout(() => {
        resolve(new Response("OK"));
      }, 5000);
    });
  },
};

V8コードキャッシュ

V8によって生成されたコードキャッシュを保存する仕組みが導入されています。

この仕組みはデフォルトで有効化されており、任意で--no-code-cacheを指定することで無効化できるようです。 V8が生成したコードキャッシュは、DENO_DIR配下にv8_code_cache_v1というSQLiteデータベースファイルが作られ、そこで管理されるようです。


その他

UnsafeWindowSurfaceでのWaylandのサポートFloat16Arrayの実験的なサポートなどが追加されています。


deno_std v0.224.0

deno_std v0.224.0がリリースされています。

std/semver

testRangesatisfies(std/semver/satisfies.ts)にリネームされています。

バグの修正

std/bytes/equals.ts

Uint8Arraysubarrayを渡した場合に、equalsが意図した通りに動作しない問題が修正されています。

std/csv/stringify.ts

columnsオプションに空の配列が渡された際に、先頭に空のヘッダーが出力される問題が修正されています。

std/fs/ensure_dir.ts

ensureDirにディレクトリへのシンボリックリンクが指定された場合に、エラーが発生する問題が修正されています。

JSR Is Not Another Package Manager

Deno公式ブログでJSRが開発された背景について解説する記事が公開されています。