{"version":3,"file":"internal.cjs","names":["isGTUnindexedSelectElement","VAR_IDENTIFIER","isGTUnindexedSelectElement","TYPE","SKELETON_TYPE","VAR_IDENTIFIER","TYPE","traverseIcu","isGTIndexedSelectElement"],"sources":["../src/settings/plurals.ts","../src/locales/getPluralForm.ts","../src/utils/minify.ts","../src/derive/indexVars.ts","../src/derive/extractVars.ts","../src/derive/utils/printIcuAst.ts","../src/derive/condenseVars.ts"],"sourcesContent":["export const pluralForms = [\n  'singular',\n  'plural',\n  'dual',\n  'zero',\n  'one',\n  'two',\n  'few',\n  'many',\n  'other',\n] as const;\nexport type PluralType = (typeof pluralForms)[number];\nexport function isAcceptedPluralForm(form: string): form is PluralType {\n  return pluralForms.includes(form as (typeof pluralForms)[number]);\n}\n","import { getCachedPluralRules } from '@generaltranslation/format/internal';\n\nimport { pluralForms, PluralType } from '../settings/plurals';\nimport { libraryDefaultLocale } from '../settings/settings';\n\n/**\n * Given a number and a list of allowed plural forms, return the plural form that best fits the number.\n *\n * @param {number} n - The number to determine the plural form for.\n * @param {PluralType[]} forms - The allowed plural forms.\n * @returns {PluralType} The determined plural form, or an empty string if none fit.\n */\nexport function _getPluralForm(\n  n: number,\n  forms: readonly PluralType[] = pluralForms,\n  locales: string[] = [libraryDefaultLocale]\n): PluralType | '' {\n  const pluralRules = getCachedPluralRules(locales);\n  const provisionalBranchName = pluralRules.select(n);\n  // aliases\n  const absN = Math.abs(n);\n  // 0\n  if (absN === 0 && forms.includes('zero')) return 'zero'; // override\n  // 1\n  if (absN === 1) {\n    if (forms.includes('singular')) return 'singular'; // override\n    if (forms.includes('one')) return 'one'; // override\n  }\n  if (provisionalBranchName === 'one' && forms.includes('singular'))\n    return 'singular';\n  // 2\n  if (absN === 2) {\n    if (forms.includes('dual')) return 'dual'; // override\n    if (forms.includes('two')) return 'two'; // override\n  }\n  if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n  // fallbacks\n  if (forms.includes(provisionalBranchName)) return provisionalBranchName;\n  // two\n  if (provisionalBranchName === 'two' && forms.includes('dual')) return 'dual';\n  if (provisionalBranchName === 'two' && forms.includes('plural'))\n    return 'plural';\n  if (provisionalBranchName === 'two' && forms.includes('other'))\n    return 'other';\n  // few\n  if (provisionalBranchName === 'few' && forms.includes('plural'))\n    return 'plural';\n  if (provisionalBranchName === 'few' && forms.includes('other'))\n    return 'other';\n  // many\n  if (provisionalBranchName === 'many' && forms.includes('plural'))\n    return 'plural';\n  if (provisionalBranchName === 'many' && forms.includes('other'))\n    return 'other';\n  // other\n  if (provisionalBranchName === 'other' && forms.includes('plural'))\n    return 'plural';\n  return '';\n}\n","import { VariableTransformationSuffix, VariableType } from '../types';\n\nconst VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES = {\n  variable: 'v',\n  number: 'n',\n  datetime: 'd',\n  currency: 'c',\n  'relative-time': 'rt',\n} as const;\n\nexport function minifyVariableType(\n  variableType: VariableTransformationSuffix\n): VariableType {\n  return VARIABLE_TRANSFORMATION_SUFFIXES_TO_MINIFIED_NAMES[variableType];\n}\n","import { VAR_IDENTIFIER } from './utils/constants';\nimport { traverseIcu } from './utils/traverseIcu';\nimport { GTUnindexedSelectElement } from './utils/types';\nimport { isGTUnindexedSelectElement } from './utils/traverseHelpers';\nimport type { IcuMessage } from '@generaltranslation/format/types';\n\ntype Location = {\n  start: number;\n  end: number;\n  otherStart: number;\n  otherEnd: number;\n};\n\n/**\n * Given an ICU string adds identifiers to each _gt_ placeholder\n * indexVars('Hello {_gt_} {_gt_} World') => 'Hello {_gt_1_} {_gt_2_} World'\n */\nexport function indexVars(icuString: IcuMessage): string {\n  // Check if the string contains _gt_\n  if (!icuString.includes(VAR_IDENTIFIER)) {\n    return icuString;\n  }\n\n  // Record the location of the variable\n  const variableLocations: Location[] = [];\n  function visitor(child: GTUnindexedSelectElement): void {\n    variableLocations.push({\n      start: child.location?.start.offset ?? 0,\n      end: child.location?.end.offset ?? 0,\n      otherStart: child.options.other.location?.start.offset ?? 0,\n      otherEnd: child.options.other.location?.end.offset ?? 0,\n    });\n  }\n\n  // Find all variable identifiers.\n  traverseIcu({\n    icuString,\n    shouldVisit: isGTUnindexedSelectElement,\n    visitor,\n    options: { recurseIntoVisited: false, captureLocation: true },\n  });\n\n  // Index each variable and collapse the other option.\n  const result = [];\n  let current = 0;\n  for (let i = 0; i < variableLocations.length; i++) {\n    const { start, end, otherStart, otherEnd } = variableLocations[i];\n    // Before the variable\n    result.push(icuString.slice(current, start));\n    // Replace the variable with the new identifier (+1 is for the curly brace)\n    result.push(icuString.slice(start, start + VAR_IDENTIFIER.length + 1));\n\n    // Add the new identifier.\n    result.push(String(i + 1));\n    // After the variable\n    result.push(icuString.slice(start + VAR_IDENTIFIER.length + 1, otherStart));\n    // Before the other option\n    result.push('{}');\n    // The other option\n    result.push(icuString.slice(otherEnd, end));\n    current = end;\n  }\n  result.push(icuString.slice(current, icuString.length));\n\n  return result.join('');\n}\n","import { VAR_IDENTIFIER } from './utils/constants';\nimport { isGTUnindexedSelectElement } from './utils/traverseHelpers';\nimport { traverseIcu } from './utils/traverseIcu';\nimport { GTUnindexedSelectElement } from './utils/types';\n/**\n * Given an unindexed ICU string, extracts all the _gt_ variables and an indexed mapping of the variable to the values\n *\n * extractVars('Hello {_gt_, select, other {World}}') => { _gt_1: 'World' }\n *\n * @param {string} icuString - The ICU string to extract variables from.\n * @returns {Record<string, string>} A mapping of the variable to the value.\n */\nexport function extractVars(icuString: string): Record<string, string> {\n  // Check if the string contains _gt_\n  if (!icuString.includes(VAR_IDENTIFIER)) {\n    return {};\n  }\n\n  // Extract all the _gt_# variables\n  let index = 1;\n  const variables: Record<string, string> = {};\n  function visitor(child: GTUnindexedSelectElement): void {\n    variables[child.value + index] = child.options.other.value.length\n      ? child.options.other.value[0]?.value\n      : '';\n    index += 1;\n  }\n\n  traverseIcu({\n    icuString,\n    shouldVisit: isGTUnindexedSelectElement,\n    visitor,\n    options: { recurseIntoVisited: false },\n  });\n\n  return variables;\n}\n","// The code in this file is adapted from the FormatJS printer,\n// https://github.com/formatjs/formatjs/blob/main/packages/icu-messageformat-parser/printer.ts\n// (published as `@formatjs/icu-messageformat-parser/printer.js`)\n// And is therefore MIT licensed\n\n/*!\nMIT License\n\nCopyright (c) 2023 FormatJS\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\nimport { SKELETON_TYPE, TYPE } from '@formatjs/icu-messageformat-parser';\nimport type {\n  DateElement,\n  LiteralElement,\n  MessageFormatElement,\n  NumberElement,\n  NumberSkeleton,\n  PluralElement,\n  SelectElement,\n  TagElement,\n  TimeElement,\n} from '@formatjs/icu-messageformat-parser';\n\ntype SimpleFormatStyle = NonNullable<\n  (DateElement | TimeElement | NumberElement)['style']\n>;\n\n/**\n * Local copy of FormatJS `printAST` (see the license header above). The\n * published printer subpath is CommonJS-only, which browsers and Vite-based\n * dev servers (e.g. TanStack Start) cannot load from our ESM build, and the\n * package's ESM variant uses extensionless relative imports that fail Node\n * resolution.\n *\n * Output must stay byte-identical to FormatJS `printAST` because condensed\n * ICU strings feed into hashing.\n */\nexport function printIcuAst(ast: MessageFormatElement[]): string {\n  return doPrintAst(ast, false);\n}\n\nfunction doPrintAst(ast: MessageFormatElement[], isInPlural: boolean): string {\n  const printedNodes = ast.map((el, i) => {\n    switch (el.type) {\n      case TYPE.literal:\n        return printLiteralElement(\n          el,\n          isInPlural,\n          i === 0,\n          i === ast.length - 1\n        );\n      case TYPE.argument:\n        return `{${el.value}}`;\n      case TYPE.date:\n      case TYPE.time:\n      case TYPE.number:\n        return printSimpleFormatElement(el);\n      case TYPE.plural:\n        return printPluralElement(el);\n      case TYPE.select:\n        return printSelectElement(el);\n      case TYPE.pound:\n        return '#';\n      case TYPE.tag:\n        return printTagElement(el);\n    }\n  });\n  return printedNodes.join('');\n}\n\nfunction printTagElement(el: TagElement): string {\n  return `<${el.value}>${printIcuAst(el.children)}</${el.value}>`;\n}\n\nfunction printEscapedMessage(message: string): string {\n  return message.replace(/([{}](?:[\\s\\S]*[{}])?)/, \"'$1'\");\n}\n\nfunction printLiteralElement(\n  { value }: LiteralElement,\n  isInPlural: boolean,\n  isFirstEl: boolean,\n  isLastEl: boolean\n): string {\n  let escaped = value;\n  // If this literal starts with a ' and it's not the 1st node, the node\n  // before it is non-literal and the `'` needs to be re-escaped\n  if (!isFirstEl && escaped[0] === \"'\") {\n    escaped = `''${escaped.slice(1)}`;\n  }\n  // Same logic but for last el\n  if (!isLastEl && escaped[escaped.length - 1] === \"'\") {\n    escaped = `${escaped.slice(0, escaped.length - 1)}''`;\n  }\n  escaped = printEscapedMessage(escaped);\n  // Upstream escapes only the first `#` (String#replace with a string\n  // pattern); keep the quirk so output stays byte-identical\n  return isInPlural ? escaped.replace('#', \"'#'\") : escaped;\n}\n\nfunction printSimpleFormatElement(\n  el: DateElement | TimeElement | NumberElement\n): string {\n  return `{${el.value}, ${TYPE[el.type]}${\n    el.style ? `, ${printArgumentStyle(el.style)}` : ''\n  }}`;\n}\n\nfunction printNumberSkeletonToken(\n  token: NumberSkeleton['tokens'][number]\n): string {\n  const { stem, options } = token;\n  return options.length === 0\n    ? stem\n    : `${stem}${options.map((o) => `/${o}`).join('')}`;\n}\n\nfunction printArgumentStyle(style: SimpleFormatStyle): string {\n  if (typeof style === 'string') {\n    return printEscapedMessage(style);\n  } else if (style.type === SKELETON_TYPE.dateTime) {\n    return `::${style.pattern}`;\n  } else {\n    return `::${style.tokens.map(printNumberSkeletonToken).join(' ')}`;\n  }\n}\n\nfunction printSelectElement(el: SelectElement): string {\n  const msg = [\n    el.value,\n    'select',\n    Object.keys(el.options)\n      .map((id) => `${id}{${doPrintAst(el.options[id].value, false)}}`)\n      .join(' '),\n  ].join(',');\n  return `{${msg}}`;\n}\n\nfunction printPluralElement(el: PluralElement): string {\n  const type = el.pluralType === 'cardinal' ? 'plural' : 'selectordinal';\n  const msg = [\n    el.value,\n    type,\n    [\n      el.offset ? `offset:${el.offset}` : '',\n      ...Object.keys(el.options).map(\n        (id) => `${id}{${doPrintAst(el.options[id].value, true)}}`\n      ),\n    ]\n      .filter(Boolean)\n      .join(' '),\n  ].join(',');\n  return `{${msg}}`;\n}\n","import { TYPE } from '@formatjs/icu-messageformat-parser';\nimport type { ArgumentElement } from '@formatjs/icu-messageformat-parser/types.js';\nimport { printIcuAst } from './utils/printIcuAst';\nimport { traverseIcu } from './utils/traverseIcu';\nimport { VAR_IDENTIFIER } from './utils/constants';\nimport { GTIndexedSelectElement } from './utils/types';\nimport { isGTIndexedSelectElement } from './utils/traverseHelpers';\ninterface GTIndexedArgumentElement extends ArgumentElement {\n  value: `${typeof VAR_IDENTIFIER}${number}`;\n}\n\nconst CONTAINS_INDEXED_GT_REGEX = new RegExp(`${VAR_IDENTIFIER}\\\\d+`);\n\n/**\n * Given an indexed ICU string, condenses any select to an argument\n * Unindexed _gt_ source strings and indexed _gt_# translation strings\n * are mutually exclusive.\n * indexVars('Hello {_gt_1, select, other {World}}') => 'Hello {_gt_1}'\n * @param {string} icuString - The ICU string to condense.\n * @returns {string} The condensed ICU string.\n */\nexport function condenseVars(icuString: string): string {\n  // Check if the string contains an indexed _gt_ identifier.\n  if (!CONTAINS_INDEXED_GT_REGEX.test(icuString)) {\n    return icuString;\n  }\n\n  // Replace with argument\n  function visitor(child: GTIndexedSelectElement): void {\n    (child as unknown as GTIndexedArgumentElement).type = TYPE.argument;\n    Reflect.deleteProperty(child, 'options');\n  }\n\n  const ast = traverseIcu({\n    icuString,\n    shouldVisit: isGTIndexedSelectElement,\n    visitor,\n    options: { recurseIntoVisited: false },\n  });\n\n  // Serialize\n  return printIcuAst(ast);\n}\n"],"mappings":"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"}