/**
 * .what = wrappers which add immutability mechs on dobj instances
 */
export type WithImmute<T> = T & {
    clone(updates?: Partial<T>): WithImmute<T>;
};
/**
 * .what = adds immute operations (.clone) to domain objects
 * .why = enables immutable updates for safer, more maintainable code
 *
 * variants:
 * - withImmute(value) = recursive (default, pit of success)
 * - withImmute.recursive(value) = explicit recursive
 * - withImmute.singular(obj) = single object only (shallow)
 */
export declare const withImmute: (<T>(value: T) => WithImmute<T>) & {
    recursive: <T>(value: T) => WithImmute<T>;
    singular: <T_1 extends Record<string, any>>(obj: T_1) => WithImmute<T_1>;
};
/**
 * .what = alias for withImmute
 * .why = intuitive name for what it does (adds .clone())
 */
export declare const withClone: (<T>(value: T) => WithImmute<T>) & {
    recursive: <T>(value: T) => WithImmute<T>;
    singular: <T_1 extends Record<string, any>>(obj: T_1) => WithImmute<T_1>;
};
