Deno v1.22.2

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

主な変更点:

  • Deno.getGid()が実装されました。(unstable)
    • POSIX系プラットフォームではプロセスのグループIDが、Windowsではnullが返されます。
    • 利用するには--allow-envの指定が必要です。
  • Error.captureStackTrace()の型定義が追加されました。
  • Crypto.getRandomValues()の型定義が改善されました。(BigInt64ArrayBigUint64Arrayが受け取れず、Float32ArrayFloat64Arrayが引数として受け取れてしまう問題が解消されています)

https://github.com/denoland/deno/releases/tag/v1.22.2

deno_std v0.142.0

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

FNVのサポート (crypto)

cryptoモジュールでFNVが実装されました。

import { crypto } from "https://deno.land/std@0.142.0/crypto/mod.ts";

// ...
const digest = await crypto.subtle.digest("FNV32", input);

media_typesモジュールの追加

deno_stdにmedia_typesモジュールが追加されました。

import { contentType } from "https://deno.land/std@0.142.0/media_types/mod.ts";

contentType(".js"); // => "application/javascript; charset=UTF-8"
contentType("application/json"); // => "application/json; charset=UTF-8"

このモジュールは、以前にもdeno_stdに存在するモジュールの一部でしたが、一度削除されています。

その後、メンテナンスはoakserver/media_typesのリポジトリに引き継がれていました。

このリリースで改めてmedia_typesモジュールが復帰したため、oakserver/media_typesのリポジトリはアーカイブされています。

TextLineStreamallowCRオプションが追加 (streams/delimiter)

このオプションにtrueを指定したときのみCRが取り扱われるように変更されています。

前回のリリースで、デフォルトでCRが取り扱われるように修正されましたが、デフォルトの挙動を変えてしまうのはまずいということで、このオプションが追加されました。


https://github.com/denoland/deno_std/releases/tag/0.142.0

oak_commonsパッケージの機能のdeno_stdへの移行

現在、oak_commonsパッケージで提供されていた機能の一部をdeno_stdへ移植するPRが作成されています。

例)

deno_std v0.142.0で追加されたmedia_typesモジュールも、元々は oakserver/media_typesリポジトリで管理されていたものであり、これらの変更が入る可能性も比較的高そうに見えます。

deno_redis v0.26.0

deno-redis v0.26.0がリリースされています。

このリリースには、いくつかの破壊的変更が含まれます。

(破壊的変更) Replyの型定義が変更

Redis#sendCommandなどから返却されるReplyの型定義が修正されました。

v0.25.0までは、Reply.typeプロパティの値に基づいて、適切なメソッドを呼ぶ必要がありました。

const reply = await redis.sendCommand("SET", "redis", "nice");
console.assert(reply.type === replyTypes.SimpleString);
console.assert(reply.value() === "OK");

このリリースでは、Reply.typeが削除されています。

const reply = await redis.sendCommand("SET", "redis", "nice");
console.assert(reply.value() === "OK");

また、この変更に合わせて、mod.tsからexportされていたreplyTypes定数も削除されています。

(破壊的変更) RedisPipeline#flushの戻り値が変更

v0.25.0までは、RedisPipeline#flushの戻り値はPromise<Array<Reply>>でした。

例)

const pipeline = redis.pipeline();
pipeline.set("key", "foo");
pipeline.get("key");
const results = pipeline.flush();
console.assert(results[0].value() === "OK");
console.assert(results[1].value() === "foo");

このリリースでは、戻り値がPromise<Array<Raw>>に変更されています。(破壊的変更) そのため、今後はReply.typeの確認やReply#value()の呼び出しなどが不要になります。

const pipeline = redis.pipeline();
pipeline.set("key", "foo");
pipeline.get("key");
const results = pipeline.flush();
console.assert(results[0] === "OK");
console.assert(results[1] === "foo");

(破壊的変更) RedisSubscription#closeの戻り値の変更

RedisSubscription#close()の戻り値がPromise<void>ではなくvoidに変更されています。

この変更は、主に、Deno.Conn#closeRedis#closeなどとの一貫性を向上させることを目的としています。

今後は、必要であれば、コネクションを閉じる際に自前でunsubscribeする必要があります。

const redis = await connect({ hostname: "127.0.0.1" });
const sub = await redis.subscribe("channel");

async function cleanup(): Promise<void> {
  await sub.unsubscribe("channel");
  sub.close();
}

(破壊的変更) リトライの仕組みの改善

元々、deno-redisにはリトライの仕組みが存在しました。

ただし、これは、コネクションの確率やコマンドの送信などに失敗した際に、あらかじめ決められた時間だけ待機してから処理を再実行するという単純なものでした。

このリリースでは、指数バックオフアルゴリズムに基づいて、リトライ時の待機時間を計算するように修正されています。

この変更に合わせて、connect()retryIntervalオプションが削除されています。(破壊的変更)

AUTHコマンドのusername引数のサポート

connect()usernameオプションを指定すると、AUTHコマンドを呼ぶ際にusername引数が設定されます。

const redis = await connect({
  hostname: "127.0.0.1",
  port: 6379,
  username: Deno.env.get("REDIS_USERNAME")!,
  password: Deno.env.get("REDIS_PASSWORD")!,
});

https://github.com/denodrivers/redis/releases/tag/v0.26.0

Htm

PreactとUnoCSSを使用してSSRを行うための軽量なモジュールが公開されています。

このモジュールはDeno Deployでも動作するようです。


https://github.com/ije/html