diff --git a/README.md b/README.md index d464eb64d..2222add13 100644 --- a/README.md +++ b/README.md @@ -447,12 +447,13 @@ Thanks to all clawtributors:

steipete joaohlisboa mneves75 maxsumrall xadenryan joshp123 mukhtharcm hsrvc jamesgroat dantelex - Azade Eng. Juan Combetto Mariano Belinky julianengel sreekaransrinath dbhurley Kit Jonathan D. Rhyne (DJ-D) Vasanth Rao Naik Sabavat jeffersonwarrior - claude scald nachoiacovino andranik-sahakyan nachx639 sircrumpet Manuel Maly rafaelreis-r meaningfool ratulsarna - lutr0 abhisekbasu1 emanuelst osolmaz kiranjd thewilloftheshadow William Stock CashWilliams manuelhettich minghinmatthewlam - buddyh sheeek timkrase gupsammy mcinteerj imfing petter-b RandyVentures jalehman obviyus - dan-dr iamadig VACInc zats Django Navarro pcty-nextgen-service-account Syhids Erik fcatuhe jayhickey - jverdi oswalpalash VAC alejandro maza antons Asleep123 cash-echo-bot Clawd conhecendocontato gtsifrikas - hrdwdmrbl hugobarauna Jarvis jonasjancarik kkarimi loukotal mrdbstn MSch nexty5870 ngutman - onutc reeltimeapps Rolf Fredheim snopoke ddyo Mourad Boustani pcty-nextgen-ios-builder Quentin Randy Torres Tobias Bischoff + daveonkels Azade Eng. Juan Combetto Mariano Belinky julianengel sreekaransrinath dbhurley Kit Jonathan D. Rhyne (DJ-D) Vasanth Rao Naik Sabavat + jeffersonwarrior claude scald nachoiacovino andranik-sahakyan nachx639 sircrumpet Manuel Maly rafaelreis-r meaningfool + ratulsarna lutr0 abhisekbasu1 emanuelst osolmaz kiranjd thewilloftheshadow William Stock CashWilliams manuelhettich + minghinmatthewlam buddyh sheeek timkrase gupsammy mcinteerj imfing petter-b RandyVentures jalehman + obviyus dan-dr iamadig VACInc zats Django Navarro pcty-nextgen-service-account Syhids Erik fcatuhe + jayhickey jverdi oswalpalash VAC alejandro maza antons Asleep123 cash-echo-bot Clawd conhecendocontato + gtsifrikas hrdwdmrbl hugobarauna Jarvis jonasjancarik kkarimi loukotal mrdbstn MSch nexty5870 + ngutman onutc reeltimeapps Rolf Fredheim Sash Catanzarite snopoke ddyo Mourad Boustani pcty-nextgen-ios-builder Quentin + Randy Torres Tobias Bischoff

diff --git a/scripts/update-clawtributors.ts b/scripts/update-clawtributors.ts index 5df4a493f..6511e3e41 100644 --- a/scripts/update-clawtributors.ts +++ b/scripts/update-clawtributors.ts @@ -367,6 +367,13 @@ function resolveLogin( return emailToLogin[email]; } + if (email && name) { + const guessed = guessLoginFromEmailName(name, email, apiByLogin); + if (guessed) { + return guessed; + } + } + if (email && email.endsWith("@users.noreply.github.com")) { const local = email.split("@", 1)[0]; const login = local.includes("+") ? local.split("+")[1] : local; @@ -401,6 +408,39 @@ function resolveLogin( return null; } +function guessLoginFromEmailName( + name: string, + email: string, + apiByLogin: Map +): string | null { + const local = email.split("@", 1)[0]?.trim(); + if (!local) { + return null; + } + const normalizedName = normalizeIdentifier(name); + if (!normalizedName) { + return null; + } + const candidates = new Set([local, local.replace(/[._-]/g, "")]); + for (const candidate of candidates) { + if (!candidate) { + continue; + } + if (normalizeIdentifier(candidate) !== normalizedName) { + continue; + } + const key = candidate.toLowerCase(); + if (apiByLogin.has(key)) { + return key; + } + } + return null; +} + +function normalizeIdentifier(value: string): string { + return value.toLowerCase().replace(/[^a-z0-9]/g, ""); +} + function parseReadmeEntries( content: string ): Array<{ display: string; html_url: string; avatar_url: string }> {