readFileLinesWithReadline

JavaScript
import { createReadStream } from 'node:fs';
import { createInterface } from 'node:readline';

// Yields one line at a time; CRLF endings are handled by readline.
export async function* readFileLines(path, { encoding = 'utf8' } = {}) {
  const input = createReadStream(path, { encoding });
  const lines = createInterface({ input, crlfDelay: Infinity });
  try {
    for await (const line of lines) yield line;
  } finally {
    lines.close();
    input.destroy();
  }
}

// Usage: for await (const line of readFileLines('app.log')) console.log(line);