| var _curry1 = |
| /*#__PURE__*/ |
| require("./internal/_curry1"); |
| |
| var _has = |
| /*#__PURE__*/ |
| require("./internal/_has"); |
| |
| var _isArguments = |
| /*#__PURE__*/ |
| require("./internal/_isArguments"); // cover IE < 9 keys issues |
| |
| |
| var hasEnumBug = ! |
| /*#__PURE__*/ |
| { |
| toString: null |
| }.propertyIsEnumerable('toString'); |
| var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; // Safari bug |
| |
| var hasArgsEnumBug = |
| /*#__PURE__*/ |
| function () { |
| 'use strict'; |
| |
| return arguments.propertyIsEnumerable('length'); |
| }(); |
| |
| var contains = function contains(list, item) { |
| var idx = 0; |
| |
| while (idx < list.length) { |
| if (list[idx] === item) { |
| return true; |
| } |
| |
| idx += 1; |
| } |
| |
| return false; |
| }; |
| /** |
| * Returns a list containing the names of all the enumerable own properties of |
| * the supplied object. |
| * Note that the order of the output array is not guaranteed to be consistent |
| * across different JS platforms. |
| * |
| * @func |
| * @memberOf R |
| * @since v0.1.0 |
| * @category Object |
| * @sig {k: v} -> [k] |
| * @param {Object} obj The object to extract properties from |
| * @return {Array} An array of the object's own properties. |
| * @see R.keysIn, R.values |
| * @example |
| * |
| * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c'] |
| */ |
| |
| |
| var keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? |
| /*#__PURE__*/ |
| _curry1(function keys(obj) { |
| return Object(obj) !== obj ? [] : Object.keys(obj); |
| }) : |
| /*#__PURE__*/ |
| _curry1(function keys(obj) { |
| if (Object(obj) !== obj) { |
| return []; |
| } |
| |
| var prop, nIdx; |
| var ks = []; |
| |
| var checkArgsLength = hasArgsEnumBug && _isArguments(obj); |
| |
| for (prop in obj) { |
| if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) { |
| ks[ks.length] = prop; |
| } |
| } |
| |
| if (hasEnumBug) { |
| nIdx = nonEnumerableProps.length - 1; |
| |
| while (nIdx >= 0) { |
| prop = nonEnumerableProps[nIdx]; |
| |
| if (_has(prop, obj) && !contains(ks, prop)) { |
| ks[ks.length] = prop; |
| } |
| |
| nIdx -= 1; |
| } |
| } |
| |
| return ks; |
| }); |
| module.exports = keys; |