make-case.ts 700 B

12345678910111213141516171819
  1. /**
  2. * Make names as registries send them: "PEUGEOT", "alfa romeo", "BMW",
  3. * "Kia". A word written all in one case is recased, keeping initials of
  4. * three letters or fewer as initials (BMW, VW, MG, DS); a word already in
  5. * mixed case is the registry's own spelling and is kept.
  6. */
  7. export function makeCase(value: string): string {
  8. return value
  9. .split(/(\s+|-)/)
  10. .map((part) => {
  11. if (!part.trim() || part === '-') return part
  12. const upper = part.toUpperCase()
  13. const lower = part.toLowerCase()
  14. if (part !== upper && part !== lower) return part
  15. if (part.length <= 3 && part === upper) return upper
  16. return upper[0] + lower.slice(1)
  17. })
  18. .join('')
  19. }