node:streams/consumers

Web StreamsからNode.jsで扱いやすい形にするヘルパー関数が用意されていることを教えてもらった。Node.jsでFetch標準が使えるようになったので、出番は多くなるのかもしれない。Node.jsのBufferにするコードを読むと、ReadableStreamを全て読んでBlobに変換し、更にArrayBufferに変換し、Buffer.from()を使っているようだ。

import { buffer } from "node:streams/consumers";

const response = await fetch("https://example.com/test.jpg");
const image = await buffer(res.body);
const metadata = await sharp(image).metadata();

node-fetchパッケージからFetch標準へ移行した時、レスポンスをsharpパッケージで使えるよう、ArrayBufferで受け取ってからBufferに変換していた。ここをヘルパー関数のbuffer()を使うとちょっとだけ書きやすく感じる。ただ、やっていることはほとんど変わらない上、Blobを経由するので効率が悪そうだ。Fetch標準のレスポンスにはいろいろ生えていることも考えると、ヘルパー関数を使わずに書いた方が後悔が少なそうだ。