{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["/** @public */\nexport type Rule = RegExp | string\ntype CachedRule = [RegExp, string]\ntype IrregularMap = Map<string, string>\n\n// Rule storage - pluralize and singularize need to be run sequentially,\n// while other rules can be optimized using an object for instant lookups.\nconst pluralRules: CachedRule[] = []\nconst singularRules: CachedRule[] = []\nconst uncountables = new Set<string>()\nconst irregularPlurals: IrregularMap = new Map()\nconst irregularSingles: IrregularMap = new Map()\n\n/**\n * Sanitize a pluralization rule to a usable regular expression.\n */\nconst sanitizeRule = (rule: Rule): RegExp =>\n  typeof rule === 'string' ? new RegExp(`^${rule}$`, 'i') : rule\n\n/**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n */\nconst restoreCase = (word: string, token: string | undefined): string => {\n  // Edge case\n  if (typeof token !== 'string') return word\n  // Tokens are an exact match.\n  if (word === token) return token\n\n  // Lower cased words. E.g. \"hello\".\n  if (word === word.toLowerCase()) return token.toLowerCase()\n\n  // Upper cased words. E.g. \"WHISKY\".\n  if (word === word.toUpperCase()) return token.toUpperCase()\n\n  // Title cased words. E.g. \"Title\".\n  if (word[0] === word[0].toUpperCase()) {\n    return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase()\n  }\n\n  // Lower cased words. E.g. \"test\".\n  return token.toLowerCase()\n}\n\n/**\n * Sanitize a word by passing in the word and sanitization rules.\n */\nconst sanitizeWord = (\n  token: string,\n  word: string,\n  rules: CachedRule[]\n): string => {\n  // Empty string or doesn't need fixing.\n  if (!token.length || uncountables.has(token)) {\n    return word\n  }\n\n  // Iterate over the sanitization rules and use the first one to match.\n  let { length: len } = rules\n  while (len--) {\n    const rule = rules[len]\n    if (rule[0].test(word)) {\n      // Replace a word using a rule.\n      return word.replace(rule[0], (...args) => {\n        const [match, index] = args\n        // Interpolate a regexp string.\n        const result = rule[1].replace(\n          /\\$(\\d{1,2})/g,\n          (_, index) => args[index] || ''\n        )\n\n        if (match === '') {\n          return restoreCase(word[index - 1], result)\n        }\n\n        return restoreCase(match, result)\n      })\n    }\n  }\n\n  return word\n}\n\nconst compute = (\n  word: string,\n  replaceMap: IrregularMap,\n  keepMap: IrregularMap,\n  rules: CachedRule[]\n): string => {\n  // Get the correct token and case restoration functions.\n  const token = word.toLowerCase()\n\n  // Check against the keep object map.\n  if (keepMap.has(token)) {\n    return restoreCase(word, token)\n  }\n\n  // Check against the replacement map for a direct word replacement.\n  if (replaceMap.has(token)) {\n    return restoreCase(word, replaceMap.get(token))\n  }\n\n  // Run all the rules against the word.\n  return sanitizeWord(token, word, rules)\n}\n\n/**\n * Check if a word is part of the map.\n */\nconst mapHas = (\n  word: string,\n  replaceMap: IrregularMap,\n  keepMap: IrregularMap,\n  rules: CachedRule[]\n): boolean => {\n  const token = word.toLowerCase()\n\n  if (keepMap.has(token)) return true\n  if (replaceMap.has(token)) return false\n\n  return sanitizeWord(token, token, rules) === token\n}\n\n/**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param word\n * @param count\n * @param inclusive\n * @public\n */\nconst pluralize = (\n  word: string,\n  count?: number,\n  inclusive?: boolean\n): string => {\n  const pluralized =\n    count === 1 ? pluralize.singular(word) : pluralize.plural(word)\n  if (inclusive) return `${count} ${pluralized}`\n  return pluralized\n}\n\n/**\n * Pluralize a word based.\n *\n * @param word\n */\npluralize.plural = (word: string): string =>\n  compute(word, irregularSingles, irregularPlurals, pluralRules)\n\n/**\n * Singularize a word based.\n *\n * @param word\n */\npluralize.singular = (word: string): string =>\n  compute(word, irregularPlurals, irregularSingles, singularRules)\n\n/**\n * Add a pluralization rule to the collection.\n *\n * @param rule\n * @param replacement\n */\npluralize.addPluralRule = (rule: Rule, replacement: string): void => {\n  pluralRules.push([sanitizeRule(rule), replacement])\n}\n\n/**\n * Add a singularization rule to the collection.\n *\n * @param rule\n * @param replacement\n */\npluralize.addSingularRule = (rule: Rule, replacement: string): void => {\n  singularRules.push([sanitizeRule(rule), replacement])\n}\n\n/**\n * Add an irregular word definition.\n *\n * @param single\n * @param plural\n */\npluralize.addIrregularRule = (single: string, plural: string): void => {\n  const _plural = plural.toLowerCase()\n  const _single = single.toLowerCase()\n\n  irregularSingles.set(_single, _plural)\n  irregularPlurals.set(_plural, _single)\n}\n\n/**\n * Add an uncountable word rule.\n *\n * @param rule\n */\npluralize.addUncountableRule = (rule: Rule): void => {\n  if (typeof rule === 'string') {\n    uncountables.add(rule.toLowerCase())\n    return\n  }\n\n  // Set singular and plural references for the word.\n  pluralize.addPluralRule(rule, '$0')\n  pluralize.addSingularRule(rule, '$0')\n}\n\n/**\n * Test if provided word is plural.\n *\n * @param word\n */\npluralize.isPlural = (word: string): boolean =>\n  mapHas(word, irregularSingles, irregularPlurals, pluralRules)\n\n/**\n * Test if provided word is singular.\n *\n * @param word\n */\npluralize.isSingular = (word: string): boolean =>\n  mapHas(word, irregularPlurals, irregularSingles, singularRules)\n\nconst defaultIrregulars: [string, string][] = [\n  // Pronouns.\n  ['I', 'we'],\n  ['me', 'us'],\n  ['he', 'they'],\n  ['she', 'they'],\n  ['them', 'them'],\n  ['myself', 'ourselves'],\n  ['yourself', 'yourselves'],\n  ['itself', 'themselves'],\n  ['herself', 'themselves'],\n  ['himself', 'themselves'],\n  ['themself', 'themselves'],\n  ['is', 'are'],\n  ['was', 'were'],\n  ['has', 'have'],\n  ['this', 'these'],\n  ['that', 'those'],\n  ['my', 'our'],\n  ['its', 'their'],\n  ['his', 'their'],\n  ['her', 'their'],\n  // Words ending in with a consonant and `o`.\n  ['echo', 'echoes'],\n  ['dingo', 'dingoes'],\n  ['volcano', 'volcanoes'],\n  ['tornado', 'tornadoes'],\n  ['torpedo', 'torpedoes'],\n  // Ends with `us`.\n  ['genus', 'genera'],\n  ['viscus', 'viscera'],\n  // Ends with `ma`.\n  ['stigma', 'stigmata'],\n  ['stoma', 'stomata'],\n  ['dogma', 'dogmata'],\n  ['lemma', 'lemmata'],\n  ['schema', 'schemata'],\n  ['anathema', 'anathemata'],\n  // Other irregular rules.\n  ['ox', 'oxen'],\n  ['axe', 'axes'],\n  ['die', 'dice'],\n  ['yes', 'yeses'],\n  ['foot', 'feet'],\n  ['eave', 'eaves'],\n  ['goose', 'geese'],\n  ['tooth', 'teeth'],\n  ['quiz', 'quizzes'],\n  ['human', 'humans'],\n  ['proof', 'proofs'],\n  ['carve', 'carves'],\n  ['valve', 'valves'],\n  ['looey', 'looies'],\n  ['thief', 'thieves'],\n  ['groove', 'grooves'],\n  ['pickaxe', 'pickaxes'],\n  ['passerby', 'passersby'],\n  ['canvas', 'canvases'],\n]\nconst defaultPlurals: [Rule, string][] = [\n  [/s?$/i, 's'],\n  [/[^\\u0000-\\u007F]$/i, '$0'],\n  [/([^aeiou]ese)$/i, '$1'],\n  [/(ax|test)is$/i, '$1es'],\n  [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n  [/(e[mn]u)s?$/i, '$1s'],\n  [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n  [\n    /(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,\n    '$1i',\n  ],\n  [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n  [/(seraph|cherub)(?:im)?$/i, '$1im'],\n  [/(her|at|gr)o$/i, '$1oes'],\n  [\n    /(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,\n    '$1a',\n  ],\n  [\n    /(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,\n    '$1a',\n  ],\n  [/sis$/i, 'ses'],\n  [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n  [/([^aeiouy]|qu)y$/i, '$1ies'],\n  [/([^ch][ieo][ln])ey$/i, '$1ies'],\n  [/(x|ch|ss|sh|zz)$/i, '$1es'],\n  [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n  [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n  [/(pe)(?:rson|ople)$/i, '$1ople'],\n  [/(child)(?:ren)?$/i, '$1ren'],\n  [/eaux$/i, '$0'],\n  [/m[ae]n$/i, 'men'],\n  ['thou', 'you'],\n]\nconst defaultSingles: [Rule, string][] = [\n  [/s$/i, ''],\n  [/(ss)$/i, '$1'],\n  [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n  [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n  [/ies$/i, 'y'],\n  [/(dg|ss|ois|lk|ok|wn|mb|th|ch|ec|oal|is|ck|ix|sser|ts|wb)ies$/i, '$1ie'],\n  [\n    /\\b(l|(?:neck|cross|hog|aun)?t|coll|faer|food|gen|goon|group|hipp|junk|vegg|(?:pork)?p|charl|calor|cut)ies$/i,\n    '$1ie',\n  ],\n  [/\\b(mon|smil)ies$/i, '$1ey'],\n  [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n  [/(seraph|cherub)im$/i, '$1'],\n  [\n    /(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,\n    '$1',\n  ],\n  [\n    /(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,\n    '$1sis',\n  ],\n  [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n  [/(test)(?:is|es)$/i, '$1is'],\n  [\n    /(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,\n    '$1us',\n  ],\n  [\n    /(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,\n    '$1um',\n  ],\n  [\n    /(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,\n    '$1on',\n  ],\n  [/(alumn|alg|vertebr)ae$/i, '$1a'],\n  [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n  [/(matr|append)ices$/i, '$1ix'],\n  [/(pe)(rson|ople)$/i, '$1rson'],\n  [/(child)ren$/i, '$1'],\n  [/(eau)x?$/i, '$1'],\n  [/men$/i, 'man'],\n]\nconst defaultUncountables: Rule[] = [\n  // Singular words with no plurals.\n  'adulthood',\n  'advice',\n  'agenda',\n  'aid',\n  'aircraft',\n  'alcohol',\n  'ammo',\n  'analytics',\n  'anime',\n  'athletics',\n  'audio',\n  'bison',\n  'blood',\n  'bream',\n  'buffalo',\n  'butter',\n  'carp',\n  'cash',\n  'chassis',\n  'chess',\n  'clothing',\n  'cod',\n  'commerce',\n  'cooperation',\n  'corps',\n  'debris',\n  'diabetes',\n  'digestion',\n  'elk',\n  'energy',\n  'equipment',\n  'excretion',\n  'expertise',\n  'firmware',\n  'flounder',\n  'fun',\n  'gallows',\n  'garbage',\n  'graffiti',\n  'hardware',\n  'headquarters',\n  'health',\n  'herpes',\n  'highjinks',\n  'homework',\n  'housework',\n  'information',\n  'jeans',\n  'justice',\n  'kudos',\n  'labour',\n  'literature',\n  'machinery',\n  'mackerel',\n  'mail',\n  'media',\n  'mews',\n  'moose',\n  'music',\n  'mud',\n  'manga',\n  'news',\n  'only',\n  'personnel',\n  'pike',\n  'plankton',\n  'pliers',\n  'police',\n  'pollution',\n  'premises',\n  'rain',\n  'research',\n  'rice',\n  'salmon',\n  'scissors',\n  'series',\n  'sewage',\n  'shambles',\n  'shrimp',\n  'software',\n  'staff',\n  'swine',\n  'tennis',\n  'traffic',\n  'transportation',\n  'trout',\n  'tuna',\n  'wealth',\n  'welfare',\n  'whiting',\n  'wildebeest',\n  'wildlife',\n  'you',\n  /pok[eé]mon$/i,\n  // Regexes.\n  /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n  /deer$/i, // \"deer\", \"reindeer\"\n  /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n  /measles$/i,\n  /o[iu]s$/i, // \"carnivorous\"\n  /pox$/i, // \"chickpox\", \"smallpox\"\n  /sheep$/i,\n]\n// Now lets add all the defaults\nfor (const [single, plural] of defaultIrregulars) {\n  pluralize.addIrregularRule(single, plural)\n}\nfor (const [search, replacement] of defaultPlurals) {\n  pluralize.addPluralRule(search, replacement)\n}\nfor (const [search, replacement] of defaultSingles) {\n  pluralize.addSingularRule(search, replacement)\n}\nfor (const search of defaultUncountables) {\n  pluralize.addUncountableRule(search)\n}\n\n// D O N E, let's export! 😗\nexport default pluralize\n"],"names":["pluralRules","singularRules","uncountables","Set","irregularPlurals","Map","irregularSingles","sanitizeRule","rule","RegExp","restoreCase","word","token","toLowerCase","toUpperCase","charAt","substr","sanitizeWord","rules","length","has","len","test","replace","args","match","index","result","_","compute","replaceMap","keepMap","get","mapHas","pluralize","count","inclusive","pluralized","singular","plural","addPluralRule","replacement","push","addSingularRule","addIrregularRule","single","_plural","_single","set","addUncountableRule","add","isPlural","isSingular","defaultIrregulars","defaultPlurals","defaultSingles","defaultUncountables","search"],"mappings":"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"}