{"version":3,"file":"index.mjs","names":["characterSubstitutionMap: Record<string, string>"],"sources":["../src/substitutions.ts","../src/pseudo-localize.ts"],"sourcesContent":["export const characterSubstitutionMap: Record<string, string> = {\n  // A-Z\n  A: 'Ậ',\n  B: 'ẞ',\n  C: 'Ç',\n  D: 'Ḋ',\n  E: 'Ë',\n  F: 'Ƒ',\n  G: 'Ǧ',\n  H: 'Ḩ',\n  I: 'Ï',\n  J: 'Ĵ',\n  K: 'Ḱ',\n  L: 'Ł',\n  M: 'Ṃ',\n  N: 'Ñ',\n  O: 'Ö',\n  P: 'Ƥ',\n  Q: 'Q̇',\n  R: 'Ř',\n  S: 'Š',\n  T: 'Ṯ',\n  U: 'Ǚ',\n  V: 'Ṽ',\n  W: 'Ŵ',\n  X: 'X̂',\n  Y: 'Ý',\n  Z: 'Ƶ',\n  // a-z\n  a: 'ă',\n  b: 'ß',\n  c: 'ç',\n  d: 'ƌ',\n  e: 'ẽ',\n  f: 'ƒ',\n  g: 'ģ',\n  h: 'ḩ',\n  i: 'ì',\n  j: 'ĵ',\n  k: 'ķ',\n  l: 'ƚ',\n  m: 'm̂',\n  n: 'กี้',\n  o: 'ö',\n  p: 'ƥ',\n  q: 'q̇',\n  r: 'ř',\n  s: 'š',\n  t: 'ṯ',\n  u: 'ǚ',\n  v: 'ṽ',\n  w: 'ŵ',\n  x: 'ꭕ',\n  y: 'ý',\n  z: 'ƶ',\n};\n","import { characterSubstitutionMap } from './substitutions';\n\n// Extend strings by 40%\nconst extensionRatio = 1.4;\n\n// Having 'y' as a vowel accounts for words that don't have any actual vowels\nconst vowels = ['a', 'e', 'i', 'o', 'u', 'y'];\n\nexport const pseudoLocalize = (str: string): string =>\n  substituteCharacters(extendVowels(str));\n\nexport const padString = (str: string): string => `[${str}]`;\n\nexport const extendVowels = (str: string): string => {\n  const stringLength = [...str.normalize()].length;\n\n  const numberOfVowels = [...str.normalize('NFKD')].filter((char) =>\n    vowels.includes(char),\n  ).length;\n\n  const targetLength = stringLength * extensionRatio;\n  const lengthDifference = targetLength - stringLength;\n  const vowelExtensionAmount = Math.ceil(lengthDifference / numberOfVowels);\n\n  return [...str]\n    .map((char) => {\n      if (vowels.includes(char)) {\n        return char.repeat(vowelExtensionAmount + 1);\n      }\n      return char;\n    })\n    .join('');\n};\n\nconst isAlpha = (str: string) => {\n  const characterCode = str.charCodeAt(0);\n\n  if (\n    !(characterCode > 64 && characterCode < 91) && // upper alpha (A-Z)\n    !(characterCode > 96 && characterCode < 123) // lower alpha (a-z)\n  ) {\n    return false;\n  }\n\n  return true;\n};\n\nexport const substituteCharacters = (str: string): string =>\n  [...str.normalize()]\n    .map((char) => {\n      const isAlphaCharacter = isAlpha(char);\n\n      if (isAlphaCharacter) {\n        return characterSubstitutionMap[char];\n      }\n\n      return char;\n    })\n    .join('');\n\nexport const generator = {\n  transformElement: pseudoLocalize,\n  transformMessage: padString,\n};\n"],"mappings":";AAAA,MAAaA,2BAAmD;CAE9D,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CAEH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;;;;ACpDD,MAAM,iBAAiB;AAGvB,MAAM,SAAS;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;CAAI;AAE7C,MAAa,kBAAkB,QAC7B,qBAAqB,aAAa,IAAI,CAAC;AAEzC,MAAa,aAAa,QAAwB,IAAI,IAAI;AAE1D,MAAa,gBAAgB,QAAwB;CACnD,MAAM,eAAe,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;CAE1C,MAAM,iBAAiB,CAAC,GAAG,IAAI,UAAU,OAAO,CAAC,CAAC,QAAQ,SACxD,OAAO,SAAS,KAAK,CACtB,CAAC;CAGF,MAAM,mBADe,eAAe,iBACI;CACxC,MAAM,uBAAuB,KAAK,KAAK,mBAAmB,eAAe;AAEzE,QAAO,CAAC,GAAG,IAAI,CACZ,KAAK,SAAS;AACb,MAAI,OAAO,SAAS,KAAK,CACvB,QAAO,KAAK,OAAO,uBAAuB,EAAE;AAE9C,SAAO;GACP,CACD,KAAK,GAAG;;AAGb,MAAM,WAAW,QAAgB;CAC/B,MAAM,gBAAgB,IAAI,WAAW,EAAE;AAEvC,KACE,EAAE,gBAAgB,MAAM,gBAAgB,OACxC,EAAE,gBAAgB,MAAM,gBAAgB,KAExC,QAAO;AAGT,QAAO;;AAGT,MAAa,wBAAwB,QACnC,CAAC,GAAG,IAAI,WAAW,CAAC,CACjB,KAAK,SAAS;AAGb,KAFyB,QAAQ,KAAK,CAGpC,QAAO,yBAAyB;AAGlC,QAAO;EACP,CACD,KAAK,GAAG;AAEb,MAAa,YAAY;CACvB,kBAAkB;CAClB,kBAAkB;CACnB"}