10LOC

#error-handling

Node.jsadvanced

Use stream.finished for reliable cleanup

import { createReadStream, createWriteStream } from "node:fs";
import { finished } from "node:stream/promises";

export const copyWithCleanup = async (src: string, dest: string, signal?: AbortSignal) => {
  const read = createReadStream(src);

Wait for a stream to finish and clean up resources without ad-hoc listeners.