Deno v1.32.5

Deno v1.32.5がリリースされました。

KV

Deno.AtomicOperation.sumが実装されました。

const kv = await Deno.openKv(":memory:");

const result = await kv.set(["key"], new Deno.KvU64(1n));

const ok = await kv.atomic()
  .check({ key: ["key"], versionstamp: result.versionstamp })
  .mutate({ type: "sum", key: ["key"], value: new Deno.KvU64(2n) })
  .commit();
assert(ok);

const result2 = await kv.get(["key"]);
assert(result2.value instanceof Deno.KvU64);
assert(result2.value.value === 3n);

Node.js互換性

  • node:http: ClientRequest.socket.remoteAddressが実装されました
  • node:crypto: createVerifyが実装されました
  • node:path: fromFileUrlなどのNode.jsでは提供されないシンボルがexportされていた問題が修正されました
  • npm: ロックファイルで指定されたバージョンがキャッシュに見つからなかった場合に、そのバージョンのパッケージをダウンロードするように挙動が変更されました (このような場合、今まではエラーが起きていました)

バグ修正

  • deno lsp: Unix系のOSでstatusページが返ってこなくなっていた問題が修正されました
  • deno test --watchの実行中にSIGINTを送信しても、プロセスを停止できない問題が修正されました
  • Deno.upgradeWebSocket()で取得したWebSocketオブジェクトのsend()メソッドが、クライアントからいずれかのフレームを受信するまでブロックされてしまう問題が修正されました (#18700)

deno_std v0.184.0

deno_std v0.184.0がリリースされました。

std/encoding - 非推奨化されたファイルの削除

非推奨化された以下のファイルが削除されています。

削除されたファイル移行先
std/encoding/front_matter/*std/front_matter/mod.ts
std/encoding/jsonc.tsstd/jsonc/mod.ts
std/encoding/toml.tsstd/toml/mod.ts
std/encoding/yaml.tsstd/yaml/mod.ts
std/encoding/csv.tsstd/csv/mod.ts
std/encoding/csv/*std/csv/mod.ts
std/encoding/json/stream.tsstd/json/mod.ts

std/consoleの追加

新規モジュールとしてstd/consoleが追加されました。

これはRustのunicode-widthをTypeScriptにポートしたもののようです。

import { unicodeWidth } from "https://deno.land/std@0.184.0/console/mod.ts";

unicodeWidth("foobar"); // => 6
unicodeWidth("あいうえお"); // => 10
unicodeWidth("🦕"); // => 2

std/testing/bdd.ts: it.skip/describe.skipが追加

挙動としてはit.ignore/describe.ignoreと同様です。

JestやMochaなどのフレームワークでは.ignoreではなく.skipが提供されており、それらとの互換性を高めることが目的のようです。

std/http/file_server: serveFile()の改善

serveFile()でRangeリクエストを適切に処理できるように改善されました。

“What’s next for Deno?” by Ryan Dahl (NodeCongress ‘23)

NodeCongressでのRyan Dahl氏の発表がYoutubeで公開されました。

以下の内容などについて解説されています。

  • node:npm:のサポートについて
  • Deno KVの紹介
  • Deno DeployでのDeno KVのサポートについて (バックエンドとしてFoundationDBが採用される予定のようです)
  • Deno 2.0のリリース時期 (今年の夏頃に予定されているようです)
  • キャッシュや永続キュー、バックグラウンドワーカーなどの開発について

Deno.serve(handler, options)形式のオーバーロードが削除

以下のPRでDeno.serveの安定化に向けて、APIのシグネチャの見直しが行われています。

BREAKING(unstable): remove “Deno.serve(handler, options)” overload #18759

具体的には、以下のような呼び出しができなくなるようです。

const handler = (request) => {
  // ...
  return new Response(body);
};
const ac = new AbortController();
Deno.serve(handler, {
  signal: ac.signal,
});

上記と同様のことがしたい場合は、以下のように指定できます。

const handler = (request) => {
  // ...
  return new Response(body);
};
const ac = new AbortController();
Deno.serve({
  signal: ac.signal,
}, handler);

// または以下でも可
Deno.serve({
  handler,
  signal: ac.signal,
});

esm.sh v116

esm.sh v116がリリースされました。

GitHubリポジトリからのファイルのimportがサポートされています。

対象リポジトリのルートにpackage.jsonがあれば、https://esm.sh/gh/<オーナー>/<リポジトリ>/path/to/fileのように指定することで、特定のファイルをimportできるようです。

Oak v12.2.0

Oak v12.2.0がリリースされました。

Flashサーバのサポートが削除されています。