export interface DungeonLeaderboardDifficultyRule { readonly bossIds: readonly string[]; readonly finalBossId: string; readonly finalBossIds?: readonly string[]; } export function leaderboardFinalBossIds(rule: DungeonLeaderboardDifficultyRule): readonly string[] { return rule.finalBossIds?.length ? rule.finalBossIds : [rule.finalBossId]; } export function isLeaderboardFullClear( rule: DungeonLeaderboardDifficultyRule, killedBossIds: readonly string[], ): boolean { return rule.finalBossIds?.length ? rule.finalBossIds.some((id) => killedBossIds.includes(id)) : rule.bossIds.every((id) => killedBossIds.includes(id)); }