var global = require('../internals/global'); var isCallable = require('../internals/is-callable'); var createNonEnumerableProperty = require('../internals/create-non-enumerable-property'); var makeBuiltIn = require('../internals/make-built-in'); var setGlobal = require('../internals/set-global'); module.exports = function (O, key, value, options) { var unsafe = options ? !!options.unsafe : false; var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; var name = options && options.name !== undefined ? options.name : key; if (isCallable(value)) makeBuiltIn(value, name, options); if (O === global) { if (simple) O[key] = value; else setGlobal(key, value); return O; } else if (!unsafe) { delete O[key]; } else if (!noTargetGet && O[key]) { simple = true; } if (simple) O[key] = value; else createNonEnumerableProperty(O, key, value); return O; };