impr: optimize getFirstDayOfWeek (@fehmer) (#6457)

!nuf
This commit is contained in:
Christian Fehmer 2025-04-16 17:18:03 +02:00 committed by GitHub
parent e1c8e4a226
commit 92d97c1fee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,6 +1,6 @@
import { roundTo2 } from "@monkeytype/util/numbers";
import { Day } from "date-fns";
import * as Locales from "date-fns/locale";
/**
* Converts seconds to a human-readable string representation of time.
* @param sec The number of seconds to convert.
@ -106,6 +106,115 @@ export function secondsToString(
return ret.trim();
}
/*
generated by
import * as Locales from "date-fns/locale";
const result = {};
for (const locale of Object.keys(Locales)) {
// @ts-ignore
const data = Locales[locale] as Locales.Locale;
result[locale] = (data.options?.weekStartsOn as number) % 7;
}
*/
const weekStartsOnFallback: Record<string, Day> = {
af: 0,
ar: 6,
arDZ: 0,
arEG: 0,
arMA: 1,
arSA: 0,
arTN: 1,
az: 1,
be: 1,
beTarask: 1,
bg: 1,
bn: 0,
bs: 1,
ca: 1,
ckb: 0,
cs: 1,
cy: 0,
da: 1,
de: 1,
deAT: 1,
el: 1,
enAU: 1,
enCA: 0,
enGB: 1,
enIE: 1,
enIN: 1,
enNZ: 1,
enUS: 0,
enZA: 0,
eo: 1,
es: 1,
et: 1,
eu: 1,
faIR: 6,
fi: 1,
fr: 1,
frCA: 0,
frCH: 1,
fy: 1,
gd: 0,
gl: 1,
gu: 1,
he: 0,
hi: 0,
hr: 1,
ht: 1,
hu: 1,
hy: 1,
id: 1,
is: 1,
it: 1,
itCH: 1,
ja: 0,
jaHira: 0,
ka: 1,
kk: 1,
km: 0,
kn: 1,
ko: 0,
lb: 1,
lt: 1,
lv: 1,
mk: 1,
mn: 1,
ms: 1,
mt: 1,
nb: 1,
nl: 1,
nlBE: 1,
nn: 1,
oc: 1,
pl: 1,
pt: 1,
ptBR: 0,
ro: 1,
ru: 1,
se: 1,
sk: 1,
sl: 1,
sq: 1,
sr: 1,
srLatn: 1,
sv: 1,
ta: 1,
te: 0,
th: 0,
tr: 1,
ug: 0,
uk: 1,
uz: 1,
uzCyrl: 1,
vi: 1,
zhCN: 1,
zhHK: 0,
zhTW: 1,
};
export function getFirstDayOfTheWeek(): Day {
if (navigator.language === undefined || navigator.language === null) {
return 0;
@ -128,20 +237,16 @@ export function getFirstDayOfTheWeek(): Day {
return (locale.getWeekInfo().firstDay as number) % 7;
}
//use date-fns for browsers like firefox
// @ts-ignore
let dateFnsLocale = Locales[
navigator.language.replaceAll("-", "")
] as Locales.Locale;
if (dateFnsLocale === undefined || dateFnsLocale === null) {
//retry with language only
// @ts-ignore
dateFnsLocale = Locales[navigator.language.split("-")[0]] as Locales.Locale;
//use fallback generated from date-fns for browsers like firefox
let fallback = weekStartsOnFallback[navigator.language.replaceAll("-", "")];
if (fallback !== undefined) {
return fallback;
}
if (dateFnsLocale !== undefined && dateFnsLocale !== null) {
return ((dateFnsLocale.options?.weekStartsOn ?? 0) % 7) as Day;
//retry with language only
fallback = weekStartsOnFallback[navigator.language.split("-")[0] as string];
if (fallback !== undefined) {
return fallback;
}
return 0; //start on sunday