| /*! | 
|  * define-property <https://github.com/jonschlinkert/define-property> | 
|  * | 
|  * Copyright (c) 2015, 2017, Jon Schlinkert. | 
|  * Released under the MIT License. | 
|  */ | 
|   | 
| 'use strict'; | 
|   | 
| var isDescriptor = require('is-descriptor'); | 
|   | 
| module.exports = function defineProperty(obj, prop, val) { | 
|   if (typeof obj !== 'object' && typeof obj !== 'function') { | 
|     throw new TypeError('expected an object or function.'); | 
|   } | 
|   | 
|   if (typeof prop !== 'string') { | 
|     throw new TypeError('expected `prop` to be a string.'); | 
|   } | 
|   | 
|   if (isDescriptor(val) && ('set' in val || 'get' in val)) { | 
|     return Object.defineProperty(obj, prop, val); | 
|   } | 
|   | 
|   return Object.defineProperty(obj, prop, { | 
|     configurable: true, | 
|     enumerable: false, | 
|     writable: true, | 
|     value: val | 
|   }); | 
| }; |