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.
27 lines
965 B
27 lines
965 B
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; |
|
};
|
|
|