| '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; |