Results after filtering
Original unfiltered results
Search configuration
Final results (filtered or fallback)
export function handleNoResultsFallback(
filteredResults: AniListManga[],
originalResults: AniListManga[],
searchConfig: SearchServiceConfig,
hadAnyApiResults: boolean,
): AniListManga[] {
const hasOriginalResults = originalResults.length > 0 || hadAnyApiResults;
if (filteredResults.length === 0 && hasOriginalResults) {
console.warn(
`[MangaSearchService] ⚠️ No matches passed filtering, but including raw API results anyway`,
);
const fallbackResults = originalResults
.slice(0, 3)
.filter(
(manga) => manga.format !== "NOVEL" && manga.format !== "LIGHT_NOVEL",
);
console.debug(
`[MangaSearchService] 🔍 Including these API results:`,
fallbackResults.map((m) => ({
id: m.id,
romaji: m.title?.romaji,
english: m.title?.english,
})),
);
return fallbackResults;
}
if (
searchConfig.bypassCache &&
filteredResults.length === 0 &&
hasOriginalResults
) {
console.warn(
`[MangaSearchService] ⚠️ MANUAL SEARCH with no ranked results - forcing inclusion of API results`,
);
return originalResults.filter(
(manga) => manga.format !== "NOVEL" && manga.format !== "LIGHT_NOVEL",
);
}
return filteredResults;
}
Return fallback results when filtering removes all results.
If all results are filtered but originals exist, returns top 3 original results as fallback to prevent complete failure.