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