{"version":3,"sources":["../../../src/interpreter/getEnumeration.ts"],"sourcesContent":["import type {\n  EnterFormat,\n  EnumerationContentState,\n} from '../transpiler/enumeration/enumeration';\n\n/**\n * Find the matching condition for a quantity.\n *\n * Usage:\n *\n * ```ts\n * const key = findMatchingCondition({\n *  '<=-2.3': 'You have less than -2.3',\n *  '<1': 'You have less than one',\n *  '2': 'You have two',\n *  '>=3': 'You have three or more',\n * }, 2);\n * // '2'\n * ```\n *\n * The order of the keys will define the priority of the content.\n *\n * ```ts\n * const key = findMatchingCondition({\n *  '<4': 'You have less than four',\n *  '2': 'You have two',\n * }, 2);\n * // '<4'\n * ```\n *\n * If no keys match, the default key is '1'.\n */\nexport const findMatchingCondition = <Content>(\n  enumerationContent: EnumerationContentState<Content>,\n  quantity: number\n): EnterFormat => {\n  const numericKeys = Object.keys(enumerationContent);\n\n  for (const key of numericKeys) {\n    const isEqual =\n      (!key.startsWith('>') &&\n        !key.startsWith('<') &&\n        !key.startsWith('=') &&\n        parseFloat(key) === quantity) ||\n      (key.startsWith('=') && parseFloat(key.slice(1)) === quantity);\n    const isSuperior =\n      key.startsWith('>') && quantity > parseFloat(key.slice(1));\n    const isSuperiorOrEqual =\n      key.startsWith('>=') && quantity >= parseFloat(key.slice(2));\n    const isInferior =\n      key.startsWith('<') && quantity < parseFloat(key.slice(1));\n    const isInferiorOrEqual =\n      key.startsWith('<=') && quantity <= parseFloat(key.slice(2));\n\n    if (\n      isEqual ||\n      isSuperior ||\n      isSuperiorOrEqual ||\n      isInferior ||\n      isInferiorOrEqual\n    ) {\n      return key as EnterFormat;\n    }\n  }\n};\n\n/**\n * Allow to pick a content based on a quantity.\n *\n * Usage:\n *\n * ```ts\n * const content = getEnumeration({\n *  '<=-2.3': 'You have less than -2.3',\n *  '<1': 'You have less than one',\n *  '2': 'You have two',\n *  '>=3': 'You have three or more',\n * }, 2);\n * // 'You have two'\n * ```\n *\n * The order of the keys will define the priority of the content.\n *\n * ```ts\n * const content = getEnumeration({\n *  '<4': 'You have less than four',\n *  '2': 'You have two',\n * }, 2);\n * // 'You have less than four'\n * ```\n *\n */\nexport const getEnumeration = <Content>(\n  enumerationContent: EnumerationContentState<Content>,\n  quantity: number\n): Content => {\n  const key =\n    findMatchingCondition<Content>(enumerationContent, quantity) ?? 'fallback';\n\n  // Default or error handling if no keys match\n  return enumerationContent[key] as Content;\n};\n"],"mappings":"AAgCO,MAAM,wBAAwB,CACnC,oBACA,aACgB;AAChB,QAAM,cAAc,OAAO,KAAK,kBAAkB;AAElD,aAAW,OAAO,aAAa;AAC7B,UAAM,UACH,CAAC,IAAI,WAAW,GAAG,KAClB,CAAC,IAAI,WAAW,GAAG,KACnB,CAAC,IAAI,WAAW,GAAG,KACnB,WAAW,GAAG,MAAM,YACrB,IAAI,WAAW,GAAG,KAAK,WAAW,IAAI,MAAM,CAAC,CAAC,MAAM;AACvD,UAAM,aACJ,IAAI,WAAW,GAAG,KAAK,WAAW,WAAW,IAAI,MAAM,CAAC,CAAC;AAC3D,UAAM,oBACJ,IAAI,WAAW,IAAI,KAAK,YAAY,WAAW,IAAI,MAAM,CAAC,CAAC;AAC7D,UAAM,aACJ,IAAI,WAAW,GAAG,KAAK,WAAW,WAAW,IAAI,MAAM,CAAC,CAAC;AAC3D,UAAM,oBACJ,IAAI,WAAW,IAAI,KAAK,YAAY,WAAW,IAAI,MAAM,CAAC,CAAC;AAE7D,QACE,WACA,cACA,qBACA,cACA,mBACA;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AA4BO,MAAM,iBAAiB,CAC5B,oBACA,aACY;AACZ,QAAM,MACJ,sBAA+B,oBAAoB,QAAQ,KAAK;AAGlE,SAAO,mBAAmB,GAAG;AAC/B;","names":[]}