{
  "version": 3,
  "sources": ["../../../../../src/functions/math/max/max-utils.ts"],
  "sourcesContent": [
    "import {\n  FormulaError,\n  type FunctionEvaluationResult,\n  type SingleEvaluationResult,\n  type CellInfinity,\n} from \"../../../core/types.mjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.mjs\";\n\n/**\n * Result type for processInfinity in max functions\n */\nexport type ProcessInfinityResult<T> =\n  | { type: \"infinity\"; infinity: CellInfinity }\n  | { type: \"state\"; state: T };\n\n/**\n * Perform maximum calculation over an iterator of SingleEvaluationResults\n * Handles the common logic shared by MAX, MAXIF, MAXIFS functions\n *\n * @param results - Iterator of SingleEvaluationResults to find maximum from\n * @returns FunctionEvaluationResult with the maximum, infinity, or error\n */\nexport function performMaximum(\n  results: Iterable<SingleEvaluationResult>,\n  context: EvaluationContext\n): FunctionEvaluationResult {\n  let maxValue = -Infinity;\n  let hasValues = false;\n\n  for (const result of results) {\n    if (result.type === \"error\") {\n      // Propagate errors immediately\n      return result;\n    }\n\n    if (result.type === \"value\") {\n      if (result.result.type === \"number\") {\n        maxValue = Math.max(maxValue, result.result.value);\n        hasValues = true;\n      } else if (result.result.type === \"infinity\") {\n        if (result.result.sign === \"positive\") {\n          // Positive infinity is always the maximum - return immediately\n          return {\n            type: \"value\",\n            result: result.result,\n          };\n        }\n        // Negative infinity doesn't change the maximum\n      }\n      // Non-numeric values (strings, booleans) are ignored in maximum calculation\n    }\n  }\n\n  if (!hasValues) {\n    return {\n      type: \"error\",\n      err: FormulaError.VALUE,\n      message: \"No numeric values found\",\n      errAddress: context.dependencyNode,\n    };\n  }\n\n  return {\n    type: \"value\",\n    result: { type: \"number\", value: maxValue },\n  };\n}\n\n"
  ],
  "mappings": ";AAAA;AAAA;AAAA;AAsBO,SAAS,cAAc,CAC5B,SACA,SAC0B;AAAA,EAC1B,IAAI,WAAW;AAAA,EACf,IAAI,YAAY;AAAA,EAEhB,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,OAAO,SAAS,SAAS;AAAA,MAE3B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,SAAS,SAAS;AAAA,MAC3B,IAAI,OAAO,OAAO,SAAS,UAAU;AAAA,QACnC,WAAW,KAAK,IAAI,UAAU,OAAO,OAAO,KAAK;AAAA,QACjD,YAAY;AAAA,MACd,EAAO,SAAI,OAAO,OAAO,SAAS,YAAY;AAAA,QAC5C,IAAI,OAAO,OAAO,SAAS,YAAY;AAAA,UAErC,OAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ,OAAO;AAAA,UACjB;AAAA,QACF;AAAA,MAEF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,WAAW;AAAA,IACd,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,aAAa;AAAA,MAClB,SAAS;AAAA,MACT,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,MAAM,UAAU,OAAO,SAAS;AAAA,EAC5C;AAAA;",
  "debugId": "A096885C6F4C308964756E2164756E21",
  "names": []
}