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が返却されるように修正されました。