{
  "version": 3,
  "sources": ["../../../../../src/functions/math/average/averageif.ts"],
  "sourcesContent": [
    "import {\n  FormulaError,\n  type FunctionDefinition,\n  type FunctionEvaluationResult,\n} from \"../../../core/types.mjs\";\nimport { parseCriteria } from \"../../criteria-parser.mjs\";\nimport {\n  processMultiCriteriaValues,\n  validateSingleCriteriaArgs,\n} from \"../../criteria-utils.mjs\";\nimport { performAverage } from \"./average-utils.mjs\";\n\n/**\n * AVERAGEIF function - Calculates the average of cells in a range that meet a criteria\n * \n * Usage: AVERAGEIF(range, criteria, [average_range])\n * \n * range: The range of cells to evaluate against the criteria\n * criteria: The criteria to match against. Can be:\n *   - Exact value: \"Apple\", 42\n *   - Comparison: \">10\", \"<=5\", \"<>0\"\n *   - Wildcards: \"App*\", \"?ruit\"\n * average_range: Optional. The range to average. If omitted, uses the range parameter\n * \n * Examples:\n *   AVERAGEIF(A1:A10, \"Apple\") - averages cells in A1:A10 that contain \"Apple\"\n *   AVERAGEIF(B1:B10, \">10\") - averages cells in B1:B10 with values greater than 10\n *   AVERAGEIF(A1:A10, \"Apple\", B1:B10) - averages B1:B10 where A1:A10 contains \"Apple\"\n * \n * Note:\n * - Only numeric values are included in the average calculation\n * - Returns error if no values match the criteria\n */\nexport const AVERAGEIF: FunctionDefinition = {\n  name: \"AVERAGEIF\",\n  evaluate: function (node, context): FunctionEvaluationResult {\n    // Validate arguments\n    const argError = validateSingleCriteriaArgs(\"AVERAGEIF\", node.args.length, context);\n    if (argError) {\n      return argError;\n    }\n\n    // Evaluate criteria range (first argument)\n    const criteriaRangeResult = this.evaluateNode(node.args[0]!, context);\n    if (criteriaRangeResult.type === \"error\") {\n      return criteriaRangeResult;\n    }\n\n    // Evaluate criteria (second argument)\n    const criteriaResult = this.evaluateNode(node.args[1]!, context);\n    if (criteriaResult.type === \"error\") {\n      return criteriaResult;\n    }\n\n    if (criteriaResult.type !== \"value\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"AVERAGEIF criteria must be a single value\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    // Parse criteria\n    const parsedCriteria = parseCriteria(criteriaResult.result);\n    if (parsedCriteria.type === \"error\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: parsedCriteria.message,\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    // Determine average range (third argument if present, otherwise same as criteria range)\n    const averageRangeResult = node.args.length === 3 \n      ? this.evaluateNode(node.args[2]!, context)\n      : criteriaRangeResult;\n    \n    if (averageRangeResult.type === \"error\") {\n      return averageRangeResult;\n    }\n\n    // Use shared average utility for standard cases\n    const matchingValues = processMultiCriteriaValues(\n      this,\n      averageRangeResult,\n      [{ rangeResult: criteriaRangeResult, parsedCriteria }],\n      context,\n      \"col-major\"\n    );\n\n    if (matchingValues.type === \"error\" || matchingValues.type === \"awaiting-evaluation\") {\n      return matchingValues;\n    }\n\n    return performAverage(matchingValues.values, context);\n  },\n};\n"
  ],
  "mappings": ";AAAA;AAAA;AAAA;AAKA;AACA;AAAA;AAAA;AAAA;AAIA;AAuBO,IAAM,YAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,UAAU,QAAS,CAAC,MAAM,SAAmC;AAAA,IAE3D,MAAM,WAAW,2BAA2B,aAAa,KAAK,KAAK,QAAQ,OAAO;AAAA,IAClF,IAAI,UAAU;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,sBAAsB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IACpE,IAAI,oBAAoB,SAAS,SAAS;AAAA,MACxC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO;AAAA,IAC/D,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,aAAa;AAAA,QAClB,SAAS;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,iBAAiB,cAAc,eAAe,MAAM;AAAA,IAC1D,IAAI,eAAe,SAAS,SAAS;AAAA,MACnC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,KAAK,aAAa;AAAA,QAClB,SAAS,eAAe;AAAA,QACxB,YAAY,QAAQ;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,qBAAqB,KAAK,KAAK,WAAW,IAC5C,KAAK,aAAa,KAAK,KAAK,IAAK,OAAO,IACxC;AAAA,IAEJ,IAAI,mBAAmB,SAAS,SAAS;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IAGA,MAAM,iBAAiB,2BACrB,MACA,oBACA,CAAC,EAAE,aAAa,qBAAqB,eAAe,CAAC,GACrD,SACA,WACF;AAAA,IAEA,IAAI,eAAe,SAAS,WAAW,eAAe,SAAS,uBAAuB;AAAA,MACpF,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,eAAe,eAAe,QAAQ,OAAO;AAAA;AAExD;",
  "debugId": "7E2D1B02FB36B3A664756E2164756E21",
  "names": []
}