Added test to ensure that release notes are parsed properly Updated to latest dependencies to fix security vulnerability Updated GH Actions Workflow to run test before updating tag Updated README.md to reflect proper whatsnew documentation.
219 lines
9.8 KiB
JavaScript
219 lines
9.8 KiB
JavaScript
'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;
|
|
};
|