341文字
2分
編集

Bun 1.3.12

Bun 1.3.12 がリリースされた。ネイティブのヘッドレスブラウザ自動化として Bun.WebView が追加され、WebKit(macOS の WKWebView)と Chrome/Chromium(DevTools Protocol)の2つのバックエンドを同じ API で扱える。加えて、bun ./file.md で Markdown を ANSI 文字装飾として標準出力に描画できるようになり、Bun.markdown.ansi() によりプログラムからも利用できる。

Bun.WebView は次のように利用する。

ts
await using view = new Bun.WebView({ width: 800, height: 600 });
await view.navigate("https://bun.sh");

await view.click("a[href='/docs']");
await view.scroll(0, 400);
await view.scrollTo("#install");

const title = await view.evaluate("document.title");
const jpeg = await view.screenshot({ format: "jpeg", quality: 90 });
await Bun.write("page.jpg", jpeg);
ts
const out = Bun.markdown.ansi("# Hello\n\n**bold** and *italic*\n", {
  hyperlinks: true,
});
process.stdout.write(out);

主な変更点は次のとおり。

  • Bun.WebView の追加。クリックやスクロールなどを OS レベルの入力イベントとして送出し、セレクタ指定の操作は actionability を待機する
  • bun ./file.md の追加と Bun.markdown.ansi() の提供。色付けの無効化、ハイパーリンク、折り返し幅、Kitty Graphics Protocol によるインライン画像などをオプションで制御できる
  • Bun.cron() の in-process コールバックが追加され、プロセス内で状態を共有しながら cron スケジュール実行できる(非重複実行、UTC 基準などの挙動)
  • unix domain socket の挙動を Node.js/libuv に合わせ、既存ソケットへの bind は EADDRINUSE、close でソケットファイルを自動削除する
  • URLPatternBun.stripANSI/Bun.stringWidthbun buildBun.Glob.scan() などの性能改善と、多数の互換性修正・バグ修正

#参考文献