/**
 * Deep merge utility for objects
 *
 * Provides a pure, reusable deep merge function with optional security filtering.
 *
 * @module utils/deepMerge
 */
/**
 * Options for deep merge behavior
 */
export interface DeepMergeOptions {
    /**
     * Properties to skip during merge (e.g., dangerous properties like __proto__)
     */
    skipProperties?: string[];
    /**
     * Read-only fields that should be skipped during merge
     */
    readOnlyFields?: Set<string>;
}
/**
 * Deep merge two objects
 *
 * Merge semantics:
 * - Plain objects are merged recursively
 * - Arrays replace entirely (not merged element-by-element)
 * - Primitives replace
 * - Dangerous/read-only properties are optionally skipped
 *
 * @param target - The target object to merge into
 * @param source - The source object to merge from
 * @param options - Optional merge behavior configuration
 * @returns New merged object (does not mutate inputs)
 *
 * @example
 * ```typescript
 * // Basic merge
 * const result = deepMerge({ a: 1 }, { b: 2 });
 * // => { a: 1, b: 2 }
 *
 * // Nested merge
 * const result = deepMerge(
 *   { settings: { theme: 'light', size: 10 } },
 *   { settings: { theme: 'dark' } }
 * );
 * // => { settings: { theme: 'dark', size: 10 } }
 *
 * // With security filtering
 * const result = deepMerge(target, source, {
 *   skipProperties: ['__proto__', 'constructor'],
 *   readOnlyFields: new Set(['id', 'type'])
 * });
 *
 * // With type preservation
 * interface Config { theme: string; size: number; }
 * const result = deepMerge<Config>(defaultConfig, userConfig);
 * ```
 */
export declare function deepMerge<T extends object = Record<string, unknown>>(target: T, source: Partial<T> | Record<string, unknown>, options?: DeepMergeOptions): T;
/**
 * Default dangerous properties that should never be merged
 * These can be used to prevent prototype pollution attacks
 */
export declare const DANGEROUS_PROPERTIES: string[];
/**
 * Create a deep merge function with preset options
 *
 * Useful for creating a configured merger that can be reused
 *
 * @param options - Preset options for all merges
 * @returns A configured deep merge function
 *
 * @example
 * ```typescript
 * const secureMerge = createDeepMerge({
 *   skipProperties: DANGEROUS_PROPERTIES,
 *   readOnlyFields: new Set(['id', 'type'])
 * });
 *
 * const result = secureMerge(target, source);
 * ```
 */
export declare function createDeepMerge(options: DeepMergeOptions): (target: Record<string, unknown>, source: Record<string, unknown>) => Record<string, unknown>;
//# sourceMappingURL=deepMerge.d.ts.map