import isIterateeCall from './_isIterateeCall.js'; /** * Creates a function like `assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner(assigner) { return (object, ...sources) => { let index = -1; let length = sources.length; let customizer = length > 1 ? sources[length - 1] : undefined; const guard = length > 2 ? sources[2] : undefined; customizer = (assigner.length > 3 && typeof customizer == 'function') ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { const source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }; } export default createAssigner;