You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
888 B
38 lines
888 B
/*! |
|
* 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; |
|
};
|
|
|