import { ComputeOptions } from "../../core/_internal";
import { Query } from "../../query";
import { Any, AnyObject } from "../../types";
import { WalkOptions } from "../../util/_internal";
export type SingleKeyRecord<K extends PropertyKey, V> = {
    [P in K]: Record<P, V>;
}[K];
export declare const DEFAULT_OPTIONS: ComputeOptions;
export declare const clone: (val: Any, opts: ComputeOptions) => Any;
export type PathNode = {
    selector: string;
    position?: string;
    next?: PathNode;
};
/**
 * Applies an update function to a value to produce a new value to modify an object in-place.
 * @param o The object or array to modify.
 * @param n The path node of the update selector.
 * @param q Map of positional identifiers to queries for filtering.
 * @param f The update function which accepts containver value and key.
 * @param opts The optional {@link WalkOptions} passed to the walk function.
 */
export declare const applyUpdate: (o: AnyObject, n: PathNode, q: Record<string, Query>, f: (_o: AnyObject, _k: string) => boolean, opts?: WalkOptions) => boolean;
export type Action<T> = (val: T, pathNode: PathNode, queries: Record<string, Query>) => boolean;
/**
 * Walks the expression and apply the given action for each key-value pair.
 *
 * @param expr The expression for the update operator.
 * @param arrayFilters Filter conditions passed to the operator.
 * @param options The options provided by the caller.
 * @param callback The action to apply for a given path and value.
 * @returns {Any[]<string>}
 */
export declare function walkExpression<T>(expr: AnyObject, arrayFilters: AnyObject[], options: ComputeOptions, callback: Action<T>): string[];
/**
 * Builds a map of parameters for update operations, where each parameter is associated
 * with its corresponding path node and query conditions. Conflicting selectors are detected.
 */
export declare function buildParams(exprList: AnyObject[], arrayFilters: AnyObject[], options: ComputeOptions): Record<string, {
    node: PathNode;
    queries: Record<string, Query>;
}>;
export type UpdateParams = ReturnType<typeof buildParams>;
