Review customer name formatting

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 ordered
21+ .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+}