1/*! 2 * prr 3 * (c) 2013 Rod Vagg <rod@vagg.org> 4 * https://github.com/rvagg/prr 5 * License: MIT 6 */ 7 8(function (name, context, definition) { 9 if (typeof module != 'undefined' && module.exports) 10 module.exports = definition() 11 else 12 context[name] = definition() 13})('prr', this, function() { 14 15 var setProperty = typeof Object.defineProperty == 'function' 16 ? function (obj, key, options) { 17 Object.defineProperty(obj, key, options) 18 return obj 19 } 20 : function (obj, key, options) { // < es5 21 obj[key] = options.value 22 return obj 23 } 24 25 , makeOptions = function (value, options) { 26 var oo = typeof options == 'object' 27 , os = !oo && typeof options == 'string' 28 , op = function (p) { 29 return oo 30 ? !!options[p] 31 : os 32 ? options.indexOf(p[0]) > -1 33 : false 34 } 35 36 return { 37 enumerable : op('enumerable') 38 , configurable : op('configurable') 39 , writable : op('writable') 40 , value : value 41 } 42 } 43 44 , prr = function (obj, key, value, options) { 45 var k 46 47 options = makeOptions(value, options) 48 49 if (typeof key == 'object') { 50 for (k in key) { 51 if (Object.hasOwnProperty.call(key, k)) { 52 options.value = key[k] 53 setProperty(obj, k, options) 54 } 55 } 56 return obj 57 } 58 59 return setProperty(obj, key, options) 60 } 61 62 return prr 63})