propername
v0.1.0
Published
TypeScript library for sanitizing and proper casing of human names in Latin script — zero dependencies, dual ESM/CJS, MIT licensed
Maintainers
Readme
propername
A modern, TypeScript-first npm package for sanitizing and proper casing of human names written in Latin script. Zero runtime dependencies, dual ESM + CJS output, MIT licensed.
A drop-in spiritual replacement for the abandoned namecase package.
Installation
npm install propernameUsage
import { toNameCase } from 'propername';
toNameCase('john smith'); // → 'John Smith'
toNameCase('JOHN SMITH'); // → 'John Smith'
toNameCase('ludwig van beethoven'); // → 'Ludwig van Beethoven'
toNameCase('mcdonald'); // → 'McDonald'
toNameCase('macgregor'); // → 'MacGregor'
toNameCase("o'brien"); // → "O'Brien"
toNameCase('marie-anne van der berg'); // → 'Marie-Anne van der Berg'
toNameCase(' john smith '); // → 'John Smith'
toNameCase(' john smith ', false); // → ' John Smith 'API
toNameCase(name: string, trim?: boolean): string
Converts a human name string to proper name casing.
- Splits on whitespace, hyphens (
-), and apostrophe variants (','U+2019,ʼU+02BC) - Capitalizes each word, except particles which stay lowercase unless they appear at the start of the string
- Applies
Mc/Macprefix capitalization rules - When
trimistrue(default), leading/trailing whitespace is removed and internal runs of whitespace are collapsed to a single space before processing
Supported conventions
Word boundaries
The following characters are treated as word boundaries (the segment after each is capitalized):
- Whitespace
- Hyphens:
goodfellow-smith→Goodfellow-Smith - Apostrophes (
',',ʼ):o'connor→O'Connor
Prefixes
| Prefix | Example input | Output |
|--------|---------------|------------|
| Mc | mcdonald | McDonald |
| Mac | macgregor | MacGregor |
Lowercase particles
Particles are kept lowercase unless they appear as the first word of the string.
| Culture | Particles |
|---------|-----------|
| Dutch | van, de, den, der, ten, ter |
| German | von, zu |
| French / Italian / Spanish / Portuguese | de, di, da, del, della, degli, dei, las, los, le, la, l', d', dos, das, e |
| Welsh | ap, ab, ferch, verch |
| Arabic (romanized) | al, el, bin, bint, ibn, abu |
| Scottish | of |
Out of scope (v1)
- Non-Latin scripts (Arabic, Chinese, Japanese, Korean, Cyrillic, etc.)
- Full name parsing (splitting into first / last / middle)
- Prefix/suffix handling (Mr., Dr., PhD, etc.)
