Deno v1.19.3
Deno v1.19.3がリリースされました。
deno test --docでtypescriptやjavascriptタイプのコードブロックをチェックできるようになりました。
```ts
let str: string = 0;
```
だけでなく
```typescript
let str: string = 0;
```
のようにコードブロックを記述した際もテストが行われるようになります。
また、パフォーマンスチューニングも実施されており、atobとbtoaのパフォーマンスが最大で20倍まで高速化されています。
その他には古いバージョンのglibcを搭載するプラットフォームのサポートが行われています。
https://github.com/denoland/deno/releases/tag/v1.19.3
deno_std v0.129.0
deno_std v0.129.0がリリースされました。
streams
deno_stdのWeb streams APIへの移行の一環として、streams/bufferモジュールが追加されました。
現時点では、以下のクラスが提供されています:
- Buffer (
std/io/bufferのBufferクラスのstreams APIバージョン) - LimitedTransformStream (
std/io/readersのLimitedReaderのstreams APIバージョン) - LimitedBytesTransformStream (
std/io/readersのLimitedReaderのstreams APIバージョン)
また、streams/delimiterモジュールにTextDelimiterStreamが追加されています。
testing/asserts
assertStrictEquals()のシグネチャがAssertion Functionsを使用した形式に変更されています。
具体的には下記コードが動くようになります:
const a = { name: "foo" };
const b = a as unknown;
assertStrictEquals(b, a);
b.name; // => OK
node
大きな変更点として、cryptoパッケージにcrypto.publicEncrypt()やcrypto.privateDecrypt()などが実装されています。
これにより、node-mysql2パッケージがある程度動くようになったようです。
fmt/colors
ReDoS攻撃への対策などのため、内部で使用されている正規表現パターンが更新されています。
https://github.com/denoland/deno_std/releases/tag/0.129.0
deno taskコマンド
2021/02/20の記事にてdeno scriptコマンドを追加するPRが作成され、実装が行われていると記述しました。
このPRが正式にmainブランチへマージされました。
前回の記事の時点から、いくつか変更点があります。
deno scriptがdeno taskへリネームされています:$ deno task startdeno.json(c)でスクリプトの一覧を定義するフィールドがscriptsからtasksへリネームされています:{ "tasks": { "start": "deno run --allow-net mod.ts" } }
上記以外については、2021/02/20の記事と同じ方法で使用できそうです。
このdeno taskコマンドはおそらく次にリリースされるv1.20.0にて含まれそうです。
https://github.com/denoland/deno/pull/13725
deno benchコマンド
Denoにdeno benchコマンドを追加するPRがマージされました。
(まだこの機能は正式リリースされておらず、正式リリース時に使用法が変わる可能性があるためご注意ください!)
使い方としては、まずbench.tsや*_bench.tsなどの名前でベンチマークファイルを作成します。
そして、このファイル内でDeno.bench()を使ってベンチマークを定義していきます。
Deno.bench({
// ベンチマークの実行回数 (デフォルトは`1000`)
n: 1000,
// ウォームアップの実行回数 (デフォルトは`1000`)
// JITによる最適化を目的として、ベンチマーク開始前に、ここで指定された回数だけ`fn`が繰り返し実行されます (このウォームアップ処理は計測結果には影響しません)
warmup: 1000,
// ベンチマークコード
// `n`+`warmup`の回数だけこの関数が実行されます
fn: () => {
doSomeHeavyComputation();
},
});
そして、deno benchコマンドを実行すると、定義したベンチマークを実行できます。
$ deno bench
この機能もDeno v1.20でリリースされる可能性がありそうです。
https://github.com/denoland/deno/pull/13713
test_suite
test_suiteというDenoの組み込みテストランナーを拡張するモジュールが公開されています。
このモジュールではdescribeやitなどに加え、afterEachやbeforeEachなどのフックが提供されます。
定義したテストケースはdeno testで実行できます。