shevchenko
Version:
JavaScript library for declension of Ukrainian anthroponyms
193 lines (189 loc) • 6.21 kB
JavaScript
/**
* @file JavaScript library for declension of Ukrainian anthroponyms
* @module shevchenko
* @version 3.2.2
* @author Oleksandr Tolochko <shevchenko-js@tooleks.com>
* @license MIT
* @copyright 2017-2026 Oleksandr Tolochko <shevchenko-js@tooleks.com>
* @see {@link git+https://github.com/tooleks/shevchenko-js.git}
*/
;
var bootstrap = require('./anthroponym-declension/bootstrap.js');
var extension = require('./extension.js');
var detectGender$1 = require('./gender-detection/detect-gender.js');
var inputValidation = require('./input-validation.js');
require('./language/alphabet.js');
var wordClass = require('./language/word-class.js');
var grammaticalCase = require('./language/grammatical-case.js');
var grammaticalGender = require('./language/grammatical-gender.js');
require('./word-declension/declension-types.js');
/**
* Inflects an anthroponym in the given grammatical case.
*
* @throws {InputValidationError} Input validation error.
*/
async function inGrammaticalCase(grammaticalCase, input) {
const validInput = inputValidation.validateDeclensionInput(input);
const output = await bootstrap.anthroponymInflector.inflect(validInput, validInput.gender, grammaticalCase);
const afterOutput = await extension.afterInflect(grammaticalCase, validInput);
return Object.assign(Object.assign({}, output), afterOutput);
}
/**
* Inflects an anthroponym in nominative grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inNominative({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inNominative(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.NOMINATIVE, input);
}
/**
* Inflects an anthroponym in genitive grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inGenitive({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inGenitive(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.GENITIVE, input);
}
/**
* Inflects an anthroponym in dative grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inDative({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inDative(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.DATIVE, input);
}
/**
* Inflects an anthroponym in accusative grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inAccusative({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inAccusative(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.ACCUSATIVE, input);
}
/**
* Inflects an anthroponym in ablative grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inAblative({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inAblative(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.ABLATIVE, input);
}
/**
* Inflects an anthroponym in locative grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inLocative({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inLocative(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.LOCATIVE, input);
}
/**
* Inflects an anthroponym in vocative grammatical case.
*
* @example
* ```ts
* const anthroponym = await shevchenko.inVocative({
* gender: shevchenko.GrammaticalGender.MASCULINE,
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function inVocative(input) {
return inGrammaticalCase(grammaticalCase.GrammaticalCase.VOCATIVE, input);
}
/**
* Returns the grammatical gender of an anthroponym.
* Returns null if the grammatical gender cannot be detected.
*
* @example
* ```ts
* const gender = await shevchenko.detectGender({
* givenName: 'Тарас',
* patronymicName: 'Григорович',
* familyName: 'Шевченко',
* });
* ```
* @throws {InputValidationError} Input validation error.
*/
async function detectGender(input) {
const validInput = inputValidation.validateGenderDetectionInput(input);
return detectGender$1.detectGender(validInput);
}
exports.registerExtension = extension.registerExtension;
exports.InputValidationError = inputValidation.InputValidationError;
Object.defineProperty(exports, "WordClass", {
enumerable: true,
get: function () { return wordClass.WordClass; }
});
Object.defineProperty(exports, "GrammaticalCase", {
enumerable: true,
get: function () { return grammaticalCase.GrammaticalCase; }
});
Object.defineProperty(exports, "GrammaticalGender", {
enumerable: true,
get: function () { return grammaticalGender.GrammaticalGender; }
});
exports.detectGender = detectGender;
exports.inAblative = inAblative;
exports.inAccusative = inAccusative;
exports.inDative = inDative;
exports.inGenitive = inGenitive;
exports.inLocative = inLocative;
exports.inNominative = inNominative;
exports.inVocative = inVocative;