'use strict';
							 | 
						|
								
							 | 
						|
								var keysShim;
							 | 
						|
								if (!Object.keys) {
							 | 
						|
									// modified from https://github.com/es-shims/es5-shim
							 | 
						|
									var has = Object.prototype.hasOwnProperty;
							 | 
						|
									var toStr = Object.prototype.toString;
							 | 
						|
									var isArgs = require('./isArguments'); // eslint-disable-line global-require
							 | 
						|
									var isEnumerable = Object.prototype.propertyIsEnumerable;
							 | 
						|
									var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
							 | 
						|
									var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
							 | 
						|
									var dontEnums = [
							 | 
						|
										'toString',
							 | 
						|
										'toLocaleString',
							 | 
						|
										'valueOf',
							 | 
						|
										'hasOwnProperty',
							 | 
						|
										'isPrototypeOf',
							 | 
						|
										'propertyIsEnumerable',
							 | 
						|
										'constructor'
							 | 
						|
									];
							 | 
						|
									var equalsConstructorPrototype = function (o) {
							 | 
						|
										var ctor = o.constructor;
							 | 
						|
										return ctor && ctor.prototype === o;
							 | 
						|
									};
							 | 
						|
									var excludedKeys = {
							 | 
						|
										$applicationCache: true,
							 | 
						|
										$console: true,
							 | 
						|
										$external: true,
							 | 
						|
										$frame: true,
							 | 
						|
										$frameElement: true,
							 | 
						|
										$frames: true,
							 | 
						|
										$innerHeight: true,
							 | 
						|
										$innerWidth: true,
							 | 
						|
										$onmozfullscreenchange: true,
							 | 
						|
										$onmozfullscreenerror: true,
							 | 
						|
										$outerHeight: true,
							 | 
						|
										$outerWidth: true,
							 | 
						|
										$pageXOffset: true,
							 | 
						|
										$pageYOffset: true,
							 | 
						|
										$parent: true,
							 | 
						|
										$scrollLeft: true,
							 | 
						|
										$scrollTop: true,
							 | 
						|
										$scrollX: true,
							 | 
						|
										$scrollY: true,
							 | 
						|
										$self: true,
							 | 
						|
										$webkitIndexedDB: true,
							 | 
						|
										$webkitStorageInfo: true,
							 | 
						|
										$window: true
							 | 
						|
									};
							 | 
						|
									var hasAutomationEqualityBug = (function () {
							 | 
						|
										/* global window */
							 | 
						|
										if (typeof window === 'undefined') { return false; }
							 | 
						|
										for (var k in window) {
							 | 
						|
											try {
							 | 
						|
												if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
							 | 
						|
													try {
							 | 
						|
														equalsConstructorPrototype(window[k]);
							 | 
						|
													} catch (e) {
							 | 
						|
														return true;
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
											} catch (e) {
							 | 
						|
												return true;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										return false;
							 | 
						|
									}());
							 | 
						|
									var equalsConstructorPrototypeIfNotBuggy = function (o) {
							 | 
						|
										/* global window */
							 | 
						|
										if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
							 | 
						|
											return equalsConstructorPrototype(o);
							 | 
						|
										}
							 | 
						|
										try {
							 | 
						|
											return equalsConstructorPrototype(o);
							 | 
						|
										} catch (e) {
							 | 
						|
											return false;
							 | 
						|
										}
							 | 
						|
									};
							 | 
						|
								
							 | 
						|
									keysShim = function keys(object) {
							 | 
						|
										var isObject = object !== null && typeof object === 'object';
							 | 
						|
										var isFunction = toStr.call(object) === '[object Function]';
							 | 
						|
										var isArguments = isArgs(object);
							 | 
						|
										var isString = isObject && toStr.call(object) === '[object String]';
							 | 
						|
										var theKeys = [];
							 | 
						|
								
							 | 
						|
										if (!isObject && !isFunction && !isArguments) {
							 | 
						|
											throw new TypeError('Object.keys called on a non-object');
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										var skipProto = hasProtoEnumBug && isFunction;
							 | 
						|
										if (isString && object.length > 0 && !has.call(object, 0)) {
							 | 
						|
											for (var i = 0; i < object.length; ++i) {
							 | 
						|
												theKeys.push(String(i));
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										if (isArguments && object.length > 0) {
							 | 
						|
											for (var j = 0; j < object.length; ++j) {
							 | 
						|
												theKeys.push(String(j));
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											for (var name in object) {
							 | 
						|
												if (!(skipProto && name === 'prototype') && has.call(object, name)) {
							 | 
						|
													theKeys.push(String(name));
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										if (hasDontEnumBug) {
							 | 
						|
											var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
							 | 
						|
								
							 | 
						|
											for (var k = 0; k < dontEnums.length; ++k) {
							 | 
						|
												if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
							 | 
						|
													theKeys.push(dontEnums[k]);
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										return theKeys;
							 | 
						|
									};
							 | 
						|
								}
							 | 
						|
								module.exports = keysShim;
							 |