Skip to content

vgavara/propername

Repository files navigation

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 propername

Usage

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/Mac prefix capitalization rules
  • When trim is true (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-smithGoodfellow-Smith
  • Apostrophes (', ', ʼ): o'connorO'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.)

License

MIT

About

TypeScript library for sanitizing and proper casing of human names in Latin script — zero dependencies, dual ESM/CJS, MIT licensed

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages