| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- 'use strict';
 
- var keys = require('object-keys');
 
- var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
 
- var toStr = Object.prototype.toString;
 
- var concat = Array.prototype.concat;
 
- var defineDataProperty = require('define-data-property');
 
- var isFunction = function (fn) {
 
- 	return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
 
- };
 
- var supportsDescriptors = require('has-property-descriptors')();
 
- var defineProperty = function (object, name, value, predicate) {
 
- 	if (name in object) {
 
- 		if (predicate === true) {
 
- 			if (object[name] === value) {
 
- 				return;
 
- 			}
 
- 		} else if (!isFunction(predicate) || !predicate()) {
 
- 			return;
 
- 		}
 
- 	}
 
- 	if (supportsDescriptors) {
 
- 		defineDataProperty(object, name, value, true);
 
- 	} else {
 
- 		defineDataProperty(object, name, value);
 
- 	}
 
- };
 
- var defineProperties = function (object, map) {
 
- 	var predicates = arguments.length > 2 ? arguments[2] : {};
 
- 	var props = keys(map);
 
- 	if (hasSymbols) {
 
- 		props = concat.call(props, Object.getOwnPropertySymbols(map));
 
- 	}
 
- 	for (var i = 0; i < props.length; i += 1) {
 
- 		defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
 
- 	}
 
- };
 
- defineProperties.supportsDescriptors = !!supportsDescriptors;
 
- module.exports = defineProperties;
 
 
  |