mirror of
				https://gitea.com/actions/setup-python.git
				synced 2025-10-29 07:47:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 | 
