UNPKG

shevchenko

Version:

JavaScript library for declension of Ukrainian anthroponyms

193 lines (189 loc) 6.21 kB
/** * @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} */ 'use strict'; 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;