import { PromisifiedObject } from "./types";
export declare type LoadObjectDataOptions = {
    recursive?: boolean;
    failOnValueReject?: boolean;
};
/**
 * Iterate over object properties
 *
 * @static
 * @template O
 * @template T
 * @param {O} obj
 * @param {<K extends keyof O>(key: K, value: O[K]) => T} callback
 * @returns {T[]}
 */
export declare function iter<O extends object, T>(obj: O, callback: <K extends keyof O>(key: K, value: O[K]) => T): T[];
/**
 * Generate new object from input
 *
 * @static
 * @template T
 * @param {T} source
 * @returns {T}
 */
export declare function deepClone<T extends unknown[] | unknown>(source: T): T;
/**
 * Deep merges source into target object
 *
 * @static
 * @template T
 * @template S
 * @param {T} target
 * @param {S} source
 * @returns
 */
export declare function deepMerge<T extends object, S extends object>(target: T, source: S): T & S;
/**
 *  Awaits all promise values of input object
 *
 * @static
 * @template R
 * @param {PromisifiedObject<R>} input
 * @param {LoadObjectDataOptions} [options]
 * @returns {Promise<R>}
 * @memberof Obj
 */
export declare function loadObjectData<R extends object>(input: PromisifiedObject<R>, options?: LoadObjectDataOptions): Promise<R>;
/**
 * Transform values of object into something else
 *
 * @static
 * @template O
 * @template T Function return type
 * @param {O} input
 * @param {<K extends keyof O>(value: O[K], key: K) => T} callback
 * @returns transformed object
 * @memberof Obj
 */
export declare function transform<O extends object, T>(input: O, callback: <K extends keyof O>(value: O[K], key: K) => T): { [key in keyof O]: T; };
export declare const shallowEqual: (a: object, b: object) => boolean;
