29 lines
979 B
JavaScript
29 lines
979 B
JavaScript
|
'use strict';
|
||
|
var isCallable = require('../internals/is-callable');
|
||
|
var definePropertyModule = require('../internals/object-define-property');
|
||
|
var makeBuiltIn = require('../internals/make-built-in');
|
||
|
var defineGlobalProperty = require('../internals/define-global-property');
|
||
|
|
||
|
module.exports = function (O, key, value, options) {
|
||
|
if (!options) options = {};
|
||
|
var simple = options.enumerable;
|
||
|
var name = options.name !== undefined ? options.name : key;
|
||
|
if (isCallable(value)) makeBuiltIn(value, name, options);
|
||
|
if (options.global) {
|
||
|
if (simple) O[key] = value;
|
||
|
else defineGlobalProperty(key, value);
|
||
|
} else {
|
||
|
try {
|
||
|
if (!options.unsafe) delete O[key];
|
||
|
else if (O[key]) simple = true;
|
||
|
} catch (error) { /* empty */ }
|
||
|
if (simple) O[key] = value;
|
||
|
else definePropertyModule.f(O, key, {
|
||
|
value: value,
|
||
|
enumerable: false,
|
||
|
configurable: !options.nonConfigurable,
|
||
|
writable: !options.nonWritable
|
||
|
});
|
||
|
} return O;
|
||
|
};
|