You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
700 B
30 lines
700 B
'use strict'; |
|
|
|
var isObject = require('is-extendable'); |
|
var union = require('arr-union'); |
|
var get = require('get-value'); |
|
var set = require('set-value'); |
|
|
|
module.exports = function unionValue(obj, prop, value) { |
|
if (!isObject(obj)) { |
|
throw new TypeError('union-value expects the first argument to be an object.'); |
|
} |
|
|
|
if (typeof prop !== 'string') { |
|
throw new TypeError('union-value expects `prop` to be a string.'); |
|
} |
|
|
|
var arr = arrayify(get(obj, prop)); |
|
set(obj, prop, union(arr, arrayify(value))); |
|
return obj; |
|
}; |
|
|
|
function arrayify(val) { |
|
if (val === null || typeof val === 'undefined') { |
|
return []; |
|
} |
|
if (Array.isArray(val)) { |
|
return val; |
|
} |
|
return [val]; |
|
}
|
|
|