Deno v1.25.0
Deno v1.25.0がリリースされました。
以下の記事に変更点をまとめたため、詳しくはそちらを参照いただければと思います。
deno_std v0.153.0
deno_std v0.153.0がリリースされました。
std/encoding/csv
: parse()
が同期的に動作するように (破壊的変更)
parse()
の引数からBufReaderが削除されています
これに伴い、parse()
の戻り値がstring[][] | Record<string, unknown>[]
に変更されています。
import { parse } from "https://deno.land/std@0.153.0/encoding/csv.ts";
const records = parse(`id,name
1,foo
2,bar`);
console.log(records);
// Output: [ [ "id", "name" ], [ "1", "foo" ], [ "2", "bar" ] ]
std/http/cookie_map
モジュールが追加
Map
ライクなAPIをベースにCookieを管理するためのユーティリティモジュールが追加されました。
CookieMap
はリクエスト及びレスポンスに関するCookieの管理に利用することができます。
import { CookieMap, mergeHeaders } from "https://deno.land/std@0.153.0/http/cookie_map.ts";
const req = new Request("http://localhost:3000", {
headers: { cookie: "foo=bar; hoge=piyo;" },
});
const cookies = new CookieMap(req);
cookies.get("hoge"); // => "piyo"
cookies.set("bar", "baz");
cookies.delete("foo");
const headers = mergeHeaders(cookies, new Headers({ "content-type": "application/json" }));
console.log(headers);
// Output:
// Headers {
// "content-type": "application/json",
// "set-cookie": "foo=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GM
// T; httponly"
// }
SecureCookieMap
は、基本的にはCookieMap
と同様の用途で使用できますが、以下の点が異なります。
- 各APIが非同期に動作する
- Cookieの署名と検証を行ってくれる (Cookieの改ざんを防止するため)
以下はSecureCookieMap
の使用例です。
import { KeyStack } from "https://deno.land/std@0.153.0/crypto/keystack.ts";
import { SecureCookieMap, mergeHeaders } from "https://deno.land/std@0.153.0/http/cookie_map.ts";
const keys = new KeyStack(["secret"]);
const digest = await keys.sign("hoge=piyo");
const req = new Request("http://localhost:3000", {
headers: { cookie: `bar=baz; hoge=piyo; hoge.sig=${digest}` },
});
const cookies = new SecureCookieMap(req, { keys });
await cookies.get("hoge"); // => "piyo"
await cookies.get("bar"); // => undefined
await cookies.set("foo", "bar");
const headers = mergeHeaders(cookies, new Headers({ "content-type": "application/json" }));
console.log(headers);
// Output:
// Headers {
// "content-type": "application/json",
// "set-cookie": "foo.sig=6N0gFVndcVFLbSrP0HdUs2TqhGHThgq3tyJpHSuP0J
// s; path=/; httponly"
// }
std/http/cookie
: getSetCookies()
が追加
新しいAPIとしてgetSetCookies()
が追加されています。
Set-Cookie
ヘッダの内容を解析するために利用できます。
import { getSetCookies } from "https://deno.land/std@0.153.0/http/cookie.ts";
const headers = new Headers({
"set-cookie": "foo=bar; path=/; Secure; HttpOnly",
});
const cookies = getSetCookies(headers);
console.log(cookies);
// Output:
// [ { name: "foo", value: "bar", path: "/", secure: true, httpOnly: true } ]
std/http/server
: serveTls()
でkey
とcert
オプションがサポート
serveTls()
では秘密鍵と証明書を指定するために、keyFile
とcertFile
オプションがサポートされていますが、これらはDeno 2.0で削除予定の非推奨化されたAPIに依存しています。
そのため、新しいオプションとしてkey
とcert
オプションが追加されました。
これらの使い方は、Deno.listenTls
における同名オプションと同様です。
std/crypto/keystack
モジュールの追加
前述したstd/http/cookie_map
におけるSecureCookieMap
を実装する目的で、std/crypto
にkeystack
モジュールが追加されました。
std/testing/asserts
新しいAPIとして、assertNotInstanceOf
が追加されています。
assertNotInstanceOf("foo", Request); // => OK
assertNotInstanceOf(new Date(), Date); // => NG
その他には、assertEquals
でgetter
を持つオブジェクトを比較した際の差分の表示が改善されています。
std/async/delay
: persistent
オプションのサポート
false
を指定すると、Deno.unrefTimer
によってプロセスの終了がブロックされなくなります。
await delay(5000, { persistent: false });
std/node
http
パッケージがFlashを使って再実装されています。
また、event
パッケージからlistenerCount()
とsetMaxListeners()
がexport
されました。
その他には、util/types
におけるTypedArray
のチェックがより厳密に行われるように改善されています。
https://github.com/denoland/deno_std/releases/tag/0.153.0
Ultra v2のalphaバージョンが公開
ReactベースのWebフレームワークであるUltraのv2.0.0-alpha.0が公開されました。
v1ではwouterやreact-helmetなどの使用が前提になっていましたが、v2では様々なエコシステムをより柔軟に利用できるようにすることが想定されているようです。
例えば、公式では以下のパッケージなどの使用例が公開されています。
その他には、サーバがHonoをベースに再実装されているようで、それを元にしたAPI routesの仕組みが導入される予定のようです。
esm.sh v92
esm.sh v92がリリースされました。
react/preact/vue向けにstableチャネルが追加されています。
https://esm.sh/stable/react@18.2.0/deno/react.js