| 'use strict'; |
| const irregularPlurals = require('irregular-plurals'); |
| |
| module.exports = (word, plural, count) => { |
| if (typeof plural === 'number') { |
| count = plural; |
| } |
| |
| if (irregularPlurals.has(word.toLowerCase())) { |
| plural = irregularPlurals.get(word.toLowerCase()); |
| |
| const firstLetter = word.charAt(0); |
| const isFirstLetterUpperCase = firstLetter === firstLetter.toUpperCase(); |
| if (isFirstLetterUpperCase) { |
| plural = firstLetter.toUpperCase() + plural.slice(1); |
| } |
| |
| const isWholeWordUpperCase = word === word.toUpperCase(); |
| if (isWholeWordUpperCase) { |
| plural = plural.toUpperCase(); |
| } |
| } else if (typeof plural !== 'string') { |
| plural = (word.replace(/(?:s|x|z|ch|sh)$/i, '$&e').replace(/([^aeiou])y$/i, '$1ie') + 's') |
| .replace(/i?e?s$/i, match => { |
| const isTailLowerCase = word.slice(-1) === word.slice(-1).toLowerCase(); |
| return isTailLowerCase ? match.toLowerCase() : match.toUpperCase(); |
| }); |
| } |
| |
| return Math.abs(count) === 1 ? word : plural; |
| }; |