123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- '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.');
- }
- // By convention, when a data property is converted to an accessor
- // property to emulate a data property that does not suffer from
- // the override mistake, that accessor's getter is marked with
- // an `originalValue` property. Here, when we detect this, we
- // uphold the illusion by pretending to see that original data
- // property, i.e., returning the value rather than the getter
- // itself.
- value = desc && 'get' in desc && !('originalValue' in desc.get) ? desc.get : value[parts[i]];
- } else {
- value = value[parts[i]];
- }
- }
- }
- return value;
- };
|