Deno v1.18.0
Deno v1.18.0がリリースされました。
設定ファイルの自動読み込みがサポート
今までは、設定ファイルを読み込むためには--config
の指定が必要でした。
$ deno run --config ./deno.json ./main.ts
今後は、--config
が指定されなかった場合、deno.json
またはdeno.jsonc
という名前の設定ファイルを自動で読み込まれるようになります。
Deno.test
のsub-steps APIが安定化
Deno.test
でテストケースのグループ化を行うためのsub-steps APIが安定化されました。
今後は--unstable
を指定しなくても利用できます。
Deno.test("nested test case", async (t) => {
const success = await t.step("step 1", async (t) => {
const success = await t.step("step 1-1", () => {
throw new Error("Failed!");
});
if (!success) throw new Error("Failed!");
await t.step("step 1-2", () => {});
});
if (success) throw new Error("Failed!");
});
Web Cryptography APIの実装が完了
このリリースでは、下記の変更が実施されています。
SubtleCrypto.encrypt()
及びSubtleCrypto.decrypt()
でAES-GCM及びAES-CTRがサポートSubtleCrypto.wrapKey()
及びSubtleCrypto.unwrapKey()
でAES-KWがサポートSubtleCrypto.importKey()
でECDSA及びECDHキーとP-384曲線の組み合わせがサポートSubtleCrypto.exportKey()
でECDSA及びECDHキーのjwkやpkcs8, 及びspki形式でのエクスポートがサポートSubtleCrypto.wrapKey()
とSubtleCrypto.unwrapKey()
でjwk形式がサポート
今回のリリースでWeb Cryptography APIの実装が完了したようです。
Deno.dlopen
(FFI)への機能追加
まず、外部関数の型がシンボル定義を元に自動で推論されるようになりました。
const dylib = Deno.dlopen("./add.so", {
add: {
parameters: ["i32", "i32"],
result: "i32",
} as const,
});
const result = dylib.symbols.add("1", 2); // NG! (型エラー)
シンボルへの別名の設定もサポートされています。
const dylib = Deno.dlopen("./add.so", {
plus: {
name: "add",
parameters: ["i32", "i32"],
result: "i32",
} as const,
});
dylib.symbols.plus(1, 2)
また、Deno.UnsafeFnPointer
が実装され、関数ポインタを取り扱えるようになりました。
Node.js互換モードの変更
deno repl --compat
でNode.jsの組み込みモジュール( events
, assert
など)がグローバルにあらかじめ読み込まれるようになりました。
また、deno test
コマンドでもNode.js互換モード(--compat
)がサポートされました。
WebSocket関連の変更
WebSocketStream
でハンドシェイク時に送信されるHTTPヘッダを指定できるようになりました (Denoの独自拡張です)
const wss = new WebSocketStream("wss://localhost:4000/ws", {
headers: { "X-FOO": "foo" },
});
また、WebSocketサーバ(Deno.upgradeWebSocket
)でping/pongメッセージのハンドリングがサポートされました。
サーバがクライアントへpingメッセージを送信する間隔はidleTimeout
オプションで制御できます (デフォルトは120秒)
Uncaught Error発生時のログ出力の強化
Uncaught Errorが発生した際に、Error.cause
の内容が表示されるようになりました。
deno lsp
の改善
import
節のホバーでモジュールの情報などが表示されるようになりました
その他の修正
- Denoランタイムの起動が33%、Deno内部のtscの起動が10%高速化されました (v8スナップショットの圧縮に
zlib
ではなくlz4
とzstd
が使用されるようになりました) deno bundle
によるバンドル後のソースに// deno-fmt-ignore-file
と// deno-lint-ignore-file
コメントが出力されるようになりましたdeno install
で--prompt
オプションがサポートされました。- 実行途中の
read()
が存在する状態でReadableStreamDefaultReader
またはReadableStreamBYOBReader
のreleaseLock()
を呼ぶと、read()
がrejectするように変更されました (今までは、同じ状況でreleaseLock()
を呼ぶと、TypeError
が発生しました) window
変数をdelete
で削除すると、プロセスがパニックする問題が修正されましたglobalThis
を削除すると、console.log
などがクラッシュする問題が修正されましたIntl.ListFormat
の型定義が追加されましたDeno.errors.NotSupported
の型定義が追加されました
deno_std v0.122.0
deno_std v0.122.0がリリースされました。
csv
parse()
の戻り値の型が改善されています。
また、破壊的変更として、ParseOptions.parse
とParseOptions.columns[].parse
オプションが削除されています。
node
Timeoutクラスが実装されました。
log
FileHandlerの内部バッファが満杯になった際に、バッファの内容が強制的にフラッシュされるように修正が行われました。
https://github.com/denoland/deno_std/releases/tag/0.122.0
テストステップメタデータの実装について (#13399)
テストステップメタデータの実装が検討されています。
まず、現状のsub-steps APIの問題点として、--filter
オプションによるフィルタリングが困難であるという問題があります。
この問題を緩和するために、stepMetadata
オプションをDeno.test
に追加することが検討されています。
Deno.test({
name: "group",
async fn(t) {
await t.step("step 1", () => {
await t.step("sub step 1", () => {});
});
await t.step("step 2", () => {});
},
stepMetadata: [
{ name: "step 1", steps: [{ name: "sub step 1" }] },
{ name: "step 2" },
],
});
このようにしてメタデータを定義しておくことで、ネストされたテストケースのフィルタリングが可能になります。
$ deno test --filter "sub step 1”
https://github.com/denoland/deno/issues/13399
Velociraptor v1.4.0
Velociraptor v1.4.0がリリースされました。
Import mapファイルを指定するためのimap
オプションがimportmap
にリネームされています。
scripts:
dev:
cmd: deno run --unstable dev.ts
importmap: import_map.json
imap
オプションは非推奨化されており、今後はimportmap
オプションの使用が推奨されます。
その他の変更点として、deno.json(c)
での設定のサポートが追加されています。
以下のように、deno.json(c)
ファイルのvelociraptor
キーでスクリプトの定義が行えます。
{
"velociraptor": {
"scripts": {
"check": [
"deno lint",
"deno fmt --check"
]
}
}
}
https://github.com/jurassiscripts/velociraptor/releases/tag/1.4.0
Astrodon
TauriとFFI(Deno.dlopen
)をベースにしたデスクトップアプリケーションフレームワーク