概要
denoのv0.34.0がリリースされたため、変更点をまとめます。
Breaking Changes
TypeScriptのstrictモードが有効化された
既存のコードについては、denoをv0.34.0にアップグレードすると、コンパイルが通らなくなる可能性があります。
strictモードについてはこちらの--strict
オプションの欄に記載されています。
新機能等
(std/node/events) on
関数がサポートされた
Node.jsのeventsモジュールのポリフィルにon関数が実装されました。
import { EventEmitter, on } from "https://deno.land/std@v0.34.0/node/events.ts";
const emitter = new EventEmitter();
let count = 0;
const timer = setInterval(() => {
count += 1;
if (count === 3) {
clearInterval(timer);
}
emitter.emit('hoge', count);
}, 1000);
for await (const x of on(emitter, 'hoge')) {
console.log(x);
// [ 1 ]
// [ 2 ]
// [ 3 ]
}
Deno.makeTempFile
が実装された
一時ファイルを作成するための関数が実装されました。
オプションの形式は、Deno.makeTempDir
と同様です。
使用する際は、--allow-write
フラグを指定する必要があります。
try {
await Deno.makeTempFile({ prefix: "test_" });
} catch (error) {
console.error(error);
}
Compiler APIでlib
オプションがサポートされた
Compiler APIからlib.dom.d.ts
等のライブラリファイルが読み込めるようになりました。
v0.33.0までは、ライブラリファイルを読み込む手段がなかったため、DOM APIを利用したコードをコンパイルしようとすると、エラーが発生してしまいました。
v0.33.0
const [diagnostics] = await Deno.compile(
"mod.ts",
{
"mod.ts": "document.getElementById('hoge');"
}
);
console.log(diagnostics);
// [ { message: "Cannot find name 'document'. Do you need to change your target library? Try changing the `lib` compi...", code: 2584, category: 3, startPosition: 0 } ]
v0.34.0以降では、lib
オプションで読み込むライブラリを指定できます。
v0.34.0
const [diagnostics] = await Deno.compile(
"mod.ts",
{
"mod.ts": "document.getElementById('hoge');"
},
{
lib: ["esnext", "dom"]
}
);
--cert
オプションがサポートされた
deno run
等を実行する際に--cert
オプションでPEM形式の証明書を指定できます。
(std/io/bufio.ts)readDelim
/readStringDelim
/readLines
がexportされた
readDelim
を使うと、指定したデリミタで入力を分割してくれます。
import { readDelim } from "https://deno.land/std@v0.34.0/io/bufio.ts";
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const buffer = new Deno.Buffer(encoder.encode("hoge,fuga,piyo"));
for await (const c of readDelim(buffer, encoder.encode(","))) {
console.log(decoder.decode(c));
// hoge
// fuga
// piyo
}
readStringDelim
を使用すると、上記のコードをより簡潔に記述できます。
import { readStringDelim } from "https://deno.land/std@v0.34.0/io/bufio.ts";
const encoder = new TextEncoder();
const buffer = new Deno.Buffer(encoder.encode("hoge,fuga,piyo"));
for await (const c of readStringDelim(buffer, ",")) {
console.log(c);
}
readLines
はreadStringDelim(reader, "\n")
の呼び出しと等価です。
deno testでディレクトリを指定してテストを実行できるようになった
その他の修正点
-
Deno.readDir
を実行した際に、ディレクトリ内に不正なUTF-8文字を含む名前のファイルが存在すると、クラッシュする問題が修正された。- https://github.com/denoland/deno/pull/4004
- そのようなファイルはスキップするよう修正されています。
- dprintが0.6.0にアップグレードされた。