66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
export default () => {
|
|
return 'Hello Util'
|
|
}
|
|
interface ParsedName {
|
|
family?: string
|
|
given?: string[]
|
|
prefix?: string[]
|
|
suffix?: string[]
|
|
}
|
|
|
|
export function parseName(fullName?: string): ParsedName {
|
|
let prefix: string[] = []
|
|
let suffix: string[] = []
|
|
let given: string[] = []
|
|
let family: string | null = null
|
|
const result: ParsedName = {}
|
|
|
|
if (fullName === undefined) {
|
|
return result
|
|
}
|
|
|
|
const parts = fullName.trim().split(/\s+/)
|
|
|
|
// Cek awalan (prefix)
|
|
while (
|
|
parts.length > 0 &&
|
|
(parts[0].includes('.') || parts[0].includes(','))
|
|
) {
|
|
prefix.push(parts.shift()!)
|
|
}
|
|
|
|
// Cek akhiran (suffix)
|
|
while (parts.length > 0 && parts[parts.length - 1].includes('.')) {
|
|
suffix.push(parts.pop()!)
|
|
}
|
|
|
|
if (parts.length === 1) {
|
|
given.push(parts[0].toLowerCase().replace(/\b\w/g, (s) => s.toUpperCase()))
|
|
} else if (parts.length > 1) {
|
|
family = parts
|
|
.pop()!
|
|
.toLowerCase()
|
|
.replace(/\b\w/g, (s) => s.toUpperCase())
|
|
for (let i = 0; i < parts.length; i++) {
|
|
given.push(
|
|
parts[i].toLowerCase().replace(/\b\w/g, (s) => s.toUpperCase()),
|
|
)
|
|
}
|
|
}
|
|
|
|
if (family) {
|
|
result.family = family
|
|
}
|
|
if (given.length > 0) {
|
|
result.given = given
|
|
}
|
|
if (prefix.length > 0) {
|
|
result.prefix = prefix
|
|
}
|
|
if (suffix.length > 0) {
|
|
result.suffix = suffix.reverse()
|
|
}
|
|
|
|
return result
|
|
}
|