39 lines
		
	
	
		
			888 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			888 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*!
 | |
|  * define-property <https://github.com/jonschlinkert/define-property>
 | |
|  *
 | |
|  * Copyright (c) 2015-2018, Jon Schlinkert.
 | |
|  * Released under the MIT License.
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| var isobject = require('isobject');
 | |
| var isDescriptor = require('is-descriptor');
 | |
| var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty)
 | |
|   ? Reflect.defineProperty
 | |
|   : Object.defineProperty;
 | |
| 
 | |
| module.exports = function defineProperty(obj, key, val) {
 | |
|   if (!isobject(obj) && typeof obj !== 'function' && !Array.isArray(obj)) {
 | |
|     throw new TypeError('expected an object, function, or array');
 | |
|   }
 | |
| 
 | |
|   if (typeof key !== 'string') {
 | |
|     throw new TypeError('expected "key" to be a string');
 | |
|   }
 | |
| 
 | |
|   if (isDescriptor(val)) {
 | |
|     define(obj, key, val);
 | |
|     return obj;
 | |
|   }
 | |
| 
 | |
|   define(obj, key, {
 | |
|     configurable: true,
 | |
|     enumerable: false,
 | |
|     writable: true,
 | |
|     value: val
 | |
|   });
 | |
| 
 | |
|   return obj;
 | |
| };
 |