JSFiddle - React, Tailwind, and code Playground

JavaScript

// FileFinder.js

const fs = require('fs');
const util = require('util');
const path = require('path');

module.exports = FileFinder;

function FileFinder() {
  this.ext = null;
  this.folder = null;
  this.findedFiles = [];
}

FileFinder.prototype.findAllByExt = function (ext, folder) {
  let mp3Files;

  this.ext = ext;
  this.folder = folder;

  this.getAllFromFolder(folder)
    .then(data => {
      mp3Files = data.filter(item => {
        return this.isMp3(folder, item);
      });
      this.findedFiles.push(...mp3Files);
      data.forEach(item => {
        fs.stat(path.join(folder, item), (err, stat) => {
          if (err) throw err;
          if (stat.isDirectory()) {
            this.findAllByExt(this.ext, path.join(folder, item));
          }
        });
      });
    })
    .catch(err => {
      throw err
    });
};

FileFinder.prototype.getAllFromFolder = function (folder) {
  return new Promise((resolve, reject) => {
    fs.readdir(folder, (err, files) => {
      if (err) reject(err);
      resolve(files);
    });
  });
};

FileFinder.prototype.isMp3 = function (folder, fileName) {
  return (path.parse(path.join(folder, fileName)).ext === `.${this.ext}`);
};



// main.js
const FileFinder = require('./FileFinder');


let mp3Finder = new FileFinder();

mp3Finder.findAllByExt('xls', '/home/user/downloads');

setImmediate(() => {
  console.log(mp3Finder);
});