| 'use strict'; |
| |
| var GetIntrinsic = require('get-intrinsic'); |
| |
| var hasSymbols = require('has-symbols')(); |
| |
| var $TypeError = GetIntrinsic('%TypeError%'); |
| |
| var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%'); |
| var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%'); |
| var keys = require('object-keys'); |
| |
| var esType = require('./Type'); |
| |
| // https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys |
| |
| module.exports = function GetOwnPropertyKeys(O, Type) { |
| if (esType(O) !== 'Object') { |
| throw new $TypeError('Assertion failed: Type(O) is not Object'); |
| } |
| if (Type === 'Symbol') { |
| return $gOPS ? $gOPS(O) : []; |
| } |
| if (Type === 'String') { |
| if (!$gOPN) { |
| return keys(O); |
| } |
| return $gOPN(O); |
| } |
| throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`'); |
| }; |