index.js
 1  'use strict';
 2  
 3  var isObject = require('is-extendable');
 4  var union = require('arr-union');
 5  var get = require('get-value');
 6  var set = require('set-value');
 7  
 8  module.exports = function unionValue(obj, prop, value) {
 9    if (!isObject(obj)) {
10      throw new TypeError('union-value expects the first argument to be an object.');
11    }
12  
13    if (typeof prop !== 'string') {
14      throw new TypeError('union-value expects `prop` to be a string.');
15    }
16  
17    var arr = arrayify(get(obj, prop));
18    set(obj, prop, union(arr, arrayify(value)));
19    return obj;
20  };
21  
22  function arrayify(val) {
23    if (val === null || typeof val === 'undefined') {
24      return [];
25    }
26    if (Array.isArray(val)) {
27      return val;
28    }
29    return [val];
30  }