'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function isObject(value) { return value !== null && typeof value === "object"; } function _defu(baseObject, defaults, namespace = ".", merger) { if (!isObject(defaults)) { return _defu(baseObject, {}, namespace, merger); } const object = Object.assign({}, defaults); for (const key in baseObject) { if (key === "__proto__" || key === "constructor") { continue; } const value = baseObject[key]; if (value === null || value === void 0) { continue; } if (merger && merger(object, key, value, namespace)) { continue; } if (Array.isArray(value) && Array.isArray(object[key])) { object[key] = [...value, ...object[key]]; } else if (isObject(value) && isObject(object[key])) { object[key] = _defu( value, object[key], (namespace ? `${namespace}.` : "") + key.toString(), merger ); } else { object[key] = value; } } return object; } function createDefu(merger) { return (...arguments_) => ( // eslint-disable-next-line unicorn/no-array-reduce arguments_.reduce((p, c) => _defu(p, c, "", merger), {}) ); } const defu = createDefu(); const defuFn = createDefu((object, key, currentValue) => { if (typeof object[key] !== "undefined" && typeof currentValue === "function") { object[key] = currentValue(object[key]); return true; } }); const defuArrayFn = createDefu((object, key, currentValue) => { if (Array.isArray(object[key]) && typeof currentValue === "function") { object[key] = currentValue(object[key]); return true; } }); exports.createDefu = createDefu; exports.default = defu; exports.defu = defu; exports.defuArrayFn = defuArrayFn; exports.defuFn = defuFn;