Deno v1.26.1
Deno v1.26.1がリリースされました。
Node-APIの実装
DenoでNode-APIが実装されました。
Node-APIで実装されたアドオンのrequire()での読み込みがサポートされます。
Node-APIを有効化するためには、今のところ、--allow-ffiの指定が必要なようです。 (ただし、将来的にオプションが変わる可能性はあるようです)
いまのところ、lightningcssやlz4-napiなどが動作することが確認されているようです。(napi-rs/napi-rs#900)
Node.js互換に関する改善
Node-APIの実装以外に関する改善として、npm:経由で読まれたパッケージの依存関係の解析結果がキャッシュされるようになりました。
これにより、キャッシュが存在する場合は、Viteの起動が3倍近く高速化されているようです。
キャッシュの仕組みはSQLiteをベースに実装されており、$DENO_DIR/node_analysis_cache_v1にデータベースが作成されます。
その他の改善として、deno cacheでのnpm:のサポートやrequire()でのJSONファイルの読み込みなどがサポートされています。
Web Cache APIのバグ修正
Deno v1.26で追加されたCache APIに関するバグ修正が実施されています。
Cache.put()に渡したResponseオブジェクトがconsumed状態にならない問題が修正Cache.put()に渡したResponseに紐づくReadableStreamの読み込みでエラーが起きると、リソースリークが発生する問題が修正Cache.put()で書き込みに失敗したときに、中途半端にキャッシュが保存されないように改善
その他の修正
--unstableを付けないと、Deno.hostname()がundefinedになる問題が修正 (Deno.hostname()はDeno v1.26で安定化されています)- リクエストボディの読み込みが最適化 (perf(ext/fetch): consume body using ops (#16038))
- 一度、
Request#text()などでリクエストボディを消費したにも関わらず、再度Request.bodyを参照するとRequest.bodyUsedがfalseに戻ってしまう問題が修正 Deno.serve()で、ステータスコードが204の際はContent-Lengthが設定されないように修正SubtleCrypto.deriveBits()でlength引数に与えられた長さが考慮されない問題が修正
https://github.com/denoland/deno/releases/tag/v1.26.1
deno_std v0.159.0
deno_std v0.159.0がリリースされました。
std/textprotoの非推奨化
以下の理由などから、std/textprotoが非推奨化されました。
- 現在は
deno_stdの内部で使われていないこと deno_stdの方針として、GoスタイルのAPI(Deno.Reader/Deno.Writer)からWeb Streams APIベースへ移行されていること
今後は、このモジュールの使用は避けることが推奨されます。
std/streams/conversion: iterateReaderのバグ修正
iterateReaderに長年存在していたバグが修正されています。
具体的な修正内容については、以下の記事で詳細に内容が解説されています。
また、この修正に関連してiterateReader()の実装が効率化されています。(perf(streams): memory optimizations by avoiding large buffer allocation in a loop (#2748))
std/collections/partitionの型定義の改善
以下のように、partitionの第2引数にtype predicateを指定した場合、戻り値のそれぞれの配列の型が推論されるように型定義が改善されました。
const values = [1, "23", 456, "789"];
const [numbers, strings]: [Array<number>, Array<string>] = partition(
values,
(x) => typeof x === "number",
);
std/http/file_serverの改善
serveDir()にshowIndexオプションが追加されています。falseを指定すると、リクエストでディレクトリが指定された際のindex.htmlの自動配信が無効化されます。
#などの予約後を名前に含むファイルがうまく配信されない問題が修正されています。
std/nodeの改善
大きな変更として、Deno本体の--node-modules-dirオプションをベースにchild_process.fork()が再実装されています。
その他には、hash.digest()での'base64url'のサポートの追加や、tls.TLSSocket/fs.open()/child_process.spawnSync()の互換性の向上などが実施されています。
https://github.com/denoland/deno_std/releases/tag/0.159.0
denoland/apiland
以下のリポジトリでdeno.landのバックエンドのソースが公開されました。
Denoに加えて、Google Cloud Datastore/Algoliaなどを活用して開発されているようです。
【TypeScript】Deno で匿名掲示板を作ろう! with upstash & supabase
Deno Deploy/Fresh/Supabase/Upstashなどを活用して匿名掲示板を作る連載記事が公開されています。