code: async function getFiles(dir, options, callback) {
    options = options || {};
    if (options.ignoreExtension) {
      var noExtensionDir = [];
      if (Array.isArray(dir)) {
        for (const d of dir) {
          var r = await exports.getRootFromPattern(d);
          noExtensionDir.push(r);
        }
        dir = noExtensionDir;
      } else {
        dir = await exports.getRootFromPattern(dir);
      }
    }
    var result = [];
    if (!Array.isArray(dir)) {
      var noArrayRoot = await exports.getRootFromPattern(dir);
      var fileObj = {
        root: noArrayRoot,
        files: []
      };
      fileObj.files = await getFileList(dir, options.exclude, options);
      result.push(fileObj);
    } else {
      for (const d of dir) {
        var noArrayRoot = await exports.getRootFromPattern(d);
        var fileObj = {
          root: noArrayRoot,
          files: []
        };
        fileObj.files = await getFileList(d, options.exclude, options);
        result.push(fileObj);
      }
    }
    callback(null, result);
  }
docs: /*
  @function getFiles {object[]} [Get included files, returns an object wich contains relative path and root folder]
  @param dir {string[]} [Array of patterns to search or single pattern]
  @param options [exclude: patterns to exclude from search, ignoreExtension: ignore file extensions, includeFolders: Boolean to include folders as paths, default false]
  @param callback