'use strict';
var ES = require('es-abstract/es7');
var defineProperty = Object.defineProperty; var getDescriptor = Object.getOwnPropertyDescriptor; var getOwnNames = Object.getOwnPropertyNames; var getSymbols = Object.getOwnPropertySymbols; var concat = Function.call.bind(Array.prototype.concat); var reduce = Function.call.bind(Array.prototype.reduce); var getAll = getSymbols ? function (obj) {
return concat(getOwnNames(obj), getSymbols(obj));
} : getOwnNames;
var isES5 = ES.IsCallable(getDescriptor) && ES.IsCallable(getOwnNames);
var safePut = function put(obj, prop, val) { // eslint-disable-line max-params
if (defineProperty && prop in obj) { defineProperty(obj, prop, { configurable: true, enumerable: true, value: val, writable: true }); } else { obj[prop] = val; }
};
module.exports = function getOwnPropertyDescriptors(value) {
ES.RequireObjectCoercible(value); if (!isES5) { throw new TypeError('getOwnPropertyDescriptors requires Object.getOwnPropertyDescriptor'); } var O = ES.ToObject(value); return reduce(getAll(O), function (acc, key) { var descriptor = getDescriptor(O, key); if (typeof descriptor !== 'undefined') { safePut(acc, key, descriptor); } return acc; }, {});
};