Deno v1.31.3
Deno v1.31.3がリリースされました。
CLI/APIに関する改善
deno info
とdeno doc
コマンドで--no-lock
/--lock
オプションがサポートされました。(挙動はdeno run
コマンドなどと同様です)deno.json
などでcompilerOptions.types
エントリが定義されていると、型エラーが起きる問題が修正されています。- REPLで
globalThis.Deno
やその配下で定義されたプロパティを削除しようとすると、プロセスがパニックする問題が修正されています。 Deno.makeTempFile(Sync)
でファイルがすでに存在した際にリトライが行われるように挙動が改善されています。Deno.serveHttp()
でレスポンスエラーが発生した際に、nextRequestから返されるRequest
のsignal
がabortedに設定されるように修正されました。
Node.js互換性に関する改善
package.json
が存在する または--node-modules-dir
オプションが指定されたが、実行されたスクリプトではnpmパッケージがimport
されていない場合に、node_modules
が作成されないように挙動が改善されました。node_modules
のセットアップ中にプログレスバーが表示されるように挙動が改善されました。(#18136)node:crypto
:createCipheriv()
が実装されました。 (aes-128-cbc
のみサポート)node:fs
:writeFile()
でencoding: "ascii"
オプションがサポートされました。
https://github.com/denoland/deno/releases/tag/v1.31.3
deno_std v0.180.0
deno_std v0.180.0がリリースされました。
std/encoding
関連モジュールのディレクトリ構造の見直し (破壊的変更)
std/encoding
で提供されていたcsv
/front_matter
/json
/jsonc
/toml
/yaml
モジュールが、トップレベルのモジュールとして独立しました。
今後は、例えば、csv
モジュールを利用したい場合はstd/csv/mod.ts
、yaml
モジュールを利用したい場合はstd/yaml/mod.ts
から読み込む必要があります。
ディレクトリの移動に合わせて、以下の変更も実施されています。
csv
モジュールの細分化- 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。
csv/stringify.ts
csv/parse.ts
csv/stream.ts
- 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。
json
モジュールの細分化- 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。
json/json_parse_stream.ts
json/json_stringify_stream.ts
json/concatenated_json_parse_stream.ts
- 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。
toml
モジュールの細分化- 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。
toml/parse.ts
toml/stringify.ts
- 以下のファイルが追加されており、必要なAPIのみを個別に読み込めるようになりました。
std/http/server_sent_event.ts
が追加
新規モジュールとしてstd/http/server_sent_event.tsが追加されました。
元々、Oakで提供されていたServer-Sent Eventsのユーティリティがdeno_std
にポートされたようです。
https://github.com/denoland/deno_std/releases/tag/0.180.0
キーバリューストア(Deno.openDatabase
)の追加について
⚠️この対応が正式にリリースされるかどうかはまだ不明なため、あくまで参考程度に留めていただけるとよさそうです🙇
Deno本体にSQLiteベースのキーバリューストアを追加するPRが作成されています。
具体的には、Deno.openDatabase()
というAPIから返却されるDeno.Database
オブジェクト経由でデータベースを操作できるようにする想定のようです。
// 永続化先のファイルのパス (省略した場合は、`localStorage`などと同様の規則に基づいて保存先が決定されるようです)
const path = ":memory:";
const db = await Deno.openDatabase(path);
await db.set(["key"], "value");
const result = await db.get(["key"]);
assert(result.key.length === 1);
assert(result.key[0] === "key");
assert(result.value === "value");
assert(result.versionstamp != null);
await db.delete(["key"]);
Deno.Database
のset()
やget()
などの第1引数には配列が渡されていますが、これがキーにあたるようです。
このキーはDeno.KvKey
という型で定義されています。
さらに、Deno.KvKey
はDeno.KvKeyPart
という型の配列として定義されています。
キーと値の組み合わせを永続化する際は、Deno.KvKey
を以下の規則によってエンコードした値がデータベースのキーとして使用されるようです。
- 一定の規則に従って要素(
Deno.KvKeyPart
)をソートします。
- 複数のデータ型が混在している際は、
Uint8Array
,string
,number
,bigint
,boolean
の順に並び替えられます。 - 同一のデータ型の要素が複数含まれる際は、それらを辞書順に並び替えます。
- 各要素をバイト列にエンコードした上で連結します。
これ以外にも、データベースに対してアトミックに操作を行うためのatomic()
メソッドなどが提供されています
ここで紹介したもの以外にもいくつか機能が存在するため、より詳細については、このPRの以下のファイルなどを参照いただければと思います。
cli/tests/unit/kv_test.ts
cli/tsc/dts/lib.deno.unstable.d.ts