UNPKG

bbo

Version:

bbo is a utility library of zero dependencies for javascript.

57 lines (43 loc) 1.24 kB
'use strict'; var is_object = require('./is_object.js'); require('./get_tag.js'); var is_array = require('./is_array.js'); var is_function = require('./is_function.js'); var is_boolean = require('./is_boolean.js'); function extend() /* [deep], obj1, obj2, [objn] */ { var args = [].slice.call(arguments); var deep = false; if (is_boolean(args[0])) { deep = args.shift(); } var result = args[0]; if (isUnextendable(result)) { throw new Error('extendee must be an object'); } var extenders = args.slice(1); var len = extenders.length; for (var i = 0; i < len; i++) { var extender = extenders[i]; for (var key in extender) { if (extender.hasOwnProperty(key)) { var value = extender[key]; if (deep && isCloneable(value)) { var base = is_array(value) ? [] : {}; result[key] = extend(true, result.hasOwnProperty(key) && !isUnextendable(result[key]) ? result[key] : base, value); } else { result[key] = value; } } } } return result; } function isCloneable(obj) { return is_array(obj) || is_object(obj); } function isUnextendable(val) { return !val || !is_object(val) && !is_function(val); } module.exports = extend;