diff --git a/src/lib/Iso3166.ts b/src/lib/Iso3166.ts index 1633e5c..3fe9d1c 100644 --- a/src/lib/Iso3166.ts +++ b/src/lib/Iso3166.ts @@ -35,11 +35,21 @@ export const guessCountry: (location: string) => Option.Option = flo ), Option.orElse(() => Option.map( - Array.findFirst(rawTimeZones, timezone => - Array.some( - timezone.mainCities, - mainCity => diacritics.remove(location).toLowerCase() === diacritics.remove(mainCity).toLowerCase(), + Array.matchLeft( + Array.filter(rawTimeZones, timezone => + Array.some( + timezone.mainCities, + mainCity => diacritics.remove(location).toLowerCase() === diacritics.remove(mainCity).toLowerCase(), + ), ), + { + onEmpty: () => Option.none(), + onNonEmpty: (head, tail) => + Array.match(tail, { + onEmpty: () => Option.some(head), + onNonEmpty: Option.none, + }), + }, ), timeZone => timeZone.countryCode, ), diff --git a/test/Iso3166.test.ts b/test/Iso3166.test.ts index 2d0bf08..0df23ad 100644 --- a/test/Iso3166.test.ts +++ b/test/Iso3166.test.ts @@ -23,6 +23,7 @@ describe('guessCountry', () => { ['Québec', 'CA'], ['Rio de Janeiro, Brazil.', 'BR'], ['Sunnyvale, California', 'US'], + ['Sydney', 'AU'], ['The UK', 'GB'], ['UK', 'GB'], ['U.K.', 'GB'],