src/customer-name.tsTypeScript
@@ -0,0 +1,31 @@
1+
export interface CustomerName {2+
givenName?: string;3+
middleName?: string;4+
familyName?: string;5+
}6+
7+
function clean(part: string): string {8+
return part.trim();9+
}10+
11+
export function formatCustomerName(12+
name: CustomerName,13+
locale: string,14+
): string {15+
const givenFirst = [name.givenName, name.middleName, name.familyName];16+
const familyFirst = [name.familyName, name.givenName, name.middleName];17+
18+
const ordered = locale === "ja" ? familyFirst : givenFirst;19+
20+
return ordered21+
.filter((part): part is string => Boolean(part))22+
.map(clean)23+
.join(" ");24+
}25+
26+
export function formatCustomerInitials(name: CustomerName): string {27+
return [name.givenName, name.familyName]28+
.filter((part): part is string => Boolean(part))29+
.map((part) => part.trim().slice(0, 1).toUpperCase())30+
.join("");31+
}