| Leo Repp | 58b9f11 | 2021-11-22 11:57:47 +0100 | [diff] [blame^] | 1 | 'use strict'; |
| 2 | |
| 3 | var each = require('array-each'); |
| 4 | var slice = require('array-slice'); |
| 5 | var forOwn = require('for-own'); |
| 6 | var isObject = require('isobject'); |
| 7 | |
| 8 | /** |
| 9 | * Extends the `target` object with properties of one or |
| 10 | * more additional `objects` |
| 11 | * |
| 12 | * @name .defaults |
| 13 | * @param {Object} `target` The target object. Pass an empty object to shallow clone. |
| 14 | * @param {Object} `objects` |
| 15 | * @return {Object} |
| 16 | * @api public |
| 17 | */ |
| 18 | |
| 19 | module.exports = function defaults(target, objects) { |
| 20 | if (target == null) { |
| 21 | return {}; |
| 22 | } |
| 23 | |
| 24 | each(slice(arguments, 1), function(obj) { |
| 25 | if (isObject(obj)) { |
| 26 | forOwn(obj, function(val, key) { |
| 27 | if (target[key] == null) { |
| 28 | target[key] = val; |
| 29 | } |
| 30 | }); |
| 31 | } |
| 32 | }); |
| 33 | |
| 34 | return target; |
| 35 | }; |