You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					45 lines
				
				1.7 KiB
			
		
		
			
		
	
	
					45 lines
				
				1.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								define(['exports', './_getLength', './isFunction', './allKeys'], function (exports, _getLength, isFunction, allKeys) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Since the regular `Object.prototype.toString` type tests don't work for
							 | 
						||
| 
								 | 
							
								  // some types in IE 11, we use a fingerprinting heuristic instead, based
							 | 
						||
| 
								 | 
							
								  // on the methods. It's not great, but it's the best we got.
							 | 
						||
| 
								 | 
							
								  // The fingerprint method lists are defined below.
							 | 
						||
| 
								 | 
							
								  function ie11fingerprint(methods) {
							 | 
						||
| 
								 | 
							
								    var length = _getLength(methods);
							 | 
						||
| 
								 | 
							
								    return function(obj) {
							 | 
						||
| 
								 | 
							
								      if (obj == null) return false;
							 | 
						||
| 
								 | 
							
								      // `Map`, `WeakMap` and `Set` have no enumerable keys.
							 | 
						||
| 
								 | 
							
								      var keys = allKeys(obj);
							 | 
						||
| 
								 | 
							
								      if (_getLength(keys)) return false;
							 | 
						||
| 
								 | 
							
								      for (var i = 0; i < length; i++) {
							 | 
						||
| 
								 | 
							
								        if (!isFunction(obj[methods[i]])) return false;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // If we are testing against `WeakMap`, we need to ensure that
							 | 
						||
| 
								 | 
							
								      // `obj` doesn't have a `forEach` method in order to distinguish
							 | 
						||
| 
								 | 
							
								      // it from a regular `Map`.
							 | 
						||
| 
								 | 
							
								      return methods !== weakMapMethods || !isFunction(obj[forEachName]);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // In the interest of compact minification, we write
							 | 
						||
| 
								 | 
							
								  // each string in the fingerprints only once.
							 | 
						||
| 
								 | 
							
								  var forEachName = 'forEach',
							 | 
						||
| 
								 | 
							
								      hasName = 'has',
							 | 
						||
| 
								 | 
							
								      commonInit = ['clear', 'delete'],
							 | 
						||
| 
								 | 
							
								      mapTail = ['get', hasName, 'set'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // `Map`, `WeakMap` and `Set` each have slightly different
							 | 
						||
| 
								 | 
							
								  // combinations of the above sublists.
							 | 
						||
| 
								 | 
							
								  var mapMethods = commonInit.concat(forEachName, mapTail),
							 | 
						||
| 
								 | 
							
								      weakMapMethods = commonInit.concat(mapTail),
							 | 
						||
| 
								 | 
							
								      setMethods = ['add'].concat(commonInit, forEachName, hasName);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  exports.ie11fingerprint = ie11fingerprint;
							 | 
						||
| 
								 | 
							
								  exports.mapMethods = mapMethods;
							 | 
						||
| 
								 | 
							
								  exports.setMethods = setMethods;
							 | 
						||
| 
								 | 
							
								  exports.weakMapMethods = weakMapMethods;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Object.defineProperty(exports, '__esModule', { value: true });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								});
							 |