Lvovich (Львович) - JS library to inflect people names, cities names in Russian

0 сторонних зависимостей, может работать как на сервере, так и в браузере.
Этот пакет для:
- склонения названий городов (работает для большинства составных названий: Санкт-Петербург, Ростов-на-Дону и пр.)
- определения пола по имени фамилии и отчеству
- склонения падежей русских имен, фамилий и отчеств
Может использоваться как в браузере, так и на сервере. Нет никаких зависимостей и работает в оффлайне. Самое то:
- для генерации красивых писем с mjml
- для генерации PDF c @react-pdf
- для генерации SEO-заголовков c головой на плечах
- чтоб по максимуму избавиться от Уважаемый(-ая), когда есть ФИО но нет пола
Минифицированный размер пакета 20KB, gzipped 6KB. Бедные, бедные иностранцы - им надо загрузить в голову 20 килобайт правил и уметь быстро ими пользоваться в разговорной речи. Ужос!
PS. Если вдруг вы ищете список всех городов и сел с гео-координатами России, Белоруси и Украины - их можно найти в формате csv на сайте https://maps.vlasenko.net/.

Cклонение названий городов
import { cityIn, cityFrom, cityTo } from 'lvovich';
cityIn(name: string, gender?: GenderStrT): string - в каком городе живете/находитесь? (предложный падеж)
cityIn('Санкт-Петербург');
cityFrom(name: string, gender?: GenderStrT): string - из какого города приехали? (родительный падеж)
cityFrom('Санкт-Петербург');
cityTo(name: string): string - в какой город направляетесь? (направительный или посылательный падеж :)
cityTo('Санкт-Петербург');
cityTo('Москва');
Определения пола по имени фамилии и отчеству
import { getGender, getFirstnameGender, getLastnameGender, getMiddlenameGender } from 'lvovich';
Методы определения пола возвращают тип GenderStrT:
male - мужской,
female - женский,
androgynous - может быть и мальчиком и девочкой
null - не удалось определить пол
getGender(fio: FioT): ?GenderStrT - передаете ФИО, получаете пол
Входящий аргумент fio являеется объектов со следующими необязательными полями:
type FioT = {
first?: ?string,
last?: ?string,
middle?: ?string,
}
getGender({ last: 'Друзь', first: 'Саша', middle: 'Петрович' });
getGender({ first: 'Саша' });
getGender({ first: 'Саша', middle: 'Петровна' });
getGender({ last: 'Абуова', first: 'Андрей' });
getFirstnameGender(str: string): ?GenderStrT - вернет пол для Имени
getFirstnameGender('Павел');
getFirstnameGender('Анна');
getFirstnameGender('Саша');
getFirstnameGender('аааа');
getLastnameGender(str: string): ?GenderStrT - вернет пол для Фамилии
getLastnameGender('Градский');
getLastnameGender('Таптыгина');
getLastnameGender('Борейко');
getLastnameGender('аааа');
getMiddlenameGender(str: string): ?GenderStrT - вернет пол для Отчества
getMiddlenameGender('Павлович');
getMiddlenameGender('Петрова');
getMiddlenameGender('иваново');
getMiddlenameGender('аааа');
Cклонения падежей русских имен, фамилий и отчеств
import { incline, inclineFirstname, inclineLastname, inclineMiddlename } from 'lvovich';
Падежи (тип DeclentionStrT):
nominative - именительный (кто? что?)
genitive - родительный (кого? чего?)
dative - дательный (кому? чему?)
accusative - винительный (кого? что?)
instrumental - творительный (кем? чем?)
prepositional - предложный (о ком? о чем?)
incline(person: LvovichPersonT, declension?: DeclentionStrT): LvovichPersonT - просклонять по падежам
Если не указан declension, то будет использован винительный падеж.
incline({ first: 'Саша', last: 'Иванов' }, 'dative');
incline({ first: 'Паша' }, 'instrumental');
Тип LvovichPersonT для incline(person: LvovichPersonT) является объектом с необязательными полями:
{
first?: ?string,
last?: ?string,
middle?: ?string,
gender?: ?GenderStrT,
}
inclineFirstname(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string - просклонять Имя по падежам
Если пол gender не указан, то будет запущено автоопределение, если не указано склонение declension то будет применен винительный падеж.
inclineFirstname('Павел', 'genitive');
inclineFirstname('Женя', 'instrumental');
inclineFirstname('Женя', 'instrumental', 'male');
inclineFirstname('Женя', 'instrumental', 'female');
inclineLastname(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string - просклонять Фамилию по падежам
inclineLastname('Иванова', 'genitive');
inclineLastname('Петросян', 'instrumental');
inclineLastname('Петросян', 'instrumental', 'male');
inclineMiddlename(str: string, declension?: DeclentionStrT, gender?: GenderStrT): string - просклонять Отчество по падежам
inclineMiddlename('Львович', 'genitive');
Установка
Через npm:
npm install lvovich
Или в браузере:
<script src="https://cdn.jsdelivr.net/npm/lvovich/dist/lvovich.min.js"></script>
<script>
var city = 'Москва';
document.writeln('Найдено в ' + lvovich.cityIn(city) + '<br/>');
document.writeln('Из ' + lvovich.cityFrom(city) + '<br/>');
document.writeln('Еду в ' + lvovich.cityTo(city) + '<br/>');
</script>
Разработчику
Сборка новой версии пакета происходит автоматически через semantic-release и Travis. Ваши изменения я могу опубликовать хоть с телефона.
От вас просто необходимо склонировать репозиторий, внести изменения в код и открыть Pull Request.
Клонирование репозитория и установка модулей:
git clone https://github.com/nodkz/lvovich.git
cd lvovich
yarn install
Тесты находятся в директории src/__tests__. Запуск тестов:
yarn test
Лицензия
MIT
В основу этого пакета лег код и правила из petrovich-js. Код был переписан и оптимизирован, часть правил была расширена. API полностью был изменен, и стал использовать camelCase.