import type { LookupOrder } from "../core/managers/range-eval-order-builder"; import { type CellInfinity, type ErrorEvaluationResult, type FunctionEvaluationResult, type SingleEvaluationResult } from "../core/types"; import type { EvaluationContext } from "../evaluator/evaluation-context"; import type { FormulaEvaluator } from "../evaluator/formula-evaluator"; import type { ASTNode, FunctionNode } from "../parser/ast"; import { type ParsedCriteria } from "./criteria-parser"; /** * Criteria pair for criteria-based functions */ export interface CriteriaPair { rangeResult: FunctionEvaluationResult; parsedCriteria: ParsedCriteria; } /** * Parse criteria pairs from function arguments * @param node - The function node * @param context - Evaluation context * @param evaluateNode - Node evaluation function * @param startIndex - Index to start parsing criteria pairs from (1 for IFS functions, 0 for COUNTIFS) * @returns Array of criteria pairs or error */ export declare function parseCriteriaPairs(this: FormulaEvaluator, node: FunctionNode, context: EvaluationContext, evaluateNode: (node: ASTNode, context: EvaluationContext) => FunctionEvaluationResult, startIndex?: number): CriteriaPair[] | ErrorEvaluationResult; /** * Check if any criteria involves empty/non-empty cell matching */ export declare function hasEmptyCriteria(criteriaPairs: CriteriaPair[]): boolean; /** * Returns matching values from ranges based on criteria * @param evaluator - The function evaluator context * @param valueRangeResult - The range of values to process * @param criteriaPairs - Array of criteria pairs to match against * @param context - Evaluation context * @returns Array of SingleEvaluationResult for each matching cell - includes both values and errors * Consuming functions decide whether to skip errors or propagate them */ export declare function processMultiCriteriaValues(evaluator: FormulaEvaluator, valueRangeResult: FunctionEvaluationResult, criteriaPairs: CriteriaPair[], context: EvaluationContext, lookupOrder: LookupOrder): { type: "values"; values: SingleEvaluationResult[]; } | ErrorEvaluationResult; /** * Validate multi-criteria function arguments (odd number, min 3) */ export declare function validateMultiCriteriaArgs(functionName: string, argCount: number, context: EvaluationContext): ErrorEvaluationResult | null; /** * Validate COUNTIFS function arguments (even number, min 2) */ export declare function validateCountifsArgs(argCount: number, context: EvaluationContext): ErrorEvaluationResult | null; /** * Validate single criteria function arguments (2 or 3) */ export declare function validateSingleCriteriaArgs(functionName: string, argCount: number, context: EvaluationContext): ErrorEvaluationResult | null; /** * Result type for processInfinity - either return infinity immediately or continue with updated state */ export type ProcessInfinityResult = { type: "infinity"; infinity: CellInfinity; } | { type: "state"; state: T; };