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.
		
		
		
		
		
			
		
			
				
					
					
						
							219 lines
						
					
					
						
							9.8 KiB
						
					
					
				
			
		
		
	
	
							219 lines
						
					
					
						
							9.8 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| /* globals
 | |
| 	Atomics,
 | |
| 	SharedArrayBuffer,
 | |
| */
 | |
| 
 | |
| var undefined;
 | |
| 
 | |
| var $TypeError = TypeError;
 | |
| 
 | |
| var $gOPD = Object.getOwnPropertyDescriptor;
 | |
| if ($gOPD) {
 | |
| 	try {
 | |
| 		$gOPD({}, '');
 | |
| 	} catch (e) {
 | |
| 		$gOPD = null; // this is IE 8, which has a broken gOPD
 | |
| 	}
 | |
| }
 | |
| 
 | |
| var throwTypeError = function () { throw new $TypeError(); };
 | |
| var ThrowTypeError = $gOPD
 | |
| 	? (function () {
 | |
| 		try {
 | |
| 			// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
 | |
| 			arguments.callee; // IE 8 does not throw here
 | |
| 			return throwTypeError;
 | |
| 		} catch (calleeThrows) {
 | |
| 			try {
 | |
| 				// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
 | |
| 				return $gOPD(arguments, 'callee').get;
 | |
| 			} catch (gOPDthrows) {
 | |
| 				return throwTypeError;
 | |
| 			}
 | |
| 		}
 | |
| 	}())
 | |
| 	: throwTypeError;
 | |
| 
 | |
| var hasSymbols = require('has-symbols')();
 | |
| 
 | |
| var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
 | |
| 
 | |
| var generator; // = function * () {};
 | |
| var generatorFunction = generator ? getProto(generator) : undefined;
 | |
| var asyncFn; // async function() {};
 | |
| var asyncFunction = asyncFn ? asyncFn.constructor : undefined;
 | |
| var asyncGen; // async function * () {};
 | |
| var asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined;
 | |
| var asyncGenIterator = asyncGen ? asyncGen() : undefined;
 | |
| 
 | |
| var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
 | |
| 
 | |
| var INTRINSICS = {
 | |
| 	'%Array%': Array,
 | |
| 	'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
 | |
| 	'%ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype,
 | |
| 	'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
 | |
| 	'%ArrayPrototype%': Array.prototype,
 | |
| 	'%ArrayProto_entries%': Array.prototype.entries,
 | |
| 	'%ArrayProto_forEach%': Array.prototype.forEach,
 | |
| 	'%ArrayProto_keys%': Array.prototype.keys,
 | |
| 	'%ArrayProto_values%': Array.prototype.values,
 | |
| 	'%AsyncFromSyncIteratorPrototype%': undefined,
 | |
| 	'%AsyncFunction%': asyncFunction,
 | |
| 	'%AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined,
 | |
| 	'%AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined,
 | |
| 	'%AsyncGeneratorFunction%': asyncGenFunction,
 | |
| 	'%AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined,
 | |
| 	'%AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined,
 | |
| 	'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
 | |
| 	'%Boolean%': Boolean,
 | |
| 	'%BooleanPrototype%': Boolean.prototype,
 | |
| 	'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
 | |
| 	'%DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype,
 | |
| 	'%Date%': Date,
 | |
| 	'%DatePrototype%': Date.prototype,
 | |
| 	'%decodeURI%': decodeURI,
 | |
| 	'%decodeURIComponent%': decodeURIComponent,
 | |
| 	'%encodeURI%': encodeURI,
 | |
| 	'%encodeURIComponent%': encodeURIComponent,
 | |
| 	'%Error%': Error,
 | |
| 	'%ErrorPrototype%': Error.prototype,
 | |
| 	'%eval%': eval, // eslint-disable-line no-eval
 | |
| 	'%EvalError%': EvalError,
 | |
| 	'%EvalErrorPrototype%': EvalError.prototype,
 | |
| 	'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
 | |
| 	'%Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype,
 | |
| 	'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
 | |
| 	'%Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype,
 | |
| 	'%Function%': Function,
 | |
| 	'%FunctionPrototype%': Function.prototype,
 | |
| 	'%Generator%': generator ? getProto(generator()) : undefined,
 | |
| 	'%GeneratorFunction%': generatorFunction,
 | |
| 	'%GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined,
 | |
| 	'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
 | |
| 	'%Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype,
 | |
| 	'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
 | |
| 	'%Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype,
 | |
| 	'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
 | |
| 	'%Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype,
 | |
| 	'%isFinite%': isFinite,
 | |
| 	'%isNaN%': isNaN,
 | |
| 	'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
 | |
| 	'%JSON%': typeof JSON === 'object' ? JSON : undefined,
 | |
| 	'%JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined,
 | |
| 	'%Map%': typeof Map === 'undefined' ? undefined : Map,
 | |
| 	'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
 | |
| 	'%MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype,
 | |
| 	'%Math%': Math,
 | |
| 	'%Number%': Number,
 | |
| 	'%NumberPrototype%': Number.prototype,
 | |
| 	'%Object%': Object,
 | |
| 	'%ObjectPrototype%': Object.prototype,
 | |
| 	'%ObjProto_toString%': Object.prototype.toString,
 | |
| 	'%ObjProto_valueOf%': Object.prototype.valueOf,
 | |
| 	'%parseFloat%': parseFloat,
 | |
| 	'%parseInt%': parseInt,
 | |
| 	'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
 | |
| 	'%PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype,
 | |
| 	'%PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then,
 | |
| 	'%Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all,
 | |
| 	'%Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject,
 | |
| 	'%Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve,
 | |
| 	'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
 | |
| 	'%RangeError%': RangeError,
 | |
| 	'%RangeErrorPrototype%': RangeError.prototype,
 | |
| 	'%ReferenceError%': ReferenceError,
 | |
| 	'%ReferenceErrorPrototype%': ReferenceError.prototype,
 | |
| 	'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
 | |
| 	'%RegExp%': RegExp,
 | |
| 	'%RegExpPrototype%': RegExp.prototype,
 | |
| 	'%Set%': typeof Set === 'undefined' ? undefined : Set,
 | |
| 	'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
 | |
| 	'%SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype,
 | |
| 	'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
 | |
| 	'%SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype,
 | |
| 	'%String%': String,
 | |
| 	'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
 | |
| 	'%StringPrototype%': String.prototype,
 | |
| 	'%Symbol%': hasSymbols ? Symbol : undefined,
 | |
| 	'%SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined,
 | |
| 	'%SyntaxError%': SyntaxError,
 | |
| 	'%SyntaxErrorPrototype%': SyntaxError.prototype,
 | |
| 	'%ThrowTypeError%': ThrowTypeError,
 | |
| 	'%TypedArray%': TypedArray,
 | |
| 	'%TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined,
 | |
| 	'%TypeError%': $TypeError,
 | |
| 	'%TypeErrorPrototype%': $TypeError.prototype,
 | |
| 	'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
 | |
| 	'%Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype,
 | |
| 	'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
 | |
| 	'%Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype,
 | |
| 	'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
 | |
| 	'%Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype,
 | |
| 	'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
 | |
| 	'%Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype,
 | |
| 	'%URIError%': URIError,
 | |
| 	'%URIErrorPrototype%': URIError.prototype,
 | |
| 	'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
 | |
| 	'%WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype,
 | |
| 	'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,
 | |
| 	'%WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype
 | |
| };
 | |
| 
 | |
| var bind = require('function-bind');
 | |
| var $replace = bind.call(Function.call, String.prototype.replace);
 | |
| 
 | |
| /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
 | |
| var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
 | |
| var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
 | |
| var stringToPath = function stringToPath(string) {
 | |
| 	var result = [];
 | |
| 	$replace(string, rePropName, function (match, number, quote, subString) {
 | |
| 		result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);
 | |
| 	});
 | |
| 	return result;
 | |
| };
 | |
| /* end adaptation */
 | |
| 
 | |
| var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
 | |
| 	if (!(name in INTRINSICS)) {
 | |
| 		throw new SyntaxError('intrinsic ' + name + ' does not exist!');
 | |
| 	}
 | |
| 
 | |
| 	// istanbul ignore if // hopefully this is impossible to test :-)
 | |
| 	if (typeof INTRINSICS[name] === 'undefined' && !allowMissing) {
 | |
| 		throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
 | |
| 	}
 | |
| 
 | |
| 	return INTRINSICS[name];
 | |
| };
 | |
| 
 | |
| module.exports = function GetIntrinsic(name, allowMissing) {
 | |
| 	if (typeof name !== 'string' || name.length === 0) {
 | |
| 		throw new TypeError('intrinsic name must be a non-empty string');
 | |
| 	}
 | |
| 	if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
 | |
| 		throw new TypeError('"allowMissing" argument must be a boolean');
 | |
| 	}
 | |
| 
 | |
| 	var parts = stringToPath(name);
 | |
| 
 | |
| 	var value = getBaseIntrinsic('%' + (parts.length > 0 ? parts[0] : '') + '%', allowMissing);
 | |
| 	for (var i = 1; i < parts.length; i += 1) {
 | |
| 		if (value != null) {
 | |
| 			if ($gOPD && (i + 1) >= parts.length) {
 | |
| 				var desc = $gOPD(value, parts[i]);
 | |
| 				if (!allowMissing && !(parts[i] in value)) {
 | |
| 					throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
 | |
| 				}
 | |
| 				value = desc ? (desc.get || desc.value) : value[parts[i]];
 | |
| 			} else {
 | |
| 				value = value[parts[i]];
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return value;
 | |
| };
 |