fresh v1.2
fresh v1.2がリリースされました。
変更内容について以下のページにまとめたため、よろしければ参照いただければと思います。
Deno v1.34.3
Deno v1.34.3がリリースされました。
Deno KVにキューが実装
Deno.Kvにenqueue
とlistenQueue
メソッドが追加されています。
const kv = await Deno.openKv(":memory:");
// メッセージを追加します。
const res = await kv.enqueue({ id: 1, payload: "foo" });
assert(res.ok);
let message;
// キューを購読します
const listenPromise = kv.listenQueue((_message) => {
message = _message;
});
kv.close();
await listenPromise; // closeするとresolveされます
console.info(message);
// Output: { id: 1, payload: "foo" }
Deno.Kv.enqueue
には以下のオプションを指定できます。
オプション | 説明 |
---|---|
keysIfUndelivered | メッセージの処理に失敗した際にKVに設定したいエントリを指定できます |
delay | 配送までの遅延時間を指定できます(最大で1週間まで指定できて、デフォルトは0 です) |
listenQueue
に渡したコールバックが失敗した際は、自動的にリトライされます。(リトライ回数は最大で5回のようです)
リトライが全て失敗した際は、上記のkeysIfUndelivered
で指定したエントリがKVに保存されます。
const kv = await Deno.openKv(":memory:");
const listenPromise = kv.listenQueue((_) => {
// 意図的に失敗させています
throw new Error();
});
const message = { id: 1, payload: "foo"};
const res = await kv.enqueue(message, {
keysIfUndelivered: [["dead_letter_queue", message.id]],
});
assert(res.ok);
// リトライがすべて失敗するまで待機します...
await new Promise((ok) => setTimeout(ok, 100_000));
const res2 = await kv.get(["dead_letter_queue", message.id]);
console.info(res2.value);
// Output: { id: 1, payload: "foo" }
kv.close();
await listenPromise;
Node.js互換性の改善
パフォーマンス改善:
node_modules
内のファイルの読み取り権限を確認する際に発行されているrealpath
シスコールの結果がキャッシュされるようになりました。
場合によっては40%近くのオーバーヘッドの削減も見られるようです。
Node.js組み込みモジュール:
node:https
:createServer
が実装されましたnode:http
:Upgrade
ヘッダーのハンドリングが追加されました。- 現状は
websocket
のみがサポートされています。 npm:puppeteer
やnpm:discord
を動かしたいのがモチベーションのようです。
- 現状は
node:worker_threads
: 対象ファイルのモジュール形式(CJSまたはESM)の判定時に、package.json
の"type"
も参照されるように改善されました。
バグ修正:
npm:
URLに不正な形式のパッケージ名が指定されるとDenoがクラッシュする問題が修正されています。deno compile
を実行した際に、使っているnpmパッケージによってはバイナリの中から欠損してしまうことがある問題が修正されています。
deno lsp
deno.json
のexclude
で指定されたファイルはdeno lsp
によって事前読み込みされないように修正されました。deno.json
にImport Maps(imports
フィールド)を埋め込んだ際に、--watch
やdeno lsp
でうまく反映されない問題が修正されました。
Deno.serve()
Deno.serve()
のonListenにhostname
が渡されるようになりました。
deno_std v0.192.0
deno_std v0.192.0がリリースされました。
std/semver
モジュールが書き直されました (破壊的変更)
SemVer
がclassからinterfaceへ変更されました。- これに合わせて、
SemVer
を不変なオブジェクトとして扱うように実装が修正されています。 - 各種APIの入力として
string
を受け取れるようオーバーロードが定義されていますが、この形式が非推奨になりました (今後は、string
ではなくSemVer
オブジェクトを渡すことが推奨されるようです) - 各APIごとに単一のファイルが作成されました (例: std/semver/gt.ts, std/semver/parse.ts)
std/testing/snapshot.ts
--update
の実行時に削除されたスナップショットがあった場合、それらがログで報告されるように改善されました。
std/testing/time.ts
FakeDateの内部で本物のDate
オブジェクトが使われるように修正されました。
これにより、通常のDate
オブジェクトとの互換性の向上が期待されます。
std/yaml/parse.ts
parse()に空のYAMLが与えられた際に、undefined
ではなくnull
が返却されるように修正されました。