allKeys.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. var keys = require('./keys');
  2. var getProto = require('./getProto');
  3. var unique = require('./unique');
  4. var getOwnPropertyNames = Object.getOwnPropertyNames;
  5. var getOwnPropertySymbols = Object.getOwnPropertySymbols;
  6. exports = function(obj) {
  7. var _ref =
  8. arguments.length > 1 && arguments[1] !== undefined
  9. ? arguments[1]
  10. : {},
  11. _ref$prototype = _ref.prototype,
  12. prototype = _ref$prototype === void 0 ? true : _ref$prototype,
  13. _ref$unenumerable = _ref.unenumerable,
  14. unenumerable = _ref$unenumerable === void 0 ? false : _ref$unenumerable,
  15. _ref$symbol = _ref.symbol,
  16. symbol = _ref$symbol === void 0 ? false : _ref$symbol;
  17. var ret = [];
  18. if ((unenumerable || symbol) && getOwnPropertyNames) {
  19. var getKeys = keys;
  20. if (unenumerable && getOwnPropertyNames) getKeys = getOwnPropertyNames;
  21. do {
  22. ret = ret.concat(getKeys(obj));
  23. if (symbol && getOwnPropertySymbols) {
  24. ret = ret.concat(getOwnPropertySymbols(obj));
  25. }
  26. } while (
  27. prototype &&
  28. (obj = getProto(obj)) &&
  29. obj !== Object.prototype
  30. );
  31. ret = unique(ret);
  32. } else {
  33. if (prototype) {
  34. for (var key in obj) ret.push(key);
  35. } else {
  36. ret = keys(obj);
  37. }
  38. }
  39. return ret;
  40. };
  41. module.exports = exports;