UNPKG

1.24 kBJavaScriptView Raw
1'use strict';
2
3var ES = require('es-abstract/es7');
4
5var defineProperty = Object.defineProperty;
6var getDescriptor = Object.getOwnPropertyDescriptor;
7var getOwnNames = Object.getOwnPropertyNames;
8var getSymbols = Object.getOwnPropertySymbols;
9var concat = Function.call.bind(Array.prototype.concat);
10var reduce = Function.call.bind(Array.prototype.reduce);
11var getAll = getSymbols ? function (obj) {
12 return concat(getOwnNames(obj), getSymbols(obj));
13} : getOwnNames;
14
15var isES5 = ES.IsCallable(getDescriptor) && ES.IsCallable(getOwnNames);
16
17var safePut = function put(obj, prop, val) { // eslint-disable-line max-params
18 if (defineProperty && prop in obj) {
19 defineProperty(obj, prop, {
20 configurable: true,
21 enumerable: true,
22 value: val,
23 writable: true
24 });
25 } else {
26 obj[prop] = val;
27 }
28};
29
30module.exports = function getOwnPropertyDescriptors(value) {
31 ES.RequireObjectCoercible(value);
32 if (!isES5) {
33 throw new TypeError('getOwnPropertyDescriptors requires Object.getOwnPropertyDescriptor');
34 }
35
36 var O = ES.ToObject(value);
37 return reduce(getAll(O), function (acc, key) {
38 var descriptor = getDescriptor(O, key);
39 if (typeof descriptor !== 'undefined') {
40 safePut(acc, key, descriptor);
41 }
42 return acc;
43 }, {});
44};