static readHtmlFilesInDirectory(directory, depth) {
    const filesAndFolders = fs.readdirSync(directory, {withFileTypes: true});

    const files = filesAndFolders.filter(fileOrDir => fileOrDir.isFile()).map(file => file.name);
    const folders = filesAndFolders
      .filter(fileOrDir => fileOrDir.isDirectory())
      .map(dir => dir.name);

    const htmlFiles = files
      .filter(file => file.endsWith('.html') || file.endsWith('.htm'))
      .map(file => ({file, depth: 0}));

    if (depth === 0) return htmlFiles;

    for (const folder of folders) {
      // Don't recurse into hidden folders, things that look like files, or dependency folders
      if (folder.includes('.')) continue;
      if (IGNORED_FOLDERS_FOR_AUTOFIND.has(folder)) continue;

      try {
        const fullPath = path.join(directory, folder);
        if (!fs.statSync(fullPath).isDirectory()) continue;

        htmlFiles.push(
          ...FallbackServer.readHtmlFilesInDirectory(fullPath, depth - 1).map(({file, depth}) => {
            return {file: `${folder}/${file}`, depth: depth + 1};
          })
        );
      } catch (err) {}
    }

    return htmlFiles;
  }
@param {string} directory
@param {number} depth
@return {Array<{file: string, depth: number}>}