type Input = Record; type IgnoredInput = boolean | number | null | any[] | Record | undefined; type Merger = (object: T, key: keyof T, value: T[K], namespace: string) => any; type nullish = null | undefined | void; type MergeObjects = Destination extends Defaults ? Destination : Omit & Omit & { -readonly [Key in keyof Destination & keyof Defaults]: Destination[Key] extends nullish ? Defaults[Key] extends nullish ? nullish : Defaults[Key] : Defaults[Key] extends nullish ? Destination[Key] : Merge; }; type Defu> = D extends [infer F, ...infer Rest] ? F extends Input ? Rest extends Array ? Defu, Rest> : MergeObjects : F extends IgnoredInput ? Rest extends Array ? Defu : S : S : S; type DefuFn = >(source: Source, ...defaults: Defaults) => Defu; interface DefuInstance { >(source: Source | IgnoredInput, ...defaults: Defaults): Defu; fn: DefuFn; arrayFn: DefuFn; extend(merger?: Merger): DefuFn; } type MergeArrays = Destination extends Array ? Source extends Array ? Array : Source | Array : Source | Destination; type Merge = Destination extends nullish ? Defaults extends nullish ? nullish : Defaults : Defaults extends nullish ? Destination : Destination extends Array ? Defaults extends Array ? MergeArrays : Destination | Defaults : Destination extends Function ? Destination | Defaults : Destination extends RegExp ? Destination | Defaults : Destination extends Promise ? Destination | Defaults : Defaults extends Function ? Destination | Defaults : Defaults extends RegExp ? Destination | Defaults : Defaults extends Promise ? Destination | Defaults : Destination extends Input ? Defaults extends Input ? MergeObjects : Destination | Defaults : Destination | Defaults; declare function createDefu(merger?: Merger): DefuFn; declare const defu: DefuInstance; declare const defuFn: DefuFn; declare const defuArrayFn: DefuFn; export { type Defu, createDefu, defu as default, defu, defuArrayFn, defuFn };