Básicamente lo que hace es leer todos los ficheros de una carpeta, por cada unom si es una carpeta se llama de forma recursiva a la misma función pasando la carpeta interna para que se vayan concatenando todos los ficheros.

Funcionando en node a partir de la versión 10.10.

const { resolve } = require('path');
const { readdir } = require('fs').promises;

async function getFiles(dir) {
  const directories = await readdir(dir, { withFileTypes: true });
  const files = await Promise.all(directories.map((directory) => {
    const res = resolve(dir, directory.name);
    return directory.isDirectory() ? getFiles(res) : res;
  }));
  return Array.prototype.concat(...files);
}