| 'use strict'; |
| |
| var slice = Array.prototype.slice; |
| var isArgs = require('./isArguments'); |
| |
| var origKeys = Object.keys; |
| var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); |
| |
| var originalKeys = Object.keys; |
| |
| keysShim.shim = function shimObjectKeys() { |
| if (Object.keys) { |
| var keysWorksWithArguments = (function () { |
| // Safari 5.0 bug |
| var args = Object.keys(arguments); |
| return args && args.length === arguments.length; |
| }(1, 2)); |
| if (!keysWorksWithArguments) { |
| Object.keys = function keys(object) { // eslint-disable-line func-name-matching |
| if (isArgs(object)) { |
| return originalKeys(slice.call(object)); |
| } |
| return originalKeys(object); |
| }; |
| } |
| } else { |
| Object.keys = keysShim; |
| } |
| return Object.keys || keysShim; |
| }; |
| |
| module.exports = keysShim; |