概要
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を利用したコードをコンパイルしようとすると、エラーが発生してしまいました。
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オプションで読み込むライブラリを指定できます。
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にアップグレードされた。