import type { Nullable } from './type';
/** iterates keys in `schema` and creates an object with values at null */
export declare function setNull<Schema extends Object>(schema: Schema): Nullable<Schema>;
export declare function recursiveAssign(obj: any, paths: (string | number)[], value: any): void;
export declare function recursivePush(obj: any, paths: (string | number)[], value: any): void;
export declare function recursivePull(obj: any, paths: (string | number)[], index: number): void;
export declare function recursiveGet(obj: any, paths: (string | number)[]): any;
export declare function recursiveSet(obj: any, paths: (string | number)[], value: any): void;
export declare function recursiveDelete(obj: any, paths: (string | number)[]): void;
export declare function clone<T>(value: T, exceptKey?: string[]): T;
export declare function walkObject<T>(fn: (value: T, key: string) => void, obj: {
    [key: string]: T;
}): void;
export declare function arrayToObject<T extends {
    [key: string]: any;
}, K extends keyof T>(array: T[], idKey?: K): {
    [key: string]: T;
};
export declare function objectToArray<T>(obj: {
    [key: string]: T;
}, idKey?: string): (T & {
    _id: string;
})[];
export declare function circularReplacer(): (key: string, value: any) => any;
export declare function group<T extends {
    [key: string]: any;
}, K extends keyof T>(list: T[], key: ((obj: T) => string) | K): {
    [key: string]: T[];
};
export declare function pluck<T extends {
    [key: string]: any;
}, R>(items: T[], fn: (obj: T) => R): R[];
/**
 * Sort array if needed, order matters
 */
export declare function isDeepEql(a: any, b: any): boolean;
/**
 * Sets a value at a nested path in an object using dot notation.
 * @param obj - The object to modify
 * @param path - The dot-separated path (e.g., 'a.b.c')
 * @param value - The value to set at the path
 */
export declare function setByPath(obj: Record<string, any>, path: string, value: any): void;
/**
 * Deletes a value at a dot-separated path in an object.
 * For array elements, removes the element at the specified index.
 * @param obj - The object to modify
 * @param path - The dot-separated path (e.g., 'a.b.c' or 'items.0')
 */
export declare function deleteByPath(obj: Record<string, any>, path: string): void;
/**
 * Adds/pushes a value to an array at a dot-separated path in an object.
 * @param obj - The object to modify
 * @param path - The dot-separated path to the array (e.g., 'items')
 * @param value - The value to push to the array
 */
export declare function addByPath(obj: Record<string, any>, path: string, value: any): void;
