1 | 'use strict';
|
2 |
|
3 | var CreateDataProperty = require('es-abstract/2021/CreateDataProperty');
|
4 | var IsCallable = require('es-abstract/2021/IsCallable');
|
5 | var RequireObjectCoercible = require('es-abstract/2021/RequireObjectCoercible');
|
6 | var ToObject = require('es-abstract/2021/ToObject');
|
7 | var callBound = require('call-bind/callBound');
|
8 | var reduce = require('array.prototype.reduce');
|
9 |
|
10 | var $gOPD = Object.getOwnPropertyDescriptor;
|
11 | var $getOwnNames = Object.getOwnPropertyNames;
|
12 | var $getSymbols = Object.getOwnPropertySymbols;
|
13 | var $concat = callBound('Array.prototype.concat');
|
14 | var getAll = $getSymbols ? function (obj) {
|
15 | return $concat($getOwnNames(obj), $getSymbols(obj));
|
16 | } : $getOwnNames;
|
17 |
|
18 | var isES5 = IsCallable($gOPD) && IsCallable($getOwnNames);
|
19 |
|
20 | module.exports = function getOwnPropertyDescriptors(value) {
|
21 | RequireObjectCoercible(value);
|
22 | if (!isES5) {
|
23 | throw new TypeError('getOwnPropertyDescriptors requires Object.getOwnPropertyDescriptor');
|
24 | }
|
25 |
|
26 | var O = ToObject(value);
|
27 | return reduce(
|
28 | getAll(O),
|
29 | function (acc, key) {
|
30 | var descriptor = $gOPD(O, key);
|
31 | if (typeof descriptor !== 'undefined') {
|
32 | CreateDataProperty(acc, key, descriptor);
|
33 | }
|
34 | return acc;
|
35 | },
|
36 | {}
|
37 | );
|
38 | };
|