diff options
Diffstat (limited to 'demo/dist/demo.js')
-rw-r--r-- | demo/dist/demo.js | 13632 |
1 files changed, 8636 insertions, 4996 deletions
diff --git a/demo/dist/demo.js b/demo/dist/demo.js index 03013b4d..1d40c372 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -7,7 +7,6 @@ typeof navigator === "object" && (function () { return module = { exports: {} }, fn(module, module.exports), module.exports; } - var O = 'object'; var check = function (it) { return it && it.Math == Math && it; }; @@ -15,10 +14,10 @@ typeof navigator === "object" && (function () { // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 var global_1 = // eslint-disable-next-line no-undef - check(typeof globalThis == O && globalThis) || - check(typeof window == O && window) || - check(typeof self == O && self) || - check(typeof commonjsGlobal == O && commonjsGlobal) || + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + check(typeof self == 'object' && self) || + check(typeof commonjsGlobal == 'object' && commonjsGlobal) || // eslint-disable-next-line no-new-func Function('return this')(); @@ -32,7 +31,7 @@ typeof navigator === "object" && (function () { // Thank's IE8 for his funny defineProperty var descriptors = !fails(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; }); var nativePropertyIsEnumerable = {}.propertyIsEnumerable; @@ -41,6 +40,8 @@ typeof navigator === "object" && (function () { // Nashorn ~ JDK8 bug var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); + // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable var f = NASHORN_BUG ? function propertyIsEnumerable(V) { var descriptor = getOwnPropertyDescriptor(this, V); return !!descriptor && descriptor.enumerable; @@ -65,12 +66,9 @@ typeof navigator === "object" && (function () { return toString.call(it).slice(8, -1); }; - // fallback for non-array-like ES3 and non-enumerable old V8 strings - - - var split = ''.split; + // fallback for non-array-like ES3 and non-enumerable old V8 strings var indexedObject = fails(function () { // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 // eslint-disable-next-line no-prototype-builtins @@ -98,15 +96,16 @@ typeof navigator === "object" && (function () { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; - // 7.1.1 ToPrimitive(input [, PreferredType]) + // `ToPrimitive` abstract operation + // https://tc39.github.io/ecma262/#sec-toprimitive // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string - var toPrimitive = function (it, S) { - if (!isObject(it)) return it; + var toPrimitive = function (input, PREFERRED_STRING) { + if (!isObject(input)) return input; var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; throw TypeError("Can't convert object to primitive value"); }; @@ -118,10 +117,10 @@ typeof navigator === "object" && (function () { var document$1 = global_1.document; // typeof document.createElement is 'object' in old IE - var exist = isObject(document$1) && isObject(document$1.createElement); + var EXISTS = isObject(document$1) && isObject(document$1.createElement); var documentCreateElement = function (it) { - return exist ? document$1.createElement(it) : {}; + return EXISTS ? document$1.createElement(it) : {}; }; // Thank's IE8 for his funny defineProperty @@ -133,6 +132,8 @@ typeof navigator === "object" && (function () { var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor var f$1 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject(O); P = toPrimitive(P, true); @@ -154,6 +155,8 @@ typeof navigator === "object" && (function () { var nativeDefineProperty = Object.defineProperty; + // `Object.defineProperty` method + // https://tc39.github.io/ecma262/#sec-object.defineproperty var f$2 = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); @@ -170,7 +173,7 @@ typeof navigator === "object" && (function () { f: f$2 }; - var hide = descriptors ? function (object, key, value) { + var createNonEnumerableProperty = descriptors ? function (object, key, value) { return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value)); } : function (object, key, value) { object[key] = value; @@ -179,38 +182,49 @@ typeof navigator === "object" && (function () { var setGlobal = function (key, value) { try { - hide(global_1, key, value); + createNonEnumerableProperty(global_1, key, value); } catch (error) { global_1[key] = value; } return value; }; - var isPure = false; - - var shared = createCommonjsModule(function (module) { var SHARED = '__core-js_shared__'; var store = global_1[SHARED] || setGlobal(SHARED, {}); + var sharedStore = store; + + var functionToString = Function.toString; + + // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper + if (typeof sharedStore.inspectSource != 'function') { + sharedStore.inspectSource = function (it) { + return functionToString.call(it); + }; + } + + var inspectSource = sharedStore.inspectSource; + + var WeakMap$1 = global_1.WeakMap; + + var nativeWeakMap = typeof WeakMap$1 === 'function' && /native code/.test(inspectSource(WeakMap$1)); + + var isPure = false; + + var shared = createCommonjsModule(function (module) { (module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); + return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {}); })('versions', []).push({ - version: '3.1.3', + version: '3.6.5', mode: 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' }); }); - var functionToString = shared('native-function-to-string', Function.toString); - - var WeakMap$1 = global_1.WeakMap; - - var nativeWeakMap = typeof WeakMap$1 === 'function' && /native code/.test(functionToString.call(WeakMap$1)); - var id = 0; var postfix = Math.random(); var uid = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + postfix).toString(36)); + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); }; var keys = shared('keys'); @@ -238,25 +252,25 @@ typeof navigator === "object" && (function () { }; if (nativeWeakMap) { - var store = new WeakMap$2(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; + var store$1 = new WeakMap$2(); + var wmget = store$1.get; + var wmhas = store$1.has; + var wmset = store$1.set; set = function (it, metadata) { - wmset.call(store, it, metadata); + wmset.call(store$1, it, metadata); return metadata; }; get = function (it) { - return wmget.call(store, it) || {}; + return wmget.call(store$1, it) || {}; }; has$1 = function (it) { - return wmhas.call(store, it); + return wmhas.call(store$1, it); }; } else { var STATE = sharedKey('state'); hiddenKeys[STATE] = true; set = function (it, metadata) { - hide(it, STATE, metadata); + createNonEnumerableProperty(it, STATE, metadata); return metadata; }; get = function (it) { @@ -278,18 +292,14 @@ typeof navigator === "object" && (function () { var redefine = createCommonjsModule(function (module) { var getInternalState = internalState.get; var enforceInternalState = internalState.enforce; - var TEMPLATE = String(functionToString).split('toString'); - - shared('inspectSource', function (it) { - return functionToString.call(it); - }); + var TEMPLATE = String(String).split('String'); (module.exports = function (O, key, value, options) { var unsafe = options ? !!options.unsafe : false; var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key); + if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); } if (O === global_1) { @@ -302,13 +312,24 @@ typeof navigator === "object" && (function () { simple = true; } if (simple) O[key] = value; - else hide(O, key, value); + else createNonEnumerableProperty(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || functionToString.call(this); + return typeof this == 'function' && getInternalState(this).source || inspectSource(this); }); }); + var path = global_1; + + var aFunction = function (variable) { + return typeof variable == 'function' ? variable : undefined; + }; + + var getBuiltIn = function (namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace]) + : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method]; + }; + var ceil = Math.ceil; var floor = Math.floor; @@ -331,18 +352,14 @@ typeof navigator === "object" && (function () { // Helper for a popular repeating case of the spec: // Let integer be ? ToInteger(index). - // If integer < 0, let result be max((length + integer), 0); else let result be min(length, length). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). var toAbsoluteIndex = function (index, length) { var integer = toInteger(index); return integer < 0 ? max(integer + length, 0) : min$1(integer, length); }; // `Array.prototype.{ indexOf, includes }` methods implementation - // false -> Array#indexOf - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - // true -> Array#includes - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - var arrayIncludes = function (IS_INCLUDES) { + var createMethod = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIndexedObject($this); var length = toLength(O.length); @@ -355,13 +372,23 @@ typeof navigator === "object" && (function () { // eslint-disable-next-line no-self-compare if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) if (IS_INCLUDES || index in O) { - if (O[index] === el) return IS_INCLUDES || index || 0; + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; } return !IS_INCLUDES && -1; }; }; - var arrayIndexOf = arrayIncludes(false); + var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.github.io/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) + }; + + var indexOf = arrayIncludes.indexOf; + var objectKeysInternal = function (object, names) { var O = toIndexedObject(object); @@ -371,7 +398,7 @@ typeof navigator === "object" && (function () { for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); // Don't enum bug & hidden keys while (names.length > i) if (has(O, key = names[i++])) { - ~arrayIndexOf(result, key) || result.push(key); + ~indexOf(result, key) || result.push(key); } return result; }; @@ -387,12 +414,10 @@ typeof navigator === "object" && (function () { 'valueOf' ]; - // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) - - - var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype'); + // `Object.getOwnPropertyNames` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertynames var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return objectKeysInternal(O, hiddenKeys$1); }; @@ -407,10 +432,8 @@ typeof navigator === "object" && (function () { f: f$4 }; - var Reflect = global_1.Reflect; - // all object keys, includes non-enumerable and symbols - var ownKeys = Reflect && Reflect.ownKeys || function ownKeys(it) { + var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { var keys = objectGetOwnPropertyNames.f(anObject(it)); var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; @@ -493,22 +516,22 @@ typeof navigator === "object" && (function () { } // add a flag to not completely full polyfills if (options.sham || (targetProperty && targetProperty.sham)) { - hide(sourceProperty, 'sham', true); + createNonEnumerableProperty(sourceProperty, 'sham', true); } // extend global redefine(target, key, sourceProperty, options); } }; - var aFunction = function (it) { + var aFunction$1 = function (it) { if (typeof it != 'function') { throw TypeError(String(it) + ' is not a function'); } return it; }; // optional / simple context binding - var bindContext = function (fn, that, length) { - aFunction(fn); + var functionBindContext = function (fn, that, length) { + aFunction$1(fn); if (that === undefined) return fn; switch (length) { case 0: return function () { @@ -547,12 +570,21 @@ typeof navigator === "object" && (function () { return !String(Symbol()); }); + var useSymbolAsUid = nativeSymbol + // eslint-disable-next-line no-undef + && !Symbol.sham + // eslint-disable-next-line no-undef + && typeof Symbol.iterator == 'symbol'; + + var WellKnownSymbolsStore = shared('wks'); var Symbol$1 = global_1.Symbol; - var store$1 = shared('wks'); + var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid; var wellKnownSymbol = function (name) { - return store$1[name] || (store$1[name] = nativeSymbol && Symbol$1[name] - || (nativeSymbol ? Symbol$1 : uid)('Symbol.' + name)); + if (!has(WellKnownSymbolsStore, name)) { + if (nativeSymbol && has(Symbol$1, name)) WellKnownSymbolsStore[name] = Symbol$1[name]; + else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; }; var SPECIES = wellKnownSymbol('species'); @@ -572,35 +604,23 @@ typeof navigator === "object" && (function () { } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); }; + var push = [].push; + // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation - // 0 -> Array#forEach - // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - // 1 -> Array#map - // https://tc39.github.io/ecma262/#sec-array.prototype.map - // 2 -> Array#filter - // https://tc39.github.io/ecma262/#sec-array.prototype.filter - // 3 -> Array#some - // https://tc39.github.io/ecma262/#sec-array.prototype.some - // 4 -> Array#every - // https://tc39.github.io/ecma262/#sec-array.prototype.every - // 5 -> Array#find - // https://tc39.github.io/ecma262/#sec-array.prototype.find - // 6 -> Array#findIndex - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - var arrayMethods = function (TYPE, specificCreate) { + var createMethod$1 = function (TYPE) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = specificCreate || arraySpeciesCreate; - return function ($this, callbackfn, that) { + return function ($this, callbackfn, that, specificCreate) { var O = toObject($this); var self = indexedObject(O); - var boundFunction = bindContext(callbackfn, that, 3); + var boundFunction = functionBindContext(callbackfn, that, 3); var length = toLength(self.length); var index = 0; + var create = specificCreate || arraySpeciesCreate; var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; var value, result; for (;length > index; index++) if (NO_HOLES || index in self) { @@ -612,7 +632,7 @@ typeof navigator === "object" && (function () { case 3: return true; // some case 5: return value; // find case 6: return index; // findIndex - case 2: target.push(value); // filter + case 2: push.call(target, value); // filter } else if (IS_EVERY) return false; // every } } @@ -620,21 +640,73 @@ typeof navigator === "object" && (function () { }; }; - var sloppyArrayMethod = function (METHOD_NAME, argument) { + var arrayIteration = { + // `Array.prototype.forEach` method + // https://tc39.github.io/ecma262/#sec-array.prototype.foreach + forEach: createMethod$1(0), + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + map: createMethod$1(1), + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + filter: createMethod$1(2), + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + some: createMethod$1(3), + // `Array.prototype.every` method + // https://tc39.github.io/ecma262/#sec-array.prototype.every + every: createMethod$1(4), + // `Array.prototype.find` method + // https://tc39.github.io/ecma262/#sec-array.prototype.find + find: createMethod$1(5), + // `Array.prototype.findIndex` method + // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod$1(6) + }; + + var arrayMethodIsStrict = function (METHOD_NAME, argument) { var method = [][METHOD_NAME]; - return !method || !fails(function () { + return !!method && fails(function () { // eslint-disable-next-line no-useless-call,no-throw-literal method.call(null, argument || function () { throw 1; }, 1); }); }; - var internalForEach = arrayMethods(0); - var SLOPPY_METHOD = sloppyArrayMethod('forEach'); + var defineProperty = Object.defineProperty; + var cache = {}; + + var thrower = function (it) { throw it; }; + + var arrayMethodUsesToLength = function (METHOD_NAME, options) { + if (has(cache, METHOD_NAME)) return cache[METHOD_NAME]; + if (!options) options = {}; + var method = [][METHOD_NAME]; + var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false; + var argument0 = has(options, 0) ? options[0] : thrower; + var argument1 = has(options, 1) ? options[1] : undefined; + + return cache[METHOD_NAME] = !!method && !fails(function () { + if (ACCESSORS && !descriptors) return true; + var O = { length: -1 }; + + if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower }); + else O[1] = 1; + + method.call(O, argument0, argument1); + }); + }; + + var $forEach = arrayIteration.forEach; + + + + var STRICT_METHOD = arrayMethodIsStrict('forEach'); + var USES_TO_LENGTH = arrayMethodUsesToLength('forEach'); // `Array.prototype.forEach` method implementation // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - var arrayForEach = SLOPPY_METHOD ? function forEach(callbackfn /* , thisArg */) { - return internalForEach(this, callbackfn, arguments[1]); + var arrayForEach = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } : [].forEach; // `Array.prototype.forEach` method @@ -672,6 +744,13 @@ typeof navigator === "object" && (function () { }; var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + var test = {}; + + test[TO_STRING_TAG] = 'z'; + + var toStringTagSupport = String(test) === '[object z]'; + + var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag'); // ES3 wrong here var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; @@ -683,11 +762,11 @@ typeof navigator === "object" && (function () { }; // getting tag from ES6+ `Object.prototype.toString` - var classof = function (it) { + var classof = toStringTagSupport ? classofRaw : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$1)) == 'string' ? tag // builtinTag case : CORRECT_ARGUMENTS ? classofRaw(O) // ES3 arguments fallback @@ -702,7 +781,7 @@ typeof navigator === "object" && (function () { || iterators[classof(it)]; }; - // `Array.from` method + // `Array.from` method implementation // https://tc39.github.io/ecma262/#sec-array.from var arrayFrom = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { var O = toObject(arrayLike); @@ -710,25 +789,25 @@ typeof navigator === "object" && (function () { var argumentsLength = arguments.length; var mapfn = argumentsLength > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; - var index = 0; var iteratorMethod = getIteratorMethod(O); - var length, result, step, iterator; - if (mapping) mapfn = bindContext(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + var index = 0; + var length, result, step, iterator, next, value; + if (mapping) mapfn = functionBindContext(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); // if the target is not iterable or it's an array with the default iterator - use a simple case if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) { iterator = iteratorMethod.call(O); + next = iterator.next; result = new C(); - for (;!(step = iterator.next()).done; index++) { - createProperty(result, index, mapping - ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) - : step.value - ); + for (;!(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); } } else { length = toLength(O.length); result = new C(length); for (;length > index; index++) { - createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); } } result.length = index; @@ -782,74 +861,107 @@ typeof navigator === "object" && (function () { from: arrayFrom }); - // 19.1.2.14 / 15.2.3.14 Object.keys(O) + // `Object.keys` method + // https://tc39.github.io/ecma262/#sec-object.keys var objectKeys = Object.keys || function keys(O) { return objectKeysInternal(O, enumBugKeys); }; + // `Object.defineProperties` method + // https://tc39.github.io/ecma262/#sec-object.defineproperties var objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = objectKeys(Properties); var length = keys.length; - var i = 0; + var index = 0; var key; - while (length > i) objectDefineProperty.f(O, key = keys[i++], Properties[key]); + while (length > index) objectDefineProperty.f(O, key = keys[index++], Properties[key]); return O; }; - var document$2 = global_1.document; - - var html = document$2 && document$2.documentElement; + var html = getBuiltIn('document', 'documentElement'); + var GT = '>'; + var LT = '<'; + var PROTOTYPE = 'prototype'; + var SCRIPT = 'script'; var IE_PROTO = sharedKey('IE_PROTO'); - var PROTOTYPE = 'prototype'; - var Empty = function () { /* empty */ }; + var EmptyConstructor = function () { /* empty */ }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + }; + + // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + return temp; + }; // Create object with fake `null` prototype: use iframe Object with cleared prototype - var createDict = function () { + var NullProtoObjectViaIFrame = function () { // Thrash, waste and sodomy: IE GC bug var iframe = documentCreateElement('iframe'); - var length = enumBugKeys.length; - var lt = '<'; - var script = 'script'; - var gt = '>'; - var js = 'java' + script + ':'; + var JS = 'java' + SCRIPT + ':'; var iframeDocument; iframe.style.display = 'none'; html.appendChild(iframe); - iframe.src = String(js); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); - iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt); + iframeDocument.write(scriptTag('document.F=Object')); iframeDocument.close(); - createDict = iframeDocument.F; - while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]]; - return createDict(); + return iframeDocument.F; + }; + + // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + var activeXDocument; + var NullProtoObject = function () { + try { + /* global ActiveXObject */ + activeXDocument = document.domain && new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); }; - // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) + hiddenKeys[IE_PROTO] = true; + + // `Object.create` method + // https://tc39.github.io/ecma262/#sec-object.create var objectCreate = Object.create || function create(O, Properties) { var result; if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO] = O; - } else result = createDict(); + } else result = NullProtoObject(); return Properties === undefined ? result : objectDefineProperties(result, Properties); }; - hiddenKeys[IE_PROTO] = true; - var UNSCOPABLES = wellKnownSymbol('unscopables'); var ArrayPrototype$1 = Array.prototype; // Array.prototype[@@unscopables] // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables if (ArrayPrototype$1[UNSCOPABLES] == undefined) { - hide(ArrayPrototype$1, UNSCOPABLES, objectCreate(null)); + objectDefineProperty.f(ArrayPrototype$1, UNSCOPABLES, { + configurable: true, + value: objectCreate(null) + }); } // add a key to Array.prototype[@@unscopables] @@ -857,19 +969,76 @@ typeof navigator === "object" && (function () { ArrayPrototype$1[UNSCOPABLES][key] = true; }; - var internalIncludes = arrayIncludes(true); + var $includes = arrayIncludes.includes; + + + + var USES_TO_LENGTH$1 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); // `Array.prototype.includes` method // https://tc39.github.io/ecma262/#sec-array.prototype.includes - _export({ target: 'Array', proto: true }, { + _export({ target: 'Array', proto: true, forced: !USES_TO_LENGTH$1 }, { includes: function includes(el /* , fromIndex = 0 */) { - return internalIncludes(this, el, arguments.length > 1 ? arguments[1] : undefined); + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); } }); // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables addToUnscopables('includes'); + var engineUserAgent = getBuiltIn('navigator', 'userAgent') || ''; + + var process$1 = global_1.process; + var versions = process$1 && process$1.versions; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split('.'); + version = match[0] + match[1]; + } else if (engineUserAgent) { + match = engineUserAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = engineUserAgent.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } + } + + var engineV8Version = version && +version; + + var SPECIES$1 = wellKnownSymbol('species'); + + var arrayMethodHasSpeciesSupport = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return engineV8Version >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES$1] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + + var $map = arrayIteration.map; + + + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); + // FF49- issue + var USES_TO_LENGTH$2 = arrayMethodUsesToLength('map'); + + // `Array.prototype.map` method + // https://tc39.github.io/ecma262/#sec-array.prototype.map + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH$2 }, { + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + var FAILS_ON_PRIMITIVES = fails(function () { objectKeys(1); }); // `Object.keys` method @@ -880,6 +1049,49 @@ typeof navigator === "object" && (function () { } }); + var aPossiblePrototype = function (it) { + if (!isObject(it) && it !== null) { + throw TypeError("Can't set " + String(it) + ' as a prototype'); + } return it; + }; + + // `Object.setPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + /* eslint-disable no-proto */ + var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) setter.call(O, proto); + else O.__proto__ = proto; + return O; + }; + }() : undefined); + + // makes subclassing work correct for wrapped built-ins + var inheritIfRequired = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + objectSetPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + typeof (NewTarget = dummy.constructor) == 'function' && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) objectSetPrototypeOf($this, NewTargetPrototype); + return $this; + }; + var MATCH = wellKnownSymbol('match'); // `IsRegExp` abstract operation @@ -889,17 +1101,255 @@ typeof navigator === "object" && (function () { return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp'); }; - // helper for String#{startsWith, endsWith, includes} + // `RegExp.prototype.flags` getter implementation + // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags + var regexpFlags = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; + }; + + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, + // so we use an intermediate function. + function RE(s, f) { + return RegExp(s, f); + } + + var UNSUPPORTED_Y = fails(function () { + // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + var re = RE('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; + }); + + var BROKEN_CARET = fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = RE('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; + }); + + var regexpStickyHelpers = { + UNSUPPORTED_Y: UNSUPPORTED_Y, + BROKEN_CARET: BROKEN_CARET + }; + var SPECIES$2 = wellKnownSymbol('species'); + var setSpecies = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + var defineProperty = objectDefineProperty.f; - var validateStringMethodArguments = function (that, searchString, NAME) { - if (isRegexp(searchString)) { - throw TypeError('String.prototype.' + NAME + " doesn't accept regex"); - } return String(requireObjectCoercible(that)); + if (descriptors && Constructor && !Constructor[SPECIES$2]) { + defineProperty(Constructor, SPECIES$2, { + configurable: true, + get: function () { return this; } + }); + } }; + var defineProperty$1 = objectDefineProperty.f; + var getOwnPropertyNames = objectGetOwnPropertyNames.f; + + + + + + var setInternalState = internalState.set; + + + var MATCH$1 = wellKnownSymbol('match'); + var NativeRegExp = global_1.RegExp; + var RegExpPrototype = NativeRegExp.prototype; + var re1 = /a/g; + var re2 = /a/g; + + // "new" should create a new object, old webkit bug + var CORRECT_NEW = new NativeRegExp(re1) !== re1; + + var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y; + + var FORCED = descriptors && isForced_1('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y$1 || fails(function () { + re2[MATCH$1] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; + }))); + + // `RegExp` constructor + // https://tc39.github.io/ecma262/#sec-regexp-constructor + if (FORCED) { + var RegExpWrapper = function RegExp(pattern, flags) { + var thisIsRegExp = this instanceof RegExpWrapper; + var patternIsRegExp = isRegexp(pattern); + var flagsAreUndefined = flags === undefined; + var sticky; + + if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) { + return pattern; + } + + if (CORRECT_NEW) { + if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source; + } else if (pattern instanceof RegExpWrapper) { + if (flagsAreUndefined) flags = regexpFlags.call(pattern); + pattern = pattern.source; + } + + if (UNSUPPORTED_Y$1) { + sticky = !!flags && flags.indexOf('y') > -1; + if (sticky) flags = flags.replace(/y/g, ''); + } + + var result = inheritIfRequired( + CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags), + thisIsRegExp ? this : RegExpPrototype, + RegExpWrapper + ); + + if (UNSUPPORTED_Y$1 && sticky) setInternalState(result, { sticky: sticky }); + + return result; + }; + var proxy = function (key) { + key in RegExpWrapper || defineProperty$1(RegExpWrapper, key, { + configurable: true, + get: function () { return NativeRegExp[key]; }, + set: function (it) { NativeRegExp[key] = it; } + }); + }; + var keys$1 = getOwnPropertyNames(NativeRegExp); + var index = 0; + while (keys$1.length > index) proxy(keys$1[index++]); + RegExpPrototype.constructor = RegExpWrapper; + RegExpWrapper.prototype = RegExpPrototype; + redefine(global_1, 'RegExp', RegExpWrapper); + } + + // https://tc39.github.io/ecma262/#sec-get-regexp-@@species + setSpecies('RegExp'); + + var nativeExec = RegExp.prototype.exec; + // This always refers to the native implementation, because the + // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, + // which loads this file before patching the method. + var nativeReplace = String.prototype.replace; + + var patchedExec = nativeExec; + + var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + })(); + + var UNSUPPORTED_Y$2 = regexpStickyHelpers.UNSUPPORTED_Y || regexpStickyHelpers.BROKEN_CARET; + + // nonparticipating capturing group, copied from es5-shim's String#split patch. + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2; + + if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + var sticky = UNSUPPORTED_Y$2 && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = String(str).slice(re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; + } + + var regexpExec = patchedExec; + + _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, { + exec: regexpExec + }); + + var TO_STRING = 'toString'; + var RegExpPrototype$1 = RegExp.prototype; + var nativeToString = RegExpPrototype$1[TO_STRING]; + + var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); + // FF44- RegExp#toString has a wrong name + var INCORRECT_NAME = nativeToString.name != TO_STRING; + + // `RegExp.prototype.toString` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring + if (NOT_GENERIC || INCORRECT_NAME) { + redefine(RegExp.prototype, TO_STRING, function toString() { + var R = anObject(this); + var p = String(R.source); + var rf = R.flags; + var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype$1) ? regexpFlags.call(R) : rf); + return '/' + p + '/' + f; + }, { unsafe: true }); + } + + var notARegexp = function (it) { + if (isRegexp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; + }; + + var MATCH$2 = wellKnownSymbol('match'); var correctIsRegexpLogic = function (METHOD_NAME) { var regexp = /./; @@ -907,7 +1357,7 @@ typeof navigator === "object" && (function () { '/./'[METHOD_NAME](regexp); } catch (e) { try { - regexp[MATCH$1] = false; + regexp[MATCH$2] = false; return '/./'[METHOD_NAME](regexp); } catch (f) { /* empty */ } } return false; @@ -917,24 +1367,34 @@ typeof navigator === "object" && (function () { // https://tc39.github.io/ecma262/#sec-string.prototype.includes _export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, { includes: function includes(searchString /* , position = 0 */) { - return !!~validateStringMethodArguments(this, searchString, 'includes') - .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegexp(searchString), arguments.length > 1 ? arguments[1] : undefined); } }); - // CONVERT_TO_STRING: true -> String#at - // CONVERT_TO_STRING: false -> String#codePointAt - var stringAt = function (that, pos, CONVERT_TO_STRING) { - var S = String(requireObjectCoercible(that)); - var position = toInteger(pos); - var size = S.length; - var first, second; - if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; - first = S.charCodeAt(position); - return first < 0xD800 || first > 0xDBFF || position + 1 === size - || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF - ? CONVERT_TO_STRING ? S.charAt(position) : first - : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + // `String.prototype.{ codePointAt, at }` methods implementation + var createMethod$2 = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = String(requireObjectCoercible($this)); + var position = toInteger(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING ? S.charAt(position) : first + : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + + var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod$2(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod$2(true) }; var correctPrototypeGetter = !fails(function () { @@ -946,7 +1406,8 @@ typeof navigator === "object" && (function () { var IE_PROTO$1 = sharedKey('IE_PROTO'); var ObjectPrototype = Object.prototype; - // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) + // `Object.getPrototypeOf` method + // https://tc39.github.io/ecma262/#sec-object.getprototypeof var objectGetPrototypeOf = correctPrototypeGetter ? Object.getPrototypeOf : function (O) { O = toObject(O); if (has(O, IE_PROTO$1)) return O[IE_PROTO$1]; @@ -977,22 +1438,24 @@ typeof navigator === "object" && (function () { if (IteratorPrototype == undefined) IteratorPrototype = {}; // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() - if ( !has(IteratorPrototype, ITERATOR$3)) hide(IteratorPrototype, ITERATOR$3, returnThis); + if ( !has(IteratorPrototype, ITERATOR$3)) { + createNonEnumerableProperty(IteratorPrototype, ITERATOR$3, returnThis); + } var iteratorsCore = { IteratorPrototype: IteratorPrototype, BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS }; - var defineProperty = objectDefineProperty.f; + var defineProperty$2 = objectDefineProperty.f; - var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag'); + var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag'); var setToStringTag = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG$1)) { - defineProperty(it, TO_STRING_TAG$1, { configurable: true, value: TAG }); + if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG$2)) { + defineProperty$2(it, TO_STRING_TAG$2, { configurable: true, value: TAG }); } }; @@ -1012,32 +1475,6 @@ typeof navigator === "object" && (function () { return IteratorConstructor; }; - var validateSetPrototypeOfArguments = function (O, proto) { - anObject(O); - if (!isObject(proto) && proto !== null) { - throw TypeError("Can't set " + String(proto) + ' as a prototype'); - } - }; - - // Works with __proto__ only. Old v8 can't work with null proto objects. - /* eslint-disable no-proto */ - var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () { - var correctSetter = false; - var test = {}; - var setter; - try { - setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; - setter.call(test, []); - correctSetter = test instanceof Array; - } catch (error) { /* empty */ } - return function setPrototypeOf(O, proto) { - validateSetPrototypeOfArguments(O, proto); - if (correctSetter) setter.call(O, proto); - else O.__proto__ = proto; - return O; - }; - }() : undefined); - var IteratorPrototype$2 = iteratorsCore.IteratorPrototype; var BUGGY_SAFARI_ITERATORS$1 = iteratorsCore.BUGGY_SAFARI_ITERATORS; var ITERATOR$4 = wellKnownSymbol('iterator'); @@ -1078,7 +1515,7 @@ typeof navigator === "object" && (function () { if (objectSetPrototypeOf) { objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype$2); } else if (typeof CurrentIteratorPrototype[ITERATOR$4] != 'function') { - hide(CurrentIteratorPrototype, ITERATOR$4, returnThis$2); + createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$4, returnThis$2); } } // Set @@toStringTag to native iterators @@ -1094,7 +1531,7 @@ typeof navigator === "object" && (function () { // define iterator if ( IterablePrototype[ITERATOR$4] !== defaultIterator) { - hide(IterablePrototype, ITERATOR$4, defaultIterator); + createNonEnumerableProperty(IterablePrototype, ITERATOR$4, defaultIterator); } iterators[NAME] = defaultIterator; @@ -1115,14 +1552,18 @@ typeof navigator === "object" && (function () { return methods; }; + var charAt = stringMultibyte.charAt; + + + var STRING_ITERATOR = 'String Iterator'; - var setInternalState = internalState.set; + var setInternalState$1 = internalState.set; var getInternalState = internalState.getterFor(STRING_ITERATOR); // `String.prototype[@@iterator]` method // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator defineIterator(String, 'String', function (iterated) { - setInternalState(this, { + setInternalState$1(this, { type: STRING_ITERATOR, string: String(iterated), index: 0 @@ -1135,7 +1576,7 @@ typeof navigator === "object" && (function () { var index = state.index; var point; if (index >= string.length) return { value: undefined, done: true }; - point = stringAt(string, index, true); + point = charAt(string, index); state.index += point.length; return { value: point, done: false }; }); @@ -1181,7 +1622,7 @@ typeof navigator === "object" && (function () { var CollectionPrototype = Collection && Collection.prototype; // some Chrome versions have non-configurable methods on DOMTokenList if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try { - hide(CollectionPrototype, 'forEach', arrayForEach); + createNonEnumerableProperty(CollectionPrototype, 'forEach', arrayForEach); } catch (error) { CollectionPrototype.forEach = arrayForEach; } @@ -1269,36 +1710,6 @@ typeof navigator === "object" && (function () { } })(); - var f$5 = wellKnownSymbol; - - var wrappedWellKnownSymbol = { - f: f$5 - }; - - var path = global_1; - - var defineProperty$1 = objectDefineProperty.f; - - var defineWellKnownSymbol = function (NAME) { - var Symbol = path.Symbol || (path.Symbol = {}); - if (!has(Symbol, NAME)) defineProperty$1(Symbol, NAME, { - value: wrappedWellKnownSymbol.f(NAME) - }); - }; - - // all enumerable object keys, includes symbols - var enumKeys = function (it) { - var result = objectKeys(it); - var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; - if (getOwnPropertySymbols) { - var symbols = getOwnPropertySymbols(it); - var propertyIsEnumerable = objectPropertyIsEnumerable.f; - var i = 0; - var key; - while (symbols.length > i) if (propertyIsEnumerable.call(it, key = symbols[i++])) result.push(key); - } return result; - }; - var nativeGetOwnPropertyNames = objectGetOwnPropertyNames.f; var toString$1 = {}.toString; @@ -1315,34 +1726,51 @@ typeof navigator === "object" && (function () { }; // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window - var f$6 = function getOwnPropertyNames(it) { + var f$5 = function getOwnPropertyNames(it) { return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : nativeGetOwnPropertyNames(toIndexedObject(it)); }; var objectGetOwnPropertyNamesExternal = { + f: f$5 + }; + + var f$6 = wellKnownSymbol; + + var wellKnownSymbolWrapped = { f: f$6 }; + var defineProperty$3 = objectDefineProperty.f; + + var defineWellKnownSymbol = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!has(Symbol, NAME)) defineProperty$3(Symbol, NAME, { + value: wellKnownSymbolWrapped.f(NAME) + }); + }; + + var $forEach$1 = arrayIteration.forEach; + var HIDDEN = sharedKey('hidden'); var SYMBOL = 'Symbol'; - var setInternalState$1 = internalState.set; + var PROTOTYPE$1 = 'prototype'; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + var setInternalState$2 = internalState.set; var getInternalState$1 = internalState.getterFor(SYMBOL); + var ObjectPrototype$1 = Object[PROTOTYPE$1]; + var $Symbol = global_1.Symbol; + var $stringify = getBuiltIn('JSON', 'stringify'); var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; var nativeDefineProperty$1 = objectDefineProperty.f; var nativeGetOwnPropertyNames$1 = objectGetOwnPropertyNamesExternal.f; - var $Symbol = global_1.Symbol; - var JSON$1 = global_1.JSON; - var nativeJSONStringify = JSON$1 && JSON$1.stringify; - var PROTOTYPE$1 = 'prototype'; - var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); var nativePropertyIsEnumerable$1 = objectPropertyIsEnumerable.f; - var SymbolRegistry = shared('symbol-registry'); var AllSymbols = shared('symbols'); var ObjectPrototypeSymbols = shared('op-symbols'); - var WellKnownSymbolsStore = shared('wks'); - var ObjectPrototype$1 = Object[PROTOTYPE$1]; + var StringToSymbolRegistry = shared('string-to-symbol-registry'); + var SymbolToStringRegistry = shared('symbol-to-string-registry'); + var WellKnownSymbolsStore$1 = shared('wks'); var QObject = global_1.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild; @@ -1352,18 +1780,18 @@ typeof navigator === "object" && (function () { return objectCreate(nativeDefineProperty$1({}, 'a', { get: function () { return nativeDefineProperty$1(this, 'a', { value: 7 }).a; } })).a != 7; - }) ? function (it, key, D) { - var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype$1, key); - if (ObjectPrototypeDescriptor) delete ObjectPrototype$1[key]; - nativeDefineProperty$1(it, key, D); - if (ObjectPrototypeDescriptor && it !== ObjectPrototype$1) { - nativeDefineProperty$1(ObjectPrototype$1, key, ObjectPrototypeDescriptor); + }) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype$1, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype$1[P]; + nativeDefineProperty$1(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype$1) { + nativeDefineProperty$1(ObjectPrototype$1, P, ObjectPrototypeDescriptor); } } : nativeDefineProperty$1; var wrap = function (tag, description) { var symbol = AllSymbols[tag] = objectCreate($Symbol[PROTOTYPE$1]); - setInternalState$1(symbol, { + setInternalState$2(symbol, { type: SYMBOL, tag: tag, description: description @@ -1372,76 +1800,79 @@ typeof navigator === "object" && (function () { return symbol; }; - var isSymbol = nativeSymbol && typeof $Symbol.iterator == 'symbol' ? function (it) { + var isSymbol = useSymbolAsUid ? function (it) { return typeof it == 'symbol'; } : function (it) { return Object(it) instanceof $Symbol; }; - var $defineProperty = function defineProperty(it, key, D) { - if (it === ObjectPrototype$1) $defineProperty(ObjectPrototypeSymbols, key, D); - anObject(it); - key = toPrimitive(key, true); - anObject(D); + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype$1) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPrimitive(P, true); + anObject(Attributes); if (has(AllSymbols, key)) { - if (!D.enumerable) { - if (!has(it, HIDDEN)) nativeDefineProperty$1(it, HIDDEN, createPropertyDescriptor(1, {})); - it[HIDDEN][key] = true; + if (!Attributes.enumerable) { + if (!has(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; } else { - if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; - D = objectCreate(D, { enumerable: createPropertyDescriptor(0, false) }); - } return setSymbolDescriptor(it, key, D); - } return nativeDefineProperty$1(it, key, D); + if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = objectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty$1(O, key, Attributes); }; - var $defineProperties = function defineProperties(it, P) { - anObject(it); - var keys = enumKeys(P = toIndexedObject(P)); - var i = 0; - var l = keys.length; - var key; - while (l > i) $defineProperty(it, key = keys[i++], P[key]); - return it; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach$1(keys, function (key) { + if (!descriptors || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; }; - var $create = function create(it, P) { - return P === undefined ? objectCreate(it) : $defineProperties(objectCreate(it), P); + var $create = function create(O, Properties) { + return Properties === undefined ? objectCreate(O) : $defineProperties(objectCreate(O), Properties); }; - var $propertyIsEnumerable = function propertyIsEnumerable(key) { - var E = nativePropertyIsEnumerable$1.call(this, key = toPrimitive(key, true)); - if (this === ObjectPrototype$1 && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return false; - return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPrimitive(V, true); + var enumerable = nativePropertyIsEnumerable$1.call(this, P); + if (this === ObjectPrototype$1 && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false; + return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; }; - var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { - it = toIndexedObject(it); - key = toPrimitive(key, true); + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPrimitive(P, true); if (it === ObjectPrototype$1 && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return; - var D = nativeGetOwnPropertyDescriptor$1(it, key); - if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; - return D; + var descriptor = nativeGetOwnPropertyDescriptor$1(it, key); + if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; }; - var $getOwnPropertyNames = function getOwnPropertyNames(it) { - var names = nativeGetOwnPropertyNames$1(toIndexedObject(it)); + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames$1(toIndexedObject(O)); var result = []; - var i = 0; - var key; - while (names.length > i) { - if (!has(AllSymbols, key = names[i++]) && !has(hiddenKeys, key)) result.push(key); - } return result; + $forEach$1(names, function (key) { + if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); + }); + return result; }; - var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { - var IS_OP = it === ObjectPrototype$1; - var names = nativeGetOwnPropertyNames$1(IS_OP ? ObjectPrototypeSymbols : toIndexedObject(it)); + var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$1; + var names = nativeGetOwnPropertyNames$1(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); var result = []; - var i = 0; - var key; - while (names.length > i) { - if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectPrototype$1, key) : true)) result.push(AllSymbols[key]); - } return result; + $forEach$1(names, function (key) { + if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype$1, key))) { + result.push(AllSymbols[key]); + } + }); + return result; }; // `Symbol` constructor @@ -1449,7 +1880,7 @@ typeof navigator === "object" && (function () { if (!nativeSymbol) { $Symbol = function Symbol() { if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); - var description = arguments[0] === undefined ? undefined : String(arguments[0]); + var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]); var tag = uid(description); var setter = function (value) { if (this === ObjectPrototype$1) setter.call(ObjectPrototypeSymbols, value); @@ -1459,16 +1890,25 @@ typeof navigator === "object" && (function () { if (descriptors && USE_SETTER) setSymbolDescriptor(ObjectPrototype$1, tag, { configurable: true, set: setter }); return wrap(tag, description); }; + redefine($Symbol[PROTOTYPE$1], 'toString', function toString() { return getInternalState$1(this).tag; }); + redefine($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + objectPropertyIsEnumerable.f = $propertyIsEnumerable; objectDefineProperty.f = $defineProperty; objectGetOwnPropertyDescriptor.f = $getOwnPropertyDescriptor; objectGetOwnPropertyNames.f = objectGetOwnPropertyNamesExternal.f = $getOwnPropertyNames; objectGetOwnPropertySymbols.f = $getOwnPropertySymbols; + wellKnownSymbolWrapped.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + if (descriptors) { // https://github.com/tc39/proposal-Symbol-description nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', { @@ -1481,33 +1921,32 @@ typeof navigator === "object" && (function () { redefine(ObjectPrototype$1, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); } } - - wrappedWellKnownSymbol.f = function (name) { - return wrap(wellKnownSymbol(name), name); - }; } _export({ global: true, wrap: true, forced: !nativeSymbol, sham: !nativeSymbol }, { Symbol: $Symbol }); - for (var wellKnownSymbols = objectKeys(WellKnownSymbolsStore), k = 0; wellKnownSymbols.length > k;) { - defineWellKnownSymbol(wellKnownSymbols[k++]); - } + $forEach$1(objectKeys(WellKnownSymbolsStore$1), function (name) { + defineWellKnownSymbol(name); + }); _export({ target: SYMBOL, stat: true, forced: !nativeSymbol }, { // `Symbol.for` method // https://tc39.github.io/ecma262/#sec-symbol.for 'for': function (key) { - return has(SymbolRegistry, key += '') - ? SymbolRegistry[key] - : SymbolRegistry[key] = $Symbol(key); + var string = String(key); + if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; }, // `Symbol.keyFor` method // https://tc39.github.io/ecma262/#sec-symbol.keyfor keyFor: function keyFor(sym) { if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol'); - for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key; + if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; }, useSetter: function () { USE_SETTER = true; }, useSimple: function () { USE_SETTER = false; } @@ -1547,41 +1986,48 @@ typeof navigator === "object" && (function () { // `JSON.stringify` method behavior with symbols // https://tc39.github.io/ecma262/#sec-json.stringify - JSON$1 && _export({ target: 'JSON', stat: true, forced: !nativeSymbol || fails(function () { - var symbol = $Symbol(); - // MS Edge converts symbol values to JSON as {} - return nativeJSONStringify([symbol]) != '[null]' - // WebKit converts symbol values to JSON as null - || nativeJSONStringify({ a: symbol }) != '{}' - // V8 throws on boxed symbols - || nativeJSONStringify(Object(symbol)) != '{}'; - }) }, { - stringify: function stringify(it) { - var args = [it]; - var i = 1; - var replacer, $replacer; - while (arguments.length > i) args.push(arguments[i++]); - $replacer = replacer = args[1]; - if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined - if (!isArray(replacer)) replacer = function (key, value) { - if (typeof $replacer == 'function') value = $replacer.call(this, key, value); - if (!isSymbol(value)) return value; - }; - args[1] = replacer; - return nativeJSONStringify.apply(JSON$1, args); - } - }); + if ($stringify) { + var FORCED_JSON_STRINGIFY = !nativeSymbol || fails(function () { + var symbol = $Symbol(); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) != '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) != '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) != '{}'; + }); + + _export({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { + // eslint-disable-next-line no-unused-vars + stringify: function stringify(it, replacer, space) { + var args = [it]; + var index = 1; + var $replacer; + while (arguments.length > index) args.push(arguments[index++]); + $replacer = replacer; + if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined + if (!isArray(replacer)) replacer = function (key, value) { + if (typeof $replacer == 'function') value = $replacer.call(this, key, value); + if (!isSymbol(value)) return value; + }; + args[1] = replacer; + return $stringify.apply(null, args); + } + }); + } // `Symbol.prototype[@@toPrimitive]` method // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive - if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]) hide($Symbol[PROTOTYPE$1], TO_PRIMITIVE, $Symbol[PROTOTYPE$1].valueOf); + if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]) { + createNonEnumerableProperty($Symbol[PROTOTYPE$1], TO_PRIMITIVE, $Symbol[PROTOTYPE$1].valueOf); + } // `Symbol.prototype[@@toStringTag]` property // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag setToStringTag($Symbol, SYMBOL); hiddenKeys[HIDDEN] = true; - var defineProperty$2 = objectDefineProperty.f; + var defineProperty$4 = objectDefineProperty.f; var NativeSymbol = global_1.Symbol; @@ -1608,7 +2054,7 @@ typeof navigator === "object" && (function () { var symbolToString = symbolPrototype.toString; var native = String(NativeSymbol('test')) == 'Symbol(test)'; var regexp = /^Symbol\((.*)\)[^)]+$/; - defineProperty$2(symbolPrototype, 'description', { + defineProperty$4(symbolPrototype, 'description', { configurable: true, get: function description() { var symbol = isObject(this) ? this.valueOf() : this; @@ -1628,25 +2074,29 @@ typeof navigator === "object" && (function () { // https://tc39.github.io/ecma262/#sec-symbol.iterator defineWellKnownSymbol('iterator'); - var internalIndexOf = arrayIncludes(false); + var $indexOf = arrayIncludes.indexOf; + + + var nativeIndexOf = [].indexOf; var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; - var SLOPPY_METHOD$1 = sloppyArrayMethod('indexOf'); + var STRICT_METHOD$1 = arrayMethodIsStrict('indexOf'); + var USES_TO_LENGTH$3 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); // `Array.prototype.indexOf` method // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - _export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || SLOPPY_METHOD$1 }, { + _export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD$1 || !USES_TO_LENGTH$3 }, { indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { return NEGATIVE_ZERO // convert -0 to +0 ? nativeIndexOf.apply(this, arguments) || 0 - : internalIndexOf(this, searchElement, arguments[1]); + : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); } }); var ARRAY_ITERATOR = 'Array Iterator'; - var setInternalState$2 = internalState.set; + var setInternalState$3 = internalState.set; var getInternalState$2 = internalState.getterFor(ARRAY_ITERATOR); // `Array.prototype.entries` method @@ -1660,7 +2110,7 @@ typeof navigator === "object" && (function () { // `CreateArrayIterator` internal method // https://tc39.github.io/ecma262/#sec-createarrayiterator var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) { - setInternalState$2(this, { + setInternalState$3(this, { type: ARRAY_ITERATOR, target: toIndexedObject(iterated), // target index: 0, // next index @@ -1695,39 +2145,27 @@ typeof navigator === "object" && (function () { var nativeJoin = [].join; var ES3_STRINGS = indexedObject != Object; - var SLOPPY_METHOD$2 = sloppyArrayMethod('join', ','); + var STRICT_METHOD$2 = arrayMethodIsStrict('join', ','); // `Array.prototype.join` method // https://tc39.github.io/ecma262/#sec-array.prototype.join - _export({ target: 'Array', proto: true, forced: ES3_STRINGS || SLOPPY_METHOD$2 }, { + _export({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$2 }, { join: function join(separator) { return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator); } }); - var SPECIES$1 = wellKnownSymbol('species'); - - var arrayMethodHasSpeciesSupport = function (METHOD_NAME) { - return !fails(function () { - var array = []; - var constructor = array.constructor = {}; - constructor[SPECIES$1] = function () { - return { foo: 1 }; - }; - return array[METHOD_NAME](Boolean).foo !== 1; - }); - }; + var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('slice'); + var USES_TO_LENGTH$4 = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); - var SPECIES$2 = wellKnownSymbol('species'); + var SPECIES$3 = wellKnownSymbol('species'); var nativeSlice = [].slice; var max$1 = Math.max; - var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); - // `Array.prototype.slice` method // https://tc39.github.io/ecma262/#sec-array.prototype.slice // fallback for not array-like ES3 strings and DOM objects - _export({ target: 'Array', proto: true, forced: !SPECIES_SUPPORT }, { + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 || !USES_TO_LENGTH$4 }, { slice: function slice(start, end) { var O = toIndexedObject(this); var length = toLength(O.length); @@ -1741,7 +2179,7 @@ typeof navigator === "object" && (function () { if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) { Constructor = undefined; } else if (isObject(Constructor)) { - Constructor = Constructor[SPECIES$2]; + Constructor = Constructor[SPECIES$3]; if (Constructor === null) Constructor = undefined; } if (Constructor === Array || Constructor === undefined) { @@ -1755,115 +2193,27 @@ typeof navigator === "object" && (function () { } }); - var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag'); - var test = {}; - - test[TO_STRING_TAG$2] = 'z'; - // `Object.prototype.toString` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.tostring - var objectToString = String(test) !== '[object z]' ? function toString() { + var objectToString = toStringTagSupport ? {}.toString : function toString() { return '[object ' + classof(this) + ']'; - } : test.toString; - - var ObjectPrototype$2 = Object.prototype; + }; // `Object.prototype.toString` method // https://tc39.github.io/ecma262/#sec-object.prototype.tostring - if (objectToString !== ObjectPrototype$2.toString) { - redefine(ObjectPrototype$2, 'toString', objectToString, { unsafe: true }); + if (!toStringTagSupport) { + redefine(Object.prototype, 'toString', objectToString, { unsafe: true }); } - // `RegExp.prototype.flags` getter implementation - // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags - var regexpFlags = function () { - var that = anObject(this); - var result = ''; - if (that.global) result += 'g'; - if (that.ignoreCase) result += 'i'; - if (that.multiline) result += 'm'; - if (that.unicode) result += 'u'; - if (that.sticky) result += 'y'; - return result; - }; - - var nativeExec = RegExp.prototype.exec; - // This always refers to the native implementation, because the - // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, - // which loads this file before patching the method. - var nativeReplace = String.prototype.replace; - - var patchedExec = nativeExec; - - var UPDATES_LAST_INDEX_WRONG = (function () { - var re1 = /a/; - var re2 = /b*/g; - nativeExec.call(re1, 'a'); - nativeExec.call(re2, 'a'); - return re1.lastIndex !== 0 || re2.lastIndex !== 0; - })(); - - // nonparticipating capturing group, copied from es5-shim's String#split patch. - var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - - var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; - - if (PATCH) { - patchedExec = function exec(str) { - var re = this; - var lastIndex, reCopy, match, i; - - if (NPCG_INCLUDED) { - reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); - } - if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; - - match = nativeExec.call(re, str); - - if (UPDATES_LAST_INDEX_WRONG && match) { - re.lastIndex = re.global ? match.index + match[0].length : lastIndex; - } - if (NPCG_INCLUDED && match && match.length > 1) { - // Fix browsers whose `exec` methods don't consistently return `undefined` - // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ - nativeReplace.call(match[0], reCopy, function () { - for (i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) match[i] = undefined; - } - }); - } + // TODO: Remove from `core-js@4` since it's moved to entry points - return match; - }; - } - var regexpExec = patchedExec; - _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, { - exec: regexpExec - }); - var TO_STRING = 'toString'; - var nativeToString = /./[TO_STRING]; - var RegExpPrototype = RegExp.prototype; - var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); - // FF44- RegExp#toString has a wrong name - var INCORRECT_NAME = nativeToString.name != TO_STRING; - // `RegExp.prototype.toString` method - // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring - if (NOT_GENERIC || INCORRECT_NAME) { - redefine(RegExp.prototype, TO_STRING, function toString() { - var R = anObject(this); - var p = String(R.source); - var rf = R.flags; - var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? regexpFlags.call(R) : rf); - return '/' + p + '/' + f; - }, { unsafe: true }); - } - var SPECIES$3 = wellKnownSymbol('species'); + var SPECIES$4 = wellKnownSymbol('species'); var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { // #replace needs built-in support for named groups. @@ -1878,6 +2228,21 @@ typeof navigator === "object" && (function () { return ''.replace(re, '$<a>') !== '7'; }); + // IE <= 11 replaces $0 with the whole match, as if it was $& + // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + var REPLACE_KEEPS_$0 = (function () { + return 'a'.replace(/./, '$0') === '$0'; + })(); + + var REPLACE = wellKnownSymbol('replace'); + // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE]) { + return /./[REPLACE]('a', '$0') === ''; + } + return false; + })(); + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec // Weex JS has frozen built-in prototypes, so use try / catch wrapper var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { @@ -1902,15 +2267,22 @@ typeof navigator === "object" && (function () { // Symbol-named RegExp methods call .exec var execCalled = false; var re = /a/; - re.exec = function () { execCalled = true; return null; }; if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; // RegExp[@@split] doesn't call the regex's exec method, but first creates // a new one. We need to return the patched regex when creating the new one. re.constructor = {}; - re.constructor[SPECIES$3] = function () { return re; }; + re.constructor[SPECIES$4] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; } + re.exec = function () { execCalled = true; return null; }; + re[SYMBOL](''); return !execCalled; }); @@ -1918,7 +2290,11 @@ typeof navigator === "object" && (function () { if ( !DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || - (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || + (KEY === 'replace' && !( + REPLACE_SUPPORTS_NAMED_GROUPS && + REPLACE_KEEPS_$0 && + !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + )) || (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) ) { var nativeRegExpMethod = /./[SYMBOL]; @@ -1933,6 +2309,9 @@ typeof navigator === "object" && (function () { return { done: true, value: nativeMethod.call(str, regexp, arg2) }; } return { done: false }; + }, { + REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, + REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE }); var stringMethod = methods[0]; var regexMethod = methods[1]; @@ -1946,14 +2325,17 @@ typeof navigator === "object" && (function () { // 21.2.5.9 RegExp.prototype[@@search](string) : function (string) { return regexMethod.call(string, this); } ); - if (sham) hide(RegExp.prototype[SYMBOL], 'sham', true); } + + if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); }; + var charAt$1 = stringMultibyte.charAt; + // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex var advanceStringIndex = function (S, index, unicode) { - return index + (unicode ? stringAt(S, index, true).length : 1); + return index + (unicode ? charAt$1(S, index).length : 1); }; // `RegExpExec` abstract operation @@ -1986,7 +2368,11 @@ typeof navigator === "object" && (function () { }; // @@replace logic - fixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative) { + fixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE; + var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0; + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + return [ // `String.prototype.replace` method // https://tc39.github.io/ecma262/#sec-string.prototype.replace @@ -2000,8 +2386,13 @@ typeof navigator === "object" && (function () { // `RegExp.prototype[@@replace]` method // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace function (regexp, replaceValue) { - var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); - if (res.done) return res.value; + if ( + (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) || + (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1) + ) { + var res = maybeCallNative(nativeReplace, regexp, this, replaceValue); + if (res.done) return res.value; + } var rx = anObject(regexp); var S = String(this); @@ -2127,14 +2518,14 @@ typeof navigator === "object" && (function () { ]; }); - var SPECIES$4 = wellKnownSymbol('species'); + var SPECIES$5 = wellKnownSymbol('species'); // `SpeciesConstructor` abstract operation // https://tc39.github.io/ecma262/#sec-speciesconstructor var speciesConstructor = function (O, defaultConstructor) { var C = anObject(O).constructor; var S; - return C === undefined || (S = anObject(C)[SPECIES$4]) == undefined ? defaultConstructor : aFunction(S); + return C === undefined || (S = anObject(C)[SPECIES$5]) == undefined ? defaultConstructor : aFunction$1(S); }; var arrayPush = [].push; @@ -2270,15 +2661,17 @@ typeof navigator === "object" && (function () { if (CollectionPrototype$1) { // some Chrome versions have non-configurable methods on DOMTokenList if (CollectionPrototype$1[ITERATOR$5] !== ArrayValues) try { - hide(CollectionPrototype$1, ITERATOR$5, ArrayValues); + createNonEnumerableProperty(CollectionPrototype$1, ITERATOR$5, ArrayValues); } catch (error) { CollectionPrototype$1[ITERATOR$5] = ArrayValues; } - if (!CollectionPrototype$1[TO_STRING_TAG$3]) hide(CollectionPrototype$1, TO_STRING_TAG$3, COLLECTION_NAME$1); + if (!CollectionPrototype$1[TO_STRING_TAG$3]) { + createNonEnumerableProperty(CollectionPrototype$1, TO_STRING_TAG$3, COLLECTION_NAME$1); + } if (domIterables[COLLECTION_NAME$1]) for (var METHOD_NAME in es_array_iterator) { // some Chrome versions have non-configurable methods on DOMTokenList if (CollectionPrototype$1[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try { - hide(CollectionPrototype$1, METHOD_NAME, es_array_iterator[METHOD_NAME]); + createNonEnumerableProperty(CollectionPrototype$1, METHOD_NAME, es_array_iterator[METHOD_NAME]); } catch (error) { CollectionPrototype$1[METHOD_NAME] = es_array_iterator[METHOD_NAME]; } @@ -2289,13 +2682,18 @@ typeof navigator === "object" && (function () { var ITERATOR$6 = wellKnownSymbol('iterator'); var nativeUrl = !fails(function () { - var url = new URL('b?e=1', 'http://a'); + var url = new URL('b?a=1&b=2&c=3', 'http://a'); var searchParams = url.searchParams; + var result = ''; url.pathname = 'c%20d'; + searchParams.forEach(function (value, key) { + searchParams['delete']('b'); + result += key + value; + }); return (isPure && !url.toJSON) || !searchParams.sort - || url.href !== 'http://a/c%20d?e=1' - || searchParams.get('e') !== '1' + || url.href !== 'http://a/c%20d?a=1&c=3' + || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR$6] // throws in Edge @@ -2304,7 +2702,11 @@ typeof navigator === "object" && (function () { // not punycoded in Edge || new URL('http://тест').host !== 'xn--e1aybc' // not escaped in Chrome 62- - || new URL('http://a#б').hash !== '#%D0%B1'; + || new URL('http://a#б').hash !== '#%D0%B1' + // fails in Chrome 66- + || result !== 'a1c3' + // throws in Safari + || new URL('http://x', undefined).host !== 'x'; }); var anInstance = function (it, Constructor, name) { @@ -2314,10 +2716,22 @@ typeof navigator === "object" && (function () { }; var nativeAssign = Object.assign; + var defineProperty$5 = Object.defineProperty; - // 19.1.2.1 Object.assign(target, source, ...) - // should work with symbols and should have deterministic property order (V8 bug) + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign var objectAssign = !nativeAssign || fails(function () { + // should have correct order of operations (Edge bug) + if (descriptors && nativeAssign({ b: 1 }, nativeAssign(defineProperty$5({}, 'a', { + enumerable: true, + get: function () { + defineProperty$5(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) var A = {}; var B = {}; // eslint-disable-next-line no-undef @@ -2410,7 +2824,7 @@ typeof navigator === "object" && (function () { var k = 0; delta = firstTime ? floor$2(delta / damp) : delta >> 1; delta += floor$2(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + for (; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor$2(delta / baseMinusTMin); } return floor$2(k + (baseMinusTMin + 1) * delta / (delta + skew)); @@ -2482,9 +2896,7 @@ typeof navigator === "object" && (function () { var q = delta; for (var k = base; /* no condition */; k += base) { var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } + if (q < t) break; var qMinusT = q - t; var baseMinusT = base - t; output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); @@ -2504,7 +2916,7 @@ typeof navigator === "object" && (function () { return output.join(''); }; - var punycodeToAscii = function (input) { + var stringPunycodeToAscii = function (input) { var encoded = []; var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); var i, label; @@ -2527,10 +2939,34 @@ typeof navigator === "object" && (function () { } return anObject(iteratorMethod.call(it)); }; + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + + + + + + + + + + + + + + + + + + + + + var $fetch = getBuiltIn('fetch'); + var Headers$1 = getBuiltIn('Headers'); var ITERATOR$7 = wellKnownSymbol('iterator'); var URL_SEARCH_PARAMS = 'URLSearchParams'; var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; - var setInternalState$3 = internalState.set; + var setInternalState$4 = internalState.set; var getInternalParamsState = internalState.getterFor(URL_SEARCH_PARAMS); var getInternalIteratorState = internalState.getterFor(URL_SEARCH_PARAMS_ITERATOR); @@ -2584,10 +3020,10 @@ typeof navigator === "object" && (function () { var parseSearchParams = function (result, query) { if (query) { var attributes = query.split('&'); - var i = 0; + var index = 0; var attribute, entry; - while (i < attributes.length) { - attribute = attributes[i++]; + while (index < attributes.length) { + attribute = attributes[index++]; if (attribute.length) { entry = attribute.split('='); result.push({ @@ -2596,7 +3032,7 @@ typeof navigator === "object" && (function () { }); } } - } return result; + } }; var updateSearchParams = function (query) { @@ -2609,7 +3045,7 @@ typeof navigator === "object" && (function () { }; var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { - setInternalState$3(this, { + setInternalState$4(this, { type: URL_SEARCH_PARAMS_ITERATOR, iterator: getIterator(getInternalParamsState(params).entries), kind: kind @@ -2631,12 +3067,12 @@ typeof navigator === "object" && (function () { var init = arguments.length > 0 ? arguments[0] : undefined; var that = this; var entries = []; - var iteratorMethod, iterator, step, entryIterator, first, second, key; + var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; - setInternalState$3(that, { + setInternalState$4(that, { type: URL_SEARCH_PARAMS, entries: entries, - updateURL: null, + updateURL: function () { /* empty */ }, updateSearchParams: updateSearchParams }); @@ -2645,12 +3081,14 @@ typeof navigator === "object" && (function () { iteratorMethod = getIteratorMethod(init); if (typeof iteratorMethod === 'function') { iterator = iteratorMethod.call(init); - while (!(step = iterator.next()).done) { + next = iterator.next; + while (!(step = next.call(iterator)).done) { entryIterator = getIterator(anObject(step.value)); + entryNext = entryIterator.next; if ( - (first = entryIterator.next()).done || - (second = entryIterator.next()).done || - !entryIterator.next().done + (first = entryNext.call(entryIterator)).done || + (second = entryNext.call(entryIterator)).done || + !entryNext.call(entryIterator).done ) throw TypeError('Expected sequence with length 2'); entries.push({ key: first.value + '', value: second.value + '' }); } @@ -2670,7 +3108,7 @@ typeof navigator === "object" && (function () { validateArgumentsLength(arguments.length, 2); var state = getInternalParamsState(this); state.entries.push({ key: name + '', value: value + '' }); - if (state.updateURL) state.updateURL(); + state.updateURL(); }, // `URLSearchParams.prototype.delete` method // https://url.spec.whatwg.org/#dom-urlsearchparams-delete @@ -2679,12 +3117,12 @@ typeof navigator === "object" && (function () { var state = getInternalParamsState(this); var entries = state.entries; var key = name + ''; - var i = 0; - while (i < entries.length) { - if (entries[i].key === key) entries.splice(i, 1); - else i++; + var index = 0; + while (index < entries.length) { + if (entries[index].key === key) entries.splice(index, 1); + else index++; } - if (state.updateURL) state.updateURL(); + state.updateURL(); }, // `URLSearchParams.prototype.get` method // https://url.spec.whatwg.org/#dom-urlsearchparams-get @@ -2692,8 +3130,10 @@ typeof navigator === "object" && (function () { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; - var i = 0; - for (; i < entries.length; i++) if (entries[i].key === key) return entries[i].value; + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) return entries[index].value; + } return null; }, // `URLSearchParams.prototype.getAll` method @@ -2703,8 +3143,10 @@ typeof navigator === "object" && (function () { var entries = getInternalParamsState(this).entries; var key = name + ''; var result = []; - var i = 0; - for (; i < entries.length; i++) if (entries[i].key === key) result.push(entries[i].value); + var index = 0; + for (; index < entries.length; index++) { + if (entries[index].key === key) result.push(entries[index].value); + } return result; }, // `URLSearchParams.prototype.has` method @@ -2713,8 +3155,10 @@ typeof navigator === "object" && (function () { validateArgumentsLength(arguments.length, 1); var entries = getInternalParamsState(this).entries; var key = name + ''; - var i = 0; - while (i < entries.length) if (entries[i++].key === key) return true; + var index = 0; + while (index < entries.length) { + if (entries[index++].key === key) return true; + } return false; }, // `URLSearchParams.prototype.set` method @@ -2726,12 +3170,12 @@ typeof navigator === "object" && (function () { var found = false; var key = name + ''; var val = value + ''; - var i = 0; + var index = 0; var entry; - for (; i < entries.length; i++) { - entry = entries[i]; + for (; index < entries.length; index++) { + entry = entries[index]; if (entry.key === key) { - if (found) entries.splice(i--, 1); + if (found) entries.splice(index--, 1); else { found = true; entry.value = val; @@ -2739,7 +3183,7 @@ typeof navigator === "object" && (function () { } } if (!found) entries.push({ key: key, value: val }); - if (state.updateURL) state.updateURL(); + state.updateURL(); }, // `URLSearchParams.prototype.sort` method // https://url.spec.whatwg.org/#dom-urlsearchparams-sort @@ -2748,26 +3192,28 @@ typeof navigator === "object" && (function () { var entries = state.entries; // Array#sort is not stable in some engines var slice = entries.slice(); - var entry, i, j; + var entry, entriesIndex, sliceIndex; entries.length = 0; - for (i = 0; i < slice.length; i++) { - entry = slice[i]; - for (j = 0; j < i; j++) if (entries[j].key > entry.key) { - entries.splice(j, 0, entry); - break; + for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { + entry = slice[sliceIndex]; + for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { + if (entries[entriesIndex].key > entry.key) { + entries.splice(entriesIndex, 0, entry); + break; + } } - if (j === i) entries.push(entry); + if (entriesIndex === sliceIndex) entries.push(entry); } - if (state.updateURL) state.updateURL(); + state.updateURL(); }, // `URLSearchParams.prototype.forEach` method forEach: function forEach(callback /* , thisArg */) { var entries = getInternalParamsState(this).entries; - var boundFunction = bindContext(callback, arguments.length > 1 ? arguments[1] : undefined, 3); - var i = 0; + var boundFunction = functionBindContext(callback, arguments.length > 1 ? arguments[1] : undefined, 3); + var index = 0; var entry; - while (i < entries.length) { - entry = entries[i++]; + while (index < entries.length) { + entry = entries[index++]; boundFunction(entry.value, entry.key, this); } }, @@ -2793,10 +3239,10 @@ typeof navigator === "object" && (function () { redefine(URLSearchParamsPrototype, 'toString', function toString() { var entries = getInternalParamsState(this).entries; var result = []; - var i = 0; + var index = 0; var entry; - while (i < entries.length) { - entry = entries[i++]; + while (index < entries.length) { + entry = entries[index++]; result.push(serialize(entry.key) + '=' + serialize(entry.value)); } return result.join('&'); }, { enumerable: true }); @@ -2807,16 +3253,63 @@ typeof navigator === "object" && (function () { URLSearchParams: URLSearchParamsConstructor }); + // Wrap `fetch` for correct work with polyfilled `URLSearchParams` + // https://github.com/zloirock/core-js/issues/674 + if (!nativeUrl && typeof $fetch == 'function' && typeof Headers$1 == 'function') { + _export({ global: true, enumerable: true, forced: true }, { + fetch: function fetch(input /* , init */) { + var args = [input]; + var init, body, headers; + if (arguments.length > 1) { + init = arguments[1]; + if (isObject(init)) { + body = init.body; + if (classof(body) === URL_SEARCH_PARAMS) { + headers = init.headers ? new Headers$1(init.headers) : new Headers$1(); + if (!headers.has('content-type')) { + headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + init = objectCreate(init, { + body: createPropertyDescriptor(0, String(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } + args.push(init); + } return $fetch.apply(this, args); + } + }); + } + var web_urlSearchParams = { URLSearchParams: URLSearchParamsConstructor, getState: getInternalParamsState }; + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + + + + + + + + + + + var codeAt = stringMultibyte.codeAt; + + + + + var NativeURL = global_1.URL; var URLSearchParams$1 = web_urlSearchParams.URLSearchParams; var getInternalSearchParamsState = web_urlSearchParams.getState; - var setInternalState$4 = internalState.set; + var setInternalState$5 = internalState.set; var getInternalURLState = internalState.getterFor('URL'); + var floor$3 = Math.floor; var pow = Math.pow; var INVALID_AUTHORITY = 'Invalid authority'; @@ -2825,7 +3318,7 @@ typeof navigator === "object" && (function () { var INVALID_PORT = 'Invalid port'; var ALPHA = /[A-Za-z]/; - var ALPHANUMERIC = /[\d+\-.A-Za-z]/; + var ALPHANUMERIC = /[\d+-.A-Za-z]/; var DIGIT = /\d/; var HEX_START = /^(0x|0X)/; var OCT = /^[0-7]+$/; @@ -2842,7 +3335,7 @@ typeof navigator === "object" && (function () { var EOF; var parseHost = function (url, input) { - var result, codePoints, i; + var result, codePoints, index; if (input.charAt(0) == '[') { if (input.charAt(input.length - 1) != ']') return INVALID_HOST; result = parseIPv6(input.slice(1, -1)); @@ -2853,10 +3346,12 @@ typeof navigator === "object" && (function () { if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; result = ''; codePoints = arrayFrom(input); - for (i = 0; i < codePoints.length; i++) result += percentEncode(codePoints[i], C0ControlPercentEncodeSet); + for (index = 0; index < codePoints.length; index++) { + result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); + } url.host = result; } else { - input = punycodeToAscii(input); + input = stringPunycodeToAscii(input); if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; result = parseIPv4(input); if (result === null) return INVALID_HOST; @@ -2866,38 +3361,38 @@ typeof navigator === "object" && (function () { var parseIPv4 = function (input) { var parts = input.split('.'); - var partsLength, numbers, i, part, R, n, ipv4; - if (parts[parts.length - 1] == '') { - if (parts.length) parts.pop(); + var partsLength, numbers, index, part, radix, number, ipv4; + if (parts.length && parts[parts.length - 1] == '') { + parts.pop(); } partsLength = parts.length; if (partsLength > 4) return input; numbers = []; - for (i = 0; i < partsLength; i++) { - part = parts[i]; + for (index = 0; index < partsLength; index++) { + part = parts[index]; if (part == '') return input; - R = 10; + radix = 10; if (part.length > 1 && part.charAt(0) == '0') { - R = HEX_START.test(part) ? 16 : 8; - part = part.slice(R == 8 ? 1 : 2); + radix = HEX_START.test(part) ? 16 : 8; + part = part.slice(radix == 8 ? 1 : 2); } if (part === '') { - n = 0; + number = 0; } else { - if (!(R == 10 ? DEC : R == 8 ? OCT : HEX).test(part)) return input; - n = parseInt(part, R); + if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; + number = parseInt(part, radix); } - numbers.push(n); + numbers.push(number); } - for (i = 0; i < partsLength; i++) { - n = numbers[i]; - if (i == partsLength - 1) { - if (n >= pow(256, 5 - partsLength)) return null; - } else if (n > 255) return null; + for (index = 0; index < partsLength; index++) { + number = numbers[index]; + if (index == partsLength - 1) { + if (number >= pow(256, 5 - partsLength)) return null; + } else if (number > 255) return null; } ipv4 = numbers.pop(); - for (i = 0; i < numbers.length; i++) { - ipv4 += numbers[i] * pow(256, 3 - i); + for (index = 0; index < numbers.length; index++) { + ipv4 += numbers[index] * pow(256, 3 - index); } return ipv4; }; @@ -2984,9 +3479,9 @@ typeof navigator === "object" && (function () { var maxLength = 1; var currStart = null; var currLength = 0; - var i = 0; - for (; i < 8; i++) { - if (ipv6[i] !== 0) { + var index = 0; + for (; index < 8; index++) { + if (ipv6[index] !== 0) { if (currLength > maxLength) { maxIndex = currStart; maxLength = currLength; @@ -2994,7 +3489,7 @@ typeof navigator === "object" && (function () { currStart = null; currLength = 0; } else { - if (currStart === null) currStart = i; + if (currStart === null) currStart = index; ++currLength; } } @@ -3006,27 +3501,27 @@ typeof navigator === "object" && (function () { }; var serializeHost = function (host) { - var result, i, compress, ignore0; + var result, index, compress, ignore0; // ipv4 if (typeof host == 'number') { result = []; - for (i = 0; i < 4; i++) { + for (index = 0; index < 4; index++) { result.unshift(host % 256); - host = Math.floor(host / 256); + host = floor$3(host / 256); } return result.join('.'); // ipv6 } else if (typeof host == 'object') { result = ''; compress = findLongestZeroSequence(host); - for (i = 0; i < 8; i++) { - if (ignore0 && host[i] === 0) continue; + for (index = 0; index < 8; index++) { + if (ignore0 && host[index] === 0) continue; if (ignore0) ignore0 = false; - if (compress === i) { - result += i ? ':' : '::'; + if (compress === index) { + result += index ? ':' : '::'; ignore0 = true; } else { - result += host[i].toString(16); - if (i < 7) result += ':'; + result += host[index].toString(16); + if (index < 7) result += ':'; } } return '[' + result + ']'; @@ -3045,14 +3540,13 @@ typeof navigator === "object" && (function () { }); var percentEncode = function (char, set) { - var code = stringAt(char, 0); + var code = codeAt(char, 0); return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char); }; var specialSchemes = { ftp: 21, file: null, - gopher: 70, http: 80, https: 443, ws: 80, @@ -3169,13 +3663,11 @@ typeof navigator === "object" && (function () { if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) { buffer += char.toLowerCase(); } else if (char == ':') { - if (stateOverride) { - if ( - (isSpecial(url) != has(specialSchemes, buffer)) || - (buffer == 'file' && (includesCredentials(url) || url.port !== null)) || - (url.scheme == 'file' && !url.host) - ) return; - } + if (stateOverride && ( + (isSpecial(url) != has(specialSchemes, buffer)) || + (buffer == 'file' && (includesCredentials(url) || url.port !== null)) || + (url.scheme == 'file' && !url.host) + )) return; url.scheme = buffer; if (stateOverride) { if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; @@ -3532,7 +4024,7 @@ typeof navigator === "object" && (function () { var that = anInstance(this, URLConstructor, 'URL'); var base = arguments.length > 1 ? arguments[1] : undefined; var urlString = String(url); - var state = setInternalState$4(that, { type: 'URL' }); + var state = setInternalState$5(that, { type: 'URL' }); var baseState, failure; if (base !== undefined) { if (base instanceof URLConstructor) baseState = getInternalURLState(base); @@ -3888,6 +4380,42 @@ typeof navigator === "object" && (function () { return target; } + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose(source, excluded); + + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; + } + function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } @@ -4134,7 +4662,16 @@ typeof navigator === "object" && (function () { global.URLSearchParams = URLSearchParams; }; - if (!('URLSearchParams' in global) || new global.URLSearchParams('?a=1').toString() !== 'a=1') { + var checkIfURLSearchParamsSupported = function checkIfURLSearchParamsSupported() { + try { + var URLSearchParams = global.URLSearchParams; + return new URLSearchParams('?a=1').toString() === 'a=1' && typeof URLSearchParams.prototype.set === 'function'; + } catch (e) { + return false; + } + }; + + if (!checkIfURLSearchParamsSupported()) { polyfillURLSearchParams(); } @@ -4215,7 +4752,7 @@ typeof navigator === "object" && (function () { var checkIfURLIsSupported = function checkIfURLIsSupported() { try { var u = new global.URL('b', 'http://a'); - u.pathname = 'c%20d'; + u.pathname = 'c d'; return u.href === 'http://a/c%20d' && u.searchParams; } catch (e) { return false; @@ -4429,17 +4966,24 @@ typeof navigator === "object" && (function () { } })(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : commonjsGlobal); + // `Symbol.asyncIterator` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.asynciterator + defineWellKnownSymbol('asyncIterator'); + var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; - var IS_CONCAT_SPREADABLE_SUPPORT = !fails(function () { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + var IS_CONCAT_SPREADABLE_SUPPORT = engineV8Version >= 51 || !fails(function () { var array = []; array[IS_CONCAT_SPREADABLE] = false; return array.concat()[0] !== array; }); - var SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('concat'); + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); var isConcatSpreadable = function (O) { if (!isObject(O)) return false; @@ -4447,12 +4991,12 @@ typeof navigator === "object" && (function () { return spreadable !== undefined ? !!spreadable : isArray(O); }; - var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT$1; + var FORCED$1 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; // `Array.prototype.concat` method // https://tc39.github.io/ecma262/#sec-array.prototype.concat // with adding support of @@isConcatSpreadable and @@species - _export({ target: 'Array', proto: true, forced: FORCED }, { + _export({ target: 'Array', proto: true, forced: FORCED$1 }, { concat: function concat(arg) { // eslint-disable-line no-unused-vars var O = toObject(this); var A = arraySpeciesCreate(O, 0); @@ -4474,100 +5018,39 @@ typeof navigator === "object" && (function () { } }); - // `Array.prototype.fill` method implementation - // https://tc39.github.io/ecma262/#sec-array.prototype.fill - var arrayFill = function fill(value /* , start = 0, end = @length */) { - var O = toObject(this); - var length = toLength(O.length); - var argumentsLength = arguments.length; - var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length); - var end = argumentsLength > 2 ? arguments[2] : undefined; - var endPos = end === undefined ? length : toAbsoluteIndex(end, length); - while (endPos > index) O[index++] = value; - return O; - }; - - // `Array.prototype.fill` method - // https://tc39.github.io/ecma262/#sec-array.prototype.fill - _export({ target: 'Array', proto: true }, { fill: arrayFill }); - - // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables - addToUnscopables('fill'); - - var nativeLastIndexOf = [].lastIndexOf; - var NEGATIVE_ZERO$1 = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; - var SLOPPY_METHOD$3 = sloppyArrayMethod('lastIndexOf'); - - // `Array.prototype.lastIndexOf` method implementation - // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof - var arrayLastIndexOf = (NEGATIVE_ZERO$1 || SLOPPY_METHOD$3) ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { - // convert -0 to +0 - if (NEGATIVE_ZERO$1) return nativeLastIndexOf.apply(this, arguments) || 0; - var O = toIndexedObject(this); - var length = toLength(O.length); - var index = length - 1; - if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1])); - if (index < 0) index = length + index; - for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0; - return -1; - } : nativeLastIndexOf; - - // `Array.prototype.lastIndexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof - _export({ target: 'Array', proto: true, forced: arrayLastIndexOf !== [].lastIndexOf }, { - lastIndexOf: arrayLastIndexOf + // `Object.assign` method + // https://tc39.github.io/ecma262/#sec-object.assign + _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { + assign: objectAssign }); - var defineProperty$3 = objectDefineProperty.f; - - var FunctionPrototype = Function.prototype; - var FunctionPrototypeToString = FunctionPrototype.toString; - var nameRE = /^\s*function ([^ (]*)/; - var NAME = 'name'; + var nativeGetOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; - // Function instances `.name` property - // https://tc39.github.io/ecma262/#sec-function-instances-name - if (descriptors && !(NAME in FunctionPrototype)) { - defineProperty$3(FunctionPrototype, NAME, { - configurable: true, - get: function () { - try { - return FunctionPrototypeToString.call(this).match(nameRE)[1]; - } catch (error) { - return ''; - } - } - }); - } - var aFunction$1 = function (variable) { - return typeof variable == 'function' ? variable : undefined; - }; + var FAILS_ON_PRIMITIVES$1 = fails(function () { nativeGetOwnPropertyDescriptor$2(1); }); + var FORCED$2 = !descriptors || FAILS_ON_PRIMITIVES$1; - var getBuiltIn = function (namespace, method) { - return arguments.length < 2 ? aFunction$1(path[namespace]) || aFunction$1(global_1[namespace]) - : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method]; - }; + // `Object.getOwnPropertyDescriptor` method + // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor + _export({ target: 'Object', stat: true, forced: FORCED$2, sham: !descriptors }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor$2(toIndexedObject(it), key); + } + }); - var SPECIES$5 = wellKnownSymbol('species'); + var nativePromiseConstructor = global_1.Promise; - var setSpecies = function (CONSTRUCTOR_NAME) { - var C = getBuiltIn(CONSTRUCTOR_NAME); - var defineProperty = objectDefineProperty.f; - if (descriptors && C && !C[SPECIES$5]) defineProperty(C, SPECIES$5, { - configurable: true, - get: function () { return this; } - }); + var iterate_1 = createCommonjsModule(function (module) { + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; }; - var iterate = createCommonjsModule(function (module) { - var BREAK = {}; - - var exports = module.exports = function (iterable, fn, that, ENTRIES, ITERATOR) { - var boundFunction = bindContext(fn, that, ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, step; + var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { + var boundFunction = functionBindContext(fn, that, AS_ENTRIES ? 2 : 1); + var iterator, iterFn, index, length, result, next, step; - if (ITERATOR) { + if (IS_ITERATOR) { iterator = iterable; } else { iterFn = getIteratorMethod(iterable); @@ -4575,25 +5058,33 @@ typeof navigator === "object" && (function () { // optimisation for array iterators if (isArrayIteratorMethod(iterFn)) { for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = ENTRIES ? boundFunction(anObject(step = iterable[index])[0], step[1]) : boundFunction(iterable[index]); - if (result === BREAK) return BREAK; - } return; + result = AS_ENTRIES + ? boundFunction(anObject(step = iterable[index])[0], step[1]) + : boundFunction(iterable[index]); + if (result && result instanceof Result) return result; + } return new Result(false); } iterator = iterFn.call(iterable); } - while (!(step = iterator.next()).done) { - if (callWithSafeIterationClosing(iterator, boundFunction, step.value, ENTRIES) === BREAK) return BREAK; - } + next = iterator.next; + while (!(step = next.call(iterator)).done) { + result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); + if (typeof result == 'object' && result && result instanceof Result) return result; + } return new Result(false); }; - exports.BREAK = BREAK; + iterate.stop = function (result) { + return new Result(true, result); + }; }); + var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent); + var location = global_1.location; var set$1 = global_1.setImmediate; var clear = global_1.clearImmediate; - var process = global_1.process; + var process$2 = global_1.process; var MessageChannel = global_1.MessageChannel; var Dispatch = global_1.Dispatch; var counter = 0; @@ -4642,9 +5133,9 @@ typeof navigator === "object" && (function () { delete queue[id]; }; // Node.js 0.8- - if (classofRaw(process) == 'process') { + if (classofRaw(process$2) == 'process') { defer = function (id) { - process.nextTick(runner(id)); + process$2.nextTick(runner(id)); }; // Sphere (JS game engine) Dispatch API } else if (Dispatch && Dispatch.now) { @@ -4652,14 +5143,21 @@ typeof navigator === "object" && (function () { Dispatch.now(runner(id)); }; // Browsers with MessageChannel, includes WebWorkers - } else if (MessageChannel) { + // except iOS - https://github.com/zloirock/core-js/issues/624 + } else if (MessageChannel && !engineIsIos) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; - defer = bindContext(port.postMessage, port, 1); + defer = functionBindContext(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if (global_1.addEventListener && typeof postMessage == 'function' && !global_1.importScripts && !fails(post)) { + } else if ( + global_1.addEventListener && + typeof postMessage == 'function' && + !global_1.importScripts && + !fails(post) && + location.protocol !== 'file:' + ) { defer = post; global_1.addEventListener('message', listener, false); // IE8- @@ -4683,30 +5181,26 @@ typeof navigator === "object" && (function () { clear: clear }; - var navigator$1 = global_1.navigator; - - var userAgent = navigator$1 && navigator$1.userAgent || ''; - var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; var macrotask = task.set; var MutationObserver$1 = global_1.MutationObserver || global_1.WebKitMutationObserver; - var process$1 = global_1.process; + var process$3 = global_1.process; var Promise$1 = global_1.Promise; - var IS_NODE = classofRaw(process$1) == 'process'; + var IS_NODE = classofRaw(process$3) == 'process'; // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` var queueMicrotaskDescriptor = getOwnPropertyDescriptor$2(global_1, 'queueMicrotask'); var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; - var flush, head, last, notify, toggle, node, promise; + var flush, head, last, notify, toggle, node, promise, then; // modern engines have queueMicrotask method if (!queueMicrotask) { flush = function () { var parent, fn; - if (IS_NODE && (parent = process$1.domain)) parent.exit(); + if (IS_NODE && (parent = process$3.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; @@ -4724,13 +5218,13 @@ typeof navigator === "object" && (function () { // Node.js if (IS_NODE) { notify = function () { - process$1.nextTick(flush); + process$3.nextTick(flush); }; // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver$1 && !/(iphone|ipod|ipad).*applewebkit/i.test(userAgent)) { + } else if (MutationObserver$1 && !engineIsIos) { toggle = true; node = document.createTextNode(''); - new MutationObserver$1(flush).observe(node, { characterData: true }); // eslint-disable-line no-new + new MutationObserver$1(flush).observe(node, { characterData: true }); notify = function () { node.data = toggle = !toggle; }; @@ -4738,8 +5232,9 @@ typeof navigator === "object" && (function () { } else if (Promise$1 && Promise$1.resolve) { // Promise.resolve without an argument throws an error in LG WebOS 2 promise = Promise$1.resolve(undefined); + then = promise.then; notify = function () { - promise.then(flush); + then.call(promise, flush); }; // for other environments - macrotask based on: // - setImmediate @@ -4771,8 +5266,8 @@ typeof navigator === "object" && (function () { resolve = $$resolve; reject = $$reject; }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); + this.resolve = aFunction$1(resolve); + this.reject = aFunction$1(reject); }; // 25.4.1.5 NewPromiseCapability(C) @@ -4822,19 +5317,17 @@ typeof navigator === "object" && (function () { var SPECIES$6 = wellKnownSymbol('species'); var PROMISE = 'Promise'; var getInternalState$3 = internalState.get; - var setInternalState$5 = internalState.set; + var setInternalState$6 = internalState.set; var getInternalPromiseState = internalState.getterFor(PROMISE); - var PromiseConstructor = global_1[PROMISE]; + var PromiseConstructor = nativePromiseConstructor; var TypeError$1 = global_1.TypeError; - var document$3 = global_1.document; - var process$2 = global_1.process; - var $fetch = global_1.fetch; - var versions = process$2 && process$2.versions; - var v8 = versions && versions.v8 || ''; + var document$2 = global_1.document; + var process$4 = global_1.process; + var $fetch$1 = getBuiltIn('fetch'); var newPromiseCapability$1 = newPromiseCapability.f; var newGenericPromiseCapability = newPromiseCapability$1; - var IS_NODE$1 = classofRaw(process$2) == 'process'; - var DISPATCH_EVENT = !!(document$3 && document$3.createEvent && global_1.dispatchEvent); + var IS_NODE$1 = classofRaw(process$4) == 'process'; + var DISPATCH_EVENT = !!(document$2 && document$2.createEvent && global_1.dispatchEvent); var UNHANDLED_REJECTION = 'unhandledrejection'; var REJECTION_HANDLED = 'rejectionhandled'; var PENDING = 0; @@ -4842,27 +5335,33 @@ typeof navigator === "object" && (function () { var REJECTED = 2; var HANDLED = 1; var UNHANDLED = 2; - var Internal, OwnPromiseCapability, PromiseWrapper; + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; - var FORCED$1 = isForced_1(PROMISE, function () { - // correct subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var empty = function () { /* empty */ }; - var FakePromise = (promise.constructor = {})[SPECIES$6] = function (exec) { - exec(empty, empty); - }; - // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return !((IS_NODE$1 || typeof PromiseRejectionEvent == 'function') - && (!isPure ) - && promise.then(empty) instanceof FakePromise - // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + var FORCED$3 = isForced_1(PROMISE, function () { + var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); + if (!GLOBAL_CORE_JS_PROMISE) { + // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // we can't detect it synchronously, so just check versions - && v8.indexOf('6.6') !== 0 - && userAgent.indexOf('Chrome/66') === -1); + // We can't detect it synchronously, so just check versions + if (engineV8Version === 66) return true; + // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + if (!IS_NODE$1 && typeof PromiseRejectionEvent != 'function') return true; + } + // We can't use @@species feature detection in V8 since it causes + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + if (engineV8Version >= 51 && /native code/.test(PromiseConstructor)) return false; + // Detect correctness of subclassing with @@species support + var promise = PromiseConstructor.resolve(1); + var FakePromise = function (exec) { + exec(function () { /* empty */ }, function () { /* empty */ }); + }; + var constructor = promise.constructor = {}; + constructor[SPECIES$6] = FakePromise; + return !(promise.then(function () { /* empty */ }) instanceof FakePromise); }); - var INCORRECT_ITERATION$1 = FORCED$1 || !checkCorrectnessOfIteration(function (iterable) { + var INCORRECT_ITERATION$1 = FORCED$3 || !checkCorrectnessOfIteration(function (iterable) { PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); }); @@ -4879,8 +5378,10 @@ typeof navigator === "object" && (function () { microtask(function () { var value = state.value; var ok = state.state == FULFILLED; - var i = 0; - var run = function (reaction) { + var index = 0; + // variable length - can't use forEach + while (chain.length > index) { + var reaction = chain[index++]; var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; @@ -4895,7 +5396,7 @@ typeof navigator === "object" && (function () { if (handler === true) result = value; else { if (domain) domain.enter(); - result = handler(value); // may throw + result = handler(value); // can throw if (domain) { domain.exit(); exited = true; @@ -4911,8 +5412,7 @@ typeof navigator === "object" && (function () { if (domain && !exited) domain.exit(); reject(error); } - }; - while (chain.length > i) run(chain[i++]); // variable length - can't use forEach + } state.reactions = []; state.notified = false; if (isReject && !state.rejection) onUnhandled(promise, state); @@ -4922,7 +5422,7 @@ typeof navigator === "object" && (function () { var dispatchEvent = function (name, promise, reason) { var event, handler; if (DISPATCH_EVENT) { - event = document$3.createEvent('Event'); + event = document$2.createEvent('Event'); event.promise = promise; event.reason = reason; event.initEvent(name, false, true); @@ -4940,7 +5440,7 @@ typeof navigator === "object" && (function () { if (IS_UNHANDLED) { result = perform(function () { if (IS_NODE$1) { - process$2.emit('unhandledRejection', value, promise); + process$4.emit('unhandledRejection', value, promise); } else dispatchEvent(UNHANDLED_REJECTION, promise, value); }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should @@ -4957,7 +5457,7 @@ typeof navigator === "object" && (function () { var onHandleUnhandled = function (promise, state) { task$1.call(global_1, function () { if (IS_NODE$1) { - process$2.emit('rejectionHandled', promise); + process$4.emit('rejectionHandled', promise); } else dispatchEvent(REJECTION_HANDLED, promise, state.value); }); }; @@ -5007,11 +5507,11 @@ typeof navigator === "object" && (function () { }; // constructor polyfill - if (FORCED$1) { + if (FORCED$3) { // 25.4.3.1 Promise(executor) PromiseConstructor = function Promise(executor) { anInstance(this, PromiseConstructor, PROMISE); - aFunction(executor); + aFunction$1(executor); Internal.call(this); var state = getInternalState$3(this); try { @@ -5022,7 +5522,7 @@ typeof navigator === "object" && (function () { }; // eslint-disable-next-line no-unused-vars Internal = function Promise(executor) { - setInternalState$5(this, { + setInternalState$6(this, { type: PROMISE, done: false, notified: false, @@ -5041,7 +5541,7 @@ typeof navigator === "object" && (function () { var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE$1 ? process$2.domain : undefined; + reaction.domain = IS_NODE$1 ? process$4.domain : undefined; state.parent = true; state.reactions.push(reaction); if (state.state != PENDING) notify$1(this, state, false); @@ -5066,26 +5566,39 @@ typeof navigator === "object" && (function () { : newGenericPromiseCapability(C); }; - // wrap fetch result - if ( typeof $fetch == 'function') _export({ global: true, enumerable: true, forced: true }, { - // eslint-disable-next-line no-unused-vars - fetch: function fetch(input) { - return promiseResolve(PromiseConstructor, $fetch.apply(global_1, arguments)); - } - }); + if ( typeof nativePromiseConstructor == 'function') { + nativeThen = nativePromiseConstructor.prototype.then; + + // wrap native Promise#then for native async functions + redefine(nativePromiseConstructor.prototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); + // https://github.com/zloirock/core-js/issues/640 + }, { unsafe: true }); + + // wrap fetch result + if (typeof $fetch$1 == 'function') _export({ global: true, enumerable: true, forced: true }, { + // eslint-disable-next-line no-unused-vars + fetch: function fetch(input /* , init */) { + return promiseResolve(PromiseConstructor, $fetch$1.apply(global_1, arguments)); + } + }); + } } - _export({ global: true, wrap: true, forced: FORCED$1 }, { + _export({ global: true, wrap: true, forced: FORCED$3 }, { Promise: PromiseConstructor }); setToStringTag(PromiseConstructor, PROMISE, false); setSpecies(PROMISE); - PromiseWrapper = path[PROMISE]; + PromiseWrapper = getBuiltIn(PROMISE); // statics - _export({ target: PROMISE, stat: true, forced: FORCED$1 }, { + _export({ target: PROMISE, stat: true, forced: FORCED$3 }, { // `Promise.reject` method // https://tc39.github.io/ecma262/#sec-promise.reject reject: function reject(r) { @@ -5095,7 +5608,7 @@ typeof navigator === "object" && (function () { } }); - _export({ target: PROMISE, stat: true, forced: FORCED$1 }, { + _export({ target: PROMISE, stat: true, forced: FORCED$3 }, { // `Promise.resolve` method // https://tc39.github.io/ecma262/#sec-promise.resolve resolve: function resolve(x) { @@ -5112,11 +5625,11 @@ typeof navigator === "object" && (function () { var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); + var $promiseResolve = aFunction$1(C.resolve); var values = []; var counter = 0; var remaining = 1; - iterate(iterable, function (promise) { + iterate_1(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); @@ -5140,8 +5653,8 @@ typeof navigator === "object" && (function () { var capability = newPromiseCapability$1(C); var reject = capability.reject; var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - iterate(iterable, function (promise) { + var $promiseResolve = aFunction$1(C.resolve); + iterate_1(iterable, function (promise) { $promiseResolve.call(C, promise).then(capability.resolve, reject); }); }); @@ -5150,64 +5663,465 @@ typeof navigator === "object" && (function () { } }); - var max$3 = Math.max; - var min$4 = Math.min; - var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF; - var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded'; + /*! *****************************************************************************
+ Copyright (c) Microsoft Corporation. All rights reserved.
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of the
+ License at http://www.apache.org/licenses/LICENSE-2.0
+
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
+ MERCHANTABLITY OR NON-INFRINGEMENT.
+
+ See the Apache Version 2.0 License for specific language governing permissions
+ and limitations under the License.
+ ***************************************************************************** */ + + /* global Reflect, Promise */ + var _extendStatics = function extendStatics(d, b) { + _extendStatics = Object.setPrototypeOf || { + __proto__: [] + } instanceof Array && function (d, b) { + d.__proto__ = b; + } || function (d, b) { + for (var p in b) { + if (b.hasOwnProperty(p)) d[p] = b[p]; + } + }; - var SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('splice'); + return _extendStatics(d, b); + }; - // `Array.prototype.splice` method - // https://tc39.github.io/ecma262/#sec-array.prototype.splice - // with adding support of @@species - _export({ target: 'Array', proto: true, forced: !SPECIES_SUPPORT$2 }, { - splice: function splice(start, deleteCount /* , ...items */) { - var O = toObject(this); - var len = toLength(O.length); - var actualStart = toAbsoluteIndex(start, len); - var argumentsLength = arguments.length; - var insertCount, actualDeleteCount, A, k, from, to; - if (argumentsLength === 0) { - insertCount = actualDeleteCount = 0; - } else if (argumentsLength === 1) { - insertCount = 0; - actualDeleteCount = len - actualStart; - } else { - insertCount = argumentsLength - 2; - actualDeleteCount = min$4(max$3(toInteger(deleteCount), 0), len - actualStart); + function __extends(d, b) { + _extendStatics(d, b); + + function __() { + this.constructor = d; + } + + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var _assign = function __assign() { + _assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + + for (var p in s) { + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } } - if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { - throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED); + + return t; + }; + + return _assign.apply(this, arguments); + }; + function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, + m = s && o[s], + i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function next() { + if (o && i >= o.length) o = void 0; + return { + value: o && o[i++], + done: !o + }; } - A = arraySpeciesCreate(O, actualDeleteCount); - for (k = 0; k < actualDeleteCount; k++) { - from = actualStart + k; - if (from in O) createProperty(A, k, O[from]); + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + } + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), + r, + ar = [], + e; + + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) { + ar.push(r.value); } - A.length = actualDeleteCount; - if (insertCount < actualDeleteCount) { - for (k = actualStart; k < len - actualDeleteCount; k++) { - from = k + actualDeleteCount; - to = k + insertCount; - if (from in O) O[to] = O[from]; - else delete O[to]; - } - for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1]; - } else if (insertCount > actualDeleteCount) { - for (k = len - actualDeleteCount; k > actualStart; k--) { - from = k + actualDeleteCount - 1; - to = k + insertCount - 1; - if (from in O) O[to] = O[from]; - else delete O[to]; + } catch (error) { + e = { + error: error + }; + } finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } finally { + if (e) throw e.error; + } + } + + return ar; + } + function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) { + ar = ar.concat(__read(arguments[i])); + } + + return ar; + } + + /** JSDoc */ + var Severity; + + (function (Severity) { + /** JSDoc */ + Severity["Fatal"] = "fatal"; + /** JSDoc */ + + Severity["Error"] = "error"; + /** JSDoc */ + + Severity["Warning"] = "warning"; + /** JSDoc */ + + Severity["Log"] = "log"; + /** JSDoc */ + + Severity["Info"] = "info"; + /** JSDoc */ + + Severity["Debug"] = "debug"; + /** JSDoc */ + + Severity["Critical"] = "critical"; + })(Severity || (Severity = {})); // tslint:disable:completed-docs + // tslint:disable:no-unnecessary-qualifier no-namespace + + + (function (Severity) { + /** + * Converts a string-based level into a {@link Severity}. + * + * @param level string representation of Severity + * @returns Severity + */ + function fromString(level) { + switch (level) { + case 'debug': + return Severity.Debug; + + case 'info': + return Severity.Info; + + case 'warn': + case 'warning': + return Severity.Warning; + + case 'error': + return Severity.Error; + + case 'fatal': + return Severity.Fatal; + + case 'critical': + return Severity.Critical; + + case 'log': + default: + return Severity.Log; + } + } + + Severity.fromString = fromString; + })(Severity || (Severity = {})); + + /** The status of an event. */ + var Status; + + (function (Status) { + /** The status could not be determined. */ + Status["Unknown"] = "unknown"; + /** The event was skipped due to configuration or callbacks. */ + + Status["Skipped"] = "skipped"; + /** The event was sent to Sentry successfully. */ + + Status["Success"] = "success"; + /** The client is currently rate limited and will try again later. */ + + Status["RateLimit"] = "rate_limit"; + /** The event could not be processed. */ + + Status["Invalid"] = "invalid"; + /** A server-side error ocurred during submission. */ + + Status["Failed"] = "failed"; + })(Status || (Status = {})); // tslint:disable:completed-docs + // tslint:disable:no-unnecessary-qualifier no-namespace + + + (function (Status) { + /** + * Converts a HTTP status code into a {@link Status}. + * + * @param code The HTTP response status code. + * @returns The send status or {@link Status.Unknown}. + */ + function fromHttpCode(code) { + if (code >= 200 && code < 300) { + return Status.Success; + } + + if (code === 429) { + return Status.RateLimit; + } + + if (code >= 400 && code < 500) { + return Status.Invalid; + } + + if (code >= 500) { + return Status.Failed; + } + + return Status.Unknown; + } + + Status.fromHttpCode = fromHttpCode; + })(Status || (Status = {})); + + var defineProperty$6 = objectDefineProperty.f; + + var FunctionPrototype = Function.prototype; + var FunctionPrototypeToString = FunctionPrototype.toString; + var nameRE = /^\s*function ([^ (]*)/; + var NAME = 'name'; + + // Function instances `.name` property + // https://tc39.github.io/ecma262/#sec-function-instances-name + if (descriptors && !(NAME in FunctionPrototype)) { + defineProperty$6(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return FunctionPrototypeToString.call(this).match(nameRE)[1]; + } catch (error) { + return ''; } } - for (k = 0; k < insertCount; k++) { - O[k + actualStart] = arguments[k + 2]; + }); + } + + var setPrototypeOf = Object.setPrototypeOf || ({ + __proto__: [] + } instanceof Array ? setProtoOf : mixinProperties); // tslint:disable-line:no-unbound-method + + /** + * setPrototypeOf polyfill using __proto__ + */ + + function setProtoOf(obj, proto) { + // @ts-ignore + obj.__proto__ = proto; + return obj; + } + /** + * setPrototypeOf polyfill using mixin + */ + + + function mixinProperties(obj, proto) { + for (var prop in proto) { + if (!obj.hasOwnProperty(prop)) { + // @ts-ignore + obj[prop] = proto[prop]; } - O.length = len - actualDeleteCount + insertCount; - return A; } - }); + + return obj; + } + + /** An error emitted by Sentry SDKs and related utilities. */ + + var SentryError = + /** @class */ + function (_super) { + __extends(SentryError, _super); + + function SentryError(message) { + var _newTarget = this.constructor; + + var _this = _super.call(this, message) || this; + + _this.message = message; // tslint:disable:no-unsafe-any + + _this.name = _newTarget.prototype.constructor.name; + setPrototypeOf(_this, _newTarget.prototype); + return _this; + } + + return SentryError; + }(Error); + + /** + * Checks whether given value's type is one of a few Error or Error-like + * {@link isError}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + function isError(wat) { + switch (Object.prototype.toString.call(wat)) { + case '[object Error]': + return true; + + case '[object Exception]': + return true; + + case '[object DOMException]': + return true; + + default: + return isInstanceOf(wat, Error); + } + } + /** + * Checks whether given value's type is ErrorEvent + * {@link isErrorEvent}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isErrorEvent(wat) { + return Object.prototype.toString.call(wat) === '[object ErrorEvent]'; + } + /** + * Checks whether given value's type is DOMError + * {@link isDOMError}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isDOMError(wat) { + return Object.prototype.toString.call(wat) === '[object DOMError]'; + } + /** + * Checks whether given value's type is DOMException + * {@link isDOMException}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isDOMException(wat) { + return Object.prototype.toString.call(wat) === '[object DOMException]'; + } + /** + * Checks whether given value's type is a string + * {@link isString}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isString(wat) { + return Object.prototype.toString.call(wat) === '[object String]'; + } + /** + * Checks whether given value's is a primitive (undefined, null, number, boolean, string) + * {@link isPrimitive}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isPrimitive(wat) { + return wat === null || _typeof(wat) !== 'object' && typeof wat !== 'function'; + } + /** + * Checks whether given value's type is an object literal + * {@link isPlainObject}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isPlainObject(wat) { + return Object.prototype.toString.call(wat) === '[object Object]'; + } + /** + * Checks whether given value's type is an Event instance + * {@link isEvent}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isEvent(wat) { + // tslint:disable-next-line:strict-type-predicates + return typeof Event !== 'undefined' && isInstanceOf(wat, Event); + } + /** + * Checks whether given value's type is an Element instance + * {@link isElement}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isElement(wat) { + // tslint:disable-next-line:strict-type-predicates + return typeof Element !== 'undefined' && isInstanceOf(wat, Element); + } + /** + * Checks whether given value's type is an regexp + * {@link isRegExp}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isRegExp(wat) { + return Object.prototype.toString.call(wat) === '[object RegExp]'; + } + /** + * Checks whether given value has a then function. + * @param wat A value to be checked. + */ + + function isThenable$1(wat) { + // tslint:disable:no-unsafe-any + return Boolean(wat && wat.then && typeof wat.then === 'function'); // tslint:enable:no-unsafe-any + } + /** + * Checks whether given value's type is a SyntheticEvent + * {@link isSyntheticEvent}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ + + function isSyntheticEvent(wat) { + // tslint:disable-next-line:no-unsafe-any + return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat; + } + /** + * Checks whether given value's type is an instance of provided constructor. + * {@link isInstanceOf}. + * + * @param wat A value to be checked. + * @param base A constructor to be used in a check. + * @returns A boolean representing the result. + */ + + function isInstanceOf(wat, base) { + try { + // tslint:disable-next-line:no-unsafe-any + return wat instanceof base; + } catch (_e) { + return false; + } + } // @@match logic fixRegexpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) { @@ -5246,164 +6160,27 @@ typeof navigator === "object" && (function () { ]; }); - var internalFilter = arrayMethods(2); - var SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport('filter'); - - // `Array.prototype.filter` method - // https://tc39.github.io/ecma262/#sec-array.prototype.filter - // with adding support of @@species - _export({ target: 'Array', proto: true, forced: !SPECIES_SUPPORT$3 }, { - filter: function filter(callbackfn /* , thisArg */) { - return internalFilter(this, callbackfn, arguments[1]); - } - }); - - var internalMap = arrayMethods(1); - var SPECIES_SUPPORT$4 = arrayMethodHasSpeciesSupport('map'); - - // `Array.prototype.map` method - // https://tc39.github.io/ecma262/#sec-array.prototype.map - // with adding support of @@species - _export({ target: 'Array', proto: true, forced: !SPECIES_SUPPORT$4 }, { - map: function map(callbackfn /* , thisArg */) { - return internalMap(this, callbackfn, arguments[1]); - } - }); - - // `Array.prototype.{ reduce, reduceRight }` methods implementation - // https://tc39.github.io/ecma262/#sec-array.prototype.reduce - // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright - var arrayReduce = function (that, callbackfn, argumentsLength, memo, isRight) { - aFunction(callbackfn); - var O = toObject(that); - var self = indexedObject(O); - var length = toLength(O.length); - var index = isRight ? length - 1 : 0; - var i = isRight ? -1 : 1; - if (argumentsLength < 2) while (true) { - if (index in self) { - memo = self[index]; - index += i; - break; - } - index += i; - if (isRight ? index < 0 : length <= index) { - throw TypeError('Reduce of empty array with no initial value'); - } - } - for (;isRight ? index >= 0 : length > index; index += i) if (index in self) { - memo = callbackfn(memo, self[index], index, O); - } - return memo; - }; - - var SLOPPY_METHOD$4 = sloppyArrayMethod('reduce'); - - // `Array.prototype.reduce` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduce - _export({ target: 'Array', proto: true, forced: SLOPPY_METHOD$4 }, { - reduce: function reduce(callbackfn /* , initialValue */) { - return arrayReduce(this, callbackfn, arguments.length, arguments[1], false); - } - }); - - var nativeIsFrozen = Object.isFrozen; - var FAILS_ON_PRIMITIVES$1 = fails(function () { nativeIsFrozen(1); }); - - // `Object.isFrozen` method - // https://tc39.github.io/ecma262/#sec-object.isfrozen - _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$1 }, { - isFrozen: function isFrozen(it) { - return isObject(it) ? nativeIsFrozen ? nativeIsFrozen(it) : false : true; - } - }); - - var inheritIfRequired = function (that, target, C) { - var S = target.constructor; - var P; - if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && objectSetPrototypeOf) { - objectSetPrototypeOf(that, P); - } return that; - }; - - var defineProperty$4 = objectDefineProperty.f; - var getOwnPropertyNames = objectGetOwnPropertyNames.f; - - - - - - - - var MATCH$2 = wellKnownSymbol('match'); - var NativeRegExp = global_1.RegExp; - var RegExpPrototype$1 = NativeRegExp.prototype; - var re1 = /a/g; - var re2 = /a/g; - - // "new" should create a new object, old webkit bug - var CORRECT_NEW = new NativeRegExp(re1) !== re1; - - var FORCED$2 = isForced_1('RegExp', descriptors && (!CORRECT_NEW || fails(function () { - re2[MATCH$2] = false; - // RegExp constructor can alter flags and IsRegExp works correct with @@match - return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; - }))); - - // `RegExp` constructor - // https://tc39.github.io/ecma262/#sec-regexp-constructor - if (FORCED$2) { - var RegExpWrapper = function RegExp(pattern, flags) { - var thisIsRegExp = this instanceof RegExpWrapper; - var patternIsRegExp = isRegexp(pattern); - var flagsAreUndefined = flags === undefined; - return !thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined ? pattern - : inheritIfRequired(CORRECT_NEW - ? new NativeRegExp(patternIsRegExp && !flagsAreUndefined ? pattern.source : pattern, flags) - : NativeRegExp((patternIsRegExp = pattern instanceof RegExpWrapper) - ? pattern.source - : pattern, patternIsRegExp && flagsAreUndefined ? regexpFlags.call(pattern) : flags) - , thisIsRegExp ? this : RegExpPrototype$1, RegExpWrapper); - }; - var proxy = function (key) { - key in RegExpWrapper || defineProperty$4(RegExpWrapper, key, { - configurable: true, - get: function () { return NativeRegExp[key]; }, - set: function (it) { NativeRegExp[key] = it; } - }); - }; - var keys$1 = getOwnPropertyNames(NativeRegExp); - var i = 0; - while (i < keys$1.length) proxy(keys$1[i++]); - RegExpPrototype$1.constructor = RegExpWrapper; - RegExpWrapper.prototype = RegExpPrototype$1; - redefine(global_1, 'RegExp', RegExpWrapper); - } - - // https://tc39.github.io/ecma262/#sec-get-regexp-@@species - setSpecies('RegExp'); + var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined'; - var defineProperty$5 = objectDefineProperty.f; + var defineProperty$7 = objectDefineProperty.f; - var DataView = global_1.DataView; - var DataViewPrototype = DataView && DataView.prototype; var Int8Array$1 = global_1.Int8Array; var Int8ArrayPrototype = Int8Array$1 && Int8Array$1.prototype; var Uint8ClampedArray = global_1.Uint8ClampedArray; var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype; var TypedArray = Int8Array$1 && objectGetPrototypeOf(Int8Array$1); var TypedArrayPrototype = Int8ArrayPrototype && objectGetPrototypeOf(Int8ArrayPrototype); - var ObjectPrototype$3 = Object.prototype; - var isPrototypeOf = ObjectPrototype$3.isPrototypeOf; + var ObjectPrototype$2 = Object.prototype; + var isPrototypeOf = ObjectPrototype$2.isPrototypeOf; var TO_STRING_TAG$4 = wellKnownSymbol('toStringTag'); var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG'); - var NATIVE_ARRAY_BUFFER = !!(global_1.ArrayBuffer && global_1.DataView); - var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!objectSetPrototypeOf; + // Fixing native typed arrays in Opera Presto crashes the browser, see #595 + var NATIVE_ARRAY_BUFFER_VIEWS = arrayBufferNative && !!objectSetPrototypeOf && classof(global_1.opera) !== 'Opera'; var TYPED_ARRAY_TAG_REQIRED = false; var NAME$1; @@ -5444,7 +6221,7 @@ typeof navigator === "object" && (function () { } throw TypeError('Target is not a typed array constructor'); }; - var exportProto = function (KEY, property, forced) { + var exportTypedArrayMethod = function (KEY, property, forced) { if (!descriptors) return; if (forced) for (var ARRAY in TypedArrayConstructorsList) { var TypedArrayConstructor = global_1[ARRAY]; @@ -5458,7 +6235,7 @@ typeof navigator === "object" && (function () { } }; - var exportStatic = function (KEY, property, forced) { + var exportTypedArrayStaticMethod = function (KEY, property, forced) { var ARRAY, TypedArrayConstructor; if (!descriptors) return; if (objectSetPrototypeOf) { @@ -5498,7 +6275,7 @@ typeof navigator === "object" && (function () { } } - if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype$3) { + if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype$2) { TypedArrayPrototype = TypedArray.prototype; if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME$1 in TypedArrayConstructorsList) { if (global_1[NAME$1]) objectSetPrototypeOf(global_1[NAME$1].prototype, TypedArrayPrototype); @@ -5512,27 +6289,21 @@ typeof navigator === "object" && (function () { if (descriptors && !has(TypedArrayPrototype, TO_STRING_TAG$4)) { TYPED_ARRAY_TAG_REQIRED = true; - defineProperty$5(TypedArrayPrototype, TO_STRING_TAG$4, { get: function () { + defineProperty$7(TypedArrayPrototype, TO_STRING_TAG$4, { get: function () { return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined; } }); for (NAME$1 in TypedArrayConstructorsList) if (global_1[NAME$1]) { - hide(global_1[NAME$1], TYPED_ARRAY_TAG, NAME$1); + createNonEnumerableProperty(global_1[NAME$1], TYPED_ARRAY_TAG, NAME$1); } } - // WebKit bug - the same parent prototype for typed arrays and data view - if (NATIVE_ARRAY_BUFFER && objectSetPrototypeOf && objectGetPrototypeOf(DataViewPrototype) !== ObjectPrototype$3) { - objectSetPrototypeOf(DataViewPrototype, ObjectPrototype$3); - } - var arrayBufferViewCore = { - NATIVE_ARRAY_BUFFER: NATIVE_ARRAY_BUFFER, NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS, TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG, aTypedArray: aTypedArray, aTypedArrayConstructor: aTypedArrayConstructor, - exportProto: exportProto, - exportStatic: exportStatic, + exportTypedArrayMethod: exportTypedArrayMethod, + exportTypedArrayStaticMethod: exportTypedArrayStaticMethod, isView: isView, isTypedArray: isTypedArray, TypedArray: TypedArray, @@ -5545,10 +6316,10 @@ typeof navigator === "object" && (function () { var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; - var ArrayBuffer = global_1.ArrayBuffer; + var ArrayBuffer$1 = global_1.ArrayBuffer; var Int8Array$2 = global_1.Int8Array; - var typedArraysConstructorsRequiresWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails(function () { + var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails(function () { Int8Array$2(1); }) || !fails(function () { new Int8Array$2(-1); @@ -5558,8 +6329,8 @@ typeof navigator === "object" && (function () { new Int8Array$2(1.5); new Int8Array$2(iterable); }, true) || fails(function () { - // Safari 11 bug - return new Int8Array$2(new ArrayBuffer(2), 1, undefined).length !== 1; + // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill + return new Int8Array$2(new ArrayBuffer$1(2), 1, undefined).length !== 1; }); // `ToIndex` abstract operation @@ -5572,69 +6343,40 @@ typeof navigator === "object" && (function () { return length; }; - var arrayBuffer = createCommonjsModule(function (module, exports) { - - - var NATIVE_ARRAY_BUFFER = arrayBufferViewCore.NATIVE_ARRAY_BUFFER; - - - - - - - - var getOwnPropertyNames = objectGetOwnPropertyNames.f; - var defineProperty = objectDefineProperty.f; - - - - - var getInternalState = internalState.get; - var setInternalState = internalState.set; - var ARRAY_BUFFER = 'ArrayBuffer'; - var DATA_VIEW = 'DataView'; - var PROTOTYPE = 'prototype'; - var WRONG_LENGTH = 'Wrong length'; - var WRONG_INDEX = 'Wrong index'; - var NativeArrayBuffer = global_1[ARRAY_BUFFER]; - var $ArrayBuffer = NativeArrayBuffer; - var $DataView = global_1[DATA_VIEW]; - var Math = global_1.Math; - var RangeError = global_1.RangeError; + // IEEE754 conversions based on https://github.com/feross/ieee754 // eslint-disable-next-line no-shadow-restricted-names - var Infinity = 1 / 0; + var Infinity$1 = 1 / 0; var abs = Math.abs; - var pow = Math.pow; - var floor = Math.floor; + var pow$1 = Math.pow; + var floor$4 = Math.floor; var log = Math.log; var LN2 = Math.LN2; - // IEEE754 conversions based on https://github.com/feross/ieee754 - var packIEEE754 = function (number, mantissaLength, bytes) { + var pack = function (number, mantissaLength, bytes) { var buffer = new Array(bytes); var exponentLength = bytes * 8 - mantissaLength - 1; var eMax = (1 << exponentLength) - 1; var eBias = eMax >> 1; - var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0; + var rt = mantissaLength === 23 ? pow$1(2, -24) - pow$1(2, -77) : 0; var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0; var index = 0; var exponent, mantissa, c; number = abs(number); // eslint-disable-next-line no-self-compare - if (number != number || number === Infinity) { + if (number != number || number === Infinity$1) { // eslint-disable-next-line no-self-compare mantissa = number != number ? 1 : 0; exponent = eMax; } else { - exponent = floor(log(number) / LN2); - if (number * (c = pow(2, -exponent)) < 1) { + exponent = floor$4(log(number) / LN2); + if (number * (c = pow$1(2, -exponent)) < 1) { exponent--; c *= 2; } if (exponent + eBias >= 1) { number += rt / c; } else { - number += rt * pow(2, 1 - eBias); + number += rt * pow$1(2, 1 - eBias); } if (number * c >= 2) { exponent++; @@ -5644,10 +6386,10 @@ typeof navigator === "object" && (function () { mantissa = 0; exponent = eMax; } else if (exponent + eBias >= 1) { - mantissa = (number * c - 1) * pow(2, mantissaLength); + mantissa = (number * c - 1) * pow$1(2, mantissaLength); exponent = exponent + eBias; } else { - mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength); + mantissa = number * pow$1(2, eBias - 1) * pow$1(2, mantissaLength); exponent = 0; } } @@ -5659,7 +6401,7 @@ typeof navigator === "object" && (function () { return buffer; }; - var unpackIEEE754 = function (buffer, mantissaLength) { + var unpack = function (buffer, mantissaLength) { var bytes = buffer.length; var exponentLength = bytes * 8 - mantissaLength - 1; var eMax = (1 << exponentLength) - 1; @@ -5678,17 +6420,54 @@ typeof navigator === "object" && (function () { if (exponent === 0) { exponent = 1 - eBias; } else if (exponent === eMax) { - return mantissa ? NaN : sign ? -Infinity : Infinity; + return mantissa ? NaN : sign ? -Infinity$1 : Infinity$1; } else { - mantissa = mantissa + pow(2, mantissaLength); + mantissa = mantissa + pow$1(2, mantissaLength); exponent = exponent - eBias; - } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength); + } return (sign ? -1 : 1) * mantissa * pow$1(2, exponent - mantissaLength); }; - var unpackInt32 = function (buffer) { - return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; + var ieee754 = { + pack: pack, + unpack: unpack + }; + + // `Array.prototype.fill` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.fill + var arrayFill = function fill(value /* , start = 0, end = @length */) { + var O = toObject(this); + var length = toLength(O.length); + var argumentsLength = arguments.length; + var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length); + var end = argumentsLength > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex(end, length); + while (endPos > index) O[index++] = value; + return O; }; + var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + var defineProperty$8 = objectDefineProperty.f; + + + + + var getInternalState$4 = internalState.get; + var setInternalState$7 = internalState.set; + var ARRAY_BUFFER = 'ArrayBuffer'; + var DATA_VIEW = 'DataView'; + var PROTOTYPE$2 = 'prototype'; + var WRONG_LENGTH = 'Wrong length'; + var WRONG_INDEX = 'Wrong index'; + var NativeArrayBuffer = global_1[ARRAY_BUFFER]; + var $ArrayBuffer = NativeArrayBuffer; + var $DataView = global_1[DATA_VIEW]; + var $DataViewPrototype = $DataView && $DataView[PROTOTYPE$2]; + var ObjectPrototype$3 = Object.prototype; + var RangeError$1 = global_1.RangeError; + + var packIEEE754 = ieee754.pack; + var unpackIEEE754 = ieee754.unpack; + var packInt8 = function (number) { return [number & 0xFF]; }; @@ -5701,6 +6480,10 @@ typeof navigator === "object" && (function () { return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF]; }; + var unpackInt32 = function (buffer) { + return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; + }; + var packFloat32 = function (number) { return packIEEE754(number, 23, 4); }; @@ -5710,36 +6493,34 @@ typeof navigator === "object" && (function () { }; var addGetter = function (Constructor, key) { - defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } }); + defineProperty$8(Constructor[PROTOTYPE$2], key, { get: function () { return getInternalState$4(this)[key]; } }); }; - var get = function (view, count, index, isLittleEndian) { - var numIndex = +index; - var intIndex = toIndex(numIndex); - var store = getInternalState(view); - if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX); - var bytes = getInternalState(store.buffer).bytes; + var get$1 = function (view, count, index, isLittleEndian) { + var intIndex = toIndex(index); + var store = getInternalState$4(view); + if (intIndex + count > store.byteLength) throw RangeError$1(WRONG_INDEX); + var bytes = getInternalState$4(store.buffer).bytes; var start = intIndex + store.byteOffset; var pack = bytes.slice(start, start + count); return isLittleEndian ? pack : pack.reverse(); }; - var set = function (view, count, index, conversion, value, isLittleEndian) { - var numIndex = +index; - var intIndex = toIndex(numIndex); - var store = getInternalState(view); - if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX); - var bytes = getInternalState(store.buffer).bytes; + var set$2 = function (view, count, index, conversion, value, isLittleEndian) { + var intIndex = toIndex(index); + var store = getInternalState$4(view); + if (intIndex + count > store.byteLength) throw RangeError$1(WRONG_INDEX); + var bytes = getInternalState$4(store.buffer).bytes; var start = intIndex + store.byteOffset; var pack = conversion(+value); for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1]; }; - if (!NATIVE_ARRAY_BUFFER) { + if (!arrayBufferNative) { $ArrayBuffer = function ArrayBuffer(length) { anInstance(this, $ArrayBuffer, ARRAY_BUFFER); var byteLength = toIndex(length); - setInternalState(this, { + setInternalState$7(this, { bytes: arrayFill.call(new Array(byteLength), 0), byteLength: byteLength }); @@ -5749,12 +6530,12 @@ typeof navigator === "object" && (function () { $DataView = function DataView(buffer, byteOffset, byteLength) { anInstance(this, $DataView, DATA_VIEW); anInstance(buffer, $ArrayBuffer, DATA_VIEW); - var bufferLength = getInternalState(buffer).byteLength; + var bufferLength = getInternalState$4(buffer).byteLength; var offset = toInteger(byteOffset); - if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset'); + if (offset < 0 || offset > bufferLength) throw RangeError$1('Wrong offset'); byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); - if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH); - setInternalState(this, { + if (offset + byteLength > bufferLength) throw RangeError$1(WRONG_LENGTH); + setInternalState$7(this, { buffer: buffer, byteLength: byteLength, byteOffset: offset @@ -5773,56 +6554,56 @@ typeof navigator === "object" && (function () { addGetter($DataView, 'byteOffset'); } - redefineAll($DataView[PROTOTYPE], { + redefineAll($DataView[PROTOTYPE$2], { getInt8: function getInt8(byteOffset) { - return get(this, 1, byteOffset)[0] << 24 >> 24; + return get$1(this, 1, byteOffset)[0] << 24 >> 24; }, getUint8: function getUint8(byteOffset) { - return get(this, 1, byteOffset)[0]; + return get$1(this, 1, byteOffset)[0]; }, getInt16: function getInt16(byteOffset /* , littleEndian */) { - var bytes = get(this, 2, byteOffset, arguments[1]); + var bytes = get$1(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); return (bytes[1] << 8 | bytes[0]) << 16 >> 16; }, getUint16: function getUint16(byteOffset /* , littleEndian */) { - var bytes = get(this, 2, byteOffset, arguments[1]); + var bytes = get$1(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); return bytes[1] << 8 | bytes[0]; }, getInt32: function getInt32(byteOffset /* , littleEndian */) { - return unpackInt32(get(this, 4, byteOffset, arguments[1])); + return unpackInt32(get$1(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)); }, getUint32: function getUint32(byteOffset /* , littleEndian */) { - return unpackInt32(get(this, 4, byteOffset, arguments[1])) >>> 0; + return unpackInt32(get$1(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0; }, getFloat32: function getFloat32(byteOffset /* , littleEndian */) { - return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23); + return unpackIEEE754(get$1(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23); }, getFloat64: function getFloat64(byteOffset /* , littleEndian */) { - return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52); + return unpackIEEE754(get$1(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52); }, setInt8: function setInt8(byteOffset, value) { - set(this, 1, byteOffset, packInt8, value); + set$2(this, 1, byteOffset, packInt8, value); }, setUint8: function setUint8(byteOffset, value) { - set(this, 1, byteOffset, packInt8, value); + set$2(this, 1, byteOffset, packInt8, value); }, setInt16: function setInt16(byteOffset, value /* , littleEndian */) { - set(this, 2, byteOffset, packInt16, value, arguments[2]); + set$2(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); }, setUint16: function setUint16(byteOffset, value /* , littleEndian */) { - set(this, 2, byteOffset, packInt16, value, arguments[2]); + set$2(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); }, setInt32: function setInt32(byteOffset, value /* , littleEndian */) { - set(this, 4, byteOffset, packInt32, value, arguments[2]); + set$2(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); }, setUint32: function setUint32(byteOffset, value /* , littleEndian */) { - set(this, 4, byteOffset, packInt32, value, arguments[2]); + set$2(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); }, setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) { - set(this, 4, byteOffset, packFloat32, value, arguments[2]); + set$2(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined); }, setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) { - set(this, 8, byteOffset, packFloat64, value, arguments[2]); + set$2(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined); } }); } else { @@ -5840,18 +6621,26 @@ typeof navigator === "object" && (function () { anInstance(this, $ArrayBuffer); return new NativeArrayBuffer(toIndex(length)); }; - var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE]; - for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) { - if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, NativeArrayBuffer[key]); + var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE$2] = NativeArrayBuffer[PROTOTYPE$2]; + for (var keys$2 = getOwnPropertyNames$1(NativeArrayBuffer), j = 0, key; keys$2.length > j;) { + if (!((key = keys$2[j++]) in $ArrayBuffer)) { + createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]); + } } ArrayBufferPrototype.constructor = $ArrayBuffer; } + + // WebKit bug - the same parent prototype for typed arrays and data view + if (objectSetPrototypeOf && objectGetPrototypeOf($DataViewPrototype) !== ObjectPrototype$3) { + objectSetPrototypeOf($DataViewPrototype, ObjectPrototype$3); + } + // iOS Safari 7.x bug var testView = new $DataView(new $ArrayBuffer(2)); - var nativeSetInt8 = $DataView[PROTOTYPE].setInt8; + var nativeSetInt8 = $DataViewPrototype.setInt8; testView.setInt8(0, 2147483648); testView.setInt8(1, 2147483649); - if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataView[PROTOTYPE], { + if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, { setInt8: function setInt8(byteOffset, value) { nativeSetInt8.call(this, byteOffset, value << 24 >> 24); }, @@ -5863,13 +6652,21 @@ typeof navigator === "object" && (function () { setToStringTag($ArrayBuffer, ARRAY_BUFFER); setToStringTag($DataView, DATA_VIEW); - exports[ARRAY_BUFFER] = $ArrayBuffer; - exports[DATA_VIEW] = $DataView; - }); + + var arrayBuffer = { + ArrayBuffer: $ArrayBuffer, + DataView: $DataView + }; + + var toPositiveInteger = function (it) { + var result = toInteger(it); + if (result < 0) throw RangeError("The argument can't be less than 0"); + return result; + }; var toOffset = function (it, BYTES) { - var offset = toInteger(it); - if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset'); + var offset = toPositiveInteger(it); + if (offset % BYTES) throw RangeError('Wrong offset'); return offset; }; @@ -5881,16 +6678,17 @@ typeof navigator === "object" && (function () { var mapfn = argumentsLength > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var iteratorMethod = getIteratorMethod(O); - var i, length, result, step, iterator; + var i, length, result, step, iterator, next; if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) { iterator = iteratorMethod.call(O); + next = iterator.next; O = []; - while (!(step = iterator.next()).done) { + while (!(step = next.call(iterator)).done) { O.push(step.value); } } if (mapping && argumentsLength > 2) { - mapfn = bindContext(mapfn, arguments[2], 2); + mapfn = functionBindContext(mapfn, arguments[2], 2); } length = toLength(O.length); result = new (aTypedArrayConstructor$1(this))(length); @@ -5921,6 +6719,7 @@ typeof navigator === "object" && (function () { var getOwnPropertyNames = objectGetOwnPropertyNames.f; + var forEach = arrayIteration.forEach; @@ -5931,7 +6730,7 @@ typeof navigator === "object" && (function () { var setInternalState = internalState.set; var nativeDefineProperty = objectDefineProperty.f; var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; - var forEach = arrayMethods(0); + var round = Math.round; var RangeError = global_1.RangeError; var ArrayBuffer = arrayBuffer.ArrayBuffer; var DataView = arrayBuffer.DataView; @@ -6007,8 +6806,8 @@ typeof navigator === "object" && (function () { defineProperty: wrappedDefineProperty }); - // eslint-disable-next-line max-statements - module.exports = function (TYPE, BYTES, wrapper, CLAMPED) { + module.exports = function (TYPE, wrapper, CLAMPED) { + var BYTES = TYPE.match(/\d+$/)[0] / 8; var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array'; var GETTER = 'get' + TYPE; var SETTER = 'set' + TYPE; @@ -6024,7 +6823,7 @@ typeof navigator === "object" && (function () { var setter = function (that, index, value) { var data = getInternalState(that); - if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF; + if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF; data.view[SETTER](index * BYTES + data.byteOffset, value, true); }; @@ -6080,31 +6879,37 @@ typeof navigator === "object" && (function () { if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray); TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = objectCreate(TypedArrayPrototype); - } else if (typedArraysConstructorsRequiresWrappers) { - TypedArrayConstructor = wrapper(function (that, data, typedArrayOffset, $length) { - anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME); - if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data)); - if (isArrayBuffer(data)) return $length !== undefined - ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length) - : typedArrayOffset !== undefined - ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES)) - : new NativeTypedArrayConstructor(data); - if (isTypedArray(data)) return fromList(TypedArrayConstructor, data); - return typedArrayFrom.call(TypedArrayConstructor, data); + } else if (typedArrayConstructorsRequireWrappers) { + TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) { + anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME); + return inheritIfRequired(function () { + if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data)); + if (isArrayBuffer(data)) return $length !== undefined + ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length) + : typedArrayOffset !== undefined + ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES)) + : new NativeTypedArrayConstructor(data); + if (isTypedArray(data)) return fromList(TypedArrayConstructor, data); + return typedArrayFrom.call(TypedArrayConstructor, data); + }(), dummy, TypedArrayConstructor); }); if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray); forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) { - if (!(key in TypedArrayConstructor)) hide(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]); + if (!(key in TypedArrayConstructor)) { + createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]); + } }); TypedArrayConstructor.prototype = TypedArrayConstructorPrototype; } if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) { - hide(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor); + createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor); } - if (TYPED_ARRAY_TAG) hide(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME); + if (TYPED_ARRAY_TAG) { + createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME); + } exported[CONSTRUCTOR_NAME] = TypedArrayConstructor; @@ -6113,11 +6918,11 @@ typeof navigator === "object" && (function () { }, exported); if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) { - hide(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES); + createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES); } if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) { - hide(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES); + createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES); } setSpecies(CONSTRUCTOR_NAME); @@ -6127,12 +6932,14 @@ typeof navigator === "object" && (function () { // `Uint16Array` constructor // https://tc39.github.io/ecma262/#sec-typedarray-objects - typedArrayConstructor('Uint16', 2, function (init) { + typedArrayConstructor('Uint16', function (init) { return function Uint16Array(data, byteOffset, length) { return init(this, data, byteOffset, length); }; }); + var min$4 = Math.min; + // `Array.prototype.copyWithin` method implementation // https://tc39.github.io/ecma262/#sec-array.prototype.copywithin var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { @@ -6141,7 +6948,7 @@ typeof navigator === "object" && (function () { var to = toAbsoluteIndex(target, len); var from = toAbsoluteIndex(start, len); var end = arguments.length > 2 ? arguments[2] : undefined; - var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); + var count = min$4((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); var inc = 1; if (from < to && to < from + count) { inc = -1; @@ -6157,39 +6964,46 @@ typeof navigator === "object" && (function () { }; var aTypedArray$1 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$1 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.copyWithin` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.copywithin - arrayBufferViewCore.exportProto('copyWithin', function copyWithin(target, start /* , end */) { + exportTypedArrayMethod$1('copyWithin', function copyWithin(target, start /* , end */) { return arrayCopyWithin.call(aTypedArray$1(this), target, start, arguments.length > 2 ? arguments[2] : undefined); }); - var arrayEvery = arrayMethods(4); + var $every = arrayIteration.every; + var aTypedArray$2 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$2 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.every` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.every - arrayBufferViewCore.exportProto('every', function every(callbackfn /* , thisArg */) { - return arrayEvery(aTypedArray$2(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$2('every', function every(callbackfn /* , thisArg */) { + return $every(aTypedArray$2(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); }); var aTypedArray$3 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$3 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.fill` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill // eslint-disable-next-line no-unused-vars - arrayBufferViewCore.exportProto('fill', function fill(value /* , start, end */) { + exportTypedArrayMethod$3('fill', function fill(value /* , start, end */) { return arrayFill.apply(aTypedArray$3(this), arguments); }); - var arrayFilter = arrayMethods(2); + var $filter = arrayIteration.filter; + + var aTypedArray$4 = arrayBufferViewCore.aTypedArray; var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor; + var exportTypedArrayMethod$4 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.filter` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.filter - arrayBufferViewCore.exportProto('filter', function filter(callbackfn /* , thisArg */) { - var list = arrayFilter(aTypedArray$4(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$4('filter', function filter(callbackfn /* , thisArg */) { + var list = $filter(aTypedArray$4(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); var C = speciesConstructor(this, this.constructor); var index = 0; var length = list.length; @@ -6198,49 +7012,59 @@ typeof navigator === "object" && (function () { return result; }); - var arrayFind = arrayMethods(5); + var $find = arrayIteration.find; + var aTypedArray$5 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$5 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.find` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.find - arrayBufferViewCore.exportProto('find', function find(predicate /* , thisArg */) { - return arrayFind(aTypedArray$5(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$5('find', function find(predicate /* , thisArg */) { + return $find(aTypedArray$5(this), predicate, arguments.length > 1 ? arguments[1] : undefined); }); - var arrayFindIndex = arrayMethods(6); + var $findIndex = arrayIteration.findIndex; + var aTypedArray$6 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$6 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.findIndex` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.findindex - arrayBufferViewCore.exportProto('findIndex', function findIndex(predicate /* , thisArg */) { - return arrayFindIndex(aTypedArray$6(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$6('findIndex', function findIndex(predicate /* , thisArg */) { + return $findIndex(aTypedArray$6(this), predicate, arguments.length > 1 ? arguments[1] : undefined); }); - var arrayForEach$1 = arrayMethods(0); + var $forEach$2 = arrayIteration.forEach; + var aTypedArray$7 = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$7 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.forEach` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.foreach - arrayBufferViewCore.exportProto('forEach', function forEach(callbackfn /* , thisArg */) { - arrayForEach$1(aTypedArray$7(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$7('forEach', function forEach(callbackfn /* , thisArg */) { + $forEach$2(aTypedArray$7(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); }); + var $includes$1 = arrayIncludes.includes; + var aTypedArray$8 = arrayBufferViewCore.aTypedArray; - var arrayIncludes$1 = arrayIncludes(true); + var exportTypedArrayMethod$8 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.includes` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.includes - arrayBufferViewCore.exportProto('includes', function includes(searchElement /* , fromIndex */) { - return arrayIncludes$1(aTypedArray$8(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$8('includes', function includes(searchElement /* , fromIndex */) { + return $includes$1(aTypedArray$8(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); }); + var $indexOf$1 = arrayIncludes.indexOf; + var aTypedArray$9 = arrayBufferViewCore.aTypedArray; - var arrayIndexOf$1 = arrayIncludes(false); + var exportTypedArrayMethod$9 = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.indexOf` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.indexof - arrayBufferViewCore.exportProto('indexOf', function indexOf(searchElement /* , fromIndex */) { - return arrayIndexOf$1(aTypedArray$9(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$9('indexOf', function indexOf(searchElement /* , fromIndex */) { + return $indexOf$1(aTypedArray$9(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); }); var ITERATOR$8 = wellKnownSymbol('iterator'); @@ -6249,7 +7073,7 @@ typeof navigator === "object" && (function () { var arrayKeys = es_array_iterator.keys; var arrayEntries = es_array_iterator.entries; var aTypedArray$a = arrayBufferViewCore.aTypedArray; - var exportProto$1 = arrayBufferViewCore.exportProto; + var exportTypedArrayMethod$a = arrayBufferViewCore.exportTypedArrayMethod; var nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR$8]; var CORRECT_ITER_NAME = !!nativeTypedArrayIterator @@ -6261,77 +7085,147 @@ typeof navigator === "object" && (function () { // `%TypedArray%.prototype.entries` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.entries - exportProto$1('entries', function entries() { + exportTypedArrayMethod$a('entries', function entries() { return arrayEntries.call(aTypedArray$a(this)); }); // `%TypedArray%.prototype.keys` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.keys - exportProto$1('keys', function keys() { + exportTypedArrayMethod$a('keys', function keys() { return arrayKeys.call(aTypedArray$a(this)); }); // `%TypedArray%.prototype.values` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.values - exportProto$1('values', typedArrayValues, !CORRECT_ITER_NAME); + exportTypedArrayMethod$a('values', typedArrayValues, !CORRECT_ITER_NAME); // `%TypedArray%.prototype[@@iterator]` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype-@@iterator - exportProto$1(ITERATOR$8, typedArrayValues, !CORRECT_ITER_NAME); + exportTypedArrayMethod$a(ITERATOR$8, typedArrayValues, !CORRECT_ITER_NAME); var aTypedArray$b = arrayBufferViewCore.aTypedArray; - var arrayJoin = [].join; + var exportTypedArrayMethod$b = arrayBufferViewCore.exportTypedArrayMethod; + var $join = [].join; // `%TypedArray%.prototype.join` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join // eslint-disable-next-line no-unused-vars - arrayBufferViewCore.exportProto('join', function join(separator) { - return arrayJoin.apply(aTypedArray$b(this), arguments); + exportTypedArrayMethod$b('join', function join(separator) { + return $join.apply(aTypedArray$b(this), arguments); }); + var min$5 = Math.min; + var nativeLastIndexOf = [].lastIndexOf; + var NEGATIVE_ZERO$1 = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; + var STRICT_METHOD$3 = arrayMethodIsStrict('lastIndexOf'); + // For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method + var USES_TO_LENGTH$5 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + var FORCED$4 = NEGATIVE_ZERO$1 || !STRICT_METHOD$3 || !USES_TO_LENGTH$5; + + // `Array.prototype.lastIndexOf` method implementation + // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof + var arrayLastIndexOf = FORCED$4 ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { + // convert -0 to +0 + if (NEGATIVE_ZERO$1) return nativeLastIndexOf.apply(this, arguments) || 0; + var O = toIndexedObject(this); + var length = toLength(O.length); + var index = length - 1; + if (arguments.length > 1) index = min$5(index, toInteger(arguments[1])); + if (index < 0) index = length + index; + for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; + return -1; + } : nativeLastIndexOf; + var aTypedArray$c = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$c = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.lastIndexOf` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.lastindexof // eslint-disable-next-line no-unused-vars - arrayBufferViewCore.exportProto('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) { + exportTypedArrayMethod$c('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) { return arrayLastIndexOf.apply(aTypedArray$c(this), arguments); }); + var $map$1 = arrayIteration.map; + + var aTypedArray$d = arrayBufferViewCore.aTypedArray; var aTypedArrayConstructor$3 = arrayBufferViewCore.aTypedArrayConstructor; - - var internalTypedArrayMap = arrayMethods(1, function (O, length) { - return new (aTypedArrayConstructor$3(speciesConstructor(O, O.constructor)))(length); - }); + var exportTypedArrayMethod$d = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.map` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.map - arrayBufferViewCore.exportProto('map', function map(mapfn /* , thisArg */) { - return internalTypedArrayMap(aTypedArray$d(this), mapfn, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$d('map', function map(mapfn /* , thisArg */) { + return $map$1(aTypedArray$d(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) { + return new (aTypedArrayConstructor$3(speciesConstructor(O, O.constructor)))(length); + }); }); + // `Array.prototype.{ reduce, reduceRight }` methods implementation + var createMethod$3 = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aFunction$1(callbackfn); + var O = toObject(that); + var self = indexedObject(O); + var length = toLength(O.length); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; + }; + + var arrayReduce = { + // `Array.prototype.reduce` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduce + left: createMethod$3(false), + // `Array.prototype.reduceRight` method + // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright + right: createMethod$3(true) + }; + + var $reduce = arrayReduce.left; + var aTypedArray$e = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$e = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.reduce` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduce - arrayBufferViewCore.exportProto('reduce', function reduce(callbackfn /* , initialValue */) { - return arrayReduce(aTypedArray$e(this), callbackfn, arguments.length, arguments[1], false); + exportTypedArrayMethod$e('reduce', function reduce(callbackfn /* , initialValue */) { + return $reduce(aTypedArray$e(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); }); + var $reduceRight = arrayReduce.right; + var aTypedArray$f = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$f = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.reduceRicht` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduceright - arrayBufferViewCore.exportProto('reduceRight', function reduceRight(callbackfn /* , initialValue */) { - return arrayReduce(aTypedArray$f(this), callbackfn, arguments.length, arguments[1], true); + exportTypedArrayMethod$f('reduceRight', function reduceRight(callbackfn /* , initialValue */) { + return $reduceRight(aTypedArray$f(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); }); var aTypedArray$g = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$g = arrayBufferViewCore.exportTypedArrayMethod; + var floor$5 = Math.floor; // `%TypedArray%.prototype.reverse` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reverse - arrayBufferViewCore.exportProto('reverse', function reverse() { + exportTypedArrayMethod$g('reverse', function reverse() { var that = this; var length = aTypedArray$g(that).length; - var middle = Math.floor(length / 2); + var middle = floor$5(length / 2); var index = 0; var value; while (index < middle) { @@ -6342,69 +7236,75 @@ typeof navigator === "object" && (function () { }); var aTypedArray$h = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$h = arrayBufferViewCore.exportTypedArrayMethod; - var FORCED$3 = fails(function () { + var FORCED$5 = fails(function () { // eslint-disable-next-line no-undef new Int8Array(1).set({}); }); // `%TypedArray%.prototype.set` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.set - arrayBufferViewCore.exportProto('set', function set(arrayLike /* , offset */) { + exportTypedArrayMethod$h('set', function set(arrayLike /* , offset */) { aTypedArray$h(this); - var offset = toOffset(arguments[1], 1); + var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1); var length = this.length; var src = toObject(arrayLike); var len = toLength(src.length); var index = 0; if (len + offset > length) throw RangeError('Wrong length'); while (index < len) this[offset + index] = src[index++]; - }, FORCED$3); + }, FORCED$5); var aTypedArray$i = arrayBufferViewCore.aTypedArray; var aTypedArrayConstructor$4 = arrayBufferViewCore.aTypedArrayConstructor; - var arraySlice = [].slice; + var exportTypedArrayMethod$i = arrayBufferViewCore.exportTypedArrayMethod; + var $slice = [].slice; - var FORCED$4 = fails(function () { + var FORCED$6 = fails(function () { // eslint-disable-next-line no-undef new Int8Array(1).slice(); }); // `%TypedArray%.prototype.slice` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice - arrayBufferViewCore.exportProto('slice', function slice(start, end) { - var list = arraySlice.call(aTypedArray$i(this), start, end); + exportTypedArrayMethod$i('slice', function slice(start, end) { + var list = $slice.call(aTypedArray$i(this), start, end); var C = speciesConstructor(this, this.constructor); var index = 0; var length = list.length; var result = new (aTypedArrayConstructor$4(C))(length); while (length > index) result[index] = list[index++]; return result; - }, FORCED$4); + }, FORCED$6); + + var $some = arrayIteration.some; - var arraySome = arrayMethods(3); var aTypedArray$j = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$j = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.some` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.some - arrayBufferViewCore.exportProto('some', function some(callbackfn /* , thisArg */) { - return arraySome(aTypedArray$j(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + exportTypedArrayMethod$j('some', function some(callbackfn /* , thisArg */) { + return $some(aTypedArray$j(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); }); var aTypedArray$k = arrayBufferViewCore.aTypedArray; - var arraySort = [].sort; + var exportTypedArrayMethod$k = arrayBufferViewCore.exportTypedArrayMethod; + var $sort = [].sort; // `%TypedArray%.prototype.sort` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.sort - arrayBufferViewCore.exportProto('sort', function sort(comparefn) { - return arraySort.call(aTypedArray$k(this), comparefn); + exportTypedArrayMethod$k('sort', function sort(comparefn) { + return $sort.call(aTypedArray$k(this), comparefn); }); var aTypedArray$l = arrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod$l = arrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.subarray` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.subarray - arrayBufferViewCore.exportProto('subarray', function subarray(begin, end) { + exportTypedArrayMethod$l('subarray', function subarray(begin, end) { var O = aTypedArray$l(this); var length = O.length; var beginIndex = toAbsoluteIndex(begin, length); @@ -6417,14 +7317,16 @@ typeof navigator === "object" && (function () { var Int8Array$3 = global_1.Int8Array; var aTypedArray$m = arrayBufferViewCore.aTypedArray; - var arrayToLocaleString = [].toLocaleString; - var arraySlice$1 = [].slice; + var exportTypedArrayMethod$m = arrayBufferViewCore.exportTypedArrayMethod; + var $toLocaleString = [].toLocaleString; + var $slice$1 = [].slice; // iOS Safari 6.x fails here - var TO_LOCALE_BUG = !!Int8Array$3 && fails(function () { - arrayToLocaleString.call(new Int8Array$3(1)); + var TO_LOCALE_STRING_BUG = !!Int8Array$3 && fails(function () { + $toLocaleString.call(new Int8Array$3(1)); }); - var FORCED$5 = fails(function () { + + var FORCED$7 = fails(function () { return [1, 2].toLocaleString() != new Int8Array$3([1, 2]).toLocaleString(); }) || !fails(function () { Int8Array$3.prototype.toLocaleString.call([1, 2]); @@ -6432,3872 +7334,6452 @@ typeof navigator === "object" && (function () { // `%TypedArray%.prototype.toLocaleString` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tolocalestring - arrayBufferViewCore.exportProto('toLocaleString', function toLocaleString() { - return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice$1.call(aTypedArray$m(this)) : aTypedArray$m(this), arguments); - }, FORCED$5); + exportTypedArrayMethod$m('toLocaleString', function toLocaleString() { + return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice$1.call(aTypedArray$m(this)) : aTypedArray$m(this), arguments); + }, FORCED$7); + + var exportTypedArrayMethod$n = arrayBufferViewCore.exportTypedArrayMethod; + + var Uint8Array$1 = global_1.Uint8Array; - var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype; + var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype || {}; var arrayToString = [].toString; - var arrayJoin$1 = [].join; + var arrayJoin = [].join; if (fails(function () { arrayToString.call({}); })) { arrayToString = function toString() { - return arrayJoin$1.call(this); + return arrayJoin.call(this); }; } + var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString; + // `%TypedArray%.prototype.toString` method // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tostring - arrayBufferViewCore.exportProto('toString', arrayToString, (Uint8ArrayPrototype || {}).toString != arrayToString); + exportTypedArrayMethod$n('toString', arrayToString, IS_NOT_ARRAY_METHOD); + + /** + * Truncates given string to the maximum characters count + * + * @param str An object that contains serializable values + * @param max Maximum number of characters in truncated string + * @returns string Encoded + */ - var stringify_1 = createCommonjsModule(function (module, exports) { - /* - json-stringify-safe - Like JSON.stringify, but doesn't throw on circular references. - - Originally forked from https://github.com/isaacs/json-stringify-safe - version 5.0.1 on 3/8/2017 and modified to handle Errors serialization - and IE8 compatibility. Tests for this are in test/vendor. - - ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE - */ - exports = module.exports = stringify; - exports.getSerialize = serializer; + function truncate(str, max) { + if (max === void 0) { + max = 0; + } // tslint:disable-next-line:strict-type-predicates - function indexOf(haystack, needle) { - for (var i = 0; i < haystack.length; ++i) { - if (haystack[i] === needle) return i; - } - return -1; + if (typeof str !== 'string' || max === 0) { + return str; } - function stringify(obj, replacer, spaces, cycleReplacer) { - return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces); - } // https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106 + return str.length <= max ? str : str.substr(0, max) + "..."; + } + /** + * Join values in array + * @param input array of values to be joined together + * @param delimiter string to be placed in-between values + * @returns Joined values + */ + + function safeJoin(input, delimiter) { + if (!Array.isArray(input)) { + return ''; + } + var output = []; // tslint:disable-next-line:prefer-for-of - function stringifyError(value) { - var err = { - // These properties are implemented as magical getters and don't show up in for in - stack: value.stack, - message: value.message, - name: value.name - }; + for (var i = 0; i < input.length; i++) { + var value = input[i]; - for (var i in value) { - if (Object.prototype.hasOwnProperty.call(value, i)) { - err[i] = value[i]; - } + try { + output.push(String(value)); + } catch (e) { + output.push('[value cannot be serialized]'); } + } - return err; + return output.join(delimiter); + } + /** + * Checks if the value matches a regex or includes the string + * @param value The string value to be checked against + * @param pattern Either a regex or a string that must be contained in value + */ + + function isMatchingPattern(value, pattern) { + if (!isString(value)) { + return false; } - function serializer(replacer, cycleReplacer) { - var stack = []; - var keys = []; + if (isRegExp(pattern)) { + return pattern.test(value); + } - if (cycleReplacer == null) { - cycleReplacer = function cycleReplacer(key, value) { - if (stack[0] === value) { - return '[Circular ~]'; - } + if (typeof pattern === 'string') { + return value.indexOf(pattern) !== -1; + } - return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']'; - }; - } + return false; + } + + /** + * Requires a module which is protected against bundler minification. + * + * @param request The module path to resolve + */ - return function (key, value) { - if (stack.length > 0) { - var thisPos = indexOf(stack, this); - ~thisPos ? stack.splice(thisPos + 1) : stack.push(this); - ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key); + function dynamicRequire(mod, request) { + // tslint:disable-next-line: no-unsafe-any + return mod.require(request); + } + /** + * Checks whether we're in the Node.js or Browser environment + * + * @returns Answer to given question + */ - if (~indexOf(stack, value)) { - value = cycleReplacer.call(this, key, value); - } - } else { - stack.push(value); + function isNodeEnv() { + // tslint:disable:strict-type-predicates + return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'; + } + var fallbackGlobalObject = {}; + /** + * Safely get global scope object + * + * @returns Global scope object + */ + + function getGlobalObject() { + return isNodeEnv() ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : fallbackGlobalObject; + } + /** + * UUID4 generator + * + * @returns string Generated UUID4. + */ + + function uuid4() { + var global = getGlobalObject(); + var crypto = global.crypto || global.msCrypto; + + if (!(crypto === void 0) && crypto.getRandomValues) { + // Use window.crypto API if available + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); // set 4 in byte 7 + // tslint:disable-next-line:no-bitwise + + arr[3] = arr[3] & 0xfff | 0x4000; // set 2 most significant bits of byte 9 to '10' + // tslint:disable-next-line:no-bitwise + + arr[4] = arr[4] & 0x3fff | 0x8000; + + var pad = function pad(num) { + var v = num.toString(16); + + while (v.length < 4) { + v = "0" + v; } - return replacer == null ? value instanceof Error ? stringifyError(value) : value : replacer.call(this, key, value); + return v; }; + + return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]); + } // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + + + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + // tslint:disable-next-line:no-bitwise + var r = Math.random() * 16 | 0; // tslint:disable-next-line:no-bitwise + + var v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + /** + * Parses string form of URL into an object + * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B + * // intentionally using regex and not <a/> href parsing trick because React Native and other + * // environments where DOM might not be available + * @returns parsed URL object + */ + + function parseUrl(url) { + if (!url) { + return {}; } - }); - var stringify_2 = stringify_1.getSerialize; - var _window = typeof window !== 'undefined' ? window : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; + var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); - function isObject$1(what) { - return _typeof(what) === 'object' && what !== null; - } // Yanked from https://git.io/vS8DV re-used under CC0 - // with some tiny modifications + if (!match) { + return {}; + } // coerce to undefined values to empty string so we don't get 'undefined' - function isError(value) { - switch (Object.prototype.toString.call(value)) { - case '[object Error]': - return true; + var query = match[6] || ''; + var fragment = match[8] || ''; + return { + host: match[4], + path: match[5], + protocol: match[2], + relative: match[5] + query + fragment + }; + } + /** + * Extracts either message or type+value from an event that can be used for user-facing logs + * @returns event's description + */ - case '[object Exception]': - return true; + function getEventDescription(event) { + if (event.message) { + return event.message; + } - case '[object DOMException]': - return true; + if (event.exception && event.exception.values && event.exception.values[0]) { + var exception = event.exception.values[0]; - default: - return value instanceof Error; + if (exception.type && exception.value) { + return exception.type + ": " + exception.value; + } + + return exception.type || exception.value || event.event_id || '<unknown>'; } - } - function isErrorEvent(value) { - return Object.prototype.toString.call(value) === '[object ErrorEvent]'; + return event.event_id || '<unknown>'; } + /** JSDoc */ - function isDOMError(value) { - return Object.prototype.toString.call(value) === '[object DOMError]'; - } + function consoleSandbox(callback) { + var global = getGlobalObject(); + var levels = ['debug', 'info', 'warn', 'error', 'log', 'assert']; - function isDOMException(value) { - return Object.prototype.toString.call(value) === '[object DOMException]'; - } + if (!('console' in global)) { + return callback(); + } + + var originalConsole = global.console; + var wrappedLevels = {}; // Restore all wrapped console methods + + levels.forEach(function (level) { + if (level in global.console && originalConsole[level].__sentry_original__) { + wrappedLevels[level] = originalConsole[level]; + originalConsole[level] = originalConsole[level].__sentry_original__; + } + }); // Perform callback manipulations + + var result = callback(); // Revert restoration to wrapped state - function isUndefined(what) { - return what === void 0; + Object.keys(wrappedLevels).forEach(function (level) { + originalConsole[level] = wrappedLevels[level]; + }); + return result; } + /** + * Adds exception values, type and value to an synthetic Exception. + * @param event The event to modify. + * @param value Value of the exception. + * @param type Type of the exception. + * @hidden + */ - function isFunction(what) { - return typeof what === 'function'; + function addExceptionTypeValue(event, value, type) { + event.exception = event.exception || {}; + event.exception.values = event.exception.values || []; + event.exception.values[0] = event.exception.values[0] || {}; + event.exception.values[0].value = event.exception.values[0].value || value || ''; + event.exception.values[0].type = event.exception.values[0].type || type || 'Error'; } + /** + * Adds exception mechanism to a given event. + * @param event The event to modify. + * @param mechanism Mechanism of the mechanism. + * @hidden + */ + + function addExceptionMechanism(event, mechanism) { + if (mechanism === void 0) { + mechanism = {}; + } // TODO: Use real type with `keyof Mechanism` thingy and maybe make it better? + - function isPlainObject(what) { - return Object.prototype.toString.call(what) === '[object Object]'; + try { + // @ts-ignore + // tslint:disable:no-non-null-assertion + event.exception.values[0].mechanism = event.exception.values[0].mechanism || {}; + Object.keys(mechanism).forEach(function (key) { + // @ts-ignore + event.exception.values[0].mechanism[key] = mechanism[key]; + }); + } catch (_oO) {// no-empty + } } + /** + * A safe form of location.href + */ - function isString(what) { - return Object.prototype.toString.call(what) === '[object String]'; + function getLocationHref() { + try { + return document.location.href; + } catch (oO) { + return ''; + } } + /** + * Given a child DOM element, returns a query-selector statement describing that + * and its ancestors + * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] + * @returns generated DOM path + */ - function isArray$1(what) { - return Object.prototype.toString.call(what) === '[object Array]'; + function htmlTreeAsString(elem) { + // try/catch both: + // - accessing event.target (see getsentry/raven-js#838, #768) + // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly + // - can throw an exception in some circumstances. + try { + var currentElem = elem; + var MAX_TRAVERSE_HEIGHT = 5; + var MAX_OUTPUT_LEN = 80; + var out = []; + var height = 0; + var len = 0; + var separator = ' > '; + var sepLength = separator.length; + var nextStr = void 0; + + while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) { + nextStr = _htmlElementAsString(currentElem); // bail out if + // - nextStr is the 'html' element + // - the length of the string that would be created exceeds MAX_OUTPUT_LEN + // (ignore this limit if we are on the first iteration) + + if (nextStr === 'html' || height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) { + break; + } + + out.push(nextStr); + len += nextStr.length; + currentElem = currentElem.parentNode; + } + + return out.reverse().join(separator); + } catch (_oO) { + return '<unknown>'; + } } + /** + * Returns a simple, query-selector representation of a DOM element + * e.g. [HTMLElement] => input#foo.btn[name=baz] + * @returns generated DOM path + */ + + function _htmlElementAsString(el) { + var elem = el; + var out = []; + var className; + var classes; + var key; + var attr; + var i; + + if (!elem || !elem.tagName) { + return ''; + } - function isEmptyObject(what) { - if (!isPlainObject(what)) return false; + out.push(elem.tagName.toLowerCase()); - for (var _ in what) { - if (what.hasOwnProperty(_)) { - return false; + if (elem.id) { + out.push("#" + elem.id); + } + + className = elem.className; + + if (className && isString(className)) { + classes = className.split(/\s+/); + + for (i = 0; i < classes.length; i++) { + out.push("." + classes[i]); } } - return true; - } + var attrWhitelist = ['type', 'name', 'title', 'alt']; - function supportsErrorEvent() { - try { - new ErrorEvent(''); // eslint-disable-line no-new + for (i = 0; i < attrWhitelist.length; i++) { + key = attrWhitelist[i]; + attr = elem.getAttribute(key); - return true; - } catch (e) { - return false; + if (attr) { + out.push("[" + key + "=\"" + attr + "\"]"); + } } + + return out.join(''); } - function supportsDOMError() { - try { - new DOMError(''); // eslint-disable-line no-new + var INITIAL_TIME = Date.now(); + var prevNow = 0; + var performanceFallback = { + now: function now() { + var now = Date.now() - INITIAL_TIME; - return true; - } catch (e) { - return false; + if (now < prevNow) { + now = prevNow; + } + + prevNow = now; + return now; + }, + timeOrigin: INITIAL_TIME + }; + var crossPlatformPerformance = function () { + if (isNodeEnv()) { + try { + var perfHooks = dynamicRequire(module, 'perf_hooks'); + return perfHooks.performance; + } catch (_) { + return performanceFallback; + } + } + + if (getGlobalObject().performance) { + // Polyfill for performance.timeOrigin. + // + // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin + // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing. + // tslint:disable-next-line:strict-type-predicates + if (performance.timeOrigin === undefined) { + // As of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always a + // valid fallback. In the absence of a initial time provided by the browser, fallback to INITIAL_TIME. + // @ts-ignore + // tslint:disable-next-line:deprecation + performance.timeOrigin = performance.timing && performance.timing.navigationStart || INITIAL_TIME; + } } + + return getGlobalObject().performance || performanceFallback; + }(); + /** + * Returns a timestamp in seconds with milliseconds precision since the UNIX epoch calculated with the monotonic clock. + */ + + function timestampWithMs() { + return (crossPlatformPerformance.timeOrigin + crossPlatformPerformance.now()) / 1000; + } // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string + var defaultRetryAfter = 60 * 1000; // 60 seconds + + /** + * Extracts Retry-After value from the request header or returns default value + * @param now current unix timestamp + * @param header string representation of 'Retry-After' header + */ + + function parseRetryAfterHeader(now, header) { + if (!header) { + return defaultRetryAfter; + } + + var headerDelay = parseInt("" + header, 10); + + if (!isNaN(headerDelay)) { + return headerDelay * 1000; + } + + var headerDate = Date.parse("" + header); + + if (!isNaN(headerDate)) { + return headerDate - now; + } + + return defaultRetryAfter; } + var defaultFunctionName = '<anonymous>'; + /** + * Safely extract function name from itself + */ - function supportsDOMException() { + function getFunctionName(fn) { try { - new DOMException(''); // eslint-disable-line no-new + if (!fn || typeof fn !== 'function') { + return defaultFunctionName; + } - return true; + return fn.name || defaultFunctionName; } catch (e) { - return false; + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + return defaultFunctionName; } } - function supportsFetch() { - if (!('fetch' in _window)) return false; + var global$1 = getGlobalObject(); + /** Prefix for logging strings */ - try { - new Headers(); // eslint-disable-line no-new + var PREFIX = 'Sentry Logger '; + /** JSDoc */ - new Request(''); // eslint-disable-line no-new + var Logger = + /** @class */ + function () { + /** JSDoc */ + function Logger() { + this._enabled = false; + } + /** JSDoc */ - new Response(); // eslint-disable-line no-new - return true; - } catch (e) { - return false; + Logger.prototype.disable = function () { + this._enabled = false; + }; + /** JSDoc */ + + + Logger.prototype.enable = function () { + this._enabled = true; + }; + /** JSDoc */ + + + Logger.prototype.log = function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + if (!this._enabled) { + return; + } + + consoleSandbox(function () { + global$1.console.log(PREFIX + "[Log]: " + args.join(' ')); // tslint:disable-line:no-console + }); + }; + /** JSDoc */ + + + Logger.prototype.warn = function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + if (!this._enabled) { + return; + } + + consoleSandbox(function () { + global$1.console.warn(PREFIX + "[Warn]: " + args.join(' ')); // tslint:disable-line:no-console + }); + }; + /** JSDoc */ + + + Logger.prototype.error = function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + if (!this._enabled) { + return; + } + + consoleSandbox(function () { + global$1.console.error(PREFIX + "[Error]: " + args.join(' ')); // tslint:disable-line:no-console + }); + }; + + return Logger; + }(); // Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used + + + global$1.__SENTRY__ = global$1.__SENTRY__ || {}; + var logger = global$1.__SENTRY__.logger || (global$1.__SENTRY__.logger = new Logger()); + + var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('splice'); + var USES_TO_LENGTH$6 = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 }); + + var max$3 = Math.max; + var min$6 = Math.min; + var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded'; + + // `Array.prototype.splice` method + // https://tc39.github.io/ecma262/#sec-array.prototype.splice + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 || !USES_TO_LENGTH$6 }, { + splice: function splice(start, deleteCount /* , ...items */) { + var O = toObject(this); + var len = toLength(O.length); + var actualStart = toAbsoluteIndex(start, len); + var argumentsLength = arguments.length; + var insertCount, actualDeleteCount, A, k, from, to; + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min$6(max$3(toInteger(deleteCount), 0), len - actualStart); + } + if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { + throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED); + } + A = arraySpeciesCreate(O, actualDeleteCount); + for (k = 0; k < actualDeleteCount; k++) { + from = actualStart + k; + if (from in O) createProperty(A, k, O[from]); + } + A.length = actualDeleteCount; + if (insertCount < actualDeleteCount) { + for (k = actualStart; k < len - actualDeleteCount; k++) { + from = k + actualDeleteCount; + to = k + insertCount; + if (from in O) O[to] = O[from]; + else delete O[to]; + } + for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1]; + } else if (insertCount > actualDeleteCount) { + for (k = len - actualDeleteCount; k > actualStart; k--) { + from = k + actualDeleteCount - 1; + to = k + insertCount - 1; + if (from in O) O[to] = O[from]; + else delete O[to]; + } + } + for (k = 0; k < insertCount; k++) { + O[k + actualStart] = arguments[k + 2]; + } + O.length = len - actualDeleteCount + insertCount; + return A; } - } // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default - // https://caniuse.com/#feat=referrer-policy - // It doesn't. And it throw exception instead of ignoring this parameter... - // REF: https://github.com/getsentry/raven-js/issues/1233 + }); + + var freezing = !fails(function () { + return Object.isExtensible(Object.preventExtensions({})); + }); + var internalMetadata = createCommonjsModule(function (module) { + var defineProperty = objectDefineProperty.f; - function supportsReferrerPolicy() { - if (!supportsFetch()) return false; - try { + + var METADATA = uid('meta'); + var id = 0; + + var isExtensible = Object.isExtensible || function () { + return true; + }; + + var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + ++id, // object ID + weakData: {} // weak collections IDs + } }); + }; + + var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; + }; + + var getWeakData = function (it, create) { + if (!has(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; + }; + + // add metadata on freeze-family methods calling + var onFreeze = function (it) { + if (freezing && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); + return it; + }; + + var meta = module.exports = { + REQUIRED: false, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze + }; + + hiddenKeys[METADATA] = true; + }); + var internalMetadata_1 = internalMetadata.REQUIRED; + var internalMetadata_2 = internalMetadata.fastKey; + var internalMetadata_3 = internalMetadata.getWeakData; + var internalMetadata_4 = internalMetadata.onFreeze; + + var collection = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global_1[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var nativeMethod = NativePrototype[KEY]; + redefine(NativePrototype, KEY, + KEY == 'add' ? function add(value) { + nativeMethod.call(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : function set(key, value) { + nativeMethod.call(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + // eslint-disable-next-line max-len + if (isForced_1(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () { + new NativeConstructor().entries().next(); + })))) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + internalMetadata.REQUIRED = true; + } else if (isForced_1(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly // eslint-disable-next-line no-new - new Request('pickleRick', { - referrerPolicy: 'origin' + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); }); - return true; - } catch (e) { + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, Constructor, CONSTRUCTOR_NAME); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + _export({ global: true, forced: Constructor != NativeConstructor }, exported); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; + }; + + var getWeakData = internalMetadata.getWeakData; + + + + + + + + + var setInternalState$8 = internalState.set; + var internalStateGetterFor = internalState.getterFor; + var find$1 = arrayIteration.find; + var findIndex = arrayIteration.findIndex; + var id$1 = 0; + + // fallback for uncaught frozen keys + var uncaughtFrozenStore = function (store) { + return store.frozen || (store.frozen = new UncaughtFrozenStore()); + }; + + var UncaughtFrozenStore = function () { + this.entries = []; + }; + + var findUncaughtFrozen = function (store, key) { + return find$1(store.entries, function (it) { + return it[0] === key; + }); + }; + + UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value; + else this.entries.push([key, value]); + }, + 'delete': function (key) { + var index = findIndex(this.entries, function (it) { + return it[0] === key; + }); + if (~index) this.entries.splice(index, 1); + return !!~index; + } + }; + + var collectionWeak = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, CONSTRUCTOR_NAME); + setInternalState$8(that, { + type: CONSTRUCTOR_NAME, + id: id$1++, + frozen: undefined + }); + if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); + }); + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var data = getWeakData(anObject(key), true); + if (data === true) uncaughtFrozenStore(state).set(key, value); + else data[state.id] = value; + return that; + }; + + redefineAll(C.prototype, { + // 23.3.3.2 WeakMap.prototype.delete(key) + // 23.4.3.3 WeakSet.prototype.delete(value) + 'delete': function (key) { + var state = getInternalState(this); + if (!isObject(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state)['delete'](key); + return data && has(data, state.id) && delete data[state.id]; + }, + // 23.3.3.4 WeakMap.prototype.has(key) + // 23.4.3.4 WeakSet.prototype.has(value) + has: function has$1(key) { + var state = getInternalState(this); + if (!isObject(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).has(key); + return data && has(data, state.id); + } + }); + + redefineAll(C.prototype, IS_MAP ? { + // 23.3.3.3 WeakMap.prototype.get(key) + get: function get(key) { + var state = getInternalState(this); + if (isObject(key)) { + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).get(key); + return data ? data[state.id] : undefined; + } + }, + // 23.3.3.5 WeakMap.prototype.set(key, value) + set: function set(key, value) { + return define(this, key, value); + } + } : { + // 23.4.3.1 WeakSet.prototype.add(value) + add: function add(value) { + return define(this, value, true); + } + }); + + return C; + } + }; + + // `WeakSet` constructor + // https://tc39.github.io/ecma262/#sec-weakset-constructor + collection('WeakSet', function (init) { + return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); }; + }, collectionWeak); + + // tslint:disable:no-unsafe-any + + /** + * Memo class used for decycle json objects. Uses WeakSet if available otherwise array. + */ + var Memo = + /** @class */ + function () { + function Memo() { + // tslint:disable-next-line + this._hasWeakSet = typeof WeakSet === 'function'; + this._inner = this._hasWeakSet ? new WeakSet() : []; + } + /** + * Sets obj to remember. + * @param obj Object to remember + */ + + + Memo.prototype.memoize = function (obj) { + if (this._hasWeakSet) { + if (this._inner.has(obj)) { + return true; + } + + this._inner.add(obj); + + return false; + } // tslint:disable-next-line:prefer-for-of + + + for (var i = 0; i < this._inner.length; i++) { + var value = this._inner[i]; + + if (value === obj) { + return true; + } + } + + this._inner.push(obj); + return false; + }; + /** + * Removes object from internal storage. + * @param obj Object to forget + */ + + + Memo.prototype.unmemoize = function (obj) { + if (this._hasWeakSet) { + this._inner.delete(obj); + } else { + for (var i = 0; i < this._inner.length; i++) { + if (this._inner[i] === obj) { + this._inner.splice(i, 1); + + break; + } + } + } + }; + + return Memo; + }(); + + // `URL.prototype.toJSON` method + // https://url.spec.whatwg.org/#dom-url-tojson + _export({ target: 'URL', proto: true, enumerable: true }, { + toJSON: function toJSON() { + return URL.prototype.toString.call(this); } + }); + + /** + * Wrap a given object method with a higher-order function + * + * @param source An object that contains a method to be wrapped. + * @param name A name of method to be wrapped. + * @param replacement A function that should be used to wrap a given method. + * @returns void + */ + + function fill(source, name, replacement) { + if (!(name in source)) { + return; + } + + var original = source[name]; + var wrapped = replacement(original); // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work + // otherwise it'll throw "TypeError: Object.defineProperties called on non-object" + // tslint:disable-next-line:strict-type-predicates + + if (typeof wrapped === 'function') { + try { + wrapped.prototype = wrapped.prototype || {}; + Object.defineProperties(wrapped, { + __sentry_original__: { + enumerable: false, + value: original + } + }); + } catch (_Oo) {// This can throw if multiple fill happens on a global object like XMLHttpRequest + // Fixes https://github.com/getsentry/sentry-javascript/issues/2043 + } + } + + source[name] = wrapped; } + /** + * Encodes given object into url-friendly format + * + * @param object An object that contains serializable values + * @returns string Encoded + */ - function supportsPromiseRejectionEvent() { - return typeof PromiseRejectionEvent === 'function'; + function urlEncode(object) { + return Object.keys(object).map( // tslint:disable-next-line:no-unsafe-any + function (key) { + return encodeURIComponent(key) + "=" + encodeURIComponent(object[key]); + }).join('&'); } + /** + * Transforms any object into an object literal with all it's attributes + * attached to it. + * + * @param value Initial source that we have to transform in order to be usable by the serializer + */ - function wrappedCallback(callback) { - function dataCallback(data, original) { - var normalizedData = callback(data) || data; + function getWalkSource(value) { + if (isError(value)) { + var error = value; + var err = { + message: error.message, + name: error.name, + stack: error.stack + }; - if (original) { - return original(normalizedData) || normalizedData; + for (var i in error) { + if (Object.prototype.hasOwnProperty.call(error, i)) { + err[i] = error[i]; + } } - return normalizedData; + return err; } - return dataCallback; - } + if (isEvent(value)) { + var event_1 = value; + var source = {}; + source.type = event_1.type; // Accessing event.target can throw (see getsentry/raven-js#838, #768) - function each(obj, callback) { - var i, j; + try { + source.target = isElement(event_1.target) ? htmlTreeAsString(event_1.target) : Object.prototype.toString.call(event_1.target); + } catch (_oO) { + source.target = '<unknown>'; + } - if (isUndefined(obj.length)) { - for (i in obj) { - if (hasKey(obj, i)) { - callback.call(null, i, obj[i]); - } + try { + source.currentTarget = isElement(event_1.currentTarget) ? htmlTreeAsString(event_1.currentTarget) : Object.prototype.toString.call(event_1.currentTarget); + } catch (_oO) { + source.currentTarget = '<unknown>'; + } // tslint:disable-next-line:strict-type-predicates + + + if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) { + source.detail = event_1.detail; } - } else { - j = obj.length; - if (j) { - for (i = 0; i < j; i++) { - callback.call(null, i, obj[i]); + for (var i in event_1) { + if (Object.prototype.hasOwnProperty.call(event_1, i)) { + source[i] = event_1; } } + + return source; } + + return value; } + /** Calculates bytes size of input string */ - function objectMerge(obj1, obj2) { - if (!obj2) { - return obj1; - } - each(obj2, function (key, value) { - obj1[key] = value; - }); - return obj1; + function utf8Length(value) { + // tslint:disable-next-line:no-bitwise + return ~-encodeURI(value).split(/%..|./).length; } - /** - * This function is only used for react-native. - * react-native freezes object that have already been sent over the - * js bridge. We need this function in order to check if the object is frozen. - * So it's ok that objectFrozen returns false if Object.isFrozen is not - * supported because it's not relevant for other "platforms". See related issue: - * https://github.com/getsentry/react-native-sentry/issues/57 - */ + /** Calculates bytes size of input object */ - function objectFrozen(obj) { - if (!Object.isFrozen) { - return false; + function jsonSize(value) { + return utf8Length(JSON.stringify(value)); + } + /** JSDoc */ + + + function normalizeToSize(object, // Default Node.js REPL depth + depth, // 100kB, as 200kB is max payload size, so half sounds reasonable + maxSize) { + if (depth === void 0) { + depth = 3; + } + + if (maxSize === void 0) { + maxSize = 100 * 1024; } - return Object.isFrozen(obj); + var serialized = normalize$1(object, depth); + + if (jsonSize(serialized) > maxSize) { + return normalizeToSize(object, depth - 1, maxSize); + } + + return serialized; } + /** Transforms any input value into a string form, either primitive value or a type of the input */ - function truncate(str, max) { - if (typeof max !== 'number') { - throw new Error('2nd argument to `truncate` function should be a number'); + function serializeValue(value) { + var type = Object.prototype.toString.call(value); // Node.js REPL notation + + if (typeof value === 'string') { + return value; } - if (typeof str !== 'string' || max === 0) { - return str; + if (type === '[object Object]') { + return '[Object]'; + } + + if (type === '[object Array]') { + return '[Array]'; } - return str.length <= max ? str : str.substr(0, max) + "\u2026"; + var normalized = normalizeValue(value); + return isPrimitive(normalized) ? normalized : type; } /** - * hasKey, a better form of hasOwnProperty - * Example: hasKey(MainHostObject, property) === true/false + * normalizeValue() * - * @param {Object} host object to check property - * @param {string} key to check + * Takes unserializable input and make it serializable friendly + * + * - translates undefined/NaN values to "[undefined]"/"[NaN]" respectively, + * - serializes Error objects + * - filter global objects */ + // tslint:disable-next-line:cyclomatic-complexity - function hasKey(object, key) { - return Object.prototype.hasOwnProperty.call(object, key); - } + function normalizeValue(value, key) { + if (key === 'domain' && value && _typeof(value) === 'object' && value._events) { + return '[Domain]'; + } + + if (key === 'domainEmitter') { + return '[DomainEmitter]'; + } + + if (typeof global !== 'undefined' && value === global) { + return '[Global]'; + } + + if (typeof window !== 'undefined' && value === window) { + return '[Window]'; + } + + if (typeof document !== 'undefined' && value === document) { + return '[Document]'; + } // React's SyntheticEvent thingy - function joinRegExp(patterns) { - // Combine an array of regular expressions and strings into one large regexp - // Be mad. - var sources = [], - i = 0, - len = patterns.length, - pattern; - for (; i < len; i++) { - pattern = patterns[i]; + if (isSyntheticEvent(value)) { + return '[SyntheticEvent]'; + } // tslint:disable-next-line:no-tautology-expression - if (isString(pattern)) { - // If it's a string, we need to escape it - // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions - sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1')); - } else if (pattern && pattern.source) { - // If it's a regexp already, we want to extract the source - sources.push(pattern.source); - } // Intentionally skip other cases + if (typeof value === 'number' && value !== value) { + return '[NaN]'; } - return new RegExp(sources.join('|'), 'i'); + if (value === void 0) { + return '[undefined]'; + } + + if (typeof value === 'function') { + return "[Function: " + getFunctionName(value) + "]"; + } + + return value; } + /** + * Walks an object to perform a normalization on it + * + * @param key of object that's walked in current iteration + * @param value object to be walked + * @param depth Optional number indicating how deep should walking be performed + * @param memo Optional Memo class handling decycling + */ - function urlencode(o) { - var pairs = []; - each(o, function (key, value) { - pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); - }); - return pairs.join('&'); - } // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B - // intentionally using regex and not <a/> href parsing trick because React Native and other - // environments where DOM might not be available + function walk(key, value, depth, memo) { + if (depth === void 0) { + depth = +Infinity; + } - function parseUrl(url) { - if (typeof url !== 'string') return {}; - var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); // coerce to undefined values to empty string so we don't get 'undefined' + if (memo === void 0) { + memo = new Memo(); + } // If we reach the maximum depth, serialize whatever has left - var query = match[6] || ''; - var fragment = match[8] || ''; - return { - protocol: match[2], - host: match[4], - path: match[5], - relative: match[5] + query + fragment // everything minus origin - }; - } + if (depth === 0) { + return serializeValue(value); + } // If value implements `toJSON` method, call it and return early + // tslint:disable:no-unsafe-any - function uuid4() { - var crypto = _window.crypto || _window.msCrypto; - if (!isUndefined(crypto) && crypto.getRandomValues) { - // Use window.crypto API if available - // eslint-disable-next-line no-undef - var arr = new Uint16Array(8); - crypto.getRandomValues(arr); // set 4 in byte 7 + if (value !== null && value !== undefined && typeof value.toJSON === 'function') { + return value.toJSON(); + } // tslint:enable:no-unsafe-any + // If normalized value is a primitive, there are no branches left to walk, so we can just bail out, as theres no point in going down that branch any further - arr[3] = arr[3] & 0xfff | 0x4000; // set 2 most significant bits of byte 9 to '10' - arr[4] = arr[4] & 0x3fff | 0x8000; + var normalized = normalizeValue(value, key); - var pad = function pad(num) { - var v = num.toString(16); + if (isPrimitive(normalized)) { + return normalized; + } // Create source that we will use for next itterations, either objectified error object (Error type with extracted keys:value pairs) or the input itself - while (v.length < 4) { - v = '0' + v; - } - return v; - }; + var source = getWalkSource(value); // Create an accumulator that will act as a parent for all future itterations of that branch - return pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7]); - } else { - // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 - return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, - v = c === 'x' ? r : r & 0x3 | 0x8; - return v.toString(16); - }); + var acc = Array.isArray(value) ? [] : {}; // If we already walked that branch, bail out, as it's circular reference + + if (memo.memoize(value)) { + return '[Circular ~]'; + } // Walk all keys of the source + + + for (var innerKey in source) { + // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration. + if (!Object.prototype.hasOwnProperty.call(source, innerKey)) { + continue; + } // Recursively walk through all the child nodes + + + acc[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo); + } // Once walked through all the branches, remove the parent from memo storage + + + memo.unmemoize(value); // Return accumulated values + + return acc; + } + /** + * normalize() + * + * - Creates a copy to prevent original input mutation + * - Skip non-enumerablers + * - Calls `toJSON` if implemented + * - Removes circular references + * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format + * - Translates known global objects/Classes to a string representations + * - Takes care of Error objects serialization + * - Optionally limit depth of final output + */ + + function normalize$1(input, depth) { + try { + // tslint:disable-next-line:no-unsafe-any + return JSON.parse(JSON.stringify(input, function (key, value) { + return walk(key, value, depth); + })); + } catch (_oO) { + return '**non-serializable**'; } } /** - * Given a child DOM element, returns a query-selector statement describing that - * and its ancestors - * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz] - * @param elem - * @returns {string} + * Given any captured exception, extract its keys and create a sorted + * and truncated list that will be used inside the event message. + * eg. `Non-error exception captured with keys: foo, bar, baz` */ + function extractExceptionKeysForMessage(exception, maxLength) { + if (maxLength === void 0) { + maxLength = 40; + } // tslint:disable:strict-type-predicates - function htmlTreeAsString(elem) { - /* eslint no-extra-parens:0*/ - var MAX_TRAVERSE_HEIGHT = 5, - MAX_OUTPUT_LEN = 80, - out = [], - height = 0, - len = 0, - separator = ' > ', - sepLength = separator.length, - nextStr; - - while (elem && height++ < MAX_TRAVERSE_HEIGHT) { - nextStr = htmlElementAsString(elem); // bail out if - // - nextStr is the 'html' element - // - the length of the string that would be created exceeds MAX_OUTPUT_LEN - // (ignore this limit if we are on the first iteration) - - if (nextStr === 'html' || height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN) { - break; + + var keys = Object.keys(getWalkSource(exception)); + keys.sort(); + + if (!keys.length) { + return '[object has no keys]'; + } + + if (keys[0].length >= maxLength) { + return truncate(keys[0], maxLength); + } + + for (var includedKeys = keys.length; includedKeys > 0; includedKeys--) { + var serialized = keys.slice(0, includedKeys).join(', '); + + if (serialized.length > maxLength) { + continue; + } + + if (includedKeys === keys.length) { + return serialized; } - out.push(nextStr); - len += nextStr.length; - elem = elem.parentNode; + return truncate(serialized, maxLength); + } + + return ''; + } + + var $filter$1 = arrayIteration.filter; + + + + var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport('filter'); + // Edge 14- issue + var USES_TO_LENGTH$7 = arrayMethodUsesToLength('filter'); + + // `Array.prototype.filter` method + // https://tc39.github.io/ecma262/#sec-array.prototype.filter + // with adding support of @@species + _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 || !USES_TO_LENGTH$7 }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 + var NON_GENERIC = !!nativePromiseConstructor && fails(function () { + nativePromiseConstructor.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ }); + }); + + // `Promise.prototype.finally` method + // https://tc39.github.io/ecma262/#sec-promise.prototype.finally + _export({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, { + 'finally': function (onFinally) { + var C = speciesConstructor(this, getBuiltIn('Promise')); + var isFunction = typeof onFinally == 'function'; + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); } + }); - return out.reverse().join(separator); + // patch native Promise.prototype for native async functions + if ( typeof nativePromiseConstructor == 'function' && !nativePromiseConstructor.prototype['finally']) { + redefine(nativePromiseConstructor.prototype, 'finally', getBuiltIn('Promise').prototype['finally']); } + + /** SyncPromise internal states */ + + var States; + + (function (States) { + /** Pending */ + States["PENDING"] = "PENDING"; + /** Resolved / OK */ + + States["RESOLVED"] = "RESOLVED"; + /** Rejected / Error */ + + States["REJECTED"] = "REJECTED"; + })(States || (States = {})); /** - * Returns a simple, query-selector representation of a DOM element - * e.g. [HTMLElement] => input#foo.btn[name=baz] - * @param HTMLElement - * @returns {string} + * Thenable class that behaves like a Promise and follows it's interface + * but is not async internally */ - function htmlElementAsString(elem) { - var out = [], - className, - classes, - key, - attr, - i; + var SyncPromise = + /** @class */ + function () { + function SyncPromise(executor) { + var _this = this; + + this._state = States.PENDING; + this._handlers = []; + /** JSDoc */ - if (!elem || !elem.tagName) { - return ''; + this._resolve = function (value) { + _this._setResult(States.RESOLVED, value); + }; + /** JSDoc */ + + + this._reject = function (reason) { + _this._setResult(States.REJECTED, reason); + }; + /** JSDoc */ + + + this._setResult = function (state, value) { + if (_this._state !== States.PENDING) { + return; + } + + if (isThenable$1(value)) { + value.then(_this._resolve, _this._reject); + return; + } + + _this._state = state; + _this._value = value; + + _this._executeHandlers(); + }; // TODO: FIXME + + /** JSDoc */ + + + this._attachHandler = function (handler) { + _this._handlers = _this._handlers.concat(handler); + + _this._executeHandlers(); + }; + /** JSDoc */ + + + this._executeHandlers = function () { + if (_this._state === States.PENDING) { + return; + } + + var cachedHandlers = _this._handlers.slice(); + + _this._handlers = []; + cachedHandlers.forEach(function (handler) { + if (handler.done) { + return; + } + + if (_this._state === States.RESOLVED) { + if (handler.onfulfilled) { + handler.onfulfilled(_this._value); + } + } + + if (_this._state === States.REJECTED) { + if (handler.onrejected) { + handler.onrejected(_this._value); + } + } + + handler.done = true; + }); + }; + + try { + executor(this._resolve, this._reject); + } catch (e) { + this._reject(e); + } } + /** JSDoc */ - out.push(elem.tagName.toLowerCase()); - if (elem.id) { - out.push('#' + elem.id); + SyncPromise.prototype.toString = function () { + return '[object SyncPromise]'; + }; + /** JSDoc */ + + + SyncPromise.resolve = function (value) { + return new SyncPromise(function (resolve) { + resolve(value); + }); + }; + /** JSDoc */ + + + SyncPromise.reject = function (reason) { + return new SyncPromise(function (_, reject) { + reject(reason); + }); + }; + /** JSDoc */ + + + SyncPromise.all = function (collection) { + return new SyncPromise(function (resolve, reject) { + if (!Array.isArray(collection)) { + reject(new TypeError("Promise.all requires an array as input.")); + return; + } + + if (collection.length === 0) { + resolve([]); + return; + } + + var counter = collection.length; + var resolvedCollection = []; + collection.forEach(function (item, index) { + SyncPromise.resolve(item).then(function (value) { + resolvedCollection[index] = value; + counter -= 1; + + if (counter !== 0) { + return; + } + + resolve(resolvedCollection); + }).then(null, reject); + }); + }); + }; + /** JSDoc */ + + + SyncPromise.prototype.then = function (_onfulfilled, _onrejected) { + var _this = this; + + return new SyncPromise(function (resolve, reject) { + _this._attachHandler({ + done: false, + onfulfilled: function onfulfilled(result) { + if (!_onfulfilled) { + // TODO: ¯\_(ツ)_/¯ + // TODO: FIXME + resolve(result); + return; + } + + try { + resolve(_onfulfilled(result)); + return; + } catch (e) { + reject(e); + return; + } + }, + onrejected: function onrejected(reason) { + if (!_onrejected) { + reject(reason); + return; + } + + try { + resolve(_onrejected(reason)); + return; + } catch (e) { + reject(e); + return; + } + } + }); + }); + }; + /** JSDoc */ + + + SyncPromise.prototype.catch = function (onrejected) { + return this.then(function (val) { + return val; + }, onrejected); + }; + /** JSDoc */ + + + SyncPromise.prototype.finally = function (onfinally) { + var _this = this; + + return new SyncPromise(function (resolve, reject) { + var val; + var isRejected; + return _this.then(function (value) { + isRejected = false; + val = value; + + if (onfinally) { + onfinally(); + } + }, function (reason) { + isRejected = true; + val = reason; + + if (onfinally) { + onfinally(); + } + }).then(function () { + if (isRejected) { + reject(val); + return; + } + + resolve(val); + }); + }); + }; + + return SyncPromise; + }(); + + /** A simple queue that holds promises. */ + + var PromiseBuffer = + /** @class */ + function () { + function PromiseBuffer(_limit) { + this._limit = _limit; + /** Internal set of queued Promises */ + + this._buffer = []; } + /** + * Says if the buffer is ready to take more requests + */ - className = elem.className; - if (className && isString(className)) { - classes = className.split(/\s+/); + PromiseBuffer.prototype.isReady = function () { + return this._limit === undefined || this.length() < this._limit; + }; + /** + * Add a promise to the queue. + * + * @param task Can be any PromiseLike<T> + * @returns The original promise. + */ - for (i = 0; i < classes.length; i++) { - out.push('.' + classes[i]); + + PromiseBuffer.prototype.add = function (task) { + var _this = this; + + if (!this.isReady()) { + return SyncPromise.reject(new SentryError('Not adding Promise due to buffer limit reached.')); + } + + if (this._buffer.indexOf(task) === -1) { + this._buffer.push(task); } + + task.then(function () { + return _this.remove(task); + }).then(null, function () { + return _this.remove(task).then(null, function () {// We have to add this catch here otherwise we have an unhandledPromiseRejection + // because it's a new Promise chain. + }); + }); + return task; + }; + /** + * Remove a promise to the queue. + * + * @param task Can be any PromiseLike<T> + * @returns Removed promise. + */ + + + PromiseBuffer.prototype.remove = function (task) { + var removedTask = this._buffer.splice(this._buffer.indexOf(task), 1)[0]; + + return removedTask; + }; + /** + * This function returns the number of unresolved promises in the queue. + */ + + + PromiseBuffer.prototype.length = function () { + return this._buffer.length; + }; + /** + * This will drain the whole queue, returns true if queue is empty or drained. + * If timeout is provided and the queue takes longer to drain, the promise still resolves but with false. + * + * @param timeout Number in ms to wait until it resolves with false. + */ + + + PromiseBuffer.prototype.drain = function (timeout) { + var _this = this; + + return new SyncPromise(function (resolve) { + var capturedSetTimeout = setTimeout(function () { + if (timeout && timeout > 0) { + resolve(false); + } + }, timeout); + SyncPromise.all(_this._buffer).then(function () { + clearTimeout(capturedSetTimeout); + resolve(true); + }).then(null, function () { + resolve(true); + }); + }); + }; + + return PromiseBuffer; + }(); + + /** + * Tells whether current environment supports Fetch API + * {@link supportsFetch}. + * + * @returns Answer to the given question. + */ + + function supportsFetch() { + if (!('fetch' in getGlobalObject())) { + return false; } - var attrWhitelist = ['type', 'name', 'title', 'alt']; + try { + // tslint:disable-next-line:no-unused-expression + new Headers(); // tslint:disable-next-line:no-unused-expression - for (i = 0; i < attrWhitelist.length; i++) { - key = attrWhitelist[i]; - attr = elem.getAttribute(key); + new Request(''); // tslint:disable-next-line:no-unused-expression - if (attr) { - out.push('[' + key + '="' + attr + '"]'); - } + new Response(); + return true; + } catch (e) { + return false; } + } + /** + * isNativeFetch checks if the given function is a native implementation of fetch() + */ - return out.join(''); + function isNativeFetch(func) { + return func && /^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(func.toString()); } /** - * Returns true if either a OR b is truthy, but not both + * Tells whether current environment supports Fetch API natively + * {@link supportsNativeFetch}. + * + * @returns true if `window.fetch` is natively implemented, false otherwise */ - function isOnlyOneTruthy(a, b) { - return !!(!!a ^ !!b); + function supportsNativeFetch() { + if (!supportsFetch()) { + return false; + } + + var global = getGlobalObject(); // Fast path to avoid DOM I/O + // tslint:disable-next-line:no-unbound-method + + if (isNativeFetch(global.fetch)) { + return true; + } // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension) + // so create a "pure" iframe to see if that has native fetch + + + var result = false; + var doc = global.document; // tslint:disable-next-line:no-unbound-method deprecation + + if (doc && typeof doc.createElement === "function") { + try { + var sandbox = doc.createElement('iframe'); + sandbox.hidden = true; + doc.head.appendChild(sandbox); + + if (sandbox.contentWindow && sandbox.contentWindow.fetch) { + // tslint:disable-next-line:no-unbound-method + result = isNativeFetch(sandbox.contentWindow.fetch); + } + + doc.head.removeChild(sandbox); + } catch (err) { + logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err); + } + } + + return result; } /** - * Returns true if both parameters are undefined + * Tells whether current environment supports Referrer Policy API + * {@link supportsReferrerPolicy}. + * + * @returns Answer to the given question. */ + function supportsReferrerPolicy() { + // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default + // https://caniuse.com/#feat=referrer-policy + // It doesn't. And it throw exception instead of ignoring this parameter... + // REF: https://github.com/getsentry/raven-js/issues/1233 + if (!supportsFetch()) { + return false; + } - function isBothUndefined(a, b) { - return isUndefined(a) && isUndefined(b); + try { + // tslint:disable:no-unused-expression + new Request('_', { + referrerPolicy: 'origin' + }); + return true; + } catch (e) { + return false; + } } /** - * Returns true if the two input exception interfaces have the same content + * Tells whether current environment supports History API + * {@link supportsHistory}. + * + * @returns Answer to the given question. */ + function supportsHistory() { + // NOTE: in Chrome App environment, touching history.pushState, *even inside + // a try/catch block*, will cause Chrome to output an error to console.error + // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var global = getGlobalObject(); + var chrome = global.chrome; // tslint:disable-next-line:no-unsafe-any - function isSameException(ex1, ex2) { - if (isOnlyOneTruthy(ex1, ex2)) return false; - ex1 = ex1.values[0]; - ex2 = ex2.values[0]; - if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false; // in case both stacktraces are undefined, we can't decide so default to false - - if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false; - return isSameStacktrace(ex1.stacktrace, ex2.stacktrace); + var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState; + return !isChromePackagedApp && hasHistoryApi; } + + var global$2 = getGlobalObject(); /** - * Returns true if the two input stack trace interfaces have the same content + * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc. + * - Console API + * - Fetch API + * - XHR API + * - History API + * - DOM API (click/typing) + * - Error API + * - UnhandledRejection API */ + var handlers = {}; + var instrumented = {}; + /** Instruments given API */ - function isSameStacktrace(stack1, stack2) { - if (isOnlyOneTruthy(stack1, stack2)) return false; - var frames1 = stack1.frames; - var frames2 = stack2.frames; // Exit early if stacktrace is malformed + function instrument(type) { + if (instrumented[type]) { + return; + } - if (frames1 === undefined || frames2 === undefined) return false; // Exit early if frame count differs + instrumented[type] = true; - if (frames1.length !== frames2.length) return false; // Iterate through every frame; bail out if anything differs + switch (type) { + case 'console': + instrumentConsole(); + break; - var a, b; + case 'dom': + instrumentDOM(); + break; - for (var i = 0; i < frames1.length; i++) { - a = frames1[i]; - b = frames2[i]; - if (a.filename !== b.filename || a.lineno !== b.lineno || a.colno !== b.colno || a['function'] !== b['function']) return false; - } + case 'xhr': + instrumentXHR(); + break; - return true; - } - /** - * Polyfill a method - * @param obj object e.g. `document` - * @param name method name present on object e.g. `addEventListener` - * @param replacement replacement function - * @param track {optional} record instrumentation to an array - */ + case 'fetch': + instrumentFetch(); + break; + + case 'history': + instrumentHistory(); + break; + case 'error': + instrumentError(); + break; - function fill(obj, name, replacement, track) { - if (obj == null) return; - var orig = obj[name]; - obj[name] = replacement(orig); - obj[name].__raven__ = true; - obj[name].__orig__ = orig; + case 'unhandledrejection': + instrumentUnhandledRejection(); + break; - if (track) { - track.push([obj, name, orig]); + default: + logger.warn('unknown instrumentation type:', type); } } /** - * Join values in array - * @param input array of values to be joined together - * @param delimiter string to be placed in-between values - * @returns {string} + * Add handler that will be called when given type of instrumentation triggers. + * Use at your own risk, this might break without changelog notice, only used internally. + * @hidden */ - function safeJoin(input, delimiter) { - if (!isArray$1(input)) return ''; - var output = []; + function addInstrumentationHandler(handler) { + // tslint:disable-next-line:strict-type-predicates + if (!handler || typeof handler.type !== 'string' || typeof handler.callback !== 'function') { + return; + } - for (var i = 0; i < input.length; i++) { + handlers[handler.type] = handlers[handler.type] || []; + handlers[handler.type].push(handler.callback); + instrument(handler.type); + } + /** JSDoc */ + + function triggerHandlers(type, data) { + var e_1, _a; + + if (!type || !handlers[type]) { + return; + } + + try { + for (var _b = __values(handlers[type] || []), _c = _b.next(); !_c.done; _c = _b.next()) { + var handler = _c.value; + + try { + handler(data); + } catch (e) { + logger.error("Error while triggering instrumentation handler.\nType: " + type + "\nName: " + getFunctionName(handler) + "\nError: " + e); + } + } + } catch (e_1_1) { + e_1 = { + error: e_1_1 + }; + } finally { try { - output.push(String(input[i])); - } catch (e) { - output.push('[value cannot be serialized]'); + if (_c && !_c.done && (_a = _b.return)) _a.call(_b); + } finally { + if (e_1) throw e_1.error; } } + } + /** JSDoc */ - return output.join(delimiter); - } // Default Node.js REPL depth + function instrumentConsole() { + if (!('console' in global$2)) { + return; + } - var MAX_SERIALIZE_EXCEPTION_DEPTH = 3; // 50kB, as 100kB is max payload size, so half sounds reasonable + ['debug', 'info', 'warn', 'error', 'log', 'assert'].forEach(function (level) { + if (!(level in global$2.console)) { + return; + } - var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024; - var MAX_SERIALIZE_KEYS_LENGTH = 40; + fill(global$2.console, level, function (originalConsoleLevel) { + return function () { + var args = []; - function utf8Length(value) { - return ~-encodeURI(value).split(/%..|./).length; - } + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - function jsonSize(value) { - return utf8Length(JSON.stringify(value)); + triggerHandlers('console', { + args: args, + level: level + }); // this fails for some browsers. :( + + if (originalConsoleLevel) { + Function.prototype.apply.call(originalConsoleLevel, global$2.console, args); + } + }; + }); + }); } + /** JSDoc */ - function serializeValue(value) { - if (typeof value === 'string') { - var maxLength = 40; - return truncate(value, maxLength); - } else if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined') { - return value; + + function instrumentFetch() { + if (!supportsNativeFetch()) { + return; } - var type = Object.prototype.toString.call(value); // Node.js REPL notation + fill(global$2, 'fetch', function (originalFetch) { + return function () { + var args = []; - if (type === '[object Object]') return '[Object]'; - if (type === '[object Array]') return '[Array]'; - if (type === '[object Function]') return value.name ? '[Function: ' + value.name + ']' : '[Function]'; - return value; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + var commonHandlerData = { + args: args, + fetchData: { + method: getFetchMethod(args), + url: getFetchUrl(args) + }, + startTimestamp: Date.now() + }; + triggerHandlers('fetch', _assign({}, commonHandlerData)); + return originalFetch.apply(global$2, args).then(function (response) { + triggerHandlers('fetch', _assign({}, commonHandlerData, { + endTimestamp: Date.now(), + response: response + })); + return response; + }, function (error) { + triggerHandlers('fetch', _assign({}, commonHandlerData, { + endTimestamp: Date.now(), + error: error + })); + throw error; + }); + }; + }); } + /** Extract `method` from fetch call arguments */ - function serializeObject(value, depth) { - if (depth === 0) return serializeValue(value); - - if (isPlainObject(value)) { - return Object.keys(value).reduce(function (acc, key) { - acc[key] = serializeObject(value[key], depth - 1); - return acc; - }, {}); - } else if (Array.isArray(value)) { - return value.map(function (val) { - return serializeObject(val, depth - 1); - }); + + function getFetchMethod(fetchArgs) { + if (fetchArgs === void 0) { + fetchArgs = []; + } + + if ('Request' in global$2 && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) { + return String(fetchArgs[0].method).toUpperCase(); + } + + if (fetchArgs[1] && fetchArgs[1].method) { + return String(fetchArgs[1].method).toUpperCase(); } - return serializeValue(value); + return 'GET'; } + /** Extract `url` from fetch call arguments */ - function serializeException(ex, depth, maxSize) { - if (!isPlainObject(ex)) return ex; - depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth; - maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize; - var serialized = serializeObject(ex, depth); - if (jsonSize(stringify_1(serialized)) > maxSize) { - return serializeException(ex, depth - 1); + function getFetchUrl(fetchArgs) { + if (fetchArgs === void 0) { + fetchArgs = []; } - return serialized; + if (typeof fetchArgs[0] === 'string') { + return fetchArgs[0]; + } + + if ('Request' in global$2 && isInstanceOf(fetchArgs[0], Request)) { + return fetchArgs[0].url; + } + + return String(fetchArgs[0]); } + /** JSDoc */ - function serializeKeysForMessage(keys, maxLength) { - if (typeof keys === 'number' || typeof keys === 'string') return keys.toString(); - if (!Array.isArray(keys)) return ''; - keys = keys.filter(function (key) { - return typeof key === 'string'; - }); - if (keys.length === 0) return '[object has no keys]'; - maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength; - if (keys[0].length >= maxLength) return keys[0]; - for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) { - var serialized = keys.slice(0, usedKeys).join(', '); - if (serialized.length > maxLength) continue; - if (usedKeys === keys.length) return serialized; - return serialized + "\u2026"; + function instrumentXHR() { + if (!('XMLHttpRequest' in global$2)) { + return; } - return ''; + var xhrproto = XMLHttpRequest.prototype; + fill(xhrproto, 'open', function (originalOpen) { + return function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + var url = args[1]; + this.__sentry_xhr__ = { + method: isString(args[0]) ? args[0].toUpperCase() : args[0], + url: args[1] + }; // if Sentry key appears in URL, don't capture it as a request + + if (isString(url) && this.__sentry_xhr__.method === 'POST' && url.match(/sentry_key/)) { + this.__sentry_own_request__ = true; + } + + return originalOpen.apply(this, args); + }; + }); + fill(xhrproto, 'send', function (originalSend) { + return function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + var xhr = this; // tslint:disable-line:no-this-assignment + + var commonHandlerData = { + args: args, + startTimestamp: Date.now(), + xhr: xhr + }; + triggerHandlers('xhr', _assign({}, commonHandlerData)); + xhr.addEventListener('readystatechange', function () { + if (xhr.readyState === 4) { + try { + // touching statusCode in some platforms throws + // an exception + if (xhr.__sentry_xhr__) { + xhr.__sentry_xhr__.status_code = xhr.status; + } + } catch (e) { + /* do nothing */ + } + + triggerHandlers('xhr', _assign({}, commonHandlerData, { + endTimestamp: Date.now() + })); + } + }); + return originalSend.apply(this, args); + }; + }); } - function sanitize(input, sanitizeKeys) { - if (!isArray$1(sanitizeKeys) || isArray$1(sanitizeKeys) && sanitizeKeys.length === 0) return input; - var sanitizeRegExp = joinRegExp(sanitizeKeys); - var sanitizeMask = '********'; - var safeInput; + var lastHref; + /** JSDoc */ - try { - safeInput = JSON.parse(stringify_1(input)); - } catch (o_O) { - return input; + function instrumentHistory() { + if (!supportsHistory()) { + return; } - function sanitizeWorker(workerInput) { - if (isArray$1(workerInput)) { - return workerInput.map(function (val) { - return sanitizeWorker(val); - }); + var oldOnPopState = global$2.onpopstate; + + global$2.onpopstate = function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; } - if (isPlainObject(workerInput)) { - return Object.keys(workerInput).reduce(function (acc, k) { - if (sanitizeRegExp.test(k)) { - acc[k] = sanitizeMask; - } else { - acc[k] = sanitizeWorker(workerInput[k]); - } + var to = global$2.location.href; // keep track of the current URL state, as we always receive only the updated state + + var from = lastHref; + lastHref = to; + triggerHandlers('history', { + from: from, + to: to + }); - return acc; - }, {}); + if (oldOnPopState) { + return oldOnPopState.apply(this, args); } + }; + /** @hidden */ + + + function historyReplacementFunction(originalHistoryFunction) { + return function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - return workerInput; + var url = args.length > 2 ? args[2] : undefined; + + if (url) { + // coerce to string (this is what pushState does) + var from = lastHref; + var to = String(url); // keep track of the current URL state, as we always receive only the updated state + + lastHref = to; + triggerHandlers('history', { + from: from, + to: to + }); + } + + return originalHistoryFunction.apply(this, args); + }; } - return sanitizeWorker(safeInput); + fill(global$2.history, 'pushState', historyReplacementFunction); + fill(global$2.history, 'replaceState', historyReplacementFunction); } + /** JSDoc */ - var utils = { - isObject: isObject$1, - isError: isError, - isErrorEvent: isErrorEvent, - isDOMError: isDOMError, - isDOMException: isDOMException, - isUndefined: isUndefined, - isFunction: isFunction, - isPlainObject: isPlainObject, - isString: isString, - isArray: isArray$1, - isEmptyObject: isEmptyObject, - supportsErrorEvent: supportsErrorEvent, - supportsDOMError: supportsDOMError, - supportsDOMException: supportsDOMException, - supportsFetch: supportsFetch, - supportsReferrerPolicy: supportsReferrerPolicy, - supportsPromiseRejectionEvent: supportsPromiseRejectionEvent, - wrappedCallback: wrappedCallback, - each: each, - objectMerge: objectMerge, - truncate: truncate, - objectFrozen: objectFrozen, - hasKey: hasKey, - joinRegExp: joinRegExp, - urlencode: urlencode, - uuid4: uuid4, - htmlTreeAsString: htmlTreeAsString, - htmlElementAsString: htmlElementAsString, - isSameException: isSameException, - isSameStacktrace: isSameStacktrace, - parseUrl: parseUrl, - fill: fill, - safeJoin: safeJoin, - serializeException: serializeException, - serializeKeysForMessage: serializeKeysForMessage, - sanitize: sanitize - }; - /* - TraceKit - Cross brower stack traces + function instrumentDOM() { + if (!('document' in global$2)) { + return; + } // Capture breadcrumbs from any click that is unhandled / bubbled up all the way + // to the document. Do this before we instrument addEventListener. - This was originally forked from github.com/occ/TraceKit, but has since been - largely re-written and is now maintained as part of raven-js. Tests for - this are in test/vendor. - MIT license - */ + global$2.document.addEventListener('click', domEventHandler('click', triggerHandlers.bind(null, 'dom')), false); + global$2.document.addEventListener('keypress', keypressEventHandler(triggerHandlers.bind(null, 'dom')), false); // After hooking into document bubbled up click and keypresses events, we also hook into user handled click & keypresses. - var TraceKit = { - collectWindowErrors: true, - debug: false - }; // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) + ['EventTarget', 'Node'].forEach(function (target) { + var proto = global$2[target] && global$2[target].prototype; - var _window$1 = typeof window !== 'undefined' ? window : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; // global reference to slice + if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) { + return; + } + + fill(proto, 'addEventListener', function (original) { + return function (eventName, fn, options) { + if (fn && fn.handleEvent) { + if (eventName === 'click') { + fill(fn, 'handleEvent', function (innerOriginal) { + return function (event) { + domEventHandler('click', triggerHandlers.bind(null, 'dom'))(event); + return innerOriginal.call(this, event); + }; + }); + } + + if (eventName === 'keypress') { + fill(fn, 'handleEvent', function (innerOriginal) { + return function (event) { + keypressEventHandler(triggerHandlers.bind(null, 'dom'))(event); + return innerOriginal.call(this, event); + }; + }); + } + } else { + if (eventName === 'click') { + domEventHandler('click', triggerHandlers.bind(null, 'dom'), true)(this); + } + if (eventName === 'keypress') { + keypressEventHandler(triggerHandlers.bind(null, 'dom'))(this); + } + } - var _slice = [].slice; - var UNKNOWN_FUNCTION = '?'; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types + return original.call(this, eventName, fn, options); + }; + }); + fill(proto, 'removeEventListener', function (original) { + return function (eventName, fn, options) { + var callback = fn; - var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/; + try { + callback = callback && (callback.__sentry_wrapped__ || callback); + } catch (e) {// ignore, accessing __sentry_wrapped__ will throw in some Selenium environments + } - function getLocationHref() { - if (typeof document === 'undefined' || document.location == null) return ''; - return document.location.href; + return original.call(this, eventName, callback, options); + }; + }); + }); } - function getLocationOrigin() { - if (typeof document === 'undefined' || document.location == null) return ''; // Oh dear IE10... + var debounceDuration = 1000; + var debounceTimer = 0; + var keypressTimeout; + var lastCapturedEvent; + /** + * Wraps addEventListener to capture UI breadcrumbs + * @param name the event name (e.g. "click") + * @param handler function that will be triggered + * @param debounce decides whether it should wait till another event loop + * @returns wrapped breadcrumb events handler + * @hidden + */ - if (!document.location.origin) { - return document.location.protocol + '//' + document.location.hostname + (document.location.port ? ':' + document.location.port : ''); + function domEventHandler(name, handler, debounce) { + if (debounce === void 0) { + debounce = false; } - return document.location.origin; + return function (event) { + // reset keypress timeout; e.g. triggering a 'click' after + // a 'keypress' will reset the keypress debounce so that a new + // set of keypresses can be recorded + keypressTimeout = undefined; // It's possible this handler might trigger multiple times for the same + // event (e.g. event propagation through node ancestors). Ignore if we've + // already captured the event. + + if (!event || lastCapturedEvent === event) { + return; + } + + lastCapturedEvent = event; + + if (debounceTimer) { + clearTimeout(debounceTimer); + } + + if (debounce) { + debounceTimer = setTimeout(function () { + handler({ + event: event, + name: name + }); + }); + } else { + handler({ + event: event, + name: name + }); + } + }; } /** - * TraceKit.report: cross-browser processing of unhandled exceptions - * - * Syntax: - * TraceKit.report.subscribe(function(stackInfo) { ... }) - * TraceKit.report.unsubscribe(function(stackInfo) { ... }) - * TraceKit.report(exception) - * try { ...code... } catch(ex) { TraceKit.report(ex); } - * - * Supports: - * - Firefox: full stack trace with line numbers, plus column number - * on top frame; column number is not guaranteed - * - Opera: full stack trace with line and column numbers - * - Chrome: full stack trace with line and column numbers - * - Safari: line and column number for the top frame only; some frames - * may be missing, and column number is not guaranteed - * - IE: line and column number for the top frame only; some frames - * may be missing, and column number is not guaranteed - * - * In theory, TraceKit should work on all of the following versions: - * - IE5.5+ (only 8.0 tested) - * - Firefox 0.9+ (only 3.5+ tested) - * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require - * Exceptions Have Stacktrace to be enabled in opera:config) - * - Safari 3+ (only 4+ tested) - * - Chrome 1+ (only 5+ tested) - * - Konqueror 3.5+ (untested) - * - * Requires TraceKit.computeStackTrace. - * - * Tries to catch all unhandled exceptions and report them to the - * subscribed handlers. Please note that TraceKit.report will rethrow the - * exception. This is REQUIRED in order to get a useful stack trace in IE. - * If the exception does not reach the top of the browser, you will only - * get a stack trace from the point where TraceKit.report was called. - * - * Handlers receive a stackInfo object as described in the - * TraceKit.computeStackTrace docs. + * Wraps addEventListener to capture keypress UI events + * @param handler function that will be triggered + * @returns wrapped keypress events handler + * @hidden */ - TraceKit.report = function reportModuleWrapper() { - var handlers = [], - lastArgs = null, - lastException = null, - lastExceptionStack = null; - /** - * Add a crash handler. - * @param {Function} handler - */ + function keypressEventHandler(handler) { + // TODO: if somehow user switches keypress target before + // debounce timeout is triggered, we will only capture + // a single breadcrumb from the FIRST target (acceptable?) + return function (event) { + var target; + + try { + target = event.target; + } catch (e) { + // just accessing event properties can throw an exception in some rare circumstances + // see: https://github.com/getsentry/raven-js/issues/838 + return; + } + + var tagName = target && target.tagName; // only consider keypress events on actual input elements + // this will disregard keypresses targeting body (e.g. tabbing + // through elements, hotkeys, etc) + + if (!tagName || tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) { + return; + } // record first keypress in a series, but ignore subsequent + // keypresses until debounce clears + + + if (!keypressTimeout) { + domEventHandler('input', handler)(event); + } + + clearTimeout(keypressTimeout); + keypressTimeout = setTimeout(function () { + keypressTimeout = undefined; + }, debounceDuration); + }; + } + + var _oldOnErrorHandler = null; + /** JSDoc */ - function subscribe(handler) { - installGlobalHandler(); - handlers.push(handler); + function instrumentError() { + _oldOnErrorHandler = global$2.onerror; + + global$2.onerror = function (msg, url, line, column, error) { + triggerHandlers('error', { + column: column, + error: error, + line: line, + msg: msg, + url: url + }); + + if (_oldOnErrorHandler) { + return _oldOnErrorHandler.apply(this, arguments); + } + + return false; + }; + } + + var _oldOnUnhandledRejectionHandler = null; + /** JSDoc */ + + function instrumentUnhandledRejection() { + _oldOnUnhandledRejectionHandler = global$2.onunhandledrejection; + + global$2.onunhandledrejection = function (e) { + triggerHandlers('unhandledrejection', e); + + if (_oldOnUnhandledRejectionHandler) { + return _oldOnUnhandledRejectionHandler.apply(this, arguments); + } + + return true; + }; + } + + /** Regular expression used to parse a Dsn. */ + + var DSN_REGEX = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w\.-]+)(?::(\d+))?\/(.+)/; + /** Error message */ + + var ERROR_MESSAGE = 'Invalid Dsn'; + /** The Sentry Dsn, identifying a Sentry instance and project. */ + + var Dsn = + /** @class */ + function () { + /** Creates a new Dsn component */ + function Dsn(from) { + if (typeof from === 'string') { + this._fromString(from); + } else { + this._fromComponents(from); + } + + this._validate(); } /** - * Remove a crash handler. - * @param {Function} handler + * Renders the string representation of this Dsn. + * + * By default, this will render the public representation without the password + * component. To get the deprecated private representation, set `withPassword` + * to true. + * + * @param withPassword When set to true, the password will be included. */ - function unsubscribe(handler) { - for (var i = handlers.length - 1; i >= 0; --i) { - if (handlers[i] === handler) { - handlers.splice(i, 1); + Dsn.prototype.toString = function (withPassword) { + if (withPassword === void 0) { + withPassword = false; + } // tslint:disable-next-line:no-this-assignment + + + var _a = this, + host = _a.host, + path = _a.path, + pass = _a.pass, + port = _a.port, + projectId = _a.projectId, + protocol = _a.protocol, + user = _a.user; + + return protocol + "://" + user + (withPassword && pass ? ":" + pass : '') + ("@" + host + (port ? ":" + port : '') + "/" + (path ? path + "/" : path) + projectId); + }; + /** Parses a string into this Dsn. */ + + + Dsn.prototype._fromString = function (str) { + var match = DSN_REGEX.exec(str); + + if (!match) { + throw new SentryError(ERROR_MESSAGE); + } + + var _a = __read(match.slice(1), 6), + protocol = _a[0], + user = _a[1], + _b = _a[2], + pass = _b === void 0 ? '' : _b, + host = _a[3], + _c = _a[4], + port = _c === void 0 ? '' : _c, + lastPath = _a[5]; + + var path = ''; + var projectId = lastPath; + var split = projectId.split('/'); + + if (split.length > 1) { + path = split.slice(0, -1).join('/'); + projectId = split.pop(); + } + + this._fromComponents({ + host: host, + pass: pass, + path: path, + projectId: projectId, + port: port, + protocol: protocol, + user: user + }); + }; + /** Maps Dsn components into this instance. */ + + + Dsn.prototype._fromComponents = function (components) { + this.protocol = components.protocol; + this.user = components.user; + this.pass = components.pass || ''; + this.host = components.host; + this.port = components.port || ''; + this.path = components.path || ''; + this.projectId = components.projectId; + }; + /** Validates this Dsn and throws on error. */ + + + Dsn.prototype._validate = function () { + var _this = this; + + ['protocol', 'user', 'host', 'projectId'].forEach(function (component) { + if (!_this[component]) { + throw new SentryError(ERROR_MESSAGE); } + }); + + if (this.protocol !== 'http' && this.protocol !== 'https') { + throw new SentryError(ERROR_MESSAGE); } + + if (this.port && isNaN(parseInt(this.port, 10))) { + throw new SentryError(ERROR_MESSAGE); + } + }; + + return Dsn; + }(); + + /** + * Holds additional event information. {@link Scope.applyToEvent} will be + * called by the client before an event will be sent. + */ + + var Scope = + /** @class */ + function () { + function Scope() { + /** Flag if notifiying is happening. */ + this._notifyingListeners = false; + /** Callback for client to receive scope changes. */ + + this._scopeListeners = []; + /** Callback list that will be called after {@link applyToEvent}. */ + + this._eventProcessors = []; + /** Array of breadcrumbs. */ + + this._breadcrumbs = []; + /** User */ + + this._user = {}; + /** Tags */ + + this._tags = {}; + /** Extra */ + + this._extra = {}; + /** Contexts */ + + this._context = {}; } /** - * Remove all crash handlers. + * Add internal on change listener. Used for sub SDKs that need to store the scope. + * @hidden */ - function unsubscribeAll() { - uninstallGlobalHandler(); - handlers = []; - } + Scope.prototype.addScopeListener = function (callback) { + this._scopeListeners.push(callback); + }; /** - * Dispatch stack information to all handlers. - * @param {Object.<string, *>} stack + * @inheritDoc */ - function notifyHandlers(stack, isWindowError) { - var exception = null; + Scope.prototype.addEventProcessor = function (callback) { + this._eventProcessors.push(callback); - if (isWindowError && !TraceKit.collectWindowErrors) { - return; + return this; + }; + /** + * This will be called on every set call. + */ + + + Scope.prototype._notifyScopeListeners = function () { + var _this = this; + + if (!this._notifyingListeners) { + this._notifyingListeners = true; + setTimeout(function () { + _this._scopeListeners.forEach(function (callback) { + callback(_this); + }); + + _this._notifyingListeners = false; + }); } + }; + /** + * This will be called after {@link applyToEvent} is finished. + */ - for (var i in handlers) { - if (handlers.hasOwnProperty(i)) { - try { - handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2))); - } catch (inner) { - exception = inner; + + Scope.prototype._notifyEventProcessors = function (processors, event, hint, index) { + var _this = this; + + if (index === void 0) { + index = 0; + } + + return new SyncPromise(function (resolve, reject) { + var processor = processors[index]; // tslint:disable-next-line:strict-type-predicates + + if (event === null || typeof processor !== 'function') { + resolve(event); + } else { + var result = processor(_assign({}, event), hint); + + if (isThenable$1(result)) { + result.then(function (final) { + return _this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve); + }).then(null, reject); + } else { + _this._notifyEventProcessors(processors, result, hint, index + 1).then(resolve).then(null, reject); } } - } + }); + }; + /** + * @inheritDoc + */ - if (exception) { - throw exception; - } - } - var _oldOnerrorHandler, _onErrorHandlerInstalled; + Scope.prototype.setUser = function (user) { + this._user = user || {}; + + this._notifyScopeListeners(); + + return this; + }; /** - * Ensures all global unhandled exceptions are recorded. - * Supported by Gecko and IE. - * @param {string} msg Error message. - * @param {string} url URL of script that generated the exception. - * @param {(number|string)} lineNo The line number at which the error - * occurred. - * @param {?(number|string)} colNo The column number at which the error - * occurred. - * @param {?Error} ex The actual Error object. + * @inheritDoc */ - function traceKitWindowOnError(msg, url, lineNo, colNo, ex) { - var stack = null; // If 'ex' is ErrorEvent, get real Error from inside + Scope.prototype.setTags = function (tags) { + this._tags = _assign({}, this._tags, tags); - var exception = utils.isErrorEvent(ex) ? ex.error : ex; // If 'msg' is ErrorEvent, get real message from inside + this._notifyScopeListeners(); - var message = utils.isErrorEvent(msg) ? msg.message : msg; + return this; + }; + /** + * @inheritDoc + */ - if (lastExceptionStack) { - TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message); - processLastException(); - } else if (exception && utils.isError(exception)) { - // non-string `exception` arg; attempt to extract stack trace - // New chrome and blink send along a real error object - // Let's just report that like a normal error. - // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror - stack = TraceKit.computeStackTrace(exception); - notifyHandlers(stack, true); - } else { - var location = { - url: url, - line: lineNo, - column: colNo - }; - var name = undefined; - var groups; - if ({}.toString.call(message) === '[object String]') { - var groups = message.match(ERROR_TYPES_RE); + Scope.prototype.setTag = function (key, value) { + var _a; - if (groups) { - name = groups[1]; - message = groups[2]; - } - } + this._tags = _assign({}, this._tags, (_a = {}, _a[key] = value, _a)); - location.func = UNKNOWN_FUNCTION; - stack = { - name: name, - message: message, - url: getLocationHref(), - stack: [location] - }; - notifyHandlers(stack, true); - } + this._notifyScopeListeners(); - if (_oldOnerrorHandler) { - return _oldOnerrorHandler.apply(this, arguments); - } + return this; + }; + /** + * @inheritDoc + */ - return false; - } - function installGlobalHandler() { - if (_onErrorHandlerInstalled) { - return; + Scope.prototype.setExtras = function (extras) { + this._extra = _assign({}, this._extra, extras); + + this._notifyScopeListeners(); + + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.setExtra = function (key, extra) { + var _a; + + this._extra = _assign({}, this._extra, (_a = {}, _a[key] = extra, _a)); + + this._notifyScopeListeners(); + + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.setFingerprint = function (fingerprint) { + this._fingerprint = fingerprint; + + this._notifyScopeListeners(); + + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.setLevel = function (level) { + this._level = level; + + this._notifyScopeListeners(); + + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.setTransaction = function (transaction) { + this._transaction = transaction; + + if (this._span) { + this._span.transaction = transaction; } - _oldOnerrorHandler = _window$1.onerror; - _window$1.onerror = traceKitWindowOnError; - _onErrorHandlerInstalled = true; - } + this._notifyScopeListeners(); - function uninstallGlobalHandler() { - if (!_onErrorHandlerInstalled) { - return; + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.setContext = function (key, context) { + var _a; + + this._context = _assign({}, this._context, (_a = {}, _a[key] = context, _a)); + + this._notifyScopeListeners(); + + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.setSpan = function (span) { + this._span = span; + + this._notifyScopeListeners(); + + return this; + }; + /** + * Internal getter for Span, used in Hub. + * @hidden + */ + + + Scope.prototype.getSpan = function () { + return this._span; + }; + /** + * Inherit values from the parent scope. + * @param scope to clone. + */ + + + Scope.clone = function (scope) { + var newScope = new Scope(); + + if (scope) { + newScope._breadcrumbs = __spread(scope._breadcrumbs); + newScope._tags = _assign({}, scope._tags); + newScope._extra = _assign({}, scope._extra); + newScope._context = _assign({}, scope._context); + newScope._user = scope._user; + newScope._level = scope._level; + newScope._span = scope._span; + newScope._transaction = scope._transaction; + newScope._fingerprint = scope._fingerprint; + newScope._eventProcessors = __spread(scope._eventProcessors); } - _window$1.onerror = _oldOnerrorHandler; - _onErrorHandlerInstalled = false; - _oldOnerrorHandler = undefined; - } + return newScope; + }; + /** + * @inheritDoc + */ - function processLastException() { - var _lastExceptionStack = lastExceptionStack, - _lastArgs = lastArgs; - lastArgs = null; - lastExceptionStack = null; - lastException = null; - notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs)); - } + + Scope.prototype.clear = function () { + this._breadcrumbs = []; + this._tags = {}; + this._extra = {}; + this._user = {}; + this._context = {}; + this._level = undefined; + this._transaction = undefined; + this._fingerprint = undefined; + this._span = undefined; + + this._notifyScopeListeners(); + + return this; + }; /** - * Reports an unhandled Error to TraceKit. - * @param {Error} ex - * @param {?boolean} rethrow If false, do not re-throw the exception. - * Only used for window.onerror to not cause an infinite loop of - * rethrowing. + * @inheritDoc */ - function report(ex, rethrow) { - var args = _slice.call(arguments, 1); + Scope.prototype.addBreadcrumb = function (breadcrumb, maxBreadcrumbs) { + var mergedBreadcrumb = _assign({ + timestamp: timestampWithMs() + }, breadcrumb); - if (lastExceptionStack) { - if (lastException === ex) { - return; // already caught by an inner catch block, ignore - } else { - processLastException(); - } + this._breadcrumbs = maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0 ? __spread(this._breadcrumbs, [mergedBreadcrumb]).slice(-maxBreadcrumbs) : __spread(this._breadcrumbs, [mergedBreadcrumb]); + + this._notifyScopeListeners(); + + return this; + }; + /** + * @inheritDoc + */ + + + Scope.prototype.clearBreadcrumbs = function () { + this._breadcrumbs = []; + + this._notifyScopeListeners(); + + return this; + }; + /** + * Applies fingerprint from the scope to the event if there's one, + * uses message if there's one instead or get rid of empty fingerprint + */ + + + Scope.prototype._applyFingerprint = function (event) { + // Make sure it's an array first and we actually have something in place + event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : []; // If we have something on the scope, then merge it with event + + if (this._fingerprint) { + event.fingerprint = event.fingerprint.concat(this._fingerprint); + } // If we have no data at all, remove empty array default + + + if (event.fingerprint && !event.fingerprint.length) { + delete event.fingerprint; + } + }; + /** + * Applies the current context and fingerprint to the event. + * Note that breadcrumbs will be added by the client. + * Also if the event has already breadcrumbs on it, we do not merge them. + * @param event Event + * @param hint May contain additional informartion about the original exception. + * @hidden + */ + + + Scope.prototype.applyToEvent = function (event, hint) { + if (this._extra && Object.keys(this._extra).length) { + event.extra = _assign({}, this._extra, event.extra); } - var stack = TraceKit.computeStackTrace(ex); - lastExceptionStack = stack; - lastException = ex; - lastArgs = args; // If the stack trace is incomplete, wait for 2 seconds for - // slow slow IE to see if onerror occurs or not before reporting - // this exception; otherwise, we will end up with an incomplete - // stack trace + if (this._tags && Object.keys(this._tags).length) { + event.tags = _assign({}, this._tags, event.tags); + } - setTimeout(function () { - if (lastException === ex) { - processLastException(); - } - }, stack.incomplete ? 2000 : 0); + if (this._user && Object.keys(this._user).length) { + event.user = _assign({}, this._user, event.user); + } - if (rethrow !== false) { - throw ex; // re-throw to propagate to the top level (and cause window.onerror) + if (this._context && Object.keys(this._context).length) { + event.contexts = _assign({}, this._context, event.contexts); } - } - report.subscribe = subscribe; - report.unsubscribe = unsubscribe; - report.uninstall = unsubscribeAll; - return report; + if (this._level) { + event.level = this._level; + } + + if (this._transaction) { + event.transaction = this._transaction; + } + + if (this._span) { + event.contexts = _assign({ + trace: this._span.getTraceContext() + }, event.contexts); + } + + this._applyFingerprint(event); + + event.breadcrumbs = __spread(event.breadcrumbs || [], this._breadcrumbs); + event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined; + return this._notifyEventProcessors(__spread(getGlobalEventProcessors(), this._eventProcessors), event, hint); + }; + + return Scope; }(); /** - * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript - * - * Syntax: - * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below) - * Returns: - * s.name - exception name - * s.message - exception message - * s.stack[i].url - JavaScript or HTML file URL - * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work) - * s.stack[i].args - arguments passed to the function, if known - * s.stack[i].line - line number, if known - * s.stack[i].column - column number, if known - * - * Supports: - * - Firefox: full stack trace with line numbers and unreliable column - * number on top frame - * - Opera 10: full stack trace with line and column numbers - * - Opera 9-: full stack trace with line numbers - * - Chrome: full stack trace with line and column numbers - * - Safari: line and column number for the topmost stacktrace element - * only - * - IE: no line numbers whatsoever - * - * Tries to guess names of anonymous functions by looking for assignments - * in the source code. In IE and Safari, we have to guess source file names - * by searching for function bodies inside all page scripts. This will not - * work for scripts that are loaded cross-domain. - * Here be dragons: some function names may be guessed incorrectly, and - * duplicate functions may be mismatched. - * - * TraceKit.computeStackTrace should only be used for tracing purposes. - * Logging of unhandled exceptions should be done with TraceKit.report, - * which builds on top of TraceKit.computeStackTrace and provides better - * IE support by utilizing the window.onerror event to retrieve information - * about the top of the stack. - * - * Note: In IE and Safari, no stack trace is recorded on the Error object, - * so computeStackTrace instead walks its *own* chain of callers. - * This means that: - * * in Safari, some methods may be missing from the stack trace; - * * in IE, the topmost function in the stack trace will always be the - * caller of computeStackTrace. + * Retruns the global event processors. + */ + + function getGlobalEventProcessors() { + var global = getGlobalObject(); + global.__SENTRY__ = global.__SENTRY__ || {}; + global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || []; + return global.__SENTRY__.globalEventProcessors; + } + /** + * Add a EventProcessor to be kept globally. + * @param callback EventProcessor to add + */ + + + function addGlobalEventProcessor(callback) { + getGlobalEventProcessors().push(callback); + } + + /** + * API compatibility version of this hub. * - * This is okay for tracing (because you are likely to be calling - * computeStackTrace from the function you want to be the topmost element - * of the stack trace anyway), but not okay for logging unhandled - * exceptions (because your catch block will likely be far away from the - * inner function that actually caused the exception). + * WARNING: This number should only be incresed when the global interface + * changes a and new methods are introduced. * + * @hidden */ + var API_VERSION = 3; + /** + * Default maximum number of breadcrumbs added to an event. Can be overwritten + * with {@link Options.maxBreadcrumbs}. + */ - TraceKit.computeStackTrace = function computeStackTraceWrapper() { - // Contents of Exception in various browsers. - // - // SAFARI: - // ex.message = Can't find variable: qq - // ex.line = 59 - // ex.sourceId = 580238192 - // ex.sourceURL = http://... - // ex.expressionBeginOffset = 96 - // ex.expressionCaretOffset = 98 - // ex.expressionEndOffset = 98 - // ex.name = ReferenceError - // - // FIREFOX: - // ex.message = qq is not defined - // ex.fileName = http://... - // ex.lineNumber = 59 - // ex.columnNumber = 69 - // ex.stack = ...stack trace... (see the example below) - // ex.name = ReferenceError - // - // CHROME: - // ex.message = qq is not defined - // ex.name = ReferenceError - // ex.type = not_defined - // ex.arguments = ['aa'] - // ex.stack = ...stack trace... - // - // INTERNET EXPLORER: - // ex.message = ... - // ex.name = ReferenceError - // - // OPERA: - // ex.message = ...message... (see the example below) - // ex.name = ReferenceError - // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message) - // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' + var DEFAULT_BREADCRUMBS = 100; + /** + * Absolute maximum number of breadcrumbs added to an event. The + * `maxBreadcrumbs` option cannot be higher than this value. + */ + + var MAX_BREADCRUMBS = 100; + /** + * @inheritDoc + */ + var Hub = + /** @class */ + function () { /** - * Computes stack trace information from the stack property. - * Chrome and Gecko use this property. - * @param {Error} ex - * @return {?Object.<string, *>} Stack trace information. + * Creates a new instance of the hub, will push one {@link Layer} into the + * internal stack on creation. + * + * @param client bound to the hub. + * @param scope bound to the hub. + * @param version number, higher number means higher priority. */ - function computeStackTraceFromStackProp(ex) { - if (typeof ex.stack === 'undefined' || !ex.stack) return; - var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; - var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i; // NOTE: blob urls are now supposed to always have an origin, therefore it's format - // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well + function Hub(client, scope, _version) { + if (scope === void 0) { + scope = new Scope(); + } - var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i; // Used to additionally parse URL/line/column from eval frames + if (_version === void 0) { + _version = API_VERSION; + } - var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; - var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/; - var lines = ex.stack.split('\n'); - var stack = []; - var submatch; - var parts; - var element; - var reference = /^(.*) is undefined$/.exec(ex.message); + this._version = _version; + /** Is a {@link Layer}[] containing the client and scope */ - for (var i = 0, j = lines.length; i < j; ++i) { - if (parts = chrome.exec(lines[i])) { - var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + this._stack = []; - var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + this._stack.push({ + client: client, + scope: scope + }); + } + /** + * Internal helper function to call a method on the top client if it exists. + * + * @param method The method to call on the client. + * @param args Arguments to pass to the client function. + */ - if (isEval && (submatch = chromeEval.exec(parts[2]))) { - // throw out eval line/column and use top-most line/column number - parts[2] = submatch[1]; // url - parts[3] = submatch[2]; // line + Hub.prototype._invokeClient = function (method) { + var _a; - parts[4] = submatch[3]; // column - } + var args = []; - element = { - url: !isNative ? parts[2] : null, - func: parts[1] || UNKNOWN_FUNCTION, - args: isNative ? [parts[2]] : [], - line: parts[3] ? +parts[3] : null, - column: parts[4] ? +parts[4] : null - }; - } else if (parts = winjs.exec(lines[i])) { - element = { - url: parts[2], - func: parts[1] || UNKNOWN_FUNCTION, - args: [], - line: +parts[3], - column: parts[4] ? +parts[4] : null - }; - } else if (parts = gecko.exec(lines[i])) { - var isEval = parts[3] && parts[3].indexOf(' > eval') > -1; - - if (isEval && (submatch = geckoEval.exec(parts[3]))) { - // throw out eval line/column and use top-most line number - parts[3] = submatch[1]; - parts[4] = submatch[2]; - parts[5] = null; // no column when eval - } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') { - // FireFox uses this awesome columnNumber property for its top frame - // Also note, Firefox's column number is 0-based and everything else expects 1-based, - // so adding 1 - // NOTE: this hack doesn't work if top-most frame is eval - stack[0].column = ex.columnNumber + 1; - } + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } - element = { - url: parts[3], - func: parts[1] || UNKNOWN_FUNCTION, - args: parts[2] ? parts[2].split(',') : [], - line: parts[4] ? +parts[4] : null, - column: parts[5] ? +parts[5] : null - }; - } else { - continue; + var top = this.getStackTop(); + + if (top && top.client && top.client[method]) { + (_a = top.client)[method].apply(_a, __spread(args, [top.scope])); + } + }; + /** + * @inheritDoc + */ + + + Hub.prototype.isOlderThan = function (version) { + return this._version < version; + }; + /** + * @inheritDoc + */ + + + Hub.prototype.bindClient = function (client) { + var top = this.getStackTop(); + top.client = client; + + if (client && client.setupIntegrations) { + client.setupIntegrations(); + } + }; + /** + * @inheritDoc + */ + + + Hub.prototype.pushScope = function () { + // We want to clone the content of prev scope + var stack = this.getStack(); + var parentScope = stack.length > 0 ? stack[stack.length - 1].scope : undefined; + var scope = Scope.clone(parentScope); + this.getStack().push({ + client: this.getClient(), + scope: scope + }); + return scope; + }; + /** + * @inheritDoc + */ + + + Hub.prototype.popScope = function () { + return this.getStack().pop() !== undefined; + }; + /** + * @inheritDoc + */ + + + Hub.prototype.withScope = function (callback) { + var scope = this.pushScope(); + + try { + callback(scope); + } finally { + this.popScope(); + } + }; + /** + * @inheritDoc + */ + + + Hub.prototype.getClient = function () { + return this.getStackTop().client; + }; + /** Returns the scope of the top stack. */ + + + Hub.prototype.getScope = function () { + return this.getStackTop().scope; + }; + /** Returns the scope stack for domains or the process. */ + + + Hub.prototype.getStack = function () { + return this._stack; + }; + /** Returns the topmost scope layer in the order domain > local > process. */ + + + Hub.prototype.getStackTop = function () { + return this._stack[this._stack.length - 1]; + }; + /** + * @inheritDoc + */ + + + Hub.prototype.captureException = function (exception, hint) { + var eventId = this._lastEventId = uuid4(); + var finalHint = hint; // If there's no explicit hint provided, mimick the same thing that would happen + // in the minimal itself to create a consistent behavior. + // We don't do this in the client, as it's the lowest level API, and doing this, + // would prevent user from having full control over direct calls. + + if (!hint) { + var syntheticException = void 0; + + try { + throw new Error('Sentry syntheticException'); + } catch (exception) { + syntheticException = exception; } - if (!element.func && element.line) { - element.func = UNKNOWN_FUNCTION; + finalHint = { + originalException: exception, + syntheticException: syntheticException + }; + } + + this._invokeClient('captureException', exception, _assign({}, finalHint, { + event_id: eventId + })); + + return eventId; + }; + /** + * @inheritDoc + */ + + + Hub.prototype.captureMessage = function (message, level, hint) { + var eventId = this._lastEventId = uuid4(); + var finalHint = hint; // If there's no explicit hint provided, mimick the same thing that would happen + // in the minimal itself to create a consistent behavior. + // We don't do this in the client, as it's the lowest level API, and doing this, + // would prevent user from having full control over direct calls. + + if (!hint) { + var syntheticException = void 0; + + try { + throw new Error(message); + } catch (exception) { + syntheticException = exception; } - if (element.url && element.url.substr(0, 5) === 'blob:') { - // Special case for handling JavaScript loaded into a blob. - // We use a synchronous AJAX request here as a blob is already in - // memory - it's not making a network request. This will generate a warning - // in the browser console, but there has already been an error so that's not - // that much of an issue. - var xhr = new XMLHttpRequest(); - xhr.open('GET', element.url, false); - xhr.send(null); // If we failed to download the source, skip this patch + finalHint = { + originalException: message, + syntheticException: syntheticException + }; + } + + this._invokeClient('captureMessage', message, level, _assign({}, finalHint, { + event_id: eventId + })); + + return eventId; + }; + /** + * @inheritDoc + */ + - if (xhr.status === 200) { - var source = xhr.responseText || ''; // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file. - // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175 + Hub.prototype.captureEvent = function (event, hint) { + var eventId = this._lastEventId = uuid4(); - source = source.slice(-300); // Now we dig out the source map URL + this._invokeClient('captureEvent', event, _assign({}, hint, { + event_id: eventId + })); - var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/); // If we don't find a source map comment or we find more than one, continue on to the next element. + return eventId; + }; + /** + * @inheritDoc + */ - if (sourceMaps) { - var sourceMapAddress = sourceMaps[1]; // Now we check to see if it's a relative URL. - // If it is, convert it to an absolute one. - if (sourceMapAddress.charAt(0) === '~') { - sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1); - } // Now we strip the '.map' off of the end of the URL and update the - // element so that Sentry can match the map to the blob. + Hub.prototype.lastEventId = function () { + return this._lastEventId; + }; + /** + * @inheritDoc + */ - element.url = sourceMapAddress.slice(0, -4); - } - } - } + Hub.prototype.addBreadcrumb = function (breadcrumb, hint) { + var top = this.getStackTop(); - stack.push(element); + if (!top.scope || !top.client) { + return; } - if (!stack.length) { - return null; + var _a = top.client.getOptions && top.client.getOptions() || {}, + _b = _a.beforeBreadcrumb, + beforeBreadcrumb = _b === void 0 ? null : _b, + _c = _a.maxBreadcrumbs, + maxBreadcrumbs = _c === void 0 ? DEFAULT_BREADCRUMBS : _c; + + if (maxBreadcrumbs <= 0) { + return; } - return { - name: ex.name, - message: ex.message, - url: getLocationHref(), - stack: stack - }; - } + var timestamp = timestampWithMs(); + + var mergedBreadcrumb = _assign({ + timestamp: timestamp + }, breadcrumb); + + var finalBreadcrumb = beforeBreadcrumb ? consoleSandbox(function () { + return beforeBreadcrumb(mergedBreadcrumb, hint); + }) : mergedBreadcrumb; + + if (finalBreadcrumb === null) { + return; + } + + top.scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS)); + }; /** - * Adds information about the first frame to incomplete stack traces. - * Safari and IE require this to get complete data on the first frame. - * @param {Object.<string, *>} stackInfo Stack trace information from - * one of the compute* methods. - * @param {string} url The URL of the script that caused an error. - * @param {(number|string)} lineNo The line number of the script that - * caused an error. - * @param {string=} message The error generated by the browser, which - * hopefully contains the name of the object that caused the error. - * @return {boolean} Whether or not the stack information was - * augmented. + * @inheritDoc */ - function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) { - var initial = { - url: url, - line: lineNo - }; + Hub.prototype.setUser = function (user) { + var top = this.getStackTop(); - if (initial.url && initial.line) { - stackInfo.incomplete = false; + if (!top.scope) { + return; + } - if (!initial.func) { - initial.func = UNKNOWN_FUNCTION; - } + top.scope.setUser(user); + }; + /** + * @inheritDoc + */ - if (stackInfo.stack.length > 0) { - if (stackInfo.stack[0].url === initial.url) { - if (stackInfo.stack[0].line === initial.line) { - return false; // already in stack trace - } else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === initial.func) { - stackInfo.stack[0].line = initial.line; - return false; - } - } - } - stackInfo.stack.unshift(initial); - stackInfo.partial = true; - return true; - } else { - stackInfo.incomplete = true; + Hub.prototype.setTags = function (tags) { + var top = this.getStackTop(); + + if (!top.scope) { + return; } - return false; - } + top.scope.setTags(tags); + }; /** - * Computes stack trace information by walking the arguments.caller - * chain at the time the exception occurred. This will cause earlier - * frames to be missed but is the only way to get any stack trace in - * Safari and IE. The top frame is restored by - * {@link augmentStackTraceWithInitialElement}. - * @param {Error} ex - * @return {?Object.<string, *>} Stack trace information. + * @inheritDoc */ - function computeStackTraceByWalkingCallerChain(ex, depth) { - var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i, - stack = [], - funcs = {}, - recursion = false, - parts, - item; + Hub.prototype.setExtras = function (extras) { + var top = this.getStackTop(); - for (var curr = computeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) { - if (curr === computeStackTrace || curr === TraceKit.report) { - // console.log('skipping internal function'); - continue; - } + if (!top.scope) { + return; + } - item = { - url: null, - func: UNKNOWN_FUNCTION, - line: null, - column: null - }; + top.scope.setExtras(extras); + }; + /** + * @inheritDoc + */ - if (curr.name) { - item.func = curr.name; - } else if (parts = functionName.exec(curr.toString())) { - item.func = parts[1]; - } - if (typeof item.func === 'undefined') { - try { - item.func = parts.input.substring(0, parts.input.indexOf('{')); - } catch (e) {} - } + Hub.prototype.setTag = function (key, value) { + var top = this.getStackTop(); - if (funcs['' + curr]) { - recursion = true; - } else { - funcs['' + curr] = true; - } + if (!top.scope) { + return; + } + + top.scope.setTag(key, value); + }; + /** + * @inheritDoc + */ + + + Hub.prototype.setExtra = function (key, extra) { + var top = this.getStackTop(); - stack.push(item); + if (!top.scope) { + return; } - if (depth) { - // console.log('depth is ' + depth); - // console.log('stack is ' + stack.length); - stack.splice(0, depth); + top.scope.setExtra(key, extra); + }; + /** + * @inheritDoc + */ + + + Hub.prototype.setContext = function (name, context) { + var top = this.getStackTop(); + + if (!top.scope) { + return; } - var result = { - name: ex.name, - message: ex.message, - url: getLocationHref(), - stack: stack - }; - augmentStackTraceWithInitialElement(result, ex.sourceURL || ex.fileName, ex.line || ex.lineNumber, ex.message || ex.description); - return result; - } + top.scope.setContext(name, context); + }; /** - * Computes a stack trace for an exception. - * @param {Error} ex - * @param {(string|number)=} depth + * @inheritDoc */ - function computeStackTrace(ex, depth) { - var stack = null; - depth = depth == null ? 0 : +depth; + Hub.prototype.configureScope = function (callback) { + var top = this.getStackTop(); + + if (top.scope && top.client) { + callback(top.scope); + } + }; + /** + * @inheritDoc + */ + + + Hub.prototype.run = function (callback) { + var oldHub = makeMain(this); try { - stack = computeStackTraceFromStackProp(ex); + callback(this); + } finally { + makeMain(oldHub); + } + }; + /** + * @inheritDoc + */ - if (stack) { - return stack; - } - } catch (e) { - if (TraceKit.debug) { - throw e; - } + + Hub.prototype.getIntegration = function (integration) { + var client = this.getClient(); + + if (!client) { + return null; } try { - stack = computeStackTraceByWalkingCallerChain(ex, depth + 1); + return client.getIntegration(integration); + } catch (_oO) { + logger.warn("Cannot retrieve integration " + integration.id + " from the current Hub"); + return null; + } + }; + /** + * @inheritDoc + */ - if (stack) { - return stack; - } - } catch (e) { - if (TraceKit.debug) { - throw e; - } + + Hub.prototype.startSpan = function (spanOrSpanContext, forceNoChild) { + if (forceNoChild === void 0) { + forceNoChild = false; } - return { - name: ex.name, - message: ex.message, - url: getLocationHref() - }; - } + return this._callExtensionMethod('startSpan', spanOrSpanContext, forceNoChild); + }; + /** + * @inheritDoc + */ - computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement; - computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp; - return computeStackTrace; - }(); - var tracekit = TraceKit; + Hub.prototype.traceHeaders = function () { + return this._callExtensionMethod('traceHeaders'); + }; + /** + * Calls global extension method and binding current instance to the function call + */ + // @ts-ignore - /* - * JavaScript MD5 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * https://opensource.org/licenses/MIT + + Hub.prototype._callExtensionMethod = function (method) { + var args = []; + + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + + var carrier = getMainCarrier(); + var sentry = carrier.__SENTRY__; // tslint:disable-next-line: strict-type-predicates + + if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') { + return sentry.extensions[method].apply(this, args); + } + + logger.warn("Extension method " + method + " couldn't be found, doing nothing."); + }; + + return Hub; + }(); + /** Returns the global shim registry. */ + + function getMainCarrier() { + var carrier = getGlobalObject(); + carrier.__SENTRY__ = carrier.__SENTRY__ || { + extensions: {}, + hub: undefined + }; + return carrier; + } + /** + * Replaces the current main hub with the passed one on the global object * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. + * @returns The old replaced hub */ - /* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ - function safeAdd(x, y) { - var lsw = (x & 0xffff) + (y & 0xffff); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return msw << 16 | lsw & 0xffff; + function makeMain(hub) { + var registry = getMainCarrier(); + var oldHub = getHubFromCarrier(registry); + setHubOnCarrier(registry, hub); + return oldHub; } - /* - * Bitwise rotate a 32-bit number to the left. - */ + /** + * Returns the default hub instance. + * + * If a hub is already registered in the global carrier but this module + * contains a more recent version, it replaces the registered version. + * Otherwise, the currently registered hub will be returned. + */ + function getCurrentHub() { + // Get main carrier (global for every environment) + var registry = getMainCarrier(); // If there's no hub, or its an old API, assign a new one - function bitRotateLeft(num, cnt) { - return num << cnt | num >>> 32 - cnt; - } - /* - * These functions implement the four basic operations the algorithm uses. - */ + if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) { + setHubOnCarrier(registry, new Hub()); + } // Prefer domains over global if they are there (applicable only to Node environment) - function md5cmn(q, a, b, x, s, t) { - return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); - } + if (isNodeEnv()) { + return getHubFromActiveDomain(registry); + } // Return hub that lives on a global object - function md5ff(a, b, c, d, x, s, t) { - return md5cmn(b & c | ~b & d, a, b, x, s, t); - } - function md5gg(a, b, c, d, x, s, t) { - return md5cmn(b & d | c & ~d, a, b, x, s, t); + return getHubFromCarrier(registry); } + /** + * Try to read the hub from an active domain, fallback to the registry if one doesnt exist + * @returns discovered hub + */ - function md5hh(a, b, c, d, x, s, t) { - return md5cmn(b ^ c ^ d, a, b, x, s, t); - } + function getHubFromActiveDomain(registry) { + try { + var property = 'domain'; + var carrier = getMainCarrier(); + var sentry = carrier.__SENTRY__; // tslint:disable-next-line: strict-type-predicates - function md5ii(a, b, c, d, x, s, t) { - return md5cmn(c ^ (b | ~d), a, b, x, s, t); - } - /* - * Calculate the MD5 of an array of little-endian words, and a bit length. - */ + if (!sentry || !sentry.extensions || !sentry.extensions[property]) { + return getHubFromCarrier(registry); + } + var domain = sentry.extensions[property]; + var activeDomain = domain.active; // If there no active domain, just return global hub - function binlMD5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << len % 32; - x[(len + 64 >>> 9 << 4) + 14] = len; - var i; - var olda; - var oldb; - var oldc; - var oldd; - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - a = md5ff(a, b, c, d, x[i], 7, -680876936); - d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); - a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5gg(b, c, d, a, x[i], 20, -373897302); - a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); - a = md5hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5hh(d, a, b, c, x[i], 11, -358537222); - c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); - a = md5ii(a, b, c, d, x[i], 6, -198630844); - d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); - a = safeAdd(a, olda); - b = safeAdd(b, oldb); - c = safeAdd(c, oldc); - d = safeAdd(d, oldd); - } - - return [a, b, c, d]; - } - /* - * Convert an array of little-endian words to a string - */ + if (!activeDomain) { + return getHubFromCarrier(registry); + } // If there's no hub on current domain, or its an old API, assign a new one - function binl2rstr(input) { - var i; - var output = ''; - var length32 = input.length * 32; + if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) { + var registryHubTopStack = getHubFromCarrier(registry).getStackTop(); + setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope))); + } // Return hub that lives on a domain - for (i = 0; i < length32; i += 8) { - output += String.fromCharCode(input[i >> 5] >>> i % 32 & 0xff); - } - return output; + return getHubFromCarrier(activeDomain); + } catch (_Oo) { + // Return hub that lives on a global object + return getHubFromCarrier(registry); + } } - /* - * Convert a raw string to an array of little-endian words - * Characters >255 have their high-byte silently ignored. - */ - + /** + * This will tell whether a carrier has a hub on it or not + * @param carrier object + */ - function rstr2binl(input) { - var i; - var output = []; - output[(input.length >> 2) - 1] = undefined; - for (i = 0; i < output.length; i += 1) { - output[i] = 0; + function hasHubOnCarrier(carrier) { + if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) { + return true; } - var length8 = input.length * 8; + return false; + } + /** + * This will create a new {@link Hub} and add to the passed object on + * __SENTRY__.hub. + * @param carrier object + * @hidden + */ + - for (i = 0; i < length8; i += 8) { - output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << i % 32; + function getHubFromCarrier(carrier) { + if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) { + return carrier.__SENTRY__.hub; } - return output; + carrier.__SENTRY__ = carrier.__SENTRY__ || {}; + carrier.__SENTRY__.hub = new Hub(); + return carrier.__SENTRY__.hub; } - /* - * Calculate the MD5 of a raw string - */ + /** + * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute + * @param carrier object + * @param hub Hub + */ + function setHubOnCarrier(carrier, hub) { + if (!carrier) { + return false; + } - function rstrMD5(s) { - return binl2rstr(binlMD5(rstr2binl(s), s.length * 8)); + carrier.__SENTRY__ = carrier.__SENTRY__ || {}; + carrier.__SENTRY__.hub = hub; + return true; } - /* - * Calculate the HMAC-MD5, of a key and some data (raw strings) - */ + /** + * This calls a function on the current hub. + * @param method function to call on hub. + * @param args to pass to function. + */ - function rstrHMACMD5(key, data) { - var i; - var bkey = rstr2binl(key); - var ipad = []; - var opad = []; - var hash; - ipad[15] = opad[15] = undefined; + function callOnHub(method) { + var args = []; - if (bkey.length > 16) { - bkey = binlMD5(bkey, key.length * 8); + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; } - for (i = 0; i < 16; i += 1) { - ipad[i] = bkey[i] ^ 0x36363636; - opad[i] = bkey[i] ^ 0x5c5c5c5c; + var hub = getCurrentHub(); + + if (hub && hub[method]) { + // tslint:disable-next-line:no-unsafe-any + return hub[method].apply(hub, __spread(args)); } - hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8); - return binl2rstr(binlMD5(opad.concat(hash), 512 + 128)); + throw new Error("No hub defined or " + method + " was not found on the hub, please open a bug report."); } - /* - * Convert a raw string to a hex string - */ + /** + * Captures an exception event and sends it to Sentry. + * + * @param exception An exception-like object. + * @returns The generated eventId. + */ - function rstr2hex(input) { - var hexTab = '0123456789abcdef'; - var output = ''; - var x; - var i; + function captureException(exception) { + var syntheticException; - for (i = 0; i < input.length; i += 1) { - x = input.charCodeAt(i); - output += hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f); + try { + throw new Error('Sentry syntheticException'); + } catch (exception) { + syntheticException = exception; } - return output; + return callOnHub('captureException', exception, { + originalException: exception, + syntheticException: syntheticException + }); } - /* - * Encode a string as utf-8 - */ - + /** + * Creates a new scope with and executes the given operation within. + * The scope is automatically removed once the operation + * finishes or throws. + * + * This is essentially a convenience function for: + * + * pushScope(); + * callback(); + * popScope(); + * + * @param callback that will be enclosed into push/popScope. + */ - function str2rstrUTF8(input) { - return unescape(encodeURIComponent(input)); + function withScope(callback) { + callOnHub('withScope', callback); } - /* - * Take string arguments and return either raw or hex encoded strings - */ + var SENTRY_API_VERSION = '7'; + /** Helper class to provide urls to different Sentry endpoints. */ - function rawMD5(s) { - return rstrMD5(str2rstrUTF8(s)); - } + var API = + /** @class */ + function () { + /** Create a new instance of API */ + function API(dsn) { + this.dsn = dsn; + this._dsnObject = new Dsn(dsn); + } + /** Returns the Dsn object. */ - function hexMD5(s) { - return rstr2hex(rawMD5(s)); - } - function rawHMACMD5(k, d) { - return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d)); - } + API.prototype.getDsn = function () { + return this._dsnObject; + }; + /** Returns a string with auth headers in the url to the store endpoint. */ - function hexHMACMD5(k, d) { - return rstr2hex(rawHMACMD5(k, d)); - } - function md5(string, key, raw) { - if (!key) { - if (!raw) { - return hexMD5(string); + API.prototype.getStoreEndpoint = function () { + return "" + this._getBaseUrl() + this.getStoreEndpointPath(); + }; + /** Returns the store endpoint with auth added in url encoded. */ + + + API.prototype.getStoreEndpointWithUrlEncodedAuth = function () { + var dsn = this._dsnObject; + var auth = { + sentry_key: dsn.user, + sentry_version: SENTRY_API_VERSION + }; // Auth is intentionally sent as part of query string (NOT as custom HTTP header) + // to avoid preflight CORS requests + + return this.getStoreEndpoint() + "?" + urlEncode(auth); + }; + /** Returns the base path of the url including the port. */ + + + API.prototype._getBaseUrl = function () { + var dsn = this._dsnObject; + var protocol = dsn.protocol ? dsn.protocol + ":" : ''; + var port = dsn.port ? ":" + dsn.port : ''; + return protocol + "//" + dsn.host + port; + }; + /** Returns only the path component for the store endpoint. */ + + + API.prototype.getStoreEndpointPath = function () { + var dsn = this._dsnObject; + return (dsn.path ? "/" + dsn.path : '') + "/api/" + dsn.projectId + "/store/"; + }; + /** Returns an object that can be used in request headers. */ + + + API.prototype.getRequestHeaders = function (clientName, clientVersion) { + var dsn = this._dsnObject; + var header = ["Sentry sentry_version=" + SENTRY_API_VERSION]; + header.push("sentry_client=" + clientName + "/" + clientVersion); + header.push("sentry_key=" + dsn.user); + + if (dsn.pass) { + header.push("sentry_secret=" + dsn.pass); } - return rawMD5(string); - } + return { + 'Content-Type': 'application/json', + 'X-Sentry-Auth': header.join(', ') + }; + }; + /** Returns the url to the report dialog endpoint. */ - if (!raw) { - return hexHMACMD5(key, string); - } - return rawHMACMD5(key, string); - } + API.prototype.getReportDialogEndpoint = function (dialogOptions) { + if (dialogOptions === void 0) { + dialogOptions = {}; + } - var md5_1 = md5; + var dsn = this._dsnObject; + var endpoint = "" + this._getBaseUrl() + (dsn.path ? "/" + dsn.path : '') + "/api/embed/error-page/"; + var encodedOptions = []; + encodedOptions.push("dsn=" + dsn.toString()); - function RavenConfigError(message) { - this.name = 'RavenConfigError'; - this.message = message; - } + for (var key in dialogOptions) { + if (key === 'user') { + if (!dialogOptions.user) { + continue; + } - RavenConfigError.prototype = new Error(); - RavenConfigError.prototype.constructor = RavenConfigError; - var configError = RavenConfigError; + if (dialogOptions.user.name) { + encodedOptions.push("name=" + encodeURIComponent(dialogOptions.user.name)); + } - var wrapMethod = function wrapMethod(console, level, callback) { - var originalConsoleLevel = console[level]; - var originalConsole = console; + if (dialogOptions.user.email) { + encodedOptions.push("email=" + encodeURIComponent(dialogOptions.user.email)); + } + } else { + encodedOptions.push(encodeURIComponent(key) + "=" + encodeURIComponent(dialogOptions[key])); + } + } - if (!(level in console)) { - return; - } + if (encodedOptions.length) { + return endpoint + "?" + encodedOptions.join('&'); + } - var sentryLevel = level === 'warn' ? 'warning' : level; + return endpoint; + }; + + return API; + }(); + + var installedIntegrations = []; + /** Gets integration to install */ + + function getIntegrationsToSetup(options) { + var defaultIntegrations = options.defaultIntegrations && __spread(options.defaultIntegrations) || []; + var userIntegrations = options.integrations; + var integrations = []; - console[level] = function () { - var args = [].slice.call(arguments); - var msg = utils.safeJoin(args, ' '); - var data = { - level: sentryLevel, - logger: 'console', - extra: { - arguments: args + if (Array.isArray(userIntegrations)) { + var userIntegrationsNames_1 = userIntegrations.map(function (i) { + return i.name; + }); + var pickedIntegrationsNames_1 = []; // Leave only unique default integrations, that were not overridden with provided user integrations + + defaultIntegrations.forEach(function (defaultIntegration) { + if (userIntegrationsNames_1.indexOf(defaultIntegration.name) === -1 && pickedIntegrationsNames_1.indexOf(defaultIntegration.name) === -1) { + integrations.push(defaultIntegration); + pickedIntegrationsNames_1.push(defaultIntegration.name); } - }; + }); // Don't add same user integration twice - if (level === 'assert') { - if (args[0] === false) { - // Default browsers message - msg = 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert'); - data.extra.arguments = args.slice(1); - callback && callback(msg, data); + userIntegrations.forEach(function (userIntegration) { + if (pickedIntegrationsNames_1.indexOf(userIntegration.name) === -1) { + integrations.push(userIntegration); + pickedIntegrationsNames_1.push(userIntegration.name); } - } else { - callback && callback(msg, data); - } // this fails for some browsers. :( - - - if (originalConsoleLevel) { - // IE9 doesn't allow calling apply on console functions directly - // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193 - Function.prototype.apply.call(originalConsoleLevel, originalConsole, args); - } - }; - }; - - var console$1 = { - wrapMethod: wrapMethod - }; - - /*global XDomainRequest:false */ - - var isErrorEvent$1 = utils.isErrorEvent; - var isDOMError$1 = utils.isDOMError; - var isDOMException$1 = utils.isDOMException; - var isError$1 = utils.isError; - var isObject$2 = utils.isObject; - var isPlainObject$1 = utils.isPlainObject; - var isUndefined$1 = utils.isUndefined; - var isFunction$1 = utils.isFunction; - var isString$1 = utils.isString; - var isArray$2 = utils.isArray; - var isEmptyObject$1 = utils.isEmptyObject; - var each$1 = utils.each; - var objectMerge$1 = utils.objectMerge; - var truncate$1 = utils.truncate; - var objectFrozen$1 = utils.objectFrozen; - var hasKey$1 = utils.hasKey; - var joinRegExp$1 = utils.joinRegExp; - var urlencode$1 = utils.urlencode; - var uuid4$1 = utils.uuid4; - var htmlTreeAsString$1 = utils.htmlTreeAsString; - var isSameException$1 = utils.isSameException; - var isSameStacktrace$1 = utils.isSameStacktrace; - var parseUrl$1 = utils.parseUrl; - var fill$1 = utils.fill; - var supportsFetch$1 = utils.supportsFetch; - var supportsReferrerPolicy$1 = utils.supportsReferrerPolicy; - var serializeKeysForMessage$1 = utils.serializeKeysForMessage; - var serializeException$1 = utils.serializeException; - var sanitize$1 = utils.sanitize; - var wrapConsoleMethod = console$1.wrapMethod; - var dsnKeys = 'source protocol user pass host port path'.split(' '), - dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/; - - function now() { - return +new Date(); - } // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) - - - var _window$2 = typeof window !== 'undefined' ? window : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; - - var _document = _window$2.document; - var _navigator = _window$2.navigator; - - function keepOriginalCallback(original, callback) { - return isFunction$1(callback) ? function (data) { - return callback(data, original); - } : callback; - } // First, check for JSON support - // If there is no JSON, we no-op the core features of Raven - // since JSON is required to encode the payload - - - function Raven() { - this._hasJSON = !!((typeof JSON === "undefined" ? "undefined" : _typeof(JSON)) === 'object' && JSON.stringify); // Raven can run in contexts where there's no document (react-native) - - this._hasDocument = !isUndefined$1(_document); - this._hasNavigator = !isUndefined$1(_navigator); - this._lastCapturedException = null; - this._lastData = null; - this._lastEventId = null; - this._globalServer = null; - this._globalKey = null; - this._globalProject = null; - this._globalContext = {}; - this._globalOptions = { - // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin - release: _window$2.SENTRY_RELEASE && _window$2.SENTRY_RELEASE.id, - logger: 'javascript', - ignoreErrors: [], - ignoreUrls: [], - whitelistUrls: [], - includePaths: [], - headers: null, - collectWindowErrors: true, - captureUnhandledRejections: true, - maxMessageLength: 0, - // By default, truncates URL values to 250 chars - maxUrlLength: 250, - stackTraceLimit: 50, - autoBreadcrumbs: true, - instrument: true, - sampleRate: 1, - sanitizeKeys: [] - }; - this._fetchDefaults = { - method: 'POST', - // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default - // https://caniuse.com/#feat=referrer-policy - // It doesn't. And it throw exception instead of ignoring this parameter... - // REF: https://github.com/getsentry/raven-js/issues/1233 - referrerPolicy: supportsReferrerPolicy$1() ? 'origin' : '' - }; - this._ignoreOnError = 0; - this._isRavenInstalled = false; - this._originalErrorStackTraceLimit = Error.stackTraceLimit; // capture references to window.console *and* all its methods first - // before the console plugin has a chance to monkey patch - - this._originalConsole = _window$2.console || {}; - this._originalConsoleMethods = {}; - this._plugins = []; - this._startTime = now(); - this._wrappedBuiltIns = []; - this._breadcrumbs = []; - this._lastCapturedEvent = null; - this._keypressTimeout; - this._location = _window$2.location; - this._lastHref = this._location && this._location.href; - - this._resetBackoff(); // eslint-disable-next-line guard-for-in - - - for (var method in this._originalConsole) { - this._originalConsoleMethods[method] = this._originalConsole[method]; + }); + } else if (typeof userIntegrations === 'function') { + integrations = userIntegrations(defaultIntegrations); + integrations = Array.isArray(integrations) ? integrations : [integrations]; + } else { + integrations = __spread(defaultIntegrations); + } // Make sure that if present, `Debug` integration will always run last + + + var integrationsNames = integrations.map(function (i) { + return i.name; + }); + var alwaysLastToRun = 'Debug'; + + if (integrationsNames.indexOf(alwaysLastToRun) !== -1) { + integrations.push.apply(integrations, __spread(integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1))); } + + return integrations; } - /* - * The core Raven singleton + /** Setup given integration */ + + function setupIntegration(integration) { + if (installedIntegrations.indexOf(integration.name) !== -1) { + return; + } + + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + installedIntegrations.push(integration.name); + logger.log("Integration installed: " + integration.name); + } + /** + * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default + * integrations are added unless they were already provided before. + * @param integrations array of integration instances + * @param withDefault should enable default integrations + */ + + function setupIntegrations(options) { + var integrations = {}; + getIntegrationsToSetup(options).forEach(function (integration) { + integrations[integration.name] = integration; + setupIntegration(integration); + }); + return integrations; + } + + /** + * Base implementation for all JavaScript SDK clients. + * + * Call the constructor with the corresponding backend constructor and options + * specific to the client subclass. To access these options later, use + * {@link Client.getOptions}. Also, the Backend instance is available via + * {@link Client.getBackend}. * - * @this {Raven} + * If a Dsn is specified in the options, it will be parsed and stored. Use + * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is + * invalid, the constructor will throw a {@link SentryException}. Note that + * without a valid Dsn, the SDK will not send any events to Sentry. + * + * Before sending an event via the backend, it is passed through + * {@link BaseClient.prepareEvent} to add SDK information and scope data + * (breadcrumbs and context). To add more custom information, override this + * method and extend the resulting prepared event. + * + * To issue automatically created events (e.g. via instrumentation), use + * {@link Client.captureEvent}. It will prepare the event and pass it through + * the callback lifecycle. To issue auto-breadcrumbs, use + * {@link Client.addBreadcrumb}. + * + * @example + * class NodeClient extends BaseClient<NodeBackend, NodeOptions> { + * public constructor(options: NodeOptions) { + * super(NodeBackend, options); + * } + * + * // ... + * } */ + var BaseClient = + /** @class */ + function () { + /** + * Initializes this client instance. + * + * @param backendClass A constructor function to create the backend. + * @param options Options for the client. + */ + function BaseClient(backendClass, options) { + /** Array of used integrations. */ + this._integrations = {}; + /** Is the client still processing a call? */ + + this._processing = false; + this._backend = new backendClass(options); + this._options = options; - Raven.prototype = { - // Hardcode version string so that raven source can be loaded directly via - // webpack (using a build step causes webpack #1617). Grunt verifies that - // this value matches package.json during build. - // See: https://github.com/getsentry/raven-js/issues/465 - VERSION: '3.27.1', - debug: false, - TraceKit: tracekit, - // alias to TraceKit - - /* - * Configure Raven with a DSN and extra options - * - * @param {string} dsn The public Sentry DSN - * @param {object} options Set of global options [optional] - * @return {Raven} - */ - config: function config(dsn, options) { - var self = this; + if (options.dsn) { + this._dsn = new Dsn(options.dsn); + } + } + /** + * @inheritDoc + */ + + + BaseClient.prototype.captureException = function (exception, hint, scope) { + var _this = this; + + var eventId = hint && hint.event_id; + this._processing = true; + + this._getBackend().eventFromException(exception, hint).then(function (event) { + return _this._processEvent(event, hint, scope); + }).then(function (finalEvent) { + // We need to check for finalEvent in case beforeSend returned null + eventId = finalEvent && finalEvent.event_id; + _this._processing = false; + }).then(null, function (reason) { + logger.error(reason); + _this._processing = false; + }); + + return eventId; + }; + /** + * @inheritDoc + */ + + + BaseClient.prototype.captureMessage = function (message, level, hint, scope) { + var _this = this; + + var eventId = hint && hint.event_id; + this._processing = true; + var promisedEvent = isPrimitive(message) ? this._getBackend().eventFromMessage("" + message, level, hint) : this._getBackend().eventFromException(message, hint); + promisedEvent.then(function (event) { + return _this._processEvent(event, hint, scope); + }).then(function (finalEvent) { + // We need to check for finalEvent in case beforeSend returned null + eventId = finalEvent && finalEvent.event_id; + _this._processing = false; + }).then(null, function (reason) { + logger.error(reason); + _this._processing = false; + }); + return eventId; + }; + /** + * @inheritDoc + */ + + + BaseClient.prototype.captureEvent = function (event, hint, scope) { + var _this = this; + + var eventId = hint && hint.event_id; + this._processing = true; + + this._processEvent(event, hint, scope).then(function (finalEvent) { + // We need to check for finalEvent in case beforeSend returned null + eventId = finalEvent && finalEvent.event_id; + _this._processing = false; + }).then(null, function (reason) { + logger.error(reason); + _this._processing = false; + }); + + return eventId; + }; + /** + * @inheritDoc + */ + + + BaseClient.prototype.getDsn = function () { + return this._dsn; + }; + /** + * @inheritDoc + */ + + + BaseClient.prototype.getOptions = function () { + return this._options; + }; + /** + * @inheritDoc + */ + + + BaseClient.prototype.flush = function (timeout) { + var _this = this; + + return this._isClientProcessing(timeout).then(function (status) { + clearInterval(status.interval); + return _this._getBackend().getTransport().close(timeout).then(function (transportFlushed) { + return status.ready && transportFlushed; + }); + }); + }; + /** + * @inheritDoc + */ - if (self._globalServer) { - this._logDebug('error', 'Error: Raven has already been configured'); - return self; + BaseClient.prototype.close = function (timeout) { + var _this = this; + + return this.flush(timeout).then(function (result) { + _this.getOptions().enabled = false; + return result; + }); + }; + /** + * Sets up the integrations + */ + + + BaseClient.prototype.setupIntegrations = function () { + if (this._isEnabled()) { + this._integrations = setupIntegrations(this._options); + } + }; + /** + * @inheritDoc + */ + + + BaseClient.prototype.getIntegration = function (integration) { + try { + return this._integrations[integration.id] || null; + } catch (_oO) { + logger.warn("Cannot retrieve integration " + integration.id + " from the current Client"); + return null; } + }; + /** Waits for the client to be done with processing. */ - if (!dsn) return self; - var globalOptions = self._globalOptions; // merge in options - if (options) { - each$1(options, function (key, value) { - // tags and extra are special and need to be put into context - if (key === 'tags' || key === 'extra' || key === 'user') { - self._globalContext[key] = value; + BaseClient.prototype._isClientProcessing = function (timeout) { + var _this = this; + + return new SyncPromise(function (resolve) { + var ticked = 0; + var tick = 1; + var interval = 0; + clearInterval(interval); + interval = setInterval(function () { + if (!_this._processing) { + resolve({ + interval: interval, + ready: true + }); } else { - globalOptions[key] = value; + ticked += tick; + + if (timeout && ticked >= timeout) { + resolve({ + interval: interval, + ready: false + }); + } } - }); + }, tick); + }); + }; + /** Returns the current backend. */ + + + BaseClient.prototype._getBackend = function () { + return this._backend; + }; + /** Determines whether this SDK is enabled and a valid Dsn is present. */ + + + BaseClient.prototype._isEnabled = function () { + return this.getOptions().enabled !== false && this._dsn !== undefined; + }; + /** + * Adds common information to events. + * + * The information includes release and environment from `options`, + * breadcrumbs and context (extra, tags and user) from the scope. + * + * Information that is already present in the event is never overwritten. For + * nested objects, such as the context, keys are merged. + * + * @param event The original event. + * @param hint May contain additional informartion about the original exception. + * @param scope A scope containing event metadata. + * @returns A new event with more information. + */ + + + BaseClient.prototype._prepareEvent = function (event, scope, hint) { + var _this = this; + + var _a = this.getOptions(), + environment = _a.environment, + release = _a.release, + dist = _a.dist, + _b = _a.maxValueLength, + maxValueLength = _b === void 0 ? 250 : _b, + _c = _a.normalizeDepth, + normalizeDepth = _c === void 0 ? 3 : _c; + + var prepared = _assign({}, event); + + if (prepared.environment === undefined && environment !== undefined) { + prepared.environment = environment; } - self.setDSN(dsn); // "Script error." is hard coded into browsers for errors that it can't read. - // this is the result of a script being pulled in from an external domain and CORS. + if (prepared.release === undefined && release !== undefined) { + prepared.release = release; + } - globalOptions.ignoreErrors.push(/^Script error\.?$/); - globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/); // join regexp rules into one big rule + if (prepared.dist === undefined && dist !== undefined) { + prepared.dist = dist; + } - globalOptions.ignoreErrors = joinRegExp$1(globalOptions.ignoreErrors); - globalOptions.ignoreUrls = globalOptions.ignoreUrls.length ? joinRegExp$1(globalOptions.ignoreUrls) : false; - globalOptions.whitelistUrls = globalOptions.whitelistUrls.length ? joinRegExp$1(globalOptions.whitelistUrls) : false; - globalOptions.includePaths = joinRegExp$1(globalOptions.includePaths); - globalOptions.maxBreadcrumbs = Math.max(0, Math.min(globalOptions.maxBreadcrumbs || 100, 100)); // default and hard limit is 100 + if (prepared.message) { + prepared.message = truncate(prepared.message, maxValueLength); + } - var autoBreadcrumbDefaults = { - xhr: true, - console: true, - dom: true, - location: true, - sentry: true - }; - var autoBreadcrumbs = globalOptions.autoBreadcrumbs; + var exception = prepared.exception && prepared.exception.values && prepared.exception.values[0]; - if ({}.toString.call(autoBreadcrumbs) === '[object Object]') { - autoBreadcrumbs = objectMerge$1(autoBreadcrumbDefaults, autoBreadcrumbs); - } else if (autoBreadcrumbs !== false) { - autoBreadcrumbs = autoBreadcrumbDefaults; + if (exception && exception.value) { + exception.value = truncate(exception.value, maxValueLength); } - globalOptions.autoBreadcrumbs = autoBreadcrumbs; - var instrumentDefaults = { - tryCatch: true - }; - var instrument = globalOptions.instrument; + var request = prepared.request; - if ({}.toString.call(instrument) === '[object Object]') { - instrument = objectMerge$1(instrumentDefaults, instrument); - } else if (instrument !== false) { - instrument = instrumentDefaults; + if (request && request.url) { + request.url = truncate(request.url, maxValueLength); } - globalOptions.instrument = instrument; - tracekit.collectWindowErrors = !!globalOptions.collectWindowErrors; // return for chaining + if (prepared.event_id === undefined) { + prepared.event_id = hint && hint.event_id ? hint.event_id : uuid4(); + } - return self; - }, + this._addIntegrations(prepared.sdk); // We prepare the result here with a resolved Event. - /* - * Installs a global window.onerror error handler - * to capture and report uncaught exceptions. - * At this point, install() is required to be called due - * to the way TraceKit is set up. - * - * @return {Raven} - */ - install: function install() { - var self = this; - if (self.isSetup() && !self._isRavenInstalled) { - tracekit.report.subscribe(function () { - self._handleOnErrorStackInfo.apply(self, arguments); - }); + var result = SyncPromise.resolve(prepared); // This should be the last thing called, since we want that + // {@link Hub.addEventProcessor} gets the finished prepared event. - if (self._globalOptions.captureUnhandledRejections) { - self._attachPromiseRejectionHandler(); + if (scope) { + // In case we have a hub we reassign it. + result = scope.applyToEvent(prepared, hint); + } + + return result.then(function (evt) { + // tslint:disable-next-line:strict-type-predicates + if (typeof normalizeDepth === 'number' && normalizeDepth > 0) { + return _this._normalizeEvent(evt, normalizeDepth); } - self._patchFunctionToString(); + return evt; + }); + }; + /** + * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization. + * Normalized keys: + * - `breadcrumbs.data` + * - `user` + * - `contexts` + * - `extra` + * @param event Event + * @returns Normalized event + */ + - if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) { - self._instrumentTryCatch(); - } + BaseClient.prototype._normalizeEvent = function (event, depth) { + if (!event) { + return null; + } // tslint:disable:no-unsafe-any + + + return _assign({}, event, event.breadcrumbs && { + breadcrumbs: event.breadcrumbs.map(function (b) { + return _assign({}, b, b.data && { + data: normalize$1(b.data, depth) + }); + }) + }, event.user && { + user: normalize$1(event.user, depth) + }, event.contexts && { + contexts: normalize$1(event.contexts, depth) + }, event.extra && { + extra: normalize$1(event.extra, depth) + }); + }; + /** + * This function adds all used integrations to the SDK info in the event. + * @param sdkInfo The sdkInfo of the event that will be filled with all integrations. + */ - if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs(); // Install all of the plugins - self._drainPlugins(); + BaseClient.prototype._addIntegrations = function (sdkInfo) { + var integrationsArray = Object.keys(this._integrations); - self._isRavenInstalled = true; + if (sdkInfo && integrationsArray.length > 0) { + sdkInfo.integrations = integrationsArray; } + }; + /** + * Processes an event (either error or message) and sends it to Sentry. + * + * This also adds breadcrumbs and context information to the event. However, + * platform specific meta data (such as the User's IP address) must be added + * by the SDK implementor. + * + * + * @param event The event to send to Sentry. + * @param hint May contain additional informartion about the original exception. + * @param scope A scope containing event metadata. + * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send. + */ - Error.stackTraceLimit = self._globalOptions.stackTraceLimit; - return this; - }, - /* - * Set the DSN (can be called multiple time unlike config) - * - * @param {string} dsn The public Sentry DSN - */ - setDSN: function setDSN(dsn) { - var self = this, - uri = self._parseDSN(dsn), - lastSlash = uri.path.lastIndexOf('/'), - path = uri.path.substr(1, lastSlash); - - self._dsn = dsn; - self._globalKey = uri.user; - self._globalSecret = uri.pass && uri.pass.substr(1); - self._globalProject = uri.path.substr(lastSlash + 1); - self._globalServer = self._getGlobalServer(uri); - self._globalEndpoint = self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/'; // Reset backoff state since we may be pointing at a - // new project/server - - this._resetBackoff(); - }, + BaseClient.prototype._processEvent = function (event, hint, scope) { + var _this = this; - /* - * Wrap code within a context so Raven can capture errors - * reliably across domains that is executed immediately. - * - * @param {object} options A specific set of options for this context [optional] - * @param {function} func The callback to be immediately executed within the context - * @param {array} args An array of arguments to be called with the callback [optional] - */ - context: function context(options, func, args) { - if (isFunction$1(options)) { - args = func || []; - func = options; - options = {}; + var _a = this.getOptions(), + beforeSend = _a.beforeSend, + sampleRate = _a.sampleRate; + + if (!this._isEnabled()) { + return SyncPromise.reject('SDK not enabled, will not send event.'); + } // 1.0 === 100% events are sent + // 0.0 === 0% events are sent + + + if (typeof sampleRate === 'number' && Math.random() > sampleRate) { + return SyncPromise.reject('This event has been sampled, will not send event.'); } - return this.wrap(options, func).apply(this, args); - }, + return new SyncPromise(function (resolve, reject) { + _this._prepareEvent(event, scope, hint).then(function (prepared) { + if (prepared === null) { + reject('An event processor returned null, will not send event.'); + return; + } - /* - * Wrap code within a context and returns back a new function to be executed - * - * @param {object} options A specific set of options for this context [optional] - * @param {function} func The function to be wrapped in a new context - * @param {function} _before A function to call before the try/catch wrapper [optional, private] - * @return {function} The newly wrapped functions with a context - */ - wrap: function wrap(options, func, _before) { - var self = this; // 1 argument has been passed, and it's not a function - // so just return it + var finalEvent = prepared; + var isInternalException = hint && hint.data && hint.data.__sentry__ === true; - if (isUndefined$1(func) && !isFunction$1(options)) { - return options; - } // options is optional + if (isInternalException || !beforeSend) { + _this._getBackend().sendEvent(finalEvent); + resolve(finalEvent); + return; + } - if (isFunction$1(options)) { - func = options; - options = undefined; - } // At this point, we've passed along 2 arguments, and the second one - // is not a function either, so we'll just return the second argument. + var beforeSendResult = beforeSend(prepared, hint); // tslint:disable-next-line:strict-type-predicates + if (typeof beforeSendResult === 'undefined') { + logger.error('`beforeSend` method has to return `null` or a valid event.'); + } else if (isThenable$1(beforeSendResult)) { + _this._handleAsyncBeforeSend(beforeSendResult, resolve, reject); + } else { + finalEvent = beforeSendResult; - if (!isFunction$1(func)) { - return func; - } // We don't wanna wrap it twice! + if (finalEvent === null) { + logger.log('`beforeSend` returned `null`, will not send event.'); + resolve(null); + return; + } // From here on we are really async - try { - if (func.__raven__) { - return func; - } // If this has already been wrapped in the past, return that + _this._getBackend().sendEvent(finalEvent); + resolve(finalEvent); + } + }).then(null, function (reason) { + _this.captureException(reason, { + data: { + __sentry__: true + }, + originalException: reason + }); - if (func.__raven_wrapper__) { - return func.__raven_wrapper__; - } - } catch (e) { - // Just accessing custom props in some Selenium environments - // can cause a "Permission denied" exception (see raven-js#495). - // Bail on wrapping and return the function as-is (defers to window.onerror). - return func; - } + reject("Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\nReason: " + reason); + }); + }); + }; + /** + * Resolves before send Promise and calls resolve/reject on parent SyncPromise. + */ - function wrapped() { - var args = [], - i = arguments.length, - deep = !options || options && options.deep !== false; - if (_before && isFunction$1(_before)) { - _before.apply(this, arguments); - } // Recursively wrap all of a function's arguments that are - // functions themselves. + BaseClient.prototype._handleAsyncBeforeSend = function (beforeSend, resolve, reject) { + var _this = this; + beforeSend.then(function (processedEvent) { + if (processedEvent === null) { + reject('`beforeSend` returned `null`, will not send event.'); + return; + } // From here on we are really async - while (i--) { - args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i]; - } - try { - // Attempt to invoke user-land function - // NOTE: If you are a Sentry user, and you are seeing this stack frame, it - // means Raven caught an error invoking your application code. This is - // expected behavior and NOT indicative of a bug with Raven.js. - return func.apply(this, args); - } catch (e) { - self._ignoreNextOnError(); + _this._getBackend().sendEvent(processedEvent); - self.captureException(e, options); - throw e; - } - } // copy over properties of the old function + resolve(processedEvent); + }).then(null, function (e) { + reject("beforeSend rejected with " + e); + }); + }; + return BaseClient; + }(); - for (var property in func) { - if (hasKey$1(func, property)) { - wrapped[property] = func[property]; - } - } + /** Noop transport */ - wrapped.prototype = func.prototype; - func.__raven_wrapper__ = wrapped; // Signal that this function has been wrapped/filled already - // for both debugging and to prevent it to being wrapped/filled twice + var NoopTransport = + /** @class */ + function () { + function NoopTransport() {} + /** + * @inheritDoc + */ - wrapped.__raven__ = true; - wrapped.__orig__ = func; - return wrapped; - }, + NoopTransport.prototype.sendEvent = function (_) { + return SyncPromise.resolve({ + reason: "NoopTransport: Event has been skipped because no Dsn is configured.", + status: Status.Skipped + }); + }; /** - * Uninstalls the global error handler. - * - * @return {Raven} + * @inheritDoc */ - uninstall: function uninstall() { - tracekit.report.uninstall(); - this._detachPromiseRejectionHandler(); - this._unpatchFunctionToString(); + NoopTransport.prototype.close = function (_) { + return SyncPromise.resolve(true); + }; + + return NoopTransport; + }(); - this._restoreBuiltIns(); + /** + * This is the base implemention of a Backend. + * @hidden + */ - this._restoreConsole(); + var BaseBackend = + /** @class */ + function () { + /** Creates a new backend instance. */ + function BaseBackend(options) { + this._options = options; - Error.stackTraceLimit = this._originalErrorStackTraceLimit; - this._isRavenInstalled = false; - return this; - }, + if (!this._options.dsn) { + logger.warn('No DSN provided, backend will not do anything.'); + } + this._transport = this._setupTransport(); + } /** - * Callback used for `unhandledrejection` event - * - * @param {PromiseRejectionEvent} event An object containing - * promise: the Promise that was rejected - * reason: the value with which the Promise was rejected - * @return void + * Sets up the transport so it can be used later to send requests. */ - _promiseRejectionHandler: function _promiseRejectionHandler(event) { - this._logDebug('debug', 'Raven caught unhandled promise rejection:', event); - this.captureException(event.reason, { - mechanism: { - type: 'onunhandledrejection', - handled: false - } - }); - }, + BaseBackend.prototype._setupTransport = function () { + return new NoopTransport(); + }; /** - * Installs the global promise rejection handler. - * - * @return {raven} + * @inheritDoc */ - _attachPromiseRejectionHandler: function _attachPromiseRejectionHandler() { - this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this); - _window$2.addEventListener && _window$2.addEventListener('unhandledrejection', this._promiseRejectionHandler); - return this; - }, + + BaseBackend.prototype.eventFromException = function (_exception, _hint) { + throw new SentryError('Backend has to implement `eventFromException` method'); + }; /** - * Uninstalls the global promise rejection handler. - * - * @return {raven} + * @inheritDoc */ - _detachPromiseRejectionHandler: function _detachPromiseRejectionHandler() { - _window$2.removeEventListener && _window$2.removeEventListener('unhandledrejection', this._promiseRejectionHandler); - return this; - }, + + BaseBackend.prototype.eventFromMessage = function (_message, _level, _hint) { + throw new SentryError('Backend has to implement `eventFromMessage` method'); + }; /** - * Manually capture an exception and send it over to Sentry - * - * @param {error} ex An exception to be logged - * @param {object} options A specific set of options for this error [optional] - * @return {Raven} + * @inheritDoc + */ + + + BaseBackend.prototype.sendEvent = function (event) { + this._transport.sendEvent(event).then(null, function (reason) { + logger.error("Error while sending event: " + reason); + }); + }; + /** + * @inheritDoc */ - captureException: function captureException(ex, options) { - options = objectMerge$1({ - trimHeadFrames: 0 - }, options ? options : {}); - - if (isErrorEvent$1(ex) && ex.error) { - // If it is an ErrorEvent with `error` property, extract it to get actual Error - ex = ex.error; - } else if (isDOMError$1(ex) || isDOMException$1(ex)) { - // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers) - // then we just extract the name and message, as they don't provide anything else - // https://developer.mozilla.org/en-US/docs/Web/API/DOMError - // https://developer.mozilla.org/en-US/docs/Web/API/DOMException - var name = ex.name || (isDOMError$1(ex) ? 'DOMError' : 'DOMException'); - var message = ex.message ? name + ': ' + ex.message : name; - return this.captureMessage(message, objectMerge$1(options, { - // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well - // but it's barely any overhead so we may at least try - stacktrace: true, - trimHeadFrames: options.trimHeadFrames + 1 - })); - } else if (isError$1(ex)) { - // we have a real Error object - ex = ex; - } else if (isPlainObject$1(ex)) { - // If it is plain Object, serialize it manually and extract options - // This will allow us to group events based on top-level keys - // which is much better than creating new group when any key/value change - options = this._getCaptureExceptionOptionsFromPlainObject(options, ex); - ex = new Error(options.message); - } else { - // If none of previous checks were valid, then it means that - // it's not a DOMError/DOMException - // it's not a plain Object - // it's not a valid ErrorEvent (one with an error property) - // it's not an Error - // So bail out and capture it as a simple message: - return this.captureMessage(ex, objectMerge$1(options, { - stacktrace: true, - // if we fall back to captureMessage, default to attempting a new trace - trimHeadFrames: options.trimHeadFrames + 1 - })); - } // Store the raw exception object for potential debugging and introspection - this._lastCapturedException = ex; // TraceKit.report will re-raise any exception passed to it, - // which means you have to wrap it in try/catch. Instead, we - // can wrap it here and only re-raise if TraceKit.report - // raises an exception different from the one we asked to - // report on. + BaseBackend.prototype.getTransport = function () { + return this._transport; + }; - try { - var stack = tracekit.computeStackTrace(ex); + return BaseBackend; + }(); - this._handleStackInfo(stack, options); - } catch (ex1) { - if (ex !== ex1) { - throw ex1; - } - } + /** + * Internal function to create a new SDK client instance. The client is + * installed and then bound to the current scope. + * + * @param clientClass The client class to instanciate. + * @param options Options to pass to the client. + */ - return this; - }, - _getCaptureExceptionOptionsFromPlainObject: function _getCaptureExceptionOptionsFromPlainObject(currentOptions, ex) { - var exKeys = Object.keys(ex).sort(); - var options = objectMerge$1(currentOptions, { - message: 'Non-Error exception captured with keys: ' + serializeKeysForMessage$1(exKeys), - fingerprint: [md5_1(exKeys)], - extra: currentOptions.extra || {} - }); - options.extra.__serialized__ = serializeException$1(ex); - return options; - }, + function initAndBind(clientClass, options) { + if (options.debug === true) { + logger.enable(); + } - /* - * Manually send a message to Sentry - * - * @param {string} msg A plain message to be captured in Sentry - * @param {object} options A specific set of options for this message [optional] - * @return {Raven} + var hub = getCurrentHub(); + var client = new clientClass(options); + hub.bindClient(client); + } + + var originalFunctionToString; + /** Patch toString calls to return proper name for wrapped functions */ + + var FunctionToString = + /** @class */ + function () { + function FunctionToString() { + /** + * @inheritDoc */ - captureMessage: function captureMessage(msg, options) { - // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an - // early call; we'll error on the side of logging anything called before configuration since it's - // probably something you should see: - if (!!this._globalOptions.ignoreErrors.test && this._globalOptions.ignoreErrors.test(msg)) { - return; - } + this.name = FunctionToString.id; + } + /** + * @inheritDoc + */ - options = options || {}; - msg = msg + ''; // Make sure it's actually a string - var data = objectMerge$1({ - message: msg - }, options); - var ex; // Generate a "synthetic" stack trace from this point. - // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative - // of a bug with Raven.js. Sentry generates synthetic traces either by configuration, - // or if it catches a thrown object without a "stack" property. + FunctionToString.prototype.setupOnce = function () { + originalFunctionToString = Function.prototype.toString; - try { - throw new Error(msg); - } catch (ex1) { - ex = ex1; - } // null exception name so `Error` isn't prefixed to msg + Function.prototype.toString = function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + var context = this.__sentry_original__ || this; // tslint:disable-next-line:no-unsafe-any + return originalFunctionToString.apply(context, args); + }; + }; + /** + * @inheritDoc + */ - ex.name = null; - var stack = tracekit.computeStackTrace(ex); // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1] - var initialCall = isArray$2(stack.stack) && stack.stack[1]; // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call - // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd - // initialCall => captureException(string) => captureMessage(string) + FunctionToString.id = 'FunctionToString'; + return FunctionToString; + }(); - if (initialCall && initialCall.func === 'Raven.captureException') { - initialCall = stack.stack[2]; - } + var $some$1 = arrayIteration.some; - var fileurl = initialCall && initialCall.url || ''; - if (!!this._globalOptions.ignoreUrls.test && this._globalOptions.ignoreUrls.test(fileurl)) { - return; - } - if (!!this._globalOptions.whitelistUrls.test && !this._globalOptions.whitelistUrls.test(fileurl)) { - return; - } // Always attempt to get stacktrace if message is empty. - // It's the only way to provide any helpful information to the user. + var STRICT_METHOD$4 = arrayMethodIsStrict('some'); + var USES_TO_LENGTH$8 = arrayMethodUsesToLength('some'); + // `Array.prototype.some` method + // https://tc39.github.io/ecma262/#sec-array.prototype.some + _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$4 || !USES_TO_LENGTH$8 }, { + some: function some(callbackfn /* , thisArg */) { + return $some$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); - if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') { - // fingerprint on msg, not stack trace (legacy behavior, could be revisited) - data.fingerprint = data.fingerprint == null ? msg : data.fingerprint; - options = objectMerge$1({ - trimHeadFrames: 0 - }, options); // Since we know this is a synthetic trace, the top frame (this function call) - // MUST be from Raven.js, so mark it for trimming - // We add to the trim counter so that callers can choose to trim extra frames, such - // as utility functions. + // this is the result of a script being pulled in from an external domain and CORS. - options.trimHeadFrames += 1; + var DEFAULT_IGNORE_ERRORS = [/^Script error\.?$/, /^Javascript error: Script error\.? on line 0$/]; + /** Inbound filters configurable by the user */ - var frames = this._prepareFrames(stack, options); + var InboundFilters = + /** @class */ + function () { + function InboundFilters(_options) { + if (_options === void 0) { + _options = {}; + } - data.stacktrace = { - // Sentry expects frames oldest to newest - frames: frames.reverse() - }; - } // Make sure that fingerprint is always wrapped in an array + this._options = _options; + /** + * @inheritDoc + */ + + this.name = InboundFilters.id; + } + /** + * @inheritDoc + */ - if (data.fingerprint) { - data.fingerprint = isArray$2(data.fingerprint) ? data.fingerprint : [data.fingerprint]; - } // Fire away! + InboundFilters.prototype.setupOnce = function () { + addGlobalEventProcessor(function (event) { + var hub = getCurrentHub(); + if (!hub) { + return event; + } - this._send(data); + var self = hub.getIntegration(InboundFilters); - return this; - }, - captureBreadcrumb: function captureBreadcrumb(obj) { - var crumb = objectMerge$1({ - timestamp: now() / 1000 - }, obj); + if (self) { + var client = hub.getClient(); + var clientOptions = client ? client.getOptions() : {}; - if (isFunction$1(this._globalOptions.breadcrumbCallback)) { - var result = this._globalOptions.breadcrumbCallback(crumb); + var options = self._mergeOptions(clientOptions); - if (isObject$2(result) && !isEmptyObject$1(result)) { - crumb = result; - } else if (result === false) { - return this; + if (self._shouldDropEvent(event, options)) { + return null; + } } + + return event; + }); + }; + /** JSDoc */ + + + InboundFilters.prototype._shouldDropEvent = function (event, options) { + if (this._isSentryError(event, options)) { + logger.warn("Event dropped due to being internal Sentry Error.\nEvent: " + getEventDescription(event)); + return true; } - this._breadcrumbs.push(crumb); + if (this._isIgnoredError(event, options)) { + logger.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: " + getEventDescription(event)); + return true; + } - if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) { - this._breadcrumbs.shift(); + if (this._isBlacklistedUrl(event, options)) { + logger.warn("Event dropped due to being matched by `blacklistUrls` option.\nEvent: " + getEventDescription(event) + ".\nUrl: " + this._getEventFilterUrl(event)); + return true; } - return this; - }, - addPlugin: function addPlugin(plugin - /*arg1, arg2, ... argN*/ - ) { - var pluginArgs = [].slice.call(arguments, 1); + if (!this._isWhitelistedUrl(event, options)) { + logger.warn("Event dropped due to not being matched by `whitelistUrls` option.\nEvent: " + getEventDescription(event) + ".\nUrl: " + this._getEventFilterUrl(event)); + return true; + } + + return false; + }; + /** JSDoc */ - this._plugins.push([plugin, pluginArgs]); - if (this._isRavenInstalled) { - this._drainPlugins(); + InboundFilters.prototype._isSentryError = function (event, options) { + if (options === void 0) { + options = {}; } - return this; - }, + if (!options.ignoreInternal) { + return false; + } - /* - * Set/clear a user to be sent along with the payload. - * - * @param {object} user An object representing user data [optional] - * @return {Raven} - */ - setUserContext: function setUserContext(user) { - // Intentionally do not merge here since that's an unexpected behavior. - this._globalContext.user = user; - return this; - }, + try { + return event && event.exception && event.exception.values && event.exception.values[0] && event.exception.values[0].type === 'SentryError' || false; + } catch (_oO) { + return false; + } + }; + /** JSDoc */ - /* - * Merge extra attributes to be sent along with the payload. - * - * @param {object} extra An object representing extra data [optional] - * @return {Raven} - */ - setExtraContext: function setExtraContext(extra) { - this._mergeContext('extra', extra); - return this; - }, + InboundFilters.prototype._isIgnoredError = function (event, options) { + if (options === void 0) { + options = {}; + } - /* - * Merge tags to be sent along with the payload. - * - * @param {object} tags An object representing tags [optional] - * @return {Raven} - */ - setTagsContext: function setTagsContext(tags) { - this._mergeContext('tags', tags); + if (!options.ignoreErrors || !options.ignoreErrors.length) { + return false; + } - return this; - }, + return this._getPossibleEventMessages(event).some(function (message) { + // Not sure why TypeScript complains here... + return options.ignoreErrors.some(function (pattern) { + return isMatchingPattern(message, pattern); + }); + }); + }; + /** JSDoc */ - /* - * Clear all of the context. - * - * @return {Raven} - */ - clearContext: function clearContext() { - this._globalContext = {}; - return this; - }, - /* - * Get a copy of the current context. This cannot be mutated. - * - * @return {object} copy of context - */ - getContext: function getContext() { - // lol javascript - return JSON.parse(stringify_1(this._globalContext)); - }, + InboundFilters.prototype._isBlacklistedUrl = function (event, options) { + if (options === void 0) { + options = {}; + } // TODO: Use Glob instead? - /* - * Set environment of application - * - * @param {string} environment Typically something like 'production'. - * @return {Raven} - */ - setEnvironment: function setEnvironment(environment) { - this._globalOptions.environment = environment; - return this; - }, - /* - * Set release version of application - * - * @param {string} release Typically something like a git SHA to identify version - * @return {Raven} - */ - setRelease: function setRelease(release) { - this._globalOptions.release = release; - return this; - }, + if (!options.blacklistUrls || !options.blacklistUrls.length) { + return false; + } - /* - * Set the dataCallback option - * - * @param {function} callback The callback to run which allows the - * data blob to be mutated before sending - * @return {Raven} - */ - setDataCallback: function setDataCallback(callback) { - var original = this._globalOptions.dataCallback; - this._globalOptions.dataCallback = keepOriginalCallback(original, callback); - return this; - }, + var url = this._getEventFilterUrl(event); - /* - * Set the breadcrumbCallback option - * - * @param {function} callback The callback to run which allows filtering - * or mutating breadcrumbs - * @return {Raven} - */ - setBreadcrumbCallback: function setBreadcrumbCallback(callback) { - var original = this._globalOptions.breadcrumbCallback; - this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback); - return this; - }, + return !url ? false : options.blacklistUrls.some(function (pattern) { + return isMatchingPattern(url, pattern); + }); + }; + /** JSDoc */ - /* - * Set the shouldSendCallback option - * - * @param {function} callback The callback to run which allows - * introspecting the blob before sending - * @return {Raven} - */ - setShouldSendCallback: function setShouldSendCallback(callback) { - var original = this._globalOptions.shouldSendCallback; - this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback); - return this; - }, - /** - * Override the default HTTP transport mechanism that transmits data - * to the Sentry server. - * - * @param {function} transport Function invoked instead of the default - * `makeRequest` handler. - * - * @return {Raven} - */ - setTransport: function setTransport(transport) { - this._globalOptions.transport = transport; - return this; - }, + InboundFilters.prototype._isWhitelistedUrl = function (event, options) { + if (options === void 0) { + options = {}; + } // TODO: Use Glob instead? - /* - * Get the latest raw exception that was captured by Raven. - * - * @return {error} - */ - lastException: function lastException() { - return this._lastCapturedException; - }, - /* - * Get the last event id - * - * @return {string} - */ - lastEventId: function lastEventId() { - return this._lastEventId; - }, + if (!options.whitelistUrls || !options.whitelistUrls.length) { + return true; + } - /* - * Determine if Raven is setup and ready to go. - * - * @return {boolean} - */ - isSetup: function isSetup() { - if (!this._hasJSON) return false; // needs JSON support + var url = this._getEventFilterUrl(event); - if (!this._globalServer) { - if (!this.ravenNotConfiguredError) { - this.ravenNotConfiguredError = true; + return !url ? true : options.whitelistUrls.some(function (pattern) { + return isMatchingPattern(url, pattern); + }); + }; + /** JSDoc */ - this._logDebug('error', 'Error: Raven has not been configured.'); - } - return false; + InboundFilters.prototype._mergeOptions = function (clientOptions) { + if (clientOptions === void 0) { + clientOptions = {}; } - return true; - }, - afterLoad: function afterLoad() { - // TODO: remove window dependence? - // Attempt to initialize Raven on load - var RavenConfig = _window$2.RavenConfig; + return { + blacklistUrls: __spread(this._options.blacklistUrls || [], clientOptions.blacklistUrls || []), + ignoreErrors: __spread(this._options.ignoreErrors || [], clientOptions.ignoreErrors || [], DEFAULT_IGNORE_ERRORS), + ignoreInternal: typeof this._options.ignoreInternal !== 'undefined' ? this._options.ignoreInternal : true, + whitelistUrls: __spread(this._options.whitelistUrls || [], clientOptions.whitelistUrls || []) + }; + }; + /** JSDoc */ - if (RavenConfig) { - this.config(RavenConfig.dsn, RavenConfig.config).install(); - } - }, - showReportDialog: function showReportDialog(options) { - if (!_document // doesn't work without a document (React native) - ) return; - options = objectMerge$1({ - eventId: this.lastEventId(), - dsn: this._dsn, - user: this._globalContext.user || {} - }, options); - if (!options.eventId) { - throw new configError('Missing eventId'); + InboundFilters.prototype._getPossibleEventMessages = function (event) { + if (event.message) { + return [event.message]; } - if (!options.dsn) { - throw new configError('Missing DSN'); + if (event.exception) { + try { + var _a = event.exception.values && event.exception.values[0] || {}, + _b = _a.type, + type = _b === void 0 ? '' : _b, + _c = _a.value, + value = _c === void 0 ? '' : _c; + + return ["" + value, type + ": " + value]; + } catch (oO) { + logger.error("Cannot extract message for event " + getEventDescription(event)); + return []; + } } - var encode = encodeURIComponent; - var encodedOptions = []; + return []; + }; + /** JSDoc */ - for (var key in options) { - if (key === 'user') { - var user = options.user; - if (user.name) encodedOptions.push('name=' + encode(user.name)); - if (user.email) encodedOptions.push('email=' + encode(user.email)); - } else { - encodedOptions.push(encode(key) + '=' + encode(options[key])); + + InboundFilters.prototype._getEventFilterUrl = function (event) { + try { + if (event.stacktrace) { + var frames_1 = event.stacktrace.frames; + return frames_1 && frames_1[frames_1.length - 1].filename || null; + } + + if (event.exception) { + var frames_2 = event.exception.values && event.exception.values[0].stacktrace && event.exception.values[0].stacktrace.frames; + return frames_2 && frames_2[frames_2.length - 1].filename || null; } + + return null; + } catch (oO) { + logger.error("Cannot extract url for event " + getEventDescription(event)); + return null; } + }; + /** + * @inheritDoc + */ - var globalServer = this._getGlobalServer(this._parseDSN(options.dsn)); - var script = _document.createElement('script'); + InboundFilters.id = 'InboundFilters'; + return InboundFilters; + }(); - script.async = true; - script.src = globalServer + '/api/embed/error-page/?' + encodedOptions.join('&'); + var UNKNOWN_FUNCTION = '?'; // Chromium based browsers: Chrome, Brave, new Opera, new Edge - (_document.head || _document.body).appendChild(script); - }, + var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; // gecko regex: `(?:bundle|\d+\.js)`: `bundle` is for react native, `\d+\.js` also but specifically for ram bundles because it + // generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js + // We need this specific case for now because we want no other regex to match. - /**** Private functions ****/ - _ignoreNextOnError: function _ignoreNextOnError() { - var self = this; - this._ignoreOnError += 1; - setTimeout(function () { - // onerror should trigger before setTimeout - self._ignoreOnError -= 1; - }); - }, - _triggerEvent: function _triggerEvent(eventType, options) { - // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it - var evt, key; - if (!this._hasDocument) return; - options = options || {}; - eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1); - - if (_document.createEvent) { - evt = _document.createEvent('HTMLEvents'); - evt.initEvent(eventType, true, true); - } else { - evt = _document.createEventObject(); - evt.eventType = eventType; + var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js))(?::(\d+))?(?::(\d+))?\s*$/i; + var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i; + var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; + var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/; + /** JSDoc */ + + function computeStackTrace(ex) { + // tslint:disable:no-unsafe-any + var stack = null; + var popSize = ex && ex.framesToPop; + + try { + // This must be tried first because Opera 10 *destroys* + // its stacktrace property if you try to access the stack + // property first!! + stack = computeStackTraceFromStacktraceProp(ex); + + if (stack) { + return popFrames(stack, popSize); } + } catch (e) {// no-empty + } - for (key in options) { - if (hasKey$1(options, key)) { - evt[key] = options[key]; - } + try { + stack = computeStackTraceFromStackProp(ex); + + if (stack) { + return popFrames(stack, popSize); } + } catch (e) {// no-empty + } - if (_document.createEvent) { - // IE9 if standards - _document.dispatchEvent(evt); - } else { - // IE8 regardless of Quirks or Standards - // IE9 if quirks - try { - _document.fireEvent('on' + evt.eventType.toLowerCase(), evt); - } catch (e) {// Do nothing + return { + message: extractMessage(ex), + name: ex && ex.name, + stack: [], + failed: true + }; + } + /** JSDoc */ + // tslint:disable-next-line:cyclomatic-complexity + + function computeStackTraceFromStackProp(ex) { + // tslint:disable:no-conditional-assignment + if (!ex || !ex.stack) { + return null; + } + + var stack = []; + var lines = ex.stack.split('\n'); + var isEval; + var submatch; + var parts; + var element; + + for (var i = 0; i < lines.length; ++i) { + if (parts = chrome.exec(lines[i])) { + var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line + + isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line + + if (isEval && (submatch = chromeEval.exec(parts[2]))) { + // throw out eval line/column and use top-most line/column number + parts[2] = submatch[1]; // url + + parts[3] = submatch[2]; // line + + parts[4] = submatch[3]; // column } + + element = { + // working with the regexp above is super painful. it is quite a hack, but just stripping the `address at ` + // prefix here seems like the quickest solution for now. + url: parts[2] && parts[2].indexOf('address at ') === 0 ? parts[2].substr('address at '.length) : parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: isNative ? [parts[2]] : [], + line: parts[3] ? +parts[3] : null, + column: parts[4] ? +parts[4] : null + }; + } else if (parts = winjs.exec(lines[i])) { + element = { + url: parts[2], + func: parts[1] || UNKNOWN_FUNCTION, + args: [], + line: +parts[3], + column: parts[4] ? +parts[4] : null + }; + } else if (parts = gecko.exec(lines[i])) { + isEval = parts[3] && parts[3].indexOf(' > eval') > -1; + + if (isEval && (submatch = geckoEval.exec(parts[3]))) { + // throw out eval line/column and use top-most line number + parts[1] = parts[1] || "eval"; + parts[3] = submatch[1]; + parts[4] = submatch[2]; + parts[5] = ''; // no column when eval + } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) { + // FireFox uses this awesome columnNumber property for its top frame + // Also note, Firefox's column number is 0-based and everything else expects 1-based, + // so adding 1 + // NOTE: this hack doesn't work if top-most frame is eval + stack[0].column = ex.columnNumber + 1; + } + + element = { + url: parts[3], + func: parts[1] || UNKNOWN_FUNCTION, + args: parts[2] ? parts[2].split(',') : [], + line: parts[4] ? +parts[4] : null, + column: parts[5] ? +parts[5] : null + }; + } else { + continue; } - }, - /** - * Wraps addEventListener to capture UI breadcrumbs - * @param evtName the event name (e.g. "click") - * @returns {Function} - * @private - */ - _breadcrumbEventHandler: function _breadcrumbEventHandler(evtName) { - var self = this; - return function (evt) { - // reset keypress timeout; e.g. triggering a 'click' after - // a 'keypress' will reset the keypress debounce so that a new - // set of keypresses can be recorded - self._keypressTimeout = null; // It's possible this handler might trigger multiple times for the same - // event (e.g. event propagation through node ancestors). Ignore if we've - // already captured the event. - - if (self._lastCapturedEvent === evt) return; - self._lastCapturedEvent = evt; // try/catch both: - // - accessing evt.target (see getsentry/raven-js#838, #768) - // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly - // can throw an exception in some circumstances. - - var target; + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; + } - try { - target = htmlTreeAsString$1(evt.target); - } catch (e) { - target = '<unknown>'; - } + stack.push(element); + } - self.captureBreadcrumb({ - category: 'ui.' + evtName, - // e.g. ui.click, ui.input - message: target - }); - }; - }, + if (!stack.length) { + return null; + } - /** - * Wraps addEventListener to capture keypress UI events - * @returns {Function} - * @private - */ - _keypressEventHandler: function _keypressEventHandler() { - var self = this, - debounceDuration = 1000; // milliseconds - // TODO: if somehow user switches keypress target before - // debounce timeout is triggered, we will only capture - // a single breadcrumb from the FIRST target (acceptable?) + return { + message: extractMessage(ex), + name: ex.name, + stack: stack + }; + } + /** JSDoc */ - return function (evt) { - var target; - try { - target = evt.target; - } catch (e) { - // just accessing event properties can throw an exception in some rare circumstances - // see: https://github.com/getsentry/raven-js/issues/838 - return; + function computeStackTraceFromStacktraceProp(ex) { + if (!ex || !ex.stacktrace) { + return null; + } // Access and store the stacktrace property before doing ANYTHING + // else to it because Opera is not very good at providing it + // reliably in other circumstances. + + + var stacktrace = ex.stacktrace; + var opera10Regex = / line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i; + var opera11Regex = / line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i; + var lines = stacktrace.split('\n'); + var stack = []; + var parts; + + for (var line = 0; line < lines.length; line += 2) { + // tslint:disable:no-conditional-assignment + var element = null; + + if (parts = opera10Regex.exec(lines[line])) { + element = { + url: parts[2], + func: parts[3], + args: [], + line: +parts[1], + column: null + }; + } else if (parts = opera11Regex.exec(lines[line])) { + element = { + url: parts[6], + func: parts[3] || parts[4], + args: parts[5] ? parts[5].split(',') : [], + line: +parts[1], + column: +parts[2] + }; + } + + if (element) { + if (!element.func && element.line) { + element.func = UNKNOWN_FUNCTION; } - var tagName = target && target.tagName; // only consider keypress events on actual input elements - // this will disregard keypresses targeting body (e.g. tabbing - // through elements, hotkeys, etc) + stack.push(element); + } + } + + if (!stack.length) { + return null; + } - if (!tagName || tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable) return; // record first keypress in a series, but ignore subsequent - // keypresses until debounce clears + return { + message: extractMessage(ex), + name: ex.name, + stack: stack + }; + } + /** Remove N number of frames from the stack */ - var timeout = self._keypressTimeout; - if (!timeout) { - self._breadcrumbEventHandler('input')(evt); - } + function popFrames(stacktrace, popSize) { + try { + return _assign({}, stacktrace, { + stack: stacktrace.stack.slice(popSize) + }); + } catch (e) { + return stacktrace; + } + } + /** + * There are cases where stacktrace.message is an Event object + * https://github.com/getsentry/sentry-javascript/issues/1949 + * In this specific case we try to extract stacktrace.message.error.message + */ + + + function extractMessage(ex) { + var message = ex && ex.message; + + if (!message) { + return 'No error message'; + } + + if (message.error && typeof message.error.message === 'string') { + return message.error.message; + } + + return message; + } + + var STACKTRACE_LIMIT = 50; + /** + * This function creates an exception from an TraceKitStackTrace + * @param stacktrace TraceKitStackTrace that will be converted to an exception + * @hidden + */ + + function exceptionFromStacktrace(stacktrace) { + var frames = prepareFramesForEvent(stacktrace.stack); + var exception = { + type: stacktrace.name, + value: stacktrace.message + }; - clearTimeout(timeout); - self._keypressTimeout = setTimeout(function () { - self._keypressTimeout = null; - }, debounceDuration); + if (frames && frames.length) { + exception.stacktrace = { + frames: frames }; - }, + } // tslint:disable-next-line:strict-type-predicates - /** - * Captures a breadcrumb of type "navigation", normalizing input URLs - * @param to the originating URL - * @param from the target URL - * @private - */ - _captureUrlChange: function _captureUrlChange(from, to) { - var parsedLoc = parseUrl$1(this._location.href); - var parsedTo = parseUrl$1(to); - var parsedFrom = parseUrl$1(from); // because onpopstate only tells you the "new" (to) value of location.href, and - // not the previous (from) value, we need to track the value of the current URL - // state ourselves - - this._lastHref = to; // Use only the path component of the URL if the URL matches the current - // document (almost all the time when using pushState) - if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) to = parsedTo.relative; - if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) from = parsedFrom.relative; - this.captureBreadcrumb({ - category: 'navigation', - data: { - to: to, - from: from - } - }); - }, - _patchFunctionToString: function _patchFunctionToString() { - var self = this; - self._originalFunctionToString = Function.prototype.toString; // eslint-disable-next-line no-extend-native + if (exception.type === undefined && exception.value === '') { + exception.value = 'Unrecoverable error caught'; + } - Function.prototype.toString = function () { - if (typeof this === 'function' && this.__raven__) { - return self._originalFunctionToString.apply(this.__orig__, arguments); - } + return exception; + } + /** + * @hidden + */ + + function eventFromPlainObject(exception, syntheticException, rejection) { + var event = { + exception: { + values: [{ + type: isEvent(exception) ? exception.constructor.name : rejection ? 'UnhandledRejection' : 'Error', + value: "Non-Error " + (rejection ? 'promise rejection' : 'exception') + " captured with keys: " + extractExceptionKeysForMessage(exception) + }] + }, + extra: { + __serialized__: normalizeToSize(exception) + } + }; - return self._originalFunctionToString.apply(this, arguments); + if (syntheticException) { + var stacktrace = computeStackTrace(syntheticException); + var frames_1 = prepareFramesForEvent(stacktrace.stack); + event.stacktrace = { + frames: frames_1 }; - }, - _unpatchFunctionToString: function _unpatchFunctionToString() { - if (this._originalFunctionToString) { - // eslint-disable-next-line no-extend-native - Function.prototype.toString = this._originalFunctionToString; + } + + return event; + } + /** + * @hidden + */ + + function eventFromStacktrace(stacktrace) { + var exception = exceptionFromStacktrace(stacktrace); + return { + exception: { + values: [exception] } - }, + }; + } + /** + * @hidden + */ - /** - * Wrap timer functions and event targets to catch errors and provide - * better metadata. - */ - _instrumentTryCatch: function _instrumentTryCatch() { - var self = this; - var wrappedBuiltIns = self._wrappedBuiltIns; - - function wrapTimeFn(orig) { - return function (fn, t) { - // preserve arity - // Make a copy of the arguments to prevent deoptimization - // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments - var args = new Array(arguments.length); - - for (var i = 0; i < args.length; ++i) { - args[i] = arguments[i]; - } + function prepareFramesForEvent(stack) { + if (!stack || !stack.length) { + return []; + } - var originalCallback = args[0]; + var localStack = stack; + var firstFrameFunction = localStack[0].func || ''; + var lastFrameFunction = localStack[localStack.length - 1].func || ''; // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call) - if (isFunction$1(originalCallback)) { - args[0] = self.wrap({ - mechanism: { - type: 'instrument', - data: { - function: orig.name || '<anonymous>' - } - } - }, originalCallback); - } // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it - // also supports only two arguments and doesn't care what this is, so we - // can just call the original function directly. + if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) { + localStack = localStack.slice(1); + } // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call) - if (orig.apply) { - return orig.apply(this, args); - } else { - return orig(args[0], args[1]); - } - }; - } + if (lastFrameFunction.indexOf('sentryWrapped') !== -1) { + localStack = localStack.slice(0, -1); + } // The frame where the crash happened, should be the last entry in the array - var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; - - function wrapEventTarget(global) { - var proto = _window$2[global] && _window$2[global].prototype; - - if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) { - fill$1(proto, 'addEventListener', function (orig) { - return function (evtName, fn, capture, secure) { - // preserve arity - try { - if (fn && fn.handleEvent) { - fn.handleEvent = self.wrap({ - mechanism: { - type: 'instrument', - data: { - target: global, - function: 'handleEvent', - handler: fn && fn.name || '<anonymous>' - } - } - }, fn.handleEvent); - } - } catch (err) {} // can sometimes get 'Permission denied to access property "handle Event' - // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs` - // so that we don't have more than one wrapper function - - - var before, clickHandler, keypressHandler; - - if (autoBreadcrumbs && autoBreadcrumbs.dom && (global === 'EventTarget' || global === 'Node')) { - // NOTE: generating multiple handlers per addEventListener invocation, should - // revisit and verify we can just use one (almost certainly) - clickHandler = self._breadcrumbEventHandler('click'); - keypressHandler = self._keypressEventHandler(); - - before = function before(evt) { - // need to intercept every DOM event in `before` argument, in case that - // same wrapped method is re-used for different events (e.g. mousemove THEN click) - // see #724 - if (!evt) return; - var eventType; - - try { - eventType = evt.type; - } catch (e) { - // just accessing event properties can throw an exception in some rare circumstances - // see: https://github.com/getsentry/raven-js/issues/838 - return; - } - if (eventType === 'click') return clickHandler(evt);else if (eventType === 'keypress') return keypressHandler(evt); - }; - } + return localStack.map(function (frame) { + return { + colno: frame.column === null ? undefined : frame.column, + filename: frame.url || localStack[0].url, + function: frame.func || '?', + in_app: true, + lineno: frame.line === null ? undefined : frame.line + }; + }).slice(0, STACKTRACE_LIMIT).reverse(); + } - return orig.call(this, evtName, self.wrap({ - mechanism: { - type: 'instrument', - data: { - target: global, - function: 'addEventListener', - handler: fn && fn.name || '<anonymous>' - } - } - }, fn, before), capture, secure); - }; - }, wrappedBuiltIns); - fill$1(proto, 'removeEventListener', function (orig) { - return function (evt, fn, capture, secure) { - try { - fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn); - } catch (e) {// ignore, accessing __raven_wrapper__ will throw in some Selenium environments - } + /** JSDoc */ - return orig.call(this, evt, fn, capture, secure); - }; - }, wrappedBuiltIns); - } - } + function eventFromUnknownInput(exception, syntheticException, options) { + if (options === void 0) { + options = {}; + } - fill$1(_window$2, 'setTimeout', wrapTimeFn, wrappedBuiltIns); - fill$1(_window$2, 'setInterval', wrapTimeFn, wrappedBuiltIns); + var event; - if (_window$2.requestAnimationFrame) { - fill$1(_window$2, 'requestAnimationFrame', function (orig) { - return function (cb) { - return orig(self.wrap({ - mechanism: { - type: 'instrument', - data: { - function: 'requestAnimationFrame', - handler: orig && orig.name || '<anonymous>' - } - } - }, cb)); - }; - }, wrappedBuiltIns); - } // event targets borrowed from bugsnag-js: - // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666 + if (isErrorEvent(exception) && exception.error) { + // If it is an ErrorEvent with `error` property, extract it to get actual Error + var errorEvent = exception; + exception = errorEvent.error; // tslint:disable-line:no-parameter-reassignment + + event = eventFromStacktrace(computeStackTrace(exception)); + return event; + } + if (isDOMError(exception) || isDOMException(exception)) { + // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers) + // then we just extract the name and message, as they don't provide anything else + // https://developer.mozilla.org/en-US/docs/Web/API/DOMError + // https://developer.mozilla.org/en-US/docs/Web/API/DOMException + var domException = exception; + var name_1 = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException'); + var message = domException.message ? name_1 + ": " + domException.message : name_1; + event = eventFromString(message, syntheticException, options); + addExceptionTypeValue(event, message); + return event; + } - var eventTargets = ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload']; + if (isError(exception)) { + // we have a real Error object, do nothing + event = eventFromStacktrace(computeStackTrace(exception)); + return event; + } - for (var i = 0; i < eventTargets.length; i++) { - wrapEventTarget(eventTargets[i]); - } - }, + if (isPlainObject(exception) || isEvent(exception)) { + // If it is plain Object or Event, serialize it manually and extract options + // This will allow us to group events based on top-level keys + // which is much better than creating new group when any key/value change + var objectException = exception; + event = eventFromPlainObject(objectException, syntheticException, options.rejection); + addExceptionMechanism(event, { + synthetic: true + }); + return event; + } // If none of previous checks were valid, then it means that it's not: + // - an instance of DOMError + // - an instance of DOMException + // - an instance of Event + // - an instance of Error + // - a valid ErrorEvent (one with an error property) + // - a plain Object + // + // So bail out and capture it as a simple message: + + + event = eventFromString(exception, syntheticException, options); + addExceptionTypeValue(event, "" + exception, undefined); + addExceptionMechanism(event, { + synthetic: true + }); + return event; + } // this._options.attachStacktrace + /** JSDoc */ + + function eventFromString(input, syntheticException, options) { + if (options === void 0) { + options = {}; + } + + var event = { + message: input + }; + + if (options.attachStacktrace && syntheticException) { + var stacktrace = computeStackTrace(syntheticException); + var frames_1 = prepareFramesForEvent(stacktrace.stack); + event.stacktrace = { + frames: frames_1 + }; + } + + return event; + } + + /** Base Transport class implementation */ + + var BaseTransport = + /** @class */ + function () { + function BaseTransport(options) { + this.options = options; + /** A simple buffer holding all requests. */ + + this._buffer = new PromiseBuffer(30); + this.url = new API(this.options.dsn).getStoreEndpointWithUrlEncodedAuth(); + } /** - * Instrument browser built-ins w/ breadcrumb capturing - * - XMLHttpRequests - * - DOM interactions (click/typing) - * - window.location changes - * - console - * - * Can be disabled or individually configured via the `autoBreadcrumbs` config option + * @inheritDoc */ - _instrumentBreadcrumbs: function _instrumentBreadcrumbs() { - var self = this; - var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs; - var wrappedBuiltIns = self._wrappedBuiltIns; - - function wrapProp(prop, xhr) { - if (prop in xhr && isFunction$1(xhr[prop])) { - fill$1(xhr, prop, function (orig) { - return self.wrap({ - mechanism: { - type: 'instrument', - data: { - function: prop, - handler: orig && orig.name || '<anonymous>' - } - } - }, orig); - }); // intentionally don't track filled methods on XHR instances - } - } - - if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window$2) { - var xhrproto = _window$2.XMLHttpRequest && _window$2.XMLHttpRequest.prototype; - fill$1(xhrproto, 'open', function (origOpen) { - return function (method, url) { - // preserve arity - // if Sentry key appears in URL, don't capture - if (isString$1(url) && url.indexOf(self._globalKey) === -1) { - this.__raven_xhr = { - method: method, - url: url, - status_code: null - }; - } - return origOpen.apply(this, arguments); - }; - }, wrappedBuiltIns); - fill$1(xhrproto, 'send', function (origSend) { - return function () { - // preserve arity - var xhr = this; - - function onreadystatechangeHandler() { - if (xhr.__raven_xhr && xhr.readyState === 4) { - try { - // touching statusCode in some platforms throws - // an exception - xhr.__raven_xhr.status_code = xhr.status; - } catch (e) { - /* do nothing */ - } - self.captureBreadcrumb({ - type: 'http', - category: 'xhr', - data: xhr.__raven_xhr - }); - } - } + BaseTransport.prototype.sendEvent = function (_) { + throw new SentryError('Transport Class has to implement `sendEvent` method'); + }; + /** + * @inheritDoc + */ - var props = ['onload', 'onerror', 'onprogress']; - for (var j = 0; j < props.length; j++) { - wrapProp(props[j], xhr); - } + BaseTransport.prototype.close = function (timeout) { + return this._buffer.drain(timeout); + }; - if ('onreadystatechange' in xhr && isFunction$1(xhr.onreadystatechange)) { - fill$1(xhr, 'onreadystatechange', function (orig) { - return self.wrap({ - mechanism: { - type: 'instrument', - data: { - function: 'onreadystatechange', - handler: orig && orig.name || '<anonymous>' - } - } - }, orig, onreadystatechangeHandler); - } - /* intentionally don't track this instrumentation */ - ); - } else { - // if onreadystatechange wasn't actually set by the page on this xhr, we - // are free to set our own and capture the breadcrumb - xhr.onreadystatechange = onreadystatechangeHandler; - } + return BaseTransport; + }(); - return origSend.apply(this, arguments); - }; - }, wrappedBuiltIns); - } + var global$3 = getGlobalObject(); + /** `fetch` based transport */ - if (autoBreadcrumbs.xhr && supportsFetch$1()) { - fill$1(_window$2, 'fetch', function (origFetch) { - return function () { - // preserve arity - // Make a copy of the arguments to prevent deoptimization - // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments - var args = new Array(arguments.length); + var FetchTransport = + /** @class */ + function (_super) { + __extends(FetchTransport, _super); + + function FetchTransport() { + var _this = _super !== null && _super.apply(this, arguments) || this; + /** Locks transport after receiving 429 response */ - for (var i = 0; i < args.length; ++i) { - args[i] = arguments[i]; - } - var fetchInput = args[0]; - var method = 'GET'; - var url; + _this._disabledUntil = new Date(Date.now()); + return _this; + } + /** + * @inheritDoc + */ - if (typeof fetchInput === 'string') { - url = fetchInput; - } else if ('Request' in _window$2 && fetchInput instanceof _window$2.Request) { - url = fetchInput.url; - if (fetchInput.method) { - method = fetchInput.method; - } - } else { - url = '' + fetchInput; - } // if Sentry key appears in URL, don't capture, as it's our own request + FetchTransport.prototype.sendEvent = function (event) { + var _this = this; + if (new Date(Date.now()) < this._disabledUntil) { + return Promise.reject({ + event: event, + reason: "Transport locked till " + this._disabledUntil + " due to too many requests.", + status: 429 + }); + } - if (url.indexOf(self._globalKey) !== -1) { - return origFetch.apply(this, args); - } + var defaultOptions = { + body: JSON.stringify(event), + method: 'POST', + // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default + // https://caniuse.com/#feat=referrer-policy + // It doesn't. And it throw exception instead of ignoring this parameter... + // REF: https://github.com/getsentry/raven-js/issues/1233 + referrerPolicy: supportsReferrerPolicy() ? 'origin' : '' + }; - if (args[1] && args[1].method) { - method = args[1].method; - } + if (this.options.headers !== undefined) { + defaultOptions.headers = this.options.headers; + } - var fetchData = { - method: method, - url: url, - status_code: null - }; - return origFetch.apply(this, args).then(function (response) { - fetchData.status_code = response.status; - self.captureBreadcrumb({ - type: 'http', - category: 'fetch', - data: fetchData - }); - return response; - })['catch'](function (err) { - // if there is an error performing the request - self.captureBreadcrumb({ - type: 'http', - category: 'fetch', - data: fetchData, - level: 'error' - }); - throw err; + return this._buffer.add(new SyncPromise(function (resolve, reject) { + global$3.fetch(_this.url, defaultOptions).then(function (response) { + var status = Status.fromHttpCode(response.status); + + if (status === Status.Success) { + resolve({ + status: status }); - }; - }, wrappedBuiltIns); - } // Capture breadcrumbs from any click that is unhandled / bubbled up all the way - // to the document. Do this before we instrument addEventListener. + return; + } + + if (status === Status.RateLimit) { + var now = Date.now(); + _this._disabledUntil = new Date(now + parseRetryAfterHeader(now, response.headers.get('Retry-After'))); + logger.warn("Too many requests, backing off till: " + _this._disabledUntil); + } + reject(response); + }).catch(reject); + })); + }; - if (autoBreadcrumbs.dom && this._hasDocument) { - if (_document.addEventListener) { - _document.addEventListener('click', self._breadcrumbEventHandler('click'), false); + return FetchTransport; + }(BaseTransport); - _document.addEventListener('keypress', self._keypressEventHandler(), false); - } else if (_document.attachEvent) { - // IE8 Compatibility - _document.attachEvent('onclick', self._breadcrumbEventHandler('click')); + /** `XHR` based transport */ - _document.attachEvent('onkeypress', self._keypressEventHandler()); - } - } // record navigation (URL) changes - // NOTE: in Chrome App environment, touching history.pushState, *even inside - // a try/catch block*, will cause Chrome to output an error to console.error - // borrowed from: https://github.com/angular/angular.js/pull/13945/files + var XHRTransport = + /** @class */ + function (_super) { + __extends(XHRTransport, _super); + + function XHRTransport() { + var _this = _super !== null && _super.apply(this, arguments) || this; + /** Locks transport after receiving 429 response */ - var chrome = _window$2.chrome; - var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; - var hasPushAndReplaceState = !isChromePackagedApp && _window$2.history && _window$2.history.pushState && _window$2.history.replaceState; + _this._disabledUntil = new Date(Date.now()); + return _this; + } + /** + * @inheritDoc + */ - if (autoBreadcrumbs.location && hasPushAndReplaceState) { - // TODO: remove onpopstate handler on uninstall() - var oldOnPopState = _window$2.onpopstate; - _window$2.onpopstate = function () { - var currentHref = self._location.href; + XHRTransport.prototype.sendEvent = function (event) { + var _this = this; + + if (new Date(Date.now()) < this._disabledUntil) { + return Promise.reject({ + event: event, + reason: "Transport locked till " + this._disabledUntil + " due to too many requests.", + status: 429 + }); + } - self._captureUrlChange(self._lastHref, currentHref); + return this._buffer.add(new SyncPromise(function (resolve, reject) { + var request = new XMLHttpRequest(); - if (oldOnPopState) { - return oldOnPopState.apply(this, arguments); + request.onreadystatechange = function () { + if (request.readyState !== 4) { + return; } - }; - var historyReplacementFunction = function historyReplacementFunction(origHistFunction) { - // note history.pushState.length is 0; intentionally not declaring - // params to preserve 0 arity - return function () - /* state, title, url */ - { - var url = arguments.length > 2 ? arguments[2] : undefined; // url argument is optional - - if (url) { - // coerce to string (this is what pushState does) - self._captureUrlChange(self._lastHref, url + ''); - } + var status = Status.fromHttpCode(request.status); - return origHistFunction.apply(this, arguments); - }; - }; + if (status === Status.Success) { + resolve({ + status: status + }); + return; + } - fill$1(_window$2.history, 'pushState', historyReplacementFunction, wrappedBuiltIns); - fill$1(_window$2.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns); - } + if (status === Status.RateLimit) { + var now = Date.now(); + _this._disabledUntil = new Date(now + parseRetryAfterHeader(now, request.getResponseHeader('Retry-After'))); + logger.warn("Too many requests, backing off till: " + _this._disabledUntil); + } - if (autoBreadcrumbs.console && 'console' in _window$2 && console.log) { - // console - var consoleMethodCallback = function consoleMethodCallback(msg, data) { - self.captureBreadcrumb({ - message: msg, - level: data.level, - category: 'console' - }); + reject(request); }; - each$1(['debug', 'info', 'warn', 'error', 'log'], function (_, level) { - wrapConsoleMethod(console, level, consoleMethodCallback); - }); - } - }, - _restoreBuiltIns: function _restoreBuiltIns() { - // restore any wrapped builtins - var builtin; + request.open('POST', _this.url); - while (this._wrappedBuiltIns.length) { - builtin = this._wrappedBuiltIns.shift(); - var obj = builtin[0], - name = builtin[1], - orig = builtin[2]; - obj[name] = orig; - } - }, - _restoreConsole: function _restoreConsole() { - // eslint-disable-next-line guard-for-in - for (var method in this._originalConsoleMethods) { - this._originalConsole[method] = this._originalConsoleMethods[method]; + for (var header in _this.options.headers) { + if (_this.options.headers.hasOwnProperty(header)) { + request.setRequestHeader(header, _this.options.headers[header]); + } + } + + request.send(JSON.stringify(event)); + })); + }; + + return XHRTransport; + }(BaseTransport); + + /** + * The Sentry Browser SDK Backend. + * @hidden + */ + + var BrowserBackend = + /** @class */ + function (_super) { + __extends(BrowserBackend, _super); + + function BrowserBackend() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @inheritDoc + */ + + + BrowserBackend.prototype._setupTransport = function () { + if (!this._options.dsn) { + // We return the noop transport here in case there is no Dsn. + return _super.prototype._setupTransport.call(this); } - }, - _drainPlugins: function _drainPlugins() { - var self = this; // FIX ME TODO - each$1(this._plugins, function (_, plugin) { - var installer = plugin[0]; - var args = plugin[1]; - installer.apply(self, [self].concat(args)); + var transportOptions = _assign({}, this._options.transportOptions, { + dsn: this._options.dsn }); - }, - _parseDSN: function _parseDSN(str) { - var m = dsnPattern.exec(str), - dsn = {}, - i = 7; - try { - while (i--) { - dsn[dsnKeys[i]] = m[i] || ''; - } - } catch (e) { - throw new configError('Invalid DSN: ' + str); + if (this._options.transport) { + return new this._options.transport(transportOptions); } - if (dsn.pass && !this._globalOptions.allowSecretKey) { - throw new configError('Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'); + if (supportsFetch()) { + return new FetchTransport(transportOptions); } - return dsn; - }, - _getGlobalServer: function _getGlobalServer(uri) { - // assemble the endpoint from the uri pieces - var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : ''); + return new XHRTransport(transportOptions); + }; + /** + * @inheritDoc + */ + + + BrowserBackend.prototype.eventFromException = function (exception, hint) { + var syntheticException = hint && hint.syntheticException || undefined; + var event = eventFromUnknownInput(exception, syntheticException, { + attachStacktrace: this._options.attachStacktrace + }); + addExceptionMechanism(event, { + handled: true, + type: 'generic' + }); + event.level = Severity.Error; - if (uri.protocol) { - globalServer = uri.protocol + ':' + globalServer; + if (hint && hint.event_id) { + event.event_id = hint.event_id; } - return globalServer; - }, - _handleOnErrorStackInfo: function _handleOnErrorStackInfo(stackInfo, options) { - options = options || {}; - options.mechanism = options.mechanism || { - type: 'onerror', - handled: false - }; // if we are intentionally ignoring errors via onerror, bail out + return SyncPromise.resolve(event); + }; + /** + * @inheritDoc + */ + - if (!this._ignoreOnError) { - this._handleStackInfo(stackInfo, options); + BrowserBackend.prototype.eventFromMessage = function (message, level, hint) { + if (level === void 0) { + level = Severity.Info; } - }, - _handleStackInfo: function _handleStackInfo(stackInfo, options) { - var frames = this._prepareFrames(stackInfo, options); - this._triggerEvent('handle', { - stackInfo: stackInfo, - options: options + var syntheticException = hint && hint.syntheticException || undefined; + var event = eventFromString(message, syntheticException, { + attachStacktrace: this._options.attachStacktrace }); + event.level = level; - this._processException(stackInfo.name, stackInfo.message, stackInfo.url, stackInfo.lineno, frames, options); - }, - _prepareFrames: function _prepareFrames(stackInfo, options) { - var self = this; - var frames = []; + if (hint && hint.event_id) { + event.event_id = hint.event_id; + } - if (stackInfo.stack && stackInfo.stack.length) { - each$1(stackInfo.stack, function (i, stack) { - var frame = self._normalizeFrame(stack, stackInfo.url); + return SyncPromise.resolve(event); + }; - if (frame) { - frames.push(frame); - } - }); // e.g. frames captured via captureMessage throw + return BrowserBackend; + }(BaseBackend); - if (options && options.trimHeadFrames) { - for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) { - frames[j].in_app = false; - } - } - } + var SDK_NAME = 'sentry.javascript.browser'; + var SDK_VERSION = '5.15.5'; + + /** + * The Sentry Browser SDK Client. + * + * @see BrowserOptions for documentation on configuration options. + * @see SentryClient for usage documentation. + */ + + var BrowserClient = + /** @class */ + function (_super) { + __extends(BrowserClient, _super); + /** + * Creates a new Browser SDK instance. + * + * @param options Configuration options for this SDK. + */ - frames = frames.slice(0, this._globalOptions.stackTraceLimit); - return frames; - }, - _normalizeFrame: function _normalizeFrame(frame, stackInfoUrl) { - // normalize the frames data - var normalized = { - filename: frame.url, - lineno: frame.line, - colno: frame.column, - function: frame.func || '?' - }; // Case when we don't have any information about the error - // E.g. throwing a string or raw object, instead of an `Error` in Firefox - // Generating synthetic error doesn't add any value here - // - // We should probably somehow let a user know that they should fix their code - if (!frame.url) { - normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler + function BrowserClient(options) { + if (options === void 0) { + options = {}; } - normalized.in_app = !( // determine if an exception came from outside of our app - // first we check the global includePaths list. - !!this._globalOptions.includePaths.test && !this._globalOptions.includePaths.test(normalized.filename) || // Now we check for fun, if the function name is Raven or TraceKit - /(Raven|TraceKit)\./.test(normalized['function']) || // finally, we do a last ditch effort and check for raven.min.js - /raven\.(min\.)?js$/.test(normalized.filename)); - return normalized; - }, - _processException: function _processException(type, message, fileurl, lineno, frames, options) { - var prefixedMessage = (type ? type + ': ' : '') + (message || ''); + return _super.call(this, BrowserBackend, options) || this; + } + /** + * @inheritDoc + */ + + + BrowserClient.prototype._prepareEvent = function (event, scope, hint) { + event.platform = event.platform || 'javascript'; + event.sdk = _assign({}, event.sdk, { + name: SDK_NAME, + packages: __spread(event.sdk && event.sdk.packages || [], [{ + name: 'npm:@sentry/browser', + version: SDK_VERSION + }]), + version: SDK_VERSION + }); + return _super.prototype._prepareEvent.call(this, event, scope, hint); + }; + /** + * Show a report dialog to the user to send feedback to a specific event. + * + * @param options Set individual options for the dialog + */ + + + BrowserClient.prototype.showReportDialog = function (options) { + if (options === void 0) { + options = {}; + } // doesn't work without a document (React Native) + - if (!!this._globalOptions.ignoreErrors.test && (this._globalOptions.ignoreErrors.test(message) || this._globalOptions.ignoreErrors.test(prefixedMessage))) { + var document = getGlobalObject().document; + + if (!document) { return; } - var stacktrace; + if (!this._isEnabled()) { + logger.error('Trying to call showReportDialog with Sentry Client is disabled'); + return; + } - if (frames && frames.length) { - fileurl = frames[0].filename || fileurl; // Sentry expects frames oldest to newest - // and JS sends them as newest to oldest + var dsn = options.dsn || this.getDsn(); - frames.reverse(); - stacktrace = { - frames: frames - }; - } else if (fileurl) { - stacktrace = { - frames: [{ - filename: fileurl, - lineno: lineno, - in_app: true - }] - }; + if (!options.eventId) { + logger.error('Missing `eventId` option in showReportDialog call'); + return; } - if (!!this._globalOptions.ignoreUrls.test && this._globalOptions.ignoreUrls.test(fileurl)) { + if (!dsn) { + logger.error('Missing `Dsn` option in showReportDialog call'); return; } - if (!!this._globalOptions.whitelistUrls.test && !this._globalOptions.whitelistUrls.test(fileurl)) { - return; + var script = document.createElement('script'); + script.async = true; + script.src = new API(dsn).getReportDialogEndpoint(options); + + if (options.onLoad) { + script.onload = options.onLoad; } - var data = objectMerge$1({ - // sentry.interfaces.Exception - exception: { - values: [{ - type: type, - value: message, - stacktrace: stacktrace - }] - }, - transaction: fileurl - }, options); - var ex = data.exception.values[0]; + (document.head || document.body).appendChild(script); + }; - if (ex.type == null && ex.value === '') { - ex.value = 'Unrecoverable error caught'; - } // Move mechanism from options to exception interface - // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be - // too much + return BrowserClient; + }(BaseClient); + var ignoreOnError = 0; + /** + * @hidden + */ - if (!data.exception.mechanism && data.mechanism) { - data.exception.mechanism = data.mechanism; - delete data.mechanism; - } + function shouldIgnoreOnError() { + return ignoreOnError > 0; + } + /** + * @hidden + */ - data.exception.mechanism = objectMerge$1({ - type: 'generic', - handled: true - }, data.exception.mechanism || {}); // Fire away! + function ignoreNextOnError() { + // onerror should trigger before setTimeout + ignoreOnError += 1; + setTimeout(function () { + ignoreOnError -= 1; + }); + } + /** + * Instruments the given function and sends an event to Sentry every time the + * function throws an exception. + * + * @param fn A function to wrap. + * @returns The wrapped function. + * @hidden + */ - this._send(data); - }, - _trimPacket: function _trimPacket(data) { - // For now, we only want to truncate the two different messages - // but this could/should be expanded to just trim everything - var max = this._globalOptions.maxMessageLength; + function wrap$1(fn, options, before) { + if (options === void 0) { + options = {}; + } // tslint:disable-next-line:strict-type-predicates - if (data.message) { - data.message = truncate$1(data.message, max); - } - if (data.exception) { - var exception = data.exception.values[0]; - exception.value = truncate$1(exception.value, max); + if (typeof fn !== 'function') { + return fn; + } + + try { + // We don't wanna wrap it twice + if (fn.__sentry__) { + return fn; + } // If this has already been wrapped in the past, return that wrapped function + + + if (fn.__sentry_wrapped__) { + return fn.__sentry_wrapped__; } + } catch (e) { + // Just accessing custom props in some Selenium environments + // can cause a "Permission denied" exception (see raven-js#495). + // Bail on wrapping and return the function as-is (defers to window.onerror). + return fn; + } - var request = data.request; + var sentryWrapped = function sentryWrapped() { + var args = Array.prototype.slice.call(arguments); // tslint:disable:no-unsafe-any - if (request) { - if (request.url) { - request.url = truncate$1(request.url, this._globalOptions.maxUrlLength); + try { + // tslint:disable-next-line:strict-type-predicates + if (before && typeof before === 'function') { + before.apply(this, arguments); } - if (request.Referer) { - request.Referer = truncate$1(request.Referer, this._globalOptions.maxUrlLength); - } + var wrappedArguments = args.map(function (arg) { + return wrap$1(arg, options); + }); + + if (fn.handleEvent) { + // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means the sentry.javascript SDK caught an error invoking your application code. This + // is expected behavior and NOT indicative of a bug with sentry.javascript. + return fn.handleEvent.apply(this, wrappedArguments); + } // Attempt to invoke user-land function + // NOTE: If you are a Sentry user, and you are seeing this stack frame, it + // means the sentry.javascript SDK caught an error invoking your application code. This + // is expected behavior and NOT indicative of a bug with sentry.javascript. + + + return fn.apply(this, wrappedArguments); // tslint:enable:no-unsafe-any + } catch (ex) { + ignoreNextOnError(); + withScope(function (scope) { + scope.addEventProcessor(function (event) { + var processedEvent = _assign({}, event); + + if (options.mechanism) { + addExceptionTypeValue(processedEvent, undefined, undefined); + addExceptionMechanism(processedEvent, options.mechanism); + } + + processedEvent.extra = _assign({}, processedEvent.extra, { + arguments: args + }); + return processedEvent; + }); + captureException(ex); + }); + throw ex; } + }; // Accessing some objects may throw + // ref: https://github.com/getsentry/sentry-javascript/issues/1168 - if (data.breadcrumbs && data.breadcrumbs.values) this._trimBreadcrumbs(data.breadcrumbs); - return data; - }, - /** - * Truncate breadcrumb values (right now just URLs) - */ - _trimBreadcrumbs: function _trimBreadcrumbs(breadcrumbs) { - // known breadcrumb properties with urls - // TODO: also consider arbitrary prop values that start with (https?)?:// - var urlProps = ['to', 'from', 'url'], - urlProp, - crumb, - data; - - for (var i = 0; i < breadcrumbs.values.length; ++i) { - crumb = breadcrumbs.values[i]; - if (!crumb.hasOwnProperty('data') || !isObject$2(crumb.data) || objectFrozen$1(crumb.data)) continue; - data = objectMerge$1({}, crumb.data); - - for (var j = 0; j < urlProps.length; ++j) { - urlProp = urlProps[j]; - - if (data.hasOwnProperty(urlProp) && data[urlProp]) { - data[urlProp] = truncate$1(data[urlProp], this._globalOptions.maxUrlLength); - } + try { + for (var property in fn) { + if (Object.prototype.hasOwnProperty.call(fn, property)) { + sentryWrapped[property] = fn[property]; } - - breadcrumbs.values[i].data = data; } - }, - _getHttpData: function _getHttpData() { - if (!this._hasNavigator && !this._hasDocument) return; - var httpData = {}; + } catch (_oO) {} // tslint:disable-line:no-empty - if (this._hasNavigator && _navigator.userAgent) { - httpData.headers = { - 'User-Agent': _navigator.userAgent - }; - } // Check in `window` instead of `document`, as we may be in ServiceWorker environment + fn.prototype = fn.prototype || {}; + sentryWrapped.prototype = fn.prototype; + Object.defineProperty(fn, '__sentry_wrapped__', { + enumerable: false, + value: sentryWrapped + }); // Signal that this function has been wrapped/filled already + // for both debugging and to prevent it to being wrapped/filled twice - if (_window$2.location && _window$2.location.href) { - httpData.url = _window$2.location.href; + Object.defineProperties(sentryWrapped, { + __sentry__: { + enumerable: false, + value: true + }, + __sentry_original__: { + enumerable: false, + value: fn } + }); // Restore original function name (not all browsers allow that) - if (this._hasDocument && _document.referrer) { - if (!httpData.headers) httpData.headers = {}; - httpData.headers.Referer = _document.referrer; + try { + var descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name'); + + if (descriptor.configurable) { + Object.defineProperty(sentryWrapped, 'name', { + get: function get() { + return fn.name; + } + }); } + } catch (_oO) { + /*no-empty*/ + } - return httpData; - }, - _resetBackoff: function _resetBackoff() { - this._backoffDuration = 0; - this._backoffStart = null; - }, - _shouldBackoff: function _shouldBackoff() { - return this._backoffDuration && now() - this._backoffStart < this._backoffDuration; - }, + return sentryWrapped; + } + /** Global handlers */ + + var GlobalHandlers = + /** @class */ + function () { + /** JSDoc */ + function GlobalHandlers(options) { + /** + * @inheritDoc + */ + this.name = GlobalHandlers.id; + /** JSDoc */ + + this._onErrorHandlerInstalled = false; + /** JSDoc */ + + this._onUnhandledRejectionHandlerInstalled = false; + this._options = _assign({ + onerror: true, + onunhandledrejection: true + }, options); + } /** - * Returns true if the in-process data payload matches the signature - * of the previously-sent data - * - * NOTE: This has to be done at this level because TraceKit can generate - * data from window.onerror WITHOUT an exception object (IE8, IE9, - * other old browsers). This can take the form of an "exception" - * data object with a single frame (derived from the onerror args). + * @inheritDoc */ - _isRepeatData: function _isRepeatData(current) { - var last = this._lastData; - if (!last || current.message !== last.message || // defined for captureMessage - current.transaction !== last.transaction // defined for captureException/onerror - ) return false; // Stacktrace interface (i.e. from captureMessage) - if (current.stacktrace || last.stacktrace) { - return isSameStacktrace$1(current.stacktrace, last.stacktrace); - } else if (current.exception || last.exception) { - // Exception interface (i.e. from captureException/onerror) - return isSameException$1(current.exception, last.exception); - } else if (current.fingerprint || last.fingerprint) { - return Boolean(current.fingerprint && last.fingerprint) && JSON.stringify(current.fingerprint) === JSON.stringify(last.fingerprint); + + GlobalHandlers.prototype.setupOnce = function () { + Error.stackTraceLimit = 50; + + if (this._options.onerror) { + logger.log('Global Handler attached: onerror'); + + this._installGlobalOnErrorHandler(); } - return true; - }, - _setBackoffState: function _setBackoffState(request) { - // If we are already in a backoff state, don't change anything - if (this._shouldBackoff()) { + if (this._options.onunhandledrejection) { + logger.log('Global Handler attached: onunhandledrejection'); + + this._installGlobalOnUnhandledRejectionHandler(); + } + }; + /** JSDoc */ + + + GlobalHandlers.prototype._installGlobalOnErrorHandler = function () { + var _this = this; + + if (this._onErrorHandlerInstalled) { return; } - var status = request.status; // 400 - project_id doesn't exist or some other fatal - // 401 - invalid/revoked dsn - // 429 - too many requests + addInstrumentationHandler({ + callback: function callback(data) { + var error = data.error; + var currentHub = getCurrentHub(); + var hasIntegration = currentHub.getIntegration(GlobalHandlers); + var isFailedOwnDelivery = error && error.__sentry_own_request__ === true; - if (!(status === 400 || status === 401 || status === 429)) return; - var retry; + if (!hasIntegration || shouldIgnoreOnError() || isFailedOwnDelivery) { + return; + } - try { - // If Retry-After is not in Access-Control-Expose-Headers, most - // browsers will throw an exception trying to access it - if (supportsFetch$1()) { - retry = request.headers.get('Retry-After'); - } else { - retry = request.getResponseHeader('Retry-After'); - } // Retry-After is returned in seconds + var client = currentHub.getClient(); + var event = isPrimitive(error) ? _this._eventFromIncompleteOnError(data.msg, data.url, data.line, data.column) : _this._enhanceEventWithInitialFrame(eventFromUnknownInput(error, undefined, { + attachStacktrace: client && client.getOptions().attachStacktrace, + rejection: false + }), data.url, data.line, data.column); + addExceptionMechanism(event, { + handled: false, + type: 'onerror' + }); + currentHub.captureEvent(event, { + originalException: error + }); + }, + type: 'error' + }); + this._onErrorHandlerInstalled = true; + }; + /** JSDoc */ - retry = parseInt(retry, 10) * 1000; - } catch (e) { - /* eslint no-empty:0 */ + GlobalHandlers.prototype._installGlobalOnUnhandledRejectionHandler = function () { + var _this = this; + + if (this._onUnhandledRejectionHandlerInstalled) { + return; } - this._backoffDuration = retry ? // If Sentry server returned a Retry-After value, use it - retry : // Otherwise, double the last backoff duration (starts at 1 sec) - this._backoffDuration * 2 || 1000; - this._backoffStart = now(); - }, - _send: function _send(data) { - var globalOptions = this._globalOptions; + addInstrumentationHandler({ + callback: function callback(e) { + var error = e; // dig the object of the rejection out of known event types - var baseData = { - project: this._globalProject, - logger: globalOptions.logger, - platform: 'javascript' - }, - httpData = this._getHttpData(); + try { + // PromiseRejectionEvents store the object of the rejection under 'reason' + // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent + if ('reason' in e) { + error = e.reason; + } // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents + // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into + // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec + // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and + // https://github.com/getsentry/sentry-javascript/issues/2380 + else if ('detail' in e && 'reason' in e.detail) { + error = e.detail.reason; + } + } catch (_oO) {// no-empty + } - if (httpData) { - baseData.request = httpData; - } // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload + var currentHub = getCurrentHub(); + var hasIntegration = currentHub.getIntegration(GlobalHandlers); + var isFailedOwnDelivery = error && error.__sentry_own_request__ === true; + if (!hasIntegration || shouldIgnoreOnError() || isFailedOwnDelivery) { + return true; + } - if (data.trimHeadFrames) delete data.trimHeadFrames; - data = objectMerge$1(baseData, data); // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge + var client = currentHub.getClient(); + var event = isPrimitive(error) ? _this._eventFromIncompleteRejection(error) : eventFromUnknownInput(error, undefined, { + attachStacktrace: client && client.getOptions().attachStacktrace, + rejection: true + }); + event.level = Severity.Error; + addExceptionMechanism(event, { + handled: false, + type: 'onunhandledrejection' + }); + currentHub.captureEvent(event, { + originalException: error + }); + return; + }, + type: 'unhandledrejection' + }); + this._onUnhandledRejectionHandlerInstalled = true; + }; + /** + * This function creates a stack from an old, error-less onerror handler. + */ - data.tags = objectMerge$1(objectMerge$1({}, this._globalContext.tags), data.tags); - data.extra = objectMerge$1(objectMerge$1({}, this._globalContext.extra), data.extra); // Send along our own collected metadata with extra - data.extra['session:duration'] = now() - this._startTime; + GlobalHandlers.prototype._eventFromIncompleteOnError = function (msg, url, line, column) { + var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i; // If 'message' is ErrorEvent, get real message from inside - if (this._breadcrumbs && this._breadcrumbs.length > 0) { - // intentionally make shallow copy so that additions - // to breadcrumbs aren't accidentally sent in this request - data.breadcrumbs = { - values: [].slice.call(this._breadcrumbs, 0) - }; + var message = isErrorEvent(msg) ? msg.message : msg; + var name; + + if (isString(message)) { + var groups = message.match(ERROR_TYPES_RE); + + if (groups) { + name = groups[1]; + message = groups[2]; + } + } + + var event = { + exception: { + values: [{ + type: name || 'Error', + value: message + }] + } + }; + return this._enhanceEventWithInitialFrame(event, url, line, column); + }; + /** + * This function creates an Event from an TraceKitStackTrace that has part of it missing. + */ + + + GlobalHandlers.prototype._eventFromIncompleteRejection = function (error) { + return { + exception: { + values: [{ + type: 'UnhandledRejection', + value: "Non-Error promise rejection captured with value: " + error + }] + } + }; + }; + /** JSDoc */ + + + GlobalHandlers.prototype._enhanceEventWithInitialFrame = function (event, url, line, column) { + event.exception = event.exception || {}; + event.exception.values = event.exception.values || []; + event.exception.values[0] = event.exception.values[0] || {}; + event.exception.values[0].stacktrace = event.exception.values[0].stacktrace || {}; + event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames || []; + var colno = isNaN(parseInt(column, 10)) ? undefined : column; + var lineno = isNaN(parseInt(line, 10)) ? undefined : line; + var filename = isString(url) && url.length > 0 ? url : getLocationHref(); + + if (event.exception.values[0].stacktrace.frames.length === 0) { + event.exception.values[0].stacktrace.frames.push({ + colno: colno, + filename: filename, + function: '?', + in_app: true, + lineno: lineno + }); } - if (this._globalContext.user) { - // sentry.interfaces.User - data.user = this._globalContext.user; - } // Include the environment if it's defined in globalOptions + return event; + }; + /** + * @inheritDoc + */ + + + GlobalHandlers.id = 'GlobalHandlers'; + return GlobalHandlers; + }(); + + /** Wrap timer functions and event targets to catch errors and provide better meta data */ + var TryCatch = + /** @class */ + function () { + function TryCatch() { + /** JSDoc */ + this._ignoreOnError = 0; + /** + * @inheritDoc + */ - if (globalOptions.environment) data.environment = globalOptions.environment; // Include the release if it's defined in globalOptions + this.name = TryCatch.id; + } + /** JSDoc */ - if (globalOptions.release) data.release = globalOptions.release; // Include server_name if it's defined in globalOptions - if (globalOptions.serverName) data.server_name = globalOptions.serverName; - data = this._sanitizeData(data); // Cleanup empty properties before sending them to the server + TryCatch.prototype._wrapTimeFunction = function (original) { + return function () { + var args = []; - Object.keys(data).forEach(function (key) { - if (data[key] == null || data[key] === '' || isEmptyObject$1(data[key])) { - delete data[key]; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; } - }); - if (isFunction$1(globalOptions.dataCallback)) { - data = globalOptions.dataCallback(data) || data; - } // Why?????????? + var originalCallback = args[0]; + args[0] = wrap$1(originalCallback, { + mechanism: { + data: { + function: getFunctionName(original) + }, + handled: true, + type: 'instrument' + } + }); + return original.apply(this, args); + }; + }; + /** JSDoc */ - if (!data || isEmptyObject$1(data)) { - return; - } // Check if the request should be filtered or not + TryCatch.prototype._wrapRAF = function (original) { + return function (callback) { + return original(wrap$1(callback, { + mechanism: { + data: { + function: 'requestAnimationFrame', + handler: getFunctionName(original) + }, + handled: true, + type: 'instrument' + } + })); + }; + }; + /** JSDoc */ - if (isFunction$1(globalOptions.shouldSendCallback) && !globalOptions.shouldSendCallback(data)) { + TryCatch.prototype._wrapEventTarget = function (target) { + var global = getGlobalObject(); + var proto = global[target] && global[target].prototype; + + if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) { return; - } // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests), - // so drop requests until "cool-off" period has elapsed. + } + fill(proto, 'addEventListener', function (original) { + return function (eventName, fn, options) { + try { + // tslint:disable-next-line:no-unbound-method strict-type-predicates + if (typeof fn.handleEvent === 'function') { + fn.handleEvent = wrap$1(fn.handleEvent.bind(fn), { + mechanism: { + data: { + function: 'handleEvent', + handler: getFunctionName(fn), + target: target + }, + handled: true, + type: 'instrument' + } + }); + } + } catch (err) {// can sometimes get 'Permission denied to access property "handle Event' + } - if (this._shouldBackoff()) { - this._logDebug('warn', 'Raven dropped error due to backoff: ', data); + return original.call(this, eventName, wrap$1(fn, { + mechanism: { + data: { + function: 'addEventListener', + handler: getFunctionName(fn), + target: target + }, + handled: true, + type: 'instrument' + } + }), options); + }; + }); + fill(proto, 'removeEventListener', function (original) { + return function (eventName, fn, options) { + var callback = fn; - return; + try { + callback = callback && (callback.__sentry_wrapped__ || callback); + } catch (e) {// ignore, accessing __sentry_wrapped__ will throw in some Selenium environments + } + + return original.call(this, eventName, callback, options); + }; + }); + }; + /** JSDoc */ + + + TryCatch.prototype._wrapXHR = function (originalSend) { + return function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + var xhr = this; // tslint:disable-line:no-this-assignment + + var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange']; + xmlHttpRequestProps.forEach(function (prop) { + if (prop in xhr && typeof xhr[prop] === 'function') { + fill(xhr, prop, function (original) { + var wrapOptions = { + mechanism: { + data: { + function: prop, + handler: getFunctionName(original) + }, + handled: true, + type: 'instrument' + } + }; // If Instrument integration has been called before TryCatch, get the name of original function + + if (original.__sentry_original__) { + wrapOptions.mechanism.data.handler = getFunctionName(original.__sentry_original__); + } // Otherwise wrap directly + + + return wrap$1(original, wrapOptions); + }); + } + }); + return originalSend.apply(this, args); + }; + }; + /** + * Wrap timer functions and event targets to catch errors + * and provide better metadata. + */ + + + TryCatch.prototype.setupOnce = function () { + this._ignoreOnError = this._ignoreOnError; + var global = getGlobalObject(); + fill(global, 'setTimeout', this._wrapTimeFunction.bind(this)); + fill(global, 'setInterval', this._wrapTimeFunction.bind(this)); + fill(global, 'requestAnimationFrame', this._wrapRAF.bind(this)); + + if ('XMLHttpRequest' in global) { + fill(XMLHttpRequest.prototype, 'send', this._wrapXHR.bind(this)); } - if (typeof globalOptions.sampleRate === 'number') { - if (Math.random() < globalOptions.sampleRate) { - this._sendProcessedPayload(data); + ['EventTarget', 'Window', 'Node', 'ApplicationCache', 'AudioTrackList', 'ChannelMergerNode', 'CryptoOperation', 'EventSource', 'FileReader', 'HTMLUnknownElement', 'IDBDatabase', 'IDBRequest', 'IDBTransaction', 'KeyOperation', 'MediaController', 'MessagePort', 'ModalWindow', 'Notification', 'SVGElementInstance', 'Screen', 'TextTrack', 'TextTrackCue', 'TextTrackList', 'WebSocket', 'WebSocketWorker', 'Worker', 'XMLHttpRequest', 'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload'].forEach(this._wrapEventTarget.bind(this)); + }; + /** + * @inheritDoc + */ + + + TryCatch.id = 'TryCatch'; + return TryCatch; + }(); + + /** + * Default Breadcrumbs instrumentations + * TODO: Deprecated - with v6, this will be renamed to `Instrument` + */ + + var Breadcrumbs = + /** @class */ + function () { + /** + * @inheritDoc + */ + function Breadcrumbs(options) { + /** + * @inheritDoc + */ + this.name = Breadcrumbs.id; + this._options = _assign({ + console: true, + dom: true, + fetch: true, + history: true, + sentry: true, + xhr: true + }, options); + } + /** + * Creates breadcrumbs from console API calls + */ + + + Breadcrumbs.prototype._consoleBreadcrumb = function (handlerData) { + var breadcrumb = { + category: 'console', + data: { + arguments: handlerData.args, + logger: 'console' + }, + level: Severity.fromString(handlerData.level), + message: safeJoin(handlerData.args, ' ') + }; + + if (handlerData.level === 'assert') { + if (handlerData.args[0] === false) { + breadcrumb.message = "Assertion failed: " + (safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'); + breadcrumb.data.arguments = handlerData.args.slice(1); + } else { + // Don't capture a breadcrumb for passed assertions + return; } - } else { - this._sendProcessedPayload(data); } - }, - _sanitizeData: function _sanitizeData(data) { - return sanitize$1(data, this._globalOptions.sanitizeKeys); - }, - _getUuid: function _getUuid() { - return uuid4$1(); - }, - _sendProcessedPayload: function _sendProcessedPayload(data, callback) { - var self = this; - var globalOptions = this._globalOptions; - if (!this.isSetup()) return; // Try and clean up the packet before sending by truncating long values - data = this._trimPacket(data); // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback, - // but this would require copying an un-truncated copy of the data packet, which can be - // arbitrarily deep (extra_data) -- could be worthwhile? will revisit + getCurrentHub().addBreadcrumb(breadcrumb, { + input: handlerData.args, + level: handlerData.level + }); + }; + /** + * Creates breadcrumbs from DOM API calls + */ + - if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) { - this._logDebug('warn', 'Raven dropped repeat event: ', data); + Breadcrumbs.prototype._domBreadcrumb = function (handlerData) { + var target; // Accessing event.target can throw (see getsentry/raven-js#838, #768) + try { + target = handlerData.event.target ? htmlTreeAsString(handlerData.event.target) : htmlTreeAsString(handlerData.event); + } catch (e) { + target = '<unknown>'; + } + + if (target.length === 0) { return; - } // Send along an event_id if not explicitly passed. - // This event_id can be used to reference the error within Sentry itself. - // Set lastEventId after we know the error should actually be sent + } + getCurrentHub().addBreadcrumb({ + category: "ui." + handlerData.name, + message: target + }, { + event: handlerData.event, + name: handlerData.name + }); + }; + /** + * Creates breadcrumbs from XHR API calls + */ - this._lastEventId = data.event_id || (data.event_id = this._getUuid()); // Store outbound payload after trim - this._lastData = data; + Breadcrumbs.prototype._xhrBreadcrumb = function (handlerData) { + if (handlerData.endTimestamp) { + // We only capture complete, non-sentry requests + if (handlerData.xhr.__sentry_own_request__) { + return; + } - this._logDebug('debug', 'Raven about to send:', data); + getCurrentHub().addBreadcrumb({ + category: 'xhr', + data: handlerData.xhr.__sentry_xhr__, + type: 'http' + }, { + xhr: handlerData.xhr + }); + return; + } // We only capture issued sentry requests + + + if (this._options.sentry && handlerData.xhr.__sentry_own_request__) { + addSentryBreadcrumb(handlerData.args[0]); + } + }; + /** + * Creates breadcrumbs from fetch API calls + */ - var auth = { - sentry_version: '7', - sentry_client: 'raven-js/' + this.VERSION, - sentry_key: this._globalKey - }; - if (this._globalSecret) { - auth.sentry_secret = this._globalSecret; + Breadcrumbs.prototype._fetchBreadcrumb = function (handlerData) { + // We only capture complete fetch requests + if (!handlerData.endTimestamp) { + return; } - var exception = data.exception && data.exception.values[0]; // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy + var client = getCurrentHub().getClient(); + var dsn = client && client.getDsn(); - if (this._globalOptions.autoBreadcrumbs && this._globalOptions.autoBreadcrumbs.sentry) { - this.captureBreadcrumb({ - category: 'sentry', - message: exception ? (exception.type ? exception.type + ': ' : '') + exception.value : data.message, - event_id: data.event_id, - level: data.level || 'error' // presume error unless specified + if (this._options.sentry && dsn) { + var filterUrl = new API(dsn).getStoreEndpoint(); // if Sentry key appears in URL, don't capture it as a request + // but rather as our own 'sentry' type breadcrumb + + if (filterUrl && handlerData.fetchData.url.indexOf(filterUrl) !== -1 && handlerData.fetchData.method === 'POST' && handlerData.args[1] && handlerData.args[1].body) { + addSentryBreadcrumb(handlerData.args[1].body); + return; + } + } + if (handlerData.error) { + getCurrentHub().addBreadcrumb({ + category: 'fetch', + data: _assign({}, handlerData.fetchData, { + status_code: handlerData.response.status + }), + level: Severity.Error, + type: 'http' + }, { + data: handlerData.error, + input: handlerData.args + }); + } else { + getCurrentHub().addBreadcrumb({ + category: 'fetch', + data: _assign({}, handlerData.fetchData, { + status_code: handlerData.response.status + }), + type: 'http' + }, { + input: handlerData.args, + response: handlerData.response }); } + }; + /** + * Creates breadcrumbs from history API calls + */ - var url = this._globalEndpoint; - (globalOptions.transport || this._makeRequest).call(this, { - url: url, - auth: auth, - data: data, - options: globalOptions, - onSuccess: function success() { - self._resetBackoff(); + Breadcrumbs.prototype._historyBreadcrumb = function (handlerData) { + var global = getGlobalObject(); + var from = handlerData.from; + var to = handlerData.to; + var parsedLoc = parseUrl(global.location.href); + var parsedFrom = parseUrl(from); + var parsedTo = parseUrl(to); // Initial pushState doesn't provide `from` information - self._triggerEvent('success', { - data: data, - src: url - }); + if (!parsedFrom.path) { + parsedFrom = parsedLoc; + } // Use only the path component of the URL if the URL matches the current + // document (almost all the time when using pushState) - callback && callback(); - }, - onError: function failure(error) { - self._logDebug('error', 'Raven transport failed to send: ', error); - if (error.request) { - self._setBackoffState(error.request); - } + if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) { + // tslint:disable-next-line:no-parameter-reassignment + to = parsedTo.relative; + } - self._triggerEvent('failure', { - data: data, - src: url - }); + if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) { + // tslint:disable-next-line:no-parameter-reassignment + from = parsedFrom.relative; + } - error = error || new Error('Raven send failed (no additional details provided)'); - callback && callback(error); + getCurrentHub().addBreadcrumb({ + category: 'navigation', + data: { + from: from, + to: to } }); - }, - _makeRequest: function _makeRequest(opts) { - // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests - var url = opts.url + '?' + urlencode$1(opts.auth); - var evaluatedHeaders = null; - var evaluatedFetchParameters = {}; + }; + /** + * Instrument browser built-ins w/ breadcrumb capturing + * - Console API + * - DOM API (click/typing) + * - XMLHttpRequest API + * - Fetch API + * - History API + */ - if (opts.options.headers) { - evaluatedHeaders = this._evaluateHash(opts.options.headers); - } - if (opts.options.fetchParameters) { - evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters); - } + Breadcrumbs.prototype.setupOnce = function () { + var _this = this; - if (supportsFetch$1()) { - evaluatedFetchParameters.body = stringify_1(opts.data); - var defaultFetchOptions = objectMerge$1({}, this._fetchDefaults); - var fetchOptions = objectMerge$1(defaultFetchOptions, evaluatedFetchParameters); + if (this._options.console) { + addInstrumentationHandler({ + callback: function callback() { + var args = []; - if (evaluatedHeaders) { - fetchOptions.headers = evaluatedHeaders; - } + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - return _window$2.fetch(url, fetchOptions).then(function (response) { - if (response.ok) { - opts.onSuccess && opts.onSuccess(); - } else { - var error = new Error('Sentry error code: ' + response.status); // It's called request only to keep compatibility with XHR interface - // and not add more redundant checks in setBackoffState method + _this._consoleBreadcrumb.apply(_this, __spread(args)); + }, + type: 'console' + }); + } - error.request = response; - opts.onError && opts.onError(error); - } - })['catch'](function () { - opts.onError && opts.onError(new Error('Sentry error code: network unavailable')); + if (this._options.dom) { + addInstrumentationHandler({ + callback: function callback() { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + _this._domBreadcrumb.apply(_this, __spread(args)); + }, + type: 'dom' }); } - var request = _window$2.XMLHttpRequest && new _window$2.XMLHttpRequest(); - if (!request) return; // if browser doesn't support CORS (e.g. IE7), we are out of luck + if (this._options.xhr) { + addInstrumentationHandler({ + callback: function callback() { + var args = []; - var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined'; - if (!hasCORS) return; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - if ('withCredentials' in request) { - request.onreadystatechange = function () { - if (request.readyState !== 4) { - return; - } else if (request.status === 200) { - opts.onSuccess && opts.onSuccess(); - } else if (opts.onError) { - var err = new Error('Sentry error code: ' + request.status); - err.request = request; - opts.onError(err); - } - }; - } else { - request = new XDomainRequest(); // xdomainrequest cannot go http -> https (or vice versa), - // so always use protocol relative + _this._xhrBreadcrumb.apply(_this, __spread(args)); + }, + type: 'xhr' + }); + } - url = url.replace(/^https?:/, ''); // onreadystatechange not supported by XDomainRequest + if (this._options.fetch) { + addInstrumentationHandler({ + callback: function callback() { + var args = []; - if (opts.onSuccess) { - request.onload = opts.onSuccess; - } + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - if (opts.onError) { - request.onerror = function () { - var err = new Error('Sentry error code: XDomainRequest'); - err.request = request; - opts.onError(err); - }; - } + _this._fetchBreadcrumb.apply(_this, __spread(args)); + }, + type: 'fetch' + }); } - request.open('POST', url); + if (this._options.history) { + addInstrumentationHandler({ + callback: function callback() { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } - if (evaluatedHeaders) { - each$1(evaluatedHeaders, function (key, value) { - request.setRequestHeader(key, value); + _this._historyBreadcrumb.apply(_this, __spread(args)); + }, + type: 'history' }); } + }; + /** + * @inheritDoc + */ - request.send(stringify_1(opts.data)); - }, - _evaluateHash: function _evaluateHash(hash) { - var evaluated = {}; - for (var key in hash) { - if (hash.hasOwnProperty(key)) { - var value = hash[key]; - evaluated[key] = typeof value === 'function' ? value() : value; + Breadcrumbs.id = 'Breadcrumbs'; + return Breadcrumbs; + }(); + /** + * Create a breadcrumb of `sentry` from the events themselves + */ + + function addSentryBreadcrumb(serializedData) { + // There's always something that can go wrong with deserialization... + try { + var event_1 = JSON.parse(serializedData); + getCurrentHub().addBreadcrumb({ + category: "sentry." + (event_1.type === 'transaction' ? 'transaction' : 'event'), + event_id: event_1.event_id, + level: event_1.level || Severity.fromString('error'), + message: getEventDescription(event_1) + }, { + event: event_1 + }); + } catch (_oO) { + logger.error('Error while adding sentry type breadcrumb'); + } + } + + var DEFAULT_KEY = 'cause'; + var DEFAULT_LIMIT = 5; + /** Adds SDK info to an event. */ + + var LinkedErrors = + /** @class */ + function () { + /** + * @inheritDoc + */ + function LinkedErrors(options) { + if (options === void 0) { + options = {}; + } + /** + * @inheritDoc + */ + + + this.name = LinkedErrors.id; + this._key = options.key || DEFAULT_KEY; + this._limit = options.limit || DEFAULT_LIMIT; + } + /** + * @inheritDoc + */ + + + LinkedErrors.prototype.setupOnce = function () { + addGlobalEventProcessor(function (event, hint) { + var self = getCurrentHub().getIntegration(LinkedErrors); + + if (self) { + return self._handler(event, hint); } + + return event; + }); + }; + /** + * @inheritDoc + */ + + + LinkedErrors.prototype._handler = function (event, hint) { + if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) { + return event; } - return evaluated; - }, - _logDebug: function _logDebug(level) { - // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change - if (this._originalConsoleMethods[level] && (this.debug || this._globalOptions.debug)) { - // In IE<10 console methods do not have their own 'apply' method - Function.prototype.apply.call(this._originalConsoleMethods[level], this._originalConsole, [].slice.call(arguments, 1)); + var linkedErrors = this._walkErrorTree(hint.originalException, this._key); + + event.exception.values = __spread(linkedErrors, event.exception.values); + return event; + }; + /** + * @inheritDoc + */ + + + LinkedErrors.prototype._walkErrorTree = function (error, key, stack) { + if (stack === void 0) { + stack = []; } - }, - _mergeContext: function _mergeContext(key, context) { - if (isUndefined$1(context)) { - delete this._globalContext[key]; - } else { - this._globalContext[key] = objectMerge$1(this._globalContext[key] || {}, context); + + if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) { + return stack; } + + var stacktrace = computeStackTrace(error[key]); + var exception = exceptionFromStacktrace(stacktrace); + return this._walkErrorTree(error[key], key, __spread([exception], stack)); + }; + /** + * @inheritDoc + */ + + + LinkedErrors.id = 'LinkedErrors'; + return LinkedErrors; + }(); + + var global$4 = getGlobalObject(); + /** UserAgent */ + + var UserAgent = + /** @class */ + function () { + function UserAgent() { + /** + * @inheritDoc + */ + this.name = UserAgent.id; } - }; // Deprecations + /** + * @inheritDoc + */ - Raven.prototype.setUser = Raven.prototype.setUserContext; - Raven.prototype.setReleaseContext = Raven.prototype.setRelease; - var raven = Raven; - /** - * Enforces a single instance of the Raven client, and the - * main entry point for Raven. If you are a consumer of the - * Raven library, you SHOULD load this file (vs raven.js). - **/ - // This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785) + UserAgent.prototype.setupOnce = function () { + addGlobalEventProcessor(function (event) { + if (getCurrentHub().getIntegration(UserAgent)) { + if (!global$4.navigator || !global$4.location) { + return event; + } // Request Interface: https://docs.sentry.io/development/sdk-dev/event-payloads/request/ - var _window$3 = typeof window !== 'undefined' ? window : typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof self !== 'undefined' ? self : {}; - var _Raven = _window$3.Raven; - var Raven$1 = new raven(); - /* - * Allow multiple versions of Raven to be installed. - * Strip Raven from the global context and returns the instance. - * - * @return {Raven} - */ + var request = event.request || {}; + request.url = request.url || global$4.location.href; + request.headers = request.headers || {}; + request.headers['User-Agent'] = global$4.navigator.userAgent; + return _assign({}, event, { + request: request + }); + } + + return event; + }); + }; + /** + * @inheritDoc + */ - Raven$1.noConflict = function () { - _window$3.Raven = _Raven; - return Raven$1; - }; - Raven$1.afterLoad(); - var singleton = Raven$1; + UserAgent.id = 'UserAgent'; + return UserAgent; + }(); + + var defaultIntegrations = [new InboundFilters(), new FunctionToString(), new TryCatch(), new Breadcrumbs(), new GlobalHandlers(), new LinkedErrors(), new UserAgent()]; /** - * DISCLAIMER: + * The Sentry Browser SDK Client. + * + * To use this SDK, call the {@link init} function as early as possible when + * loading the web page. To set context information or send manual events, use + * the provided methods. * - * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app. - * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it. - * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug. + * @example * - * It's called `Client' to be in-line with Raven Node implementation. + * ``` * - * HOWTO: + * import { init } from '@sentry/browser'; * - * import Raven from 'raven-js'; + * init({ + * dsn: '__DSN__', + * // ... + * }); + * ``` * - * const someAppReporter = new Raven.Client(); - * const someOtherAppReporter = new Raven.Client(); + * @example + * ``` * - * someAppReporter.config('__DSN__', { - * ...config goes here + * import { configureScope } from '@sentry/browser'; + * configureScope((scope: Scope) => { + * scope.setExtra({ battery: 0.7 }); + * scope.setTag({ user_mode: 'admin' }); + * scope.setUser({ id: '4711' }); * }); + * ``` + * + * @example + * ``` * - * someOtherAppReporter.config('__OTHER_DSN__', { - * ...config goes here + * import { addBreadcrumb } from '@sentry/browser'; + * addBreadcrumb({ + * message: 'My Breadcrumb', + * // ... * }); + * ``` * - * someAppReporter.captureMessage(...); - * someAppReporter.captureException(...); - * someAppReporter.captureBreadcrumb(...); + * @example * - * someOtherAppReporter.captureMessage(...); - * someOtherAppReporter.captureException(...); - * someOtherAppReporter.captureBreadcrumb(...); + * ``` * - * It should "just work". + * import * as Sentry from '@sentry/browser'; + * Sentry.captureMessage('Hello, world!'); + * Sentry.captureException(new Error('Good bye')); + * Sentry.captureEvent({ + * message: 'Manual', + * stacktrace: [ + * // ... + * ], + * }); + * ``` + * + * @see {@link BrowserOptions} for documentation on configuration options. */ - var Client = raven; - singleton.Client = Client; + function init(options) { + if (options === void 0) { + options = {}; + } + + if (options.defaultIntegrations === undefined) { + options.defaultIntegrations = defaultIntegrations; + } + + if (options.release === undefined) { + var window_1 = getGlobalObject(); // This supports the variable that sentry-webpack-plugin injects + + if (window_1.SENTRY_RELEASE && window_1.SENTRY_RELEASE.id) { + options.release = window_1.SENTRY_RELEASE.id; + } + } + + initAndBind(BrowserClient, options); + } + + var $find$1 = arrayIteration.find; + + - var internalFind = arrayMethods(5); var FIND = 'find'; var SKIPS_HOLES = true; + var USES_TO_LENGTH$9 = arrayMethodUsesToLength(FIND); + // Shouldn't skip holes if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); // `Array.prototype.find` method // https://tc39.github.io/ecma262/#sec-array.prototype.find - _export({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + _export({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH$9 }, { find: function find(callbackfn /* , that = undefined */) { - return internalFind(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -10312,20 +13794,32 @@ typeof navigator === "object" && (function () { var ltrim = RegExp('^' + whitespace + whitespace + '*'); var rtrim = RegExp(whitespace + whitespace + '*$'); - // 1 -> String#trimStart - // 2 -> String#trimEnd - // 3 -> String#trim - var stringTrim = function (string, TYPE) { - string = String(requireObjectCoercible(string)); - if (TYPE & 1) string = string.replace(ltrim, ''); - if (TYPE & 2) string = string.replace(rtrim, ''); - return string; + // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + var createMethod$4 = function (TYPE) { + return function ($this) { + var string = String(requireObjectCoercible($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; + }; + + var stringTrim = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart + start: createMethod$4(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.github.io/ecma262/#sec-string.prototype.trimend + end: createMethod$4(2), + // `String.prototype.trim` method + // https://tc39.github.io/ecma262/#sec-string.prototype.trim + trim: createMethod$4(3) }; - var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f; var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f; - var defineProperty$6 = objectDefineProperty.f; - + var defineProperty$9 = objectDefineProperty.f; + var trim = stringTrim.trim; var NUMBER = 'Number'; var NativeNumber = global_1[NUMBER]; @@ -10333,15 +13827,14 @@ typeof navigator === "object" && (function () { // Opera ~12 has broken Object#toString var BROKEN_CLASSOF = classofRaw(objectCreate(NumberPrototype)) == NUMBER; - var NATIVE_TRIM = 'trim' in String.prototype; // `ToNumber` abstract operation // https://tc39.github.io/ecma262/#sec-tonumber var toNumber = function (argument) { var it = toPrimitive(argument, false); - var first, third, radix, maxCode, digits, length, i, code; + var first, third, radix, maxCode, digits, length, index, code; if (typeof it == 'string' && it.length > 2) { - it = NATIVE_TRIM ? it.trim() : stringTrim(it, 3); + it = trim(it); first = it.charCodeAt(0); if (first === 43 || first === 45) { third = it.charCodeAt(2); @@ -10354,8 +13847,8 @@ typeof navigator === "object" && (function () { } digits = it.slice(2); length = digits.length; - for (i = 0; i < length; i++) { - code = digits.charCodeAt(i); + for (index = 0; index < length; index++) { + code = digits.charCodeAt(index); // parseInt parses a string to a first unavailable symbol // but ToNumber should return NaN if a string contains unavailable symbols if (code < 48 || code > maxCode) return NaN; @@ -10369,21 +13862,21 @@ typeof navigator === "object" && (function () { if (isForced_1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { var NumberWrapper = function Number(value) { var it = arguments.length < 1 ? 0 : value; - var that = this; - return that instanceof NumberWrapper + var dummy = this; + return dummy instanceof NumberWrapper // check on 1..constructor(foo) case - && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(that); }) : classofRaw(that) != NUMBER) - ? inheritIfRequired(new NativeNumber(toNumber(it)), that, NumberWrapper) : toNumber(it); + && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classofRaw(dummy) != NUMBER) + ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it); }; - for (var keys$2 = descriptors ? getOwnPropertyNames$1(NativeNumber) : ( + for (var keys$3 = descriptors ? getOwnPropertyNames$2(NativeNumber) : ( // ES3: 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES2015 (in case, if modules with ES2015 Number statics required before): 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' - ).split(','), j = 0, key; keys$2.length > j; j++) { - if (has(NativeNumber, key = keys$2[j]) && !has(NumberWrapper, key)) { - defineProperty$6(NumberWrapper, key, getOwnPropertyDescriptor$3(NativeNumber, key)); + ).split(','), j$1 = 0, key$1; keys$3.length > j$1; j$1++) { + if (has(NativeNumber, key$1 = keys$3[j$1]) && !has(NumberWrapper, key$1)) { + defineProperty$9(NumberWrapper, key$1, getOwnPropertyDescriptor$3(NativeNumber, key$1)); } } NumberWrapper.prototype = NumberPrototype; @@ -10400,37 +13893,43 @@ typeof navigator === "object" && (function () { } }); - // `Object.assign` method - // https://tc39.github.io/ecma262/#sec-object.assign - _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { - assign: objectAssign - }); - var propertyIsEnumerable = objectPropertyIsEnumerable.f; - // TO_ENTRIES: true -> Object.entries - // TO_ENTRIES: false -> Object.values - var objectToArray = function (it, TO_ENTRIES) { - var O = toIndexedObject(it); - var keys = objectKeys(O); - var length = keys.length; - var i = 0; - var result = []; - var key; - while (length > i) { - key = keys[i++]; - if (!descriptors || propertyIsEnumerable.call(O, key)) { - result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + // `Object.{ entries, values }` methods implementation + var createMethod$5 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!descriptors || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } } - } - return result; + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + entries: createMethod$5(true), + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + values: createMethod$5(false) }; + var $entries = objectToArray.entries; + // `Object.entries` method // https://tc39.github.io/ecma262/#sec-object.entries _export({ target: 'Object', stat: true }, { entries: function entries(O) { - return objectToArray(O, true); + return $entries(O); } }); @@ -10502,47 +14001,47 @@ typeof navigator === "object" && (function () { isNullOrUndefined = function isNullOrUndefined(e) { return null == e; }, - isObject$3 = function isObject(e) { + isObject$1 = function isObject(e) { return getConstructor(e) === Object; }, isNumber = function isNumber(e) { return getConstructor(e) === Number && !Number.isNaN(e); }, - isString$2 = function isString(e) { + isString$1 = function isString(e) { return getConstructor(e) === String; }, isBoolean = function isBoolean(e) { return getConstructor(e) === Boolean; }, - isFunction$2 = function isFunction(e) { + isFunction = function isFunction(e) { return getConstructor(e) === Function; }, - isArray$3 = function isArray(e) { + isArray$1 = function isArray(e) { return Array.isArray(e); }, isNodeList = function isNodeList(e) { return instanceOf(e, NodeList); }, - isElement = function isElement(e) { + isElement$1 = function isElement(e) { return instanceOf(e, Element); }, - isEvent = function isEvent(e) { + isEvent$1 = function isEvent(e) { return instanceOf(e, Event); }, isEmpty = function isEmpty(e) { - return isNullOrUndefined(e) || (isString$2(e) || isArray$3(e) || isNodeList(e)) && !e.length || isObject$3(e) && !Object.keys(e).length; + return isNullOrUndefined(e) || (isString$1(e) || isArray$1(e) || isNodeList(e)) && !e.length || isObject$1(e) && !Object.keys(e).length; }, is = { nullOrUndefined: isNullOrUndefined, - object: isObject$3, + object: isObject$1, number: isNumber, - string: isString$2, + string: isString$1, boolean: isBoolean, - function: isFunction$2, - array: isArray$3, + function: isFunction, + array: isArray$1, nodeList: isNodeList, - element: isElement, - event: isEvent, + element: isElement$1, + event: isEvent$1, empty: isEmpty }, constants = { @@ -10676,7 +14175,7 @@ typeof navigator === "object" && (function () { }.call(e, t); } - function wrap$1(e, t) { + function wrap$2(e, t) { var n = e.length ? e : [e]; Array.from(n).reverse().forEach(function (e, n) { var r = 0 < n ? t.cloneNode(!0) : t, @@ -10864,7 +14363,7 @@ typeof navigator === "object" && (function () { }, c = formatNumber(i); - r.format && (1e6 < i ? c = "".concat(a(1e6), "M") : 1e3 < i && (c = "".concat(a(1e3), "K"))), is.element(this.elements.count) ? this.elements.count.textContent = c : (wrap$1(this.elements.trigger, createElement("span", { + r.format && (1e6 < i ? c = "".concat(a(1e6), "M") : 1e3 < i && (c = "".concat(a(1e3), "K"))), is.element(this.elements.count) ? this.elements.count.textContent = c : (wrap$2(this.elements.trigger, createElement("span", { class: o.className })), this.elements.count = createElement("span", { class: "".concat(r.className, " ").concat(r.className, "--").concat(s) @@ -11037,7 +14536,7 @@ typeof navigator === "object" && (function () { return indexedObject$1(requireObjectCoercible$1(it)); }; - var isObject$4 = function (it) { + var isObject$2 = function (it) { return typeof it === 'object' ? it !== null : typeof it === 'function'; }; @@ -11046,11 +14545,11 @@ typeof navigator === "object" && (function () { // instead of the ES6 spec version, we didn't implement @@toPrimitive case // and the second argument - flag - preferred type is a string var toPrimitive$1 = function (input, PREFERRED_STRING) { - if (!isObject$4(input)) return input; + if (!isObject$2(input)) return input; var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject$4(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject$4(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject$4(val = fn.call(input))) return val; + if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject$2(val = fn.call(input))) return val; + if (typeof (fn = input.valueOf) == 'function' && !isObject$2(val = fn.call(input))) return val; + if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject$2(val = fn.call(input))) return val; throw TypeError("Can't convert object to primitive value"); }; @@ -11060,12 +14559,12 @@ typeof navigator === "object" && (function () { return hasOwnProperty$1.call(it, key); }; - var document$4 = global_1$1.document; + var document$3 = global_1$1.document; // typeof document.createElement is 'object' in old IE - var EXISTS = isObject$4(document$4) && isObject$4(document$4.createElement); + var EXISTS$1 = isObject$2(document$3) && isObject$2(document$3.createElement); var documentCreateElement$1 = function (it) { - return EXISTS ? document$4.createElement(it) : {}; + return EXISTS$1 ? document$3.createElement(it) : {}; }; // Thank's IE8 for his funny defineProperty @@ -11075,15 +14574,15 @@ typeof navigator === "object" && (function () { }).a != 7; }); - var nativeGetOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor; + var nativeGetOwnPropertyDescriptor$3 = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor - var f$9 = descriptors$1 ? nativeGetOwnPropertyDescriptor$2 : function getOwnPropertyDescriptor(O, P) { + var f$9 = descriptors$1 ? nativeGetOwnPropertyDescriptor$3 : function getOwnPropertyDescriptor(O, P) { O = toIndexedObject$1(O); P = toPrimitive$1(P, true); if (ie8DomDefine$1) try { - return nativeGetOwnPropertyDescriptor$2(O, P); + return nativeGetOwnPropertyDescriptor$3(O, P); } catch (error) { /* empty */ } if (has$2(O, P)) return createPropertyDescriptor$1(!objectPropertyIsEnumerable$1.f.call(O, P), O[P]); }; @@ -11093,7 +14592,7 @@ typeof navigator === "object" && (function () { }; var anObject$1 = function (it) { - if (!isObject$4(it)) { + if (!isObject$2(it)) { throw TypeError(String(it) + ' is not an object'); } return it; }; @@ -11118,7 +14617,7 @@ typeof navigator === "object" && (function () { f: f$a }; - var createNonEnumerableProperty = descriptors$1 ? function (object, key, value) { + var createNonEnumerableProperty$1 = descriptors$1 ? function (object, key, value) { return objectDefineProperty$1.f(object, key, createPropertyDescriptor$1(1, value)); } : function (object, key, value) { object[key] = value; @@ -11127,70 +14626,70 @@ typeof navigator === "object" && (function () { var setGlobal$1 = function (key, value) { try { - createNonEnumerableProperty(global_1$1, key, value); + createNonEnumerableProperty$1(global_1$1, key, value); } catch (error) { global_1$1[key] = value; } return value; }; - var SHARED = '__core-js_shared__'; - var store$2 = global_1$1[SHARED] || setGlobal$1(SHARED, {}); + var SHARED$1 = '__core-js_shared__'; + var store$2 = global_1$1[SHARED$1] || setGlobal$1(SHARED$1, {}); - var sharedStore = store$2; + var sharedStore$1 = store$2; var functionToString$1 = Function.toString; // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper - if (typeof sharedStore.inspectSource != 'function') { - sharedStore.inspectSource = function (it) { + if (typeof sharedStore$1.inspectSource != 'function') { + sharedStore$1.inspectSource = function (it) { return functionToString$1.call(it); }; } - var inspectSource = sharedStore.inspectSource; + var inspectSource$1 = sharedStore$1.inspectSource; var WeakMap$3 = global_1$1.WeakMap; - var nativeWeakMap$1 = typeof WeakMap$3 === 'function' && /native code/.test(inspectSource(WeakMap$3)); + var nativeWeakMap$1 = typeof WeakMap$3 === 'function' && /native code/.test(inspectSource$1(WeakMap$3)); var isPure$1 = false; var shared$1 = createCommonjsModule(function (module) { (module.exports = function (key, value) { - return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {}); + return sharedStore$1[key] || (sharedStore$1[key] = value !== undefined ? value : {}); })('versions', []).push({ - version: '3.6.4', + version: '3.6.5', mode: 'global', copyright: '© 2020 Denis Pushkarev (zloirock.ru)' }); }); - var id$1 = 0; + var id$2 = 0; var postfix$1 = Math.random(); var uid$1 = function (key) { - return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id$1 + postfix$1).toString(36); + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id$2 + postfix$1).toString(36); }; - var keys$3 = shared$1('keys'); + var keys$4 = shared$1('keys'); var sharedKey$1 = function (key) { - return keys$3[key] || (keys$3[key] = uid$1(key)); + return keys$4[key] || (keys$4[key] = uid$1(key)); }; var hiddenKeys$2 = {}; var WeakMap$4 = global_1$1.WeakMap; - var set$2, get$1, has$3; + var set$3, get$2, has$3; var enforce$1 = function (it) { - return has$3(it) ? get$1(it) : set$2(it, {}); + return has$3(it) ? get$2(it) : set$3(it, {}); }; var getterFor$1 = function (TYPE) { return function (it) { var state; - if (!isObject$4(it) || (state = get$1(it)).type !== TYPE) { + if (!isObject$2(it) || (state = get$2(it)).type !== TYPE) { throw TypeError('Incompatible receiver, ' + TYPE + ' required'); } return state; }; @@ -11201,11 +14700,11 @@ typeof navigator === "object" && (function () { var wmget$1 = store$3.get; var wmhas$1 = store$3.has; var wmset$1 = store$3.set; - set$2 = function (it, metadata) { + set$3 = function (it, metadata) { wmset$1.call(store$3, it, metadata); return metadata; }; - get$1 = function (it) { + get$2 = function (it) { return wmget$1.call(store$3, it) || {}; }; has$3 = function (it) { @@ -11214,11 +14713,11 @@ typeof navigator === "object" && (function () { } else { var STATE$1 = sharedKey$1('state'); hiddenKeys$2[STATE$1] = true; - set$2 = function (it, metadata) { - createNonEnumerableProperty(it, STATE$1, metadata); + set$3 = function (it, metadata) { + createNonEnumerableProperty$1(it, STATE$1, metadata); return metadata; }; - get$1 = function (it) { + get$2 = function (it) { return has$2(it, STATE$1) ? it[STATE$1] : {}; }; has$3 = function (it) { @@ -11227,8 +14726,8 @@ typeof navigator === "object" && (function () { } var internalState$1 = { - set: set$2, - get: get$1, + set: set$3, + get: get$2, has: has$3, enforce: enforce$1, getterFor: getterFor$1 @@ -11244,7 +14743,7 @@ typeof navigator === "object" && (function () { var simple = options ? !!options.enumerable : false; var noTargetGet = options ? !!options.noTargetGet : false; if (typeof value == 'function') { - if (typeof key == 'string' && !has$2(value, 'name')) createNonEnumerableProperty(value, 'name', key); + if (typeof key == 'string' && !has$2(value, 'name')) createNonEnumerableProperty$1(value, 'name', key); enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); } if (O === global_1$1) { @@ -11257,10 +14756,10 @@ typeof navigator === "object" && (function () { simple = true; } if (simple) O[key] = value; - else createNonEnumerableProperty(O, key, value); + else createNonEnumerableProperty$1(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative })(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || inspectSource(this); + return typeof this == 'function' && getInternalState(this).source || inspectSource$1(this); }); }); @@ -11276,35 +14775,35 @@ typeof navigator === "object" && (function () { }; var ceil$1 = Math.ceil; - var floor$3 = Math.floor; + var floor$6 = Math.floor; // `ToInteger` abstract operation // https://tc39.github.io/ecma262/#sec-tointeger var toInteger$1 = function (argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor$3 : ceil$1)(argument); + return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor$6 : ceil$1)(argument); }; - var min$5 = Math.min; + var min$7 = Math.min; // `ToLength` abstract operation // https://tc39.github.io/ecma262/#sec-tolength var toLength$1 = function (argument) { - return argument > 0 ? min$5(toInteger$1(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + return argument > 0 ? min$7(toInteger$1(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 }; var max$4 = Math.max; - var min$6 = Math.min; + var min$8 = Math.min; // Helper for a popular repeating case of the spec: // Let integer be ? ToInteger(index). // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). var toAbsoluteIndex$1 = function (index, length) { var integer = toInteger$1(index); - return integer < 0 ? max$4(integer + length, 0) : min$6(integer, length); + return integer < 0 ? max$4(integer + length, 0) : min$8(integer, length); }; // `Array.prototype.{ indexOf, includes }` methods implementation - var createMethod = function (IS_INCLUDES) { + var createMethod$6 = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIndexedObject$1($this); var length = toLength$1(O.length); @@ -11323,16 +14822,16 @@ typeof navigator === "object" && (function () { }; }; - var arrayIncludes$2 = { + var arrayIncludes$1 = { // `Array.prototype.includes` method // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), + includes: createMethod$6(true), // `Array.prototype.indexOf` method // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) + indexOf: createMethod$6(false) }; - var indexOf = arrayIncludes$2.indexOf; + var indexOf$1 = arrayIncludes$1.indexOf; var objectKeysInternal$1 = function (object, names) { @@ -11343,7 +14842,7 @@ typeof navigator === "object" && (function () { for (key in O) !has$2(hiddenKeys$2, key) && has$2(O, key) && result.push(key); // Don't enum bug & hidden keys while (names.length > i) if (has$2(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); + ~indexOf$1(result, key) || result.push(key); } return result; }; @@ -11397,14 +14896,14 @@ typeof navigator === "object" && (function () { var replacement$1 = /#|\.prototype\./; var isForced$1 = function (feature, detection) { - var value = data$1[normalize$1(feature)]; + var value = data$1[normalize$2(feature)]; return value == POLYFILL$1 ? true : value == NATIVE$1 ? false : typeof detection == 'function' ? fails$1(detection) : !!detection; }; - var normalize$1 = isForced$1.normalize = function (string) { + var normalize$2 = isForced$1.normalize = function (string) { return String(string).replace(replacement$1, '.').toLowerCase(); }; @@ -11461,7 +14960,7 @@ typeof navigator === "object" && (function () { } // add a flag to not completely full polyfills if (options.sham || (targetProperty && targetProperty.sham)) { - createNonEnumerableProperty(sourceProperty, 'sham', true); + createNonEnumerableProperty$1(sourceProperty, 'sham', true); } // extend global redefine$1(target, key, sourceProperty, options); @@ -11470,7 +14969,7 @@ typeof navigator === "object" && (function () { // `IsArray` abstract operation // https://tc39.github.io/ecma262/#sec-isarray - var isArray$4 = Array.isArray || function isArray(arg) { + var isArray$2 = Array.isArray || function isArray(arg) { return classofRaw$1(arg) == 'Array'; }; @@ -11492,21 +14991,21 @@ typeof navigator === "object" && (function () { return !String(Symbol()); }); - var useSymbolAsUid = nativeSymbol$1 + var useSymbolAsUid$1 = nativeSymbol$1 // eslint-disable-next-line no-undef && !Symbol.sham // eslint-disable-next-line no-undef && typeof Symbol.iterator == 'symbol'; - var WellKnownSymbolsStore$1 = shared$1('wks'); + var WellKnownSymbolsStore$2 = shared$1('wks'); var Symbol$2 = global_1$1.Symbol; - var createWellKnownSymbol = useSymbolAsUid ? Symbol$2 : Symbol$2 && Symbol$2.withoutSetter || uid$1; + var createWellKnownSymbol$1 = useSymbolAsUid$1 ? Symbol$2 : Symbol$2 && Symbol$2.withoutSetter || uid$1; var wellKnownSymbol$1 = function (name) { - if (!has$2(WellKnownSymbolsStore$1, name)) { - if (nativeSymbol$1 && has$2(Symbol$2, name)) WellKnownSymbolsStore$1[name] = Symbol$2[name]; - else WellKnownSymbolsStore$1[name] = createWellKnownSymbol('Symbol.' + name); - } return WellKnownSymbolsStore$1[name]; + if (!has$2(WellKnownSymbolsStore$2, name)) { + if (nativeSymbol$1 && has$2(Symbol$2, name)) WellKnownSymbolsStore$2[name] = Symbol$2[name]; + else WellKnownSymbolsStore$2[name] = createWellKnownSymbol$1('Symbol.' + name); + } return WellKnownSymbolsStore$2[name]; }; var SPECIES$7 = wellKnownSymbol$1('species'); @@ -11515,36 +15014,36 @@ typeof navigator === "object" && (function () { // https://tc39.github.io/ecma262/#sec-arrayspeciescreate var arraySpeciesCreate$1 = function (originalArray, length) { var C; - if (isArray$4(originalArray)) { + if (isArray$2(originalArray)) { C = originalArray.constructor; // cross-realm fallback - if (typeof C == 'function' && (C === Array || isArray$4(C.prototype))) C = undefined; - else if (isObject$4(C)) { + if (typeof C == 'function' && (C === Array || isArray$2(C.prototype))) C = undefined; + else if (isObject$2(C)) { C = C[SPECIES$7]; if (C === null) C = undefined; } } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); }; - var engineUserAgent = getBuiltIn$1('navigator', 'userAgent') || ''; + var engineUserAgent$1 = getBuiltIn$1('navigator', 'userAgent') || ''; - var process$3 = global_1$1.process; - var versions$1 = process$3 && process$3.versions; + var process$5 = global_1$1.process; + var versions$1 = process$5 && process$5.versions; var v8$1 = versions$1 && versions$1.v8; - var match, version; + var match$1, version$1; if (v8$1) { - match = v8$1.split('.'); - version = match[0] + match[1]; - } else if (engineUserAgent) { - match = engineUserAgent.match(/Edge\/(\d+)/); - if (!match || match[1] >= 74) { - match = engineUserAgent.match(/Chrome\/(\d+)/); - if (match) version = match[1]; + match$1 = v8$1.split('.'); + version$1 = match$1[0] + match$1[1]; + } else if (engineUserAgent$1) { + match$1 = engineUserAgent$1.match(/Edge\/(\d+)/); + if (!match$1 || match$1[1] >= 74) { + match$1 = engineUserAgent$1.match(/Chrome\/(\d+)/); + if (match$1) version$1 = match$1[1]; } } - var engineV8Version = version && +version; + var engineV8Version$1 = version$1 && +version$1; var SPECIES$8 = wellKnownSymbol$1('species'); @@ -11552,7 +15051,7 @@ typeof navigator === "object" && (function () { // We can't use this feature detection in V8 since it causes // deoptimization and serious performance degradation // https://github.com/zloirock/core-js/issues/677 - return engineV8Version >= 51 || !fails$1(function () { + return engineV8Version$1 >= 51 || !fails$1(function () { var array = []; var constructor = array.constructor = {}; constructor[SPECIES$8] = function () { @@ -11569,26 +15068,26 @@ typeof navigator === "object" && (function () { // We can't use this feature detection in V8 since it causes // deoptimization and serious performance degradation // https://github.com/zloirock/core-js/issues/679 - var IS_CONCAT_SPREADABLE_SUPPORT$1 = engineV8Version >= 51 || !fails$1(function () { + var IS_CONCAT_SPREADABLE_SUPPORT$1 = engineV8Version$1 >= 51 || !fails$1(function () { var array = []; array[IS_CONCAT_SPREADABLE$1] = false; return array.concat()[0] !== array; }); - var SPECIES_SUPPORT$5 = arrayMethodHasSpeciesSupport$1('concat'); + var SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$1('concat'); var isConcatSpreadable$1 = function (O) { - if (!isObject$4(O)) return false; + if (!isObject$2(O)) return false; var spreadable = O[IS_CONCAT_SPREADABLE$1]; - return spreadable !== undefined ? !!spreadable : isArray$4(O); + return spreadable !== undefined ? !!spreadable : isArray$2(O); }; - var FORCED$6 = !IS_CONCAT_SPREADABLE_SUPPORT$1 || !SPECIES_SUPPORT$5; + var FORCED$8 = !IS_CONCAT_SPREADABLE_SUPPORT$1 || !SPECIES_SUPPORT$1; // `Array.prototype.concat` method // https://tc39.github.io/ecma262/#sec-array.prototype.concat // with adding support of @@isConcatSpreadable and @@species - _export$1({ target: 'Array', proto: true, forced: FORCED$6 }, { + _export$1({ target: 'Array', proto: true, forced: FORCED$8 }, { concat: function concat(arg) { // eslint-disable-line no-unused-vars var O = toObject$1(this); var A = arraySpeciesCreate$1(O, 0); @@ -11617,7 +15116,7 @@ typeof navigator === "object" && (function () { }; // optional / simple context binding - var functionBindContext = function (fn, that, length) { + var functionBindContext$1 = function (fn, that, length) { aFunction$3(fn); if (that === undefined) return fn; switch (length) { @@ -11639,10 +15138,10 @@ typeof navigator === "object" && (function () { }; }; - var push = [].push; + var push$1 = [].push; // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation - var createMethod$1 = function (TYPE) { + var createMethod$7 = function (TYPE) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; @@ -11652,7 +15151,7 @@ typeof navigator === "object" && (function () { return function ($this, callbackfn, that, specificCreate) { var O = toObject$1($this); var self = indexedObject$1(O); - var boundFunction = functionBindContext(callbackfn, that, 3); + var boundFunction = functionBindContext$1(callbackfn, that, 3); var length = toLength$1(self.length); var index = 0; var create = specificCreate || arraySpeciesCreate$1; @@ -11667,7 +15166,7 @@ typeof navigator === "object" && (function () { case 3: return true; // some case 5: return value; // find case 6: return index; // findIndex - case 2: push.call(target, value); // filter + case 2: push$1.call(target, value); // filter } else if (IS_EVERY) return false; // every } } @@ -11675,68 +15174,68 @@ typeof navigator === "object" && (function () { }; }; - var arrayIteration = { + var arrayIteration$1 = { // `Array.prototype.forEach` method // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - forEach: createMethod$1(0), + forEach: createMethod$7(0), // `Array.prototype.map` method // https://tc39.github.io/ecma262/#sec-array.prototype.map - map: createMethod$1(1), + map: createMethod$7(1), // `Array.prototype.filter` method // https://tc39.github.io/ecma262/#sec-array.prototype.filter - filter: createMethod$1(2), + filter: createMethod$7(2), // `Array.prototype.some` method // https://tc39.github.io/ecma262/#sec-array.prototype.some - some: createMethod$1(3), + some: createMethod$7(3), // `Array.prototype.every` method // https://tc39.github.io/ecma262/#sec-array.prototype.every - every: createMethod$1(4), + every: createMethod$7(4), // `Array.prototype.find` method // https://tc39.github.io/ecma262/#sec-array.prototype.find - find: createMethod$1(5), + find: createMethod$7(5), // `Array.prototype.findIndex` method // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - findIndex: createMethod$1(6) + findIndex: createMethod$7(6) }; - var defineProperty$7 = Object.defineProperty; - var cache = {}; + var defineProperty$a = Object.defineProperty; + var cache$1 = {}; - var thrower = function (it) { throw it; }; + var thrower$1 = function (it) { throw it; }; - var arrayMethodUsesToLength = function (METHOD_NAME, options) { - if (has$2(cache, METHOD_NAME)) return cache[METHOD_NAME]; + var arrayMethodUsesToLength$1 = function (METHOD_NAME, options) { + if (has$2(cache$1, METHOD_NAME)) return cache$1[METHOD_NAME]; if (!options) options = {}; var method = [][METHOD_NAME]; var ACCESSORS = has$2(options, 'ACCESSORS') ? options.ACCESSORS : false; - var argument0 = has$2(options, 0) ? options[0] : thrower; + var argument0 = has$2(options, 0) ? options[0] : thrower$1; var argument1 = has$2(options, 1) ? options[1] : undefined; - return cache[METHOD_NAME] = !!method && !fails$1(function () { + return cache$1[METHOD_NAME] = !!method && !fails$1(function () { if (ACCESSORS && !descriptors$1) return true; var O = { length: -1 }; - if (ACCESSORS) defineProperty$7(O, 1, { enumerable: true, get: thrower }); + if (ACCESSORS) defineProperty$a(O, 1, { enumerable: true, get: thrower$1 }); else O[1] = 1; method.call(O, argument0, argument1); }); }; - var $filter = arrayIteration.filter; + var $filter$2 = arrayIteration$1.filter; - var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$1('filter'); + var HAS_SPECIES_SUPPORT$4 = arrayMethodHasSpeciesSupport$1('filter'); // Edge 14- issue - var USES_TO_LENGTH = arrayMethodUsesToLength('filter'); + var USES_TO_LENGTH$a = arrayMethodUsesToLength$1('filter'); // `Array.prototype.filter` method // https://tc39.github.io/ecma262/#sec-array.prototype.filter // with adding support of @@species - _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, { + _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$4 || !USES_TO_LENGTH$a }, { filter: function filter(callbackfn /* , thisArg */) { - return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $filter$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -11760,21 +15259,21 @@ typeof navigator === "object" && (function () { var html$1 = getBuiltIn$1('document', 'documentElement'); - var GT = '>'; - var LT = '<'; - var PROTOTYPE$2 = 'prototype'; - var SCRIPT = 'script'; + var GT$1 = '>'; + var LT$1 = '<'; + var PROTOTYPE$3 = 'prototype'; + var SCRIPT$1 = 'script'; var IE_PROTO$2 = sharedKey$1('IE_PROTO'); - var EmptyConstructor = function () { /* empty */ }; + var EmptyConstructor$1 = function () { /* empty */ }; - var scriptTag = function (content) { - return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + var scriptTag$1 = function (content) { + return LT$1 + SCRIPT$1 + GT$1 + content + LT$1 + '/' + SCRIPT$1 + GT$1; }; // Create object with fake `null` prototype: use ActiveX Object with cleared prototype - var NullProtoObjectViaActiveX = function (activeXDocument) { - activeXDocument.write(scriptTag('')); + var NullProtoObjectViaActiveX$1 = function (activeXDocument) { + activeXDocument.write(scriptTag$1('')); activeXDocument.close(); var temp = activeXDocument.parentWindow.Object; activeXDocument = null; // avoid memory leak @@ -11782,10 +15281,10 @@ typeof navigator === "object" && (function () { }; // Create object with fake `null` prototype: use iframe Object with cleared prototype - var NullProtoObjectViaIFrame = function () { + var NullProtoObjectViaIFrame$1 = function () { // Thrash, waste and sodomy: IE GC bug var iframe = documentCreateElement$1('iframe'); - var JS = 'java' + SCRIPT + ':'; + var JS = 'java' + SCRIPT$1 + ':'; var iframeDocument; iframe.style.display = 'none'; html$1.appendChild(iframe); @@ -11793,7 +15292,7 @@ typeof navigator === "object" && (function () { iframe.src = String(JS); iframeDocument = iframe.contentWindow.document; iframeDocument.open(); - iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.write(scriptTag$1('document.F=Object')); iframeDocument.close(); return iframeDocument.F; }; @@ -11803,16 +15302,16 @@ typeof navigator === "object" && (function () { // see https://github.com/es-shims/es5-shim/issues/150 // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 // avoid IE GC bug - var activeXDocument; - var NullProtoObject = function () { + var activeXDocument$1; + var NullProtoObject$1 = function () { try { /* global ActiveXObject */ - activeXDocument = document.domain && new ActiveXObject('htmlfile'); + activeXDocument$1 = document.domain && new ActiveXObject('htmlfile'); } catch (error) { /* ignore */ } - NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); + NullProtoObject$1 = activeXDocument$1 ? NullProtoObjectViaActiveX$1(activeXDocument$1) : NullProtoObjectViaIFrame$1(); var length = enumBugKeys$1.length; - while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys$1[length]]; - return NullProtoObject(); + while (length--) delete NullProtoObject$1[PROTOTYPE$3][enumBugKeys$1[length]]; + return NullProtoObject$1(); }; hiddenKeys$2[IE_PROTO$2] = true; @@ -11822,12 +15321,12 @@ typeof navigator === "object" && (function () { var objectCreate$1 = Object.create || function create(O, Properties) { var result; if (O !== null) { - EmptyConstructor[PROTOTYPE$2] = anObject$1(O); - result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE$2] = null; + EmptyConstructor$1[PROTOTYPE$3] = anObject$1(O); + result = new EmptyConstructor$1(); + EmptyConstructor$1[PROTOTYPE$3] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO$2] = O; - } else result = NullProtoObject(); + } else result = NullProtoObject$1(); return Properties === undefined ? result : objectDefineProperties$1(result, Properties); }; @@ -11848,23 +15347,23 @@ typeof navigator === "object" && (function () { ArrayPrototype$2[UNSCOPABLES$1][key] = true; }; - var $find = arrayIteration.find; + var $find$2 = arrayIteration$1.find; var FIND$1 = 'find'; var SKIPS_HOLES$1 = true; - var USES_TO_LENGTH$1 = arrayMethodUsesToLength(FIND$1); + var USES_TO_LENGTH$b = arrayMethodUsesToLength$1(FIND$1); // Shouldn't skip holes if (FIND$1 in []) Array(1)[FIND$1](function () { SKIPS_HOLES$1 = false; }); // `Array.prototype.find` method // https://tc39.github.io/ecma262/#sec-array.prototype.find - _export$1({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 || !USES_TO_LENGTH$1 }, { + _export$1({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 || !USES_TO_LENGTH$b }, { find: function find(callbackfn /* , that = undefined */) { - return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $find$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -11898,7 +15397,7 @@ typeof navigator === "object" && (function () { test$1[TO_STRING_TAG$5] = 'z'; - var toStringTagSupport = String(test$1) === '[object z]'; + var toStringTagSupport$1 = String(test$1) === '[object z]'; var TO_STRING_TAG$6 = wellKnownSymbol$1('toStringTag'); // ES3 wrong here @@ -11912,7 +15411,7 @@ typeof navigator === "object" && (function () { }; // getting tag from ES6+ `Object.prototype.toString` - var classof$1 = toStringTagSupport ? classofRaw$1 : function (it) { + var classof$1 = toStringTagSupport$1 ? classofRaw$1 : function (it) { var O, tag, result; return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case @@ -11942,7 +15441,7 @@ typeof navigator === "object" && (function () { var iteratorMethod = getIteratorMethod$1(O); var index = 0; var length, result, step, iterator, next, value; - if (mapping) mapfn = functionBindContext(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + if (mapping) mapfn = functionBindContext$1(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); // if the target is not iterable or it's an array with the default iterator - use a simple case if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod$1(iteratorMethod))) { iterator = iteratorMethod.call(O); @@ -12011,17 +15510,17 @@ typeof navigator === "object" && (function () { from: arrayFrom$1 }); - var $includes = arrayIncludes$2.includes; + var $includes$2 = arrayIncludes$1.includes; - var USES_TO_LENGTH$2 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + var USES_TO_LENGTH$c = arrayMethodUsesToLength$1('indexOf', { ACCESSORS: true, 1: 0 }); // `Array.prototype.includes` method // https://tc39.github.io/ecma262/#sec-array.prototype.includes - _export$1({ target: 'Array', proto: true, forced: !USES_TO_LENGTH$2 }, { + _export$1({ target: 'Array', proto: true, forced: !USES_TO_LENGTH$c }, { includes: function includes(el /* , fromIndex = 0 */) { - return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + return $includes$2(this, el, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -12070,7 +15569,7 @@ typeof navigator === "object" && (function () { // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() if ( !has$2(IteratorPrototype$3, ITERATOR$c)) { - createNonEnumerableProperty(IteratorPrototype$3, ITERATOR$c, returnThis$3); + createNonEnumerableProperty$1(IteratorPrototype$3, ITERATOR$c, returnThis$3); } var iteratorsCore$1 = { @@ -12078,7 +15577,7 @@ typeof navigator === "object" && (function () { BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$2 }; - var defineProperty$8 = objectDefineProperty$1.f; + var defineProperty$b = objectDefineProperty$1.f; @@ -12086,7 +15585,7 @@ typeof navigator === "object" && (function () { var setToStringTag$1 = function (it, TAG, STATIC) { if (it && !has$2(it = STATIC ? it : it.prototype, TO_STRING_TAG$7)) { - defineProperty$8(it, TO_STRING_TAG$7, { configurable: true, value: TAG }); + defineProperty$b(it, TO_STRING_TAG$7, { configurable: true, value: TAG }); } }; @@ -12106,8 +15605,8 @@ typeof navigator === "object" && (function () { return IteratorConstructor; }; - var aPossiblePrototype = function (it) { - if (!isObject$4(it) && it !== null) { + var aPossiblePrototype$1 = function (it) { + if (!isObject$2(it) && it !== null) { throw TypeError("Can't set " + String(it) + ' as a prototype'); } return it; }; @@ -12127,7 +15626,7 @@ typeof navigator === "object" && (function () { } catch (error) { /* empty */ } return function setPrototypeOf(O, proto) { anObject$1(O); - aPossiblePrototype(proto); + aPossiblePrototype$1(proto); if (CORRECT_SETTER) setter.call(O, proto); else O.__proto__ = proto; return O; @@ -12174,7 +15673,7 @@ typeof navigator === "object" && (function () { if (objectSetPrototypeOf$1) { objectSetPrototypeOf$1(CurrentIteratorPrototype, IteratorPrototype$5); } else if (typeof CurrentIteratorPrototype[ITERATOR$d] != 'function') { - createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$d, returnThis$5); + createNonEnumerableProperty$1(CurrentIteratorPrototype, ITERATOR$d, returnThis$5); } } // Set @@toStringTag to native iterators @@ -12190,7 +15689,7 @@ typeof navigator === "object" && (function () { // define iterator if ( IterablePrototype[ITERATOR$d] !== defaultIterator) { - createNonEnumerableProperty(IterablePrototype, ITERATOR$d, defaultIterator); + createNonEnumerableProperty$1(IterablePrototype, ITERATOR$d, defaultIterator); } iterators$1[NAME] = defaultIterator; @@ -12212,8 +15711,8 @@ typeof navigator === "object" && (function () { }; var ARRAY_ITERATOR$1 = 'Array Iterator'; - var setInternalState$6 = internalState$1.set; - var getInternalState$4 = internalState$1.getterFor(ARRAY_ITERATOR$1); + var setInternalState$9 = internalState$1.set; + var getInternalState$5 = internalState$1.getterFor(ARRAY_ITERATOR$1); // `Array.prototype.entries` method // https://tc39.github.io/ecma262/#sec-array.prototype.entries @@ -12226,7 +15725,7 @@ typeof navigator === "object" && (function () { // `CreateArrayIterator` internal method // https://tc39.github.io/ecma262/#sec-createarrayiterator var es_array_iterator$1 = defineIterator$1(Array, 'Array', function (iterated, kind) { - setInternalState$6(this, { + setInternalState$9(this, { type: ARRAY_ITERATOR$1, target: toIndexedObject$1(iterated), // target index: 0, // next index @@ -12235,7 +15734,7 @@ typeof navigator === "object" && (function () { // `%ArrayIteratorPrototype%.next` method // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next }, function () { - var state = getInternalState$4(this); + var state = getInternalState$5(this); var target = state.target; var kind = state.kind; var index = state.index++; @@ -12258,7 +15757,7 @@ typeof navigator === "object" && (function () { addToUnscopables$1('values'); addToUnscopables$1('entries'); - var arrayMethodIsStrict = function (METHOD_NAME, argument) { + var arrayMethodIsStrict$1 = function (METHOD_NAME, argument) { var method = [][METHOD_NAME]; return !!method && fails$1(function () { // eslint-disable-next-line no-useless-call,no-throw-literal @@ -12269,30 +15768,30 @@ typeof navigator === "object" && (function () { var nativeJoin$1 = [].join; var ES3_STRINGS$1 = indexedObject$1 != Object; - var STRICT_METHOD = arrayMethodIsStrict('join', ','); + var STRICT_METHOD$5 = arrayMethodIsStrict$1('join', ','); // `Array.prototype.join` method // https://tc39.github.io/ecma262/#sec-array.prototype.join - _export$1({ target: 'Array', proto: true, forced: ES3_STRINGS$1 || !STRICT_METHOD }, { + _export$1({ target: 'Array', proto: true, forced: ES3_STRINGS$1 || !STRICT_METHOD$5 }, { join: function join(separator) { return nativeJoin$1.call(toIndexedObject$1(this), separator === undefined ? ',' : separator); } }); - var $map = arrayIteration.map; + var $map$2 = arrayIteration$1.map; - var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$1('map'); + var HAS_SPECIES_SUPPORT$5 = arrayMethodHasSpeciesSupport$1('map'); // FF49- issue - var USES_TO_LENGTH$3 = arrayMethodUsesToLength('map'); + var USES_TO_LENGTH$d = arrayMethodUsesToLength$1('map'); // `Array.prototype.map` method // https://tc39.github.io/ecma262/#sec-array.prototype.map // with adding support of @@species - _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 || !USES_TO_LENGTH$3 }, { + _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$5 || !USES_TO_LENGTH$d }, { map: function map(callbackfn /* , thisArg */) { - return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $map$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -12305,7 +15804,7 @@ typeof navigator === "object" && (function () { // we haven't completely correct pre-ES6 way for getting `new.target`, so use this typeof (NewTarget = dummy.constructor) == 'function' && NewTarget !== Wrapper && - isObject$4(NewTargetPrototype = NewTarget.prototype) && + isObject$2(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype ) objectSetPrototypeOf$1($this, NewTargetPrototype); return $this; @@ -12320,7 +15819,7 @@ typeof navigator === "object" && (function () { var rtrim$1 = RegExp(whitespace$1 + whitespace$1 + '*$'); // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation - var createMethod$2 = function (TYPE) { + var createMethod$8 = function (TYPE) { return function ($this) { var string = String(requireObjectCoercible$1($this)); if (TYPE & 1) string = string.replace(ltrim$1, ''); @@ -12332,19 +15831,19 @@ typeof navigator === "object" && (function () { var stringTrim$1 = { // `String.prototype.{ trimLeft, trimStart }` methods // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart - start: createMethod$2(1), + start: createMethod$8(1), // `String.prototype.{ trimRight, trimEnd }` methods // https://tc39.github.io/ecma262/#sec-string.prototype.trimend - end: createMethod$2(2), + end: createMethod$8(2), // `String.prototype.trim` method // https://tc39.github.io/ecma262/#sec-string.prototype.trim - trim: createMethod$2(3) + trim: createMethod$8(3) }; - var getOwnPropertyNames$2 = objectGetOwnPropertyNames$1.f; + var getOwnPropertyNames$3 = objectGetOwnPropertyNames$1.f; var getOwnPropertyDescriptor$6 = objectGetOwnPropertyDescriptor$1.f; - var defineProperty$9 = objectDefineProperty$1.f; - var trim = stringTrim$1.trim; + var defineProperty$c = objectDefineProperty$1.f; + var trim$1 = stringTrim$1.trim; var NUMBER$1 = 'Number'; var NativeNumber$1 = global_1$1[NUMBER$1]; @@ -12359,7 +15858,7 @@ typeof navigator === "object" && (function () { var it = toPrimitive$1(argument, false); var first, third, radix, maxCode, digits, length, index, code; if (typeof it == 'string' && it.length > 2) { - it = trim(it); + it = trim$1(it); first = it.charCodeAt(0); if (first === 43 || first === 45) { third = it.charCodeAt(2); @@ -12393,15 +15892,15 @@ typeof navigator === "object" && (function () { && (BROKEN_CLASSOF$1 ? fails$1(function () { NumberPrototype$1.valueOf.call(dummy); }) : classofRaw$1(dummy) != NUMBER$1) ? inheritIfRequired$1(new NativeNumber$1(toNumber$1(it)), dummy, NumberWrapper$1) : toNumber$1(it); }; - for (var keys$4 = descriptors$1 ? getOwnPropertyNames$2(NativeNumber$1) : ( + for (var keys$5 = descriptors$1 ? getOwnPropertyNames$3(NativeNumber$1) : ( // ES3: 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES2015 (in case, if modules with ES2015 Number statics required before): 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' - ).split(','), j$1 = 0, key$1; keys$4.length > j$1; j$1++) { - if (has$2(NativeNumber$1, key$1 = keys$4[j$1]) && !has$2(NumberWrapper$1, key$1)) { - defineProperty$9(NumberWrapper$1, key$1, getOwnPropertyDescriptor$6(NativeNumber$1, key$1)); + ).split(','), j$2 = 0, key$2; keys$5.length > j$2; j$2++) { + if (has$2(NativeNumber$1, key$2 = keys$5[j$2]) && !has$2(NumberWrapper$1, key$2)) { + defineProperty$c(NumberWrapper$1, key$2, getOwnPropertyDescriptor$6(NativeNumber$1, key$2)); } } NumberWrapper$1.prototype = NumberPrototype$1; @@ -12421,13 +15920,13 @@ typeof navigator === "object" && (function () { // `Object.prototype.toString` method implementation // https://tc39.github.io/ecma262/#sec-object.prototype.tostring - var objectToString$1 = toStringTagSupport ? {}.toString : function toString() { + var objectToString$1 = toStringTagSupport$1 ? {}.toString : function toString() { return '[object ' + classof$1(this) + ']'; }; // `Object.prototype.toString` method // https://tc39.github.io/ecma262/#sec-object.prototype.tostring - if (!toStringTagSupport) { + if (!toStringTagSupport$1) { redefine$1(Object.prototype, 'toString', objectToString$1, { unsafe: true }); } @@ -12447,27 +15946,27 @@ typeof navigator === "object" && (function () { // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError, // so we use an intermediate function. - function RE(s, f) { + function RE$1(s, f) { return RegExp(s, f); } - var UNSUPPORTED_Y = fails$1(function () { + var UNSUPPORTED_Y$3 = fails$1(function () { // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError - var re = RE('a', 'y'); + var re = RE$1('a', 'y'); re.lastIndex = 2; return re.exec('abcd') != null; }); - var BROKEN_CARET = fails$1(function () { + var BROKEN_CARET$1 = fails$1(function () { // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 - var re = RE('^r', 'gy'); + var re = RE$1('^r', 'gy'); re.lastIndex = 2; return re.exec('str') != null; }); - var regexpStickyHelpers = { - UNSUPPORTED_Y: UNSUPPORTED_Y, - BROKEN_CARET: BROKEN_CARET + var regexpStickyHelpers$1 = { + UNSUPPORTED_Y: UNSUPPORTED_Y$3, + BROKEN_CARET: BROKEN_CARET$1 }; var nativeExec$1 = RegExp.prototype.exec; @@ -12486,18 +15985,18 @@ typeof navigator === "object" && (function () { return re1.lastIndex !== 0 || re2.lastIndex !== 0; })(); - var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y || regexpStickyHelpers.BROKEN_CARET; + var UNSUPPORTED_Y$4 = regexpStickyHelpers$1.UNSUPPORTED_Y || regexpStickyHelpers$1.BROKEN_CARET; // nonparticipating capturing group, copied from es5-shim's String#split patch. var NPCG_INCLUDED$1 = /()??/.exec('')[1] !== undefined; - var PATCH$1 = UPDATES_LAST_INDEX_WRONG$1 || NPCG_INCLUDED$1 || UNSUPPORTED_Y$1; + var PATCH$1 = UPDATES_LAST_INDEX_WRONG$1 || NPCG_INCLUDED$1 || UNSUPPORTED_Y$4; if (PATCH$1) { patchedExec$1 = function exec(str) { var re = this; var lastIndex, reCopy, match, i; - var sticky = UNSUPPORTED_Y$1 && re.sticky; + var sticky = UNSUPPORTED_Y$4 && re.sticky; var flags = regexpFlags$1.call(re); var source = re.source; var charsAdded = 0; @@ -12584,10 +16083,10 @@ typeof navigator === "object" && (function () { // https://tc39.github.io/ecma262/#sec-isregexp var isRegexp$1 = function (it) { var isRegExp; - return isObject$4(it) && ((isRegExp = it[MATCH$3]) !== undefined ? !!isRegExp : classofRaw$1(it) == 'RegExp'); + return isObject$2(it) && ((isRegExp = it[MATCH$3]) !== undefined ? !!isRegExp : classofRaw$1(it) == 'RegExp'); }; - var notARegexp = function (it) { + var notARegexp$1 = function (it) { if (isRegexp$1(it)) { throw TypeError("The method doesn't accept regular expressions"); } return it; @@ -12612,12 +16111,12 @@ typeof navigator === "object" && (function () { _export$1({ target: 'String', proto: true, forced: !correctIsRegexpLogic$1('includes') }, { includes: function includes(searchString /* , position = 0 */) { return !!~String(requireObjectCoercible$1(this)) - .indexOf(notARegexp(searchString), arguments.length > 1 ? arguments[1] : undefined); + .indexOf(notARegexp$1(searchString), arguments.length > 1 ? arguments[1] : undefined); } }); // `String.prototype.{ codePointAt, at }` methods implementation - var createMethod$3 = function (CONVERT_TO_STRING) { + var createMethod$9 = function (CONVERT_TO_STRING) { return function ($this, pos) { var S = String(requireObjectCoercible$1($this)); var position = toInteger$1(pos); @@ -12632,27 +16131,27 @@ typeof navigator === "object" && (function () { }; }; - var stringMultibyte = { + var stringMultibyte$1 = { // `String.prototype.codePointAt` method // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat - codeAt: createMethod$3(false), + codeAt: createMethod$9(false), // `String.prototype.at` method // https://github.com/mathiasbynens/String.prototype.at - charAt: createMethod$3(true) + charAt: createMethod$9(true) }; - var charAt = stringMultibyte.charAt; + var charAt$2 = stringMultibyte$1.charAt; var STRING_ITERATOR$1 = 'String Iterator'; - var setInternalState$7 = internalState$1.set; - var getInternalState$5 = internalState$1.getterFor(STRING_ITERATOR$1); + var setInternalState$a = internalState$1.set; + var getInternalState$6 = internalState$1.getterFor(STRING_ITERATOR$1); // `String.prototype[@@iterator]` method // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator defineIterator$1(String, 'String', function (iterated) { - setInternalState$7(this, { + setInternalState$a(this, { type: STRING_ITERATOR$1, string: String(iterated), index: 0 @@ -12660,12 +16159,12 @@ typeof navigator === "object" && (function () { // `%StringIteratorPrototype%.next` method // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next }, function next() { - var state = getInternalState$5(this); + var state = getInternalState$6(this); var string = state.string; var index = state.index; var point; if (index >= string.length) return { value: undefined, done: true }; - point = charAt(string, index); + point = charAt$2(string, index); state.index += point.length; return { value: point, done: false }; }); @@ -12695,15 +16194,15 @@ typeof navigator === "object" && (function () { // IE <= 11 replaces $0 with the whole match, as if it was $& // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 - var REPLACE_KEEPS_$0 = (function () { + var REPLACE_KEEPS_$0$1 = (function () { return 'a'.replace(/./, '$0') === '$0'; })(); - var REPLACE = wellKnownSymbol$1('replace'); + var REPLACE$1 = wellKnownSymbol$1('replace'); // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string - var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { - if (/./[REPLACE]) { - return /./[REPLACE]('a', '$0') === ''; + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE$1 = (function () { + if (/./[REPLACE$1]) { + return /./[REPLACE$1]('a', '$0') === ''; } return false; })(); @@ -12757,8 +16256,8 @@ typeof navigator === "object" && (function () { !DELEGATES_TO_EXEC || (KEY === 'replace' && !( REPLACE_SUPPORTS_NAMED_GROUPS$1 && - REPLACE_KEEPS_$0 && - !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + REPLACE_KEEPS_$0$1 && + !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE$1 )) || (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC$1) ) { @@ -12775,8 +16274,8 @@ typeof navigator === "object" && (function () { } return { done: false }; }, { - REPLACE_KEEPS_$0: REPLACE_KEEPS_$0, - REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE + REPLACE_KEEPS_$0: REPLACE_KEEPS_$0$1, + REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE$1 }); var stringMethod = methods[0]; var regexMethod = methods[1]; @@ -12792,7 +16291,7 @@ typeof navigator === "object" && (function () { ); } - if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); + if (sham) createNonEnumerableProperty$1(RegExp.prototype[SYMBOL], 'sham', true); }; // `SameValue` abstract operation @@ -12854,11 +16353,11 @@ typeof navigator === "object" && (function () { return target; }; - var freezing = !fails$1(function () { + var freezing$1 = !fails$1(function () { return Object.isExtensible(Object.preventExtensions({})); }); - var internalMetadata = createCommonjsModule(function (module) { + var internalMetadata$1 = createCommonjsModule(function (module) { var defineProperty = objectDefineProperty$1.f; @@ -12879,7 +16378,7 @@ typeof navigator === "object" && (function () { var fastKey = function (it, create) { // return a primitive with prefix - if (!isObject$4(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!isObject$2(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; if (!has$2(it, METADATA)) { // can't set metadata to uncaught frozen object if (!isExtensible(it)) return 'F'; @@ -12905,7 +16404,7 @@ typeof navigator === "object" && (function () { // add metadata on freeze-family methods calling var onFreeze = function (it) { - if (freezing && meta.REQUIRED && isExtensible(it) && !has$2(it, METADATA)) setMetadata(it); + if (freezing$1 && meta.REQUIRED && isExtensible(it) && !has$2(it, METADATA)) setMetadata(it); return it; }; @@ -12918,19 +16417,19 @@ typeof navigator === "object" && (function () { hiddenKeys$2[METADATA] = true; }); - var internalMetadata_1 = internalMetadata.REQUIRED; - var internalMetadata_2 = internalMetadata.fastKey; - var internalMetadata_3 = internalMetadata.getWeakData; - var internalMetadata_4 = internalMetadata.onFreeze; + var internalMetadata_1$1 = internalMetadata$1.REQUIRED; + var internalMetadata_2$1 = internalMetadata$1.fastKey; + var internalMetadata_3$1 = internalMetadata$1.getWeakData; + var internalMetadata_4$1 = internalMetadata$1.onFreeze; - var iterate_1 = createCommonjsModule(function (module) { + var iterate_1$1 = createCommonjsModule(function (module) { var Result = function (stopped, result) { this.stopped = stopped; this.result = result; }; var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = functionBindContext(fn, that, AS_ENTRIES ? 2 : 1); + var boundFunction = functionBindContext$1(fn, that, AS_ENTRIES ? 2 : 1); var iterator, iterFn, index, length, result, next, step; if (IS_ITERATOR) { @@ -12968,7 +16467,7 @@ typeof navigator === "object" && (function () { } return it; }; - var collection = function (CONSTRUCTOR_NAME, wrapper, common) { + var collection$1 = function (CONSTRUCTOR_NAME, wrapper, common) { var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; var ADDER = IS_MAP ? 'set' : 'add'; @@ -12984,11 +16483,11 @@ typeof navigator === "object" && (function () { nativeMethod.call(this, value === 0 ? 0 : value); return this; } : KEY == 'delete' ? function (key) { - return IS_WEAK && !isObject$4(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + return IS_WEAK && !isObject$2(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); } : KEY == 'get' ? function get(key) { - return IS_WEAK && !isObject$4(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); + return IS_WEAK && !isObject$2(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); } : KEY == 'has' ? function has(key) { - return IS_WEAK && !isObject$4(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + return IS_WEAK && !isObject$2(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); } : function set(key, value) { nativeMethod.call(this, key === 0 ? 0 : key, value); return this; @@ -13002,7 +16501,7 @@ typeof navigator === "object" && (function () { })))) { // create collection constructor Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); - internalMetadata.REQUIRED = true; + internalMetadata$1.REQUIRED = true; } else if (isForced_1$1(CONSTRUCTOR_NAME, true)) { var instance = new Constructor(); // early implementations not supports chaining @@ -13025,7 +16524,7 @@ typeof navigator === "object" && (function () { Constructor = wrapper(function (dummy, iterable) { anInstance$1(dummy, Constructor, CONSTRUCTOR_NAME); var that = inheritIfRequired$1(new NativeConstructor(), dummy, Constructor); - if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); + if (iterable != undefined) iterate_1$1(iterable, that[ADDER], that, IS_MAP); return that; }); Constructor.prototype = NativePrototype; @@ -13054,7 +16553,7 @@ typeof navigator === "object" && (function () { return Constructor; }; - var getWeakData = internalMetadata.getWeakData; + var getWeakData$1 = internalMetadata$1.getWeakData; @@ -13063,42 +16562,42 @@ typeof navigator === "object" && (function () { - var setInternalState$8 = internalState$1.set; - var internalStateGetterFor = internalState$1.getterFor; - var find$1 = arrayIteration.find; - var findIndex = arrayIteration.findIndex; - var id$2 = 0; + var setInternalState$b = internalState$1.set; + var internalStateGetterFor$1 = internalState$1.getterFor; + var find$2 = arrayIteration$1.find; + var findIndex$1 = arrayIteration$1.findIndex; + var id$3 = 0; // fallback for uncaught frozen keys - var uncaughtFrozenStore = function (store) { - return store.frozen || (store.frozen = new UncaughtFrozenStore()); + var uncaughtFrozenStore$1 = function (store) { + return store.frozen || (store.frozen = new UncaughtFrozenStore$1()); }; - var UncaughtFrozenStore = function () { + var UncaughtFrozenStore$1 = function () { this.entries = []; }; - var findUncaughtFrozen = function (store, key) { - return find$1(store.entries, function (it) { + var findUncaughtFrozen$1 = function (store, key) { + return find$2(store.entries, function (it) { return it[0] === key; }); }; - UncaughtFrozenStore.prototype = { + UncaughtFrozenStore$1.prototype = { get: function (key) { - var entry = findUncaughtFrozen(this, key); + var entry = findUncaughtFrozen$1(this, key); if (entry) return entry[1]; }, has: function (key) { - return !!findUncaughtFrozen(this, key); + return !!findUncaughtFrozen$1(this, key); }, set: function (key, value) { - var entry = findUncaughtFrozen(this, key); + var entry = findUncaughtFrozen$1(this, key); if (entry) entry[1] = value; else this.entries.push([key, value]); }, 'delete': function (key) { - var index = findIndex(this.entries, function (it) { + var index = findIndex$1(this.entries, function (it) { return it[0] === key; }); if (~index) this.entries.splice(index, 1); @@ -13106,24 +16605,24 @@ typeof navigator === "object" && (function () { } }; - var collectionWeak = { + var collectionWeak$1 = { getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { var C = wrapper(function (that, iterable) { anInstance$1(that, C, CONSTRUCTOR_NAME); - setInternalState$8(that, { + setInternalState$b(that, { type: CONSTRUCTOR_NAME, - id: id$2++, + id: id$3++, frozen: undefined }); - if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); + if (iterable != undefined) iterate_1$1(iterable, that[ADDER], that, IS_MAP); }); - var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalState = internalStateGetterFor$1(CONSTRUCTOR_NAME); var define = function (that, key, value) { var state = getInternalState(that); - var data = getWeakData(anObject$1(key), true); - if (data === true) uncaughtFrozenStore(state).set(key, value); + var data = getWeakData$1(anObject$1(key), true); + if (data === true) uncaughtFrozenStore$1(state).set(key, value); else data[state.id] = value; return that; }; @@ -13133,18 +16632,18 @@ typeof navigator === "object" && (function () { // 23.4.3.3 WeakSet.prototype.delete(value) 'delete': function (key) { var state = getInternalState(this); - if (!isObject$4(key)) return false; - var data = getWeakData(key); - if (data === true) return uncaughtFrozenStore(state)['delete'](key); + if (!isObject$2(key)) return false; + var data = getWeakData$1(key); + if (data === true) return uncaughtFrozenStore$1(state)['delete'](key); return data && has$2(data, state.id) && delete data[state.id]; }, // 23.3.3.4 WeakMap.prototype.has(key) // 23.4.3.4 WeakSet.prototype.has(value) has: function has(key) { var state = getInternalState(this); - if (!isObject$4(key)) return false; - var data = getWeakData(key); - if (data === true) return uncaughtFrozenStore(state).has(key); + if (!isObject$2(key)) return false; + var data = getWeakData$1(key); + if (data === true) return uncaughtFrozenStore$1(state).has(key); return data && has$2(data, state.id); } }); @@ -13153,9 +16652,9 @@ typeof navigator === "object" && (function () { // 23.3.3.3 WeakMap.prototype.get(key) get: function get(key) { var state = getInternalState(this); - if (isObject$4(key)) { - var data = getWeakData(key); - if (data === true) return uncaughtFrozenStore(state).get(key); + if (isObject$2(key)) { + var data = getWeakData$1(key); + if (data === true) return uncaughtFrozenStore$1(state).get(key); return data ? data[state.id] : undefined; } }, @@ -13196,14 +16695,14 @@ typeof navigator === "object" && (function () { // `WeakMap` constructor // https://tc39.github.io/ecma262/#sec-weakmap-constructor - var $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak); + var $WeakMap = module.exports = collection$1('WeakMap', wrapper, collectionWeak$1); // IE11 WeakMap frozen keys fix // We can't use feature detection because it crash some old IE builds // https://github.com/zloirock/core-js/issues/485 if (nativeWeakMap$1 && IS_IE11) { - InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true); - internalMetadata.REQUIRED = true; + InternalWeakMap = collectionWeak$1.getConstructor(wrapper, 'WeakMap', true); + internalMetadata$1.REQUIRED = true; var WeakMapPrototype = $WeakMap.prototype; var nativeDelete = WeakMapPrototype['delete']; var nativeHas = WeakMapPrototype.has; @@ -13211,28 +16710,28 @@ typeof navigator === "object" && (function () { var nativeSet = WeakMapPrototype.set; redefineAll$1(WeakMapPrototype, { 'delete': function (key) { - if (isObject$4(key) && !isExtensible(key)) { + if (isObject$2(key) && !isExtensible(key)) { var state = enforceIternalState(this); if (!state.frozen) state.frozen = new InternalWeakMap(); return nativeDelete.call(this, key) || state.frozen['delete'](key); } return nativeDelete.call(this, key); }, has: function has(key) { - if (isObject$4(key) && !isExtensible(key)) { + if (isObject$2(key) && !isExtensible(key)) { var state = enforceIternalState(this); if (!state.frozen) state.frozen = new InternalWeakMap(); return nativeHas.call(this, key) || state.frozen.has(key); } return nativeHas.call(this, key); }, get: function get(key) { - if (isObject$4(key) && !isExtensible(key)) { + if (isObject$2(key) && !isExtensible(key)) { var state = enforceIternalState(this); if (!state.frozen) state.frozen = new InternalWeakMap(); return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key); } return nativeGet.call(this, key); }, set: function set(key, value) { - if (isObject$4(key) && !isExtensible(key)) { + if (isObject$2(key) && !isExtensible(key)) { var state = enforceIternalState(this); if (!state.frozen) state.frozen = new InternalWeakMap(); nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value); @@ -13289,17 +16788,17 @@ typeof navigator === "object" && (function () { if (CollectionPrototype$2) { // some Chrome versions have non-configurable methods on DOMTokenList if (CollectionPrototype$2[ITERATOR$e] !== ArrayValues$1) try { - createNonEnumerableProperty(CollectionPrototype$2, ITERATOR$e, ArrayValues$1); + createNonEnumerableProperty$1(CollectionPrototype$2, ITERATOR$e, ArrayValues$1); } catch (error) { CollectionPrototype$2[ITERATOR$e] = ArrayValues$1; } if (!CollectionPrototype$2[TO_STRING_TAG$8]) { - createNonEnumerableProperty(CollectionPrototype$2, TO_STRING_TAG$8, COLLECTION_NAME$2); + createNonEnumerableProperty$1(CollectionPrototype$2, TO_STRING_TAG$8, COLLECTION_NAME$2); } if (domIterables$1[COLLECTION_NAME$2]) for (var METHOD_NAME$1 in es_array_iterator$1) { // some Chrome versions have non-configurable methods on DOMTokenList if (CollectionPrototype$2[METHOD_NAME$1] !== es_array_iterator$1[METHOD_NAME$1]) try { - createNonEnumerableProperty(CollectionPrototype$2, METHOD_NAME$1, es_array_iterator$1[METHOD_NAME$1]); + createNonEnumerableProperty$1(CollectionPrototype$2, METHOD_NAME$1, es_array_iterator$1[METHOD_NAME$1]); } catch (error) { CollectionPrototype$2[METHOD_NAME$1] = es_array_iterator$1[METHOD_NAME$1]; } @@ -13307,72 +16806,72 @@ typeof navigator === "object" && (function () { } } - var $every = arrayIteration.every; + var $every$1 = arrayIteration$1.every; - var STRICT_METHOD$1 = arrayMethodIsStrict('every'); - var USES_TO_LENGTH$4 = arrayMethodUsesToLength('every'); + var STRICT_METHOD$6 = arrayMethodIsStrict$1('every'); + var USES_TO_LENGTH$e = arrayMethodUsesToLength$1('every'); // `Array.prototype.every` method // https://tc39.github.io/ecma262/#sec-array.prototype.every - _export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$1 || !USES_TO_LENGTH$4 }, { + _export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$6 || !USES_TO_LENGTH$e }, { every: function every(callbackfn /* , thisArg */) { - return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $every$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); - var $forEach = arrayIteration.forEach; + var $forEach$3 = arrayIteration$1.forEach; - var STRICT_METHOD$2 = arrayMethodIsStrict('forEach'); - var USES_TO_LENGTH$5 = arrayMethodUsesToLength('forEach'); + var STRICT_METHOD$7 = arrayMethodIsStrict$1('forEach'); + var USES_TO_LENGTH$f = arrayMethodUsesToLength$1('forEach'); // `Array.prototype.forEach` method implementation // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - var arrayForEach$2 = (!STRICT_METHOD$2 || !USES_TO_LENGTH$5) ? function forEach(callbackfn /* , thisArg */) { - return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + var arrayForEach$1 = (!STRICT_METHOD$7 || !USES_TO_LENGTH$f) ? function forEach(callbackfn /* , thisArg */) { + return $forEach$3(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } : [].forEach; // `Array.prototype.forEach` method // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - _export$1({ target: 'Array', proto: true, forced: [].forEach != arrayForEach$2 }, { - forEach: arrayForEach$2 + _export$1({ target: 'Array', proto: true, forced: [].forEach != arrayForEach$1 }, { + forEach: arrayForEach$1 }); - var $indexOf = arrayIncludes$2.indexOf; + var $indexOf$2 = arrayIncludes$1.indexOf; var nativeIndexOf$1 = [].indexOf; var NEGATIVE_ZERO$2 = !!nativeIndexOf$1 && 1 / [1].indexOf(1, -0) < 0; - var STRICT_METHOD$3 = arrayMethodIsStrict('indexOf'); - var USES_TO_LENGTH$6 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); + var STRICT_METHOD$8 = arrayMethodIsStrict$1('indexOf'); + var USES_TO_LENGTH$g = arrayMethodUsesToLength$1('indexOf', { ACCESSORS: true, 1: 0 }); // `Array.prototype.indexOf` method // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - _export$1({ target: 'Array', proto: true, forced: NEGATIVE_ZERO$2 || !STRICT_METHOD$3 || !USES_TO_LENGTH$6 }, { + _export$1({ target: 'Array', proto: true, forced: NEGATIVE_ZERO$2 || !STRICT_METHOD$8 || !USES_TO_LENGTH$g }, { indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { return NEGATIVE_ZERO$2 // convert -0 to +0 ? nativeIndexOf$1.apply(this, arguments) || 0 - : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); + : $indexOf$2(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); } }); var nativeAssign$1 = Object.assign; - var defineProperty$a = Object.defineProperty; + var defineProperty$d = Object.defineProperty; // `Object.assign` method // https://tc39.github.io/ecma262/#sec-object.assign var objectAssign$1 = !nativeAssign$1 || fails$1(function () { // should have correct order of operations (Edge bug) - if (descriptors$1 && nativeAssign$1({ b: 1 }, nativeAssign$1(defineProperty$a({}, 'a', { + if (descriptors$1 && nativeAssign$1({ b: 1 }, nativeAssign$1(defineProperty$d({}, 'a', { enumerable: true, get: function () { - defineProperty$a(this, 'b', { + defineProperty$d(this, 'b', { value: 3, enumerable: false }); @@ -13422,16 +16921,16 @@ typeof navigator === "object" && (function () { return C === undefined || (S = anObject$1(C)[SPECIES$a]) == undefined ? defaultConstructor : aFunction$3(S); }; - var charAt$1 = stringMultibyte.charAt; + var charAt$3 = stringMultibyte$1.charAt; // `AdvanceStringIndex` abstract operation // https://tc39.github.io/ecma262/#sec-advancestringindex var advanceStringIndex$1 = function (S, index, unicode) { - return index + (unicode ? charAt$1(S, index).length : 1); + return index + (unicode ? charAt$3(S, index).length : 1); }; var arrayPush$1 = [].push; - var min$7 = Math.min; + var min$9 = Math.min; var MAX_UINT32$1 = 0xFFFFFFFF; // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError @@ -13534,7 +17033,7 @@ typeof navigator === "object" && (function () { var e; if ( z === null || - (e = min$7(toLength$1(splitter.lastIndex + (SUPPORTS_Y$1 ? 0 : q)), S.length)) === p + (e = min$9(toLength$1(splitter.lastIndex + (SUPPORTS_Y$1 ? 0 : q)), S.length)) === p ) { q = advanceStringIndex$1(S, q, unicodeMatching); } else { @@ -13578,10 +17077,10 @@ typeof navigator === "object" && (function () { var Collection$3 = global_1$1[COLLECTION_NAME$3]; var CollectionPrototype$3 = Collection$3 && Collection$3.prototype; // some Chrome versions have non-configurable methods on DOMTokenList - if (CollectionPrototype$3 && CollectionPrototype$3.forEach !== arrayForEach$2) try { - createNonEnumerableProperty(CollectionPrototype$3, 'forEach', arrayForEach$2); + if (CollectionPrototype$3 && CollectionPrototype$3.forEach !== arrayForEach$1) try { + createNonEnumerableProperty$1(CollectionPrototype$3, 'forEach', arrayForEach$1); } catch (error) { - CollectionPrototype$3.forEach = arrayForEach$2; + CollectionPrototype$3.forEach = arrayForEach$1; } } @@ -13629,7 +17128,7 @@ typeof navigator === "object" && (function () { var regexSeparators$1 = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators var OVERFLOW_ERROR$1 = 'Overflow: input needs wider integers to process'; var baseMinusTMin$1 = base$1 - tMin$1; - var floor$4 = Math.floor; + var floor$7 = Math.floor; var stringFromCharCode$1 = String.fromCharCode; /** @@ -13678,12 +17177,12 @@ typeof navigator === "object" && (function () { */ var adapt$1 = function (delta, numPoints, firstTime) { var k = 0; - delta = firstTime ? floor$4(delta / damp$1) : delta >> 1; - delta += floor$4(delta / numPoints); + delta = firstTime ? floor$7(delta / damp$1) : delta >> 1; + delta += floor$7(delta / numPoints); for (; delta > baseMinusTMin$1 * tMax$1 >> 1; k += base$1) { - delta = floor$4(delta / baseMinusTMin$1); + delta = floor$7(delta / baseMinusTMin$1); } - return floor$4(k + (baseMinusTMin$1 + 1) * delta / (delta + skew$1)); + return floor$7(k + (baseMinusTMin$1 + 1) * delta / (delta + skew$1)); }; /** @@ -13735,7 +17234,7 @@ typeof navigator === "object" && (function () { // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow. var handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor$4((maxInt$1 - delta) / handledCPCountPlusOne)) { + if (m - n > floor$7((maxInt$1 - delta) / handledCPCountPlusOne)) { throw RangeError(OVERFLOW_ERROR$1); } @@ -13756,7 +17255,7 @@ typeof navigator === "object" && (function () { var qMinusT = q - t; var baseMinusT = base$1 - t; output.push(stringFromCharCode$1(digitToBasic$1(t + qMinusT % baseMinusT))); - q = floor$4(qMinusT / baseMinusT); + q = floor$7(qMinusT / baseMinusT); } output.push(stringFromCharCode$1(digitToBasic$1(q))); @@ -13772,7 +17271,7 @@ typeof navigator === "object" && (function () { return output.join(''); }; - var stringPunycodeToAscii = function (input) { + var stringPunycodeToAscii$1 = function (input) { var encoded = []; var labels = input.toLowerCase().replace(regexSeparators$1, '\u002E').split('.'); var i, label; @@ -13812,12 +17311,12 @@ typeof navigator === "object" && (function () { - var $fetch$1 = getBuiltIn$1('fetch'); - var Headers$1 = getBuiltIn$1('Headers'); + var $fetch$2 = getBuiltIn$1('fetch'); + var Headers$2 = getBuiltIn$1('Headers'); var ITERATOR$g = wellKnownSymbol$1('iterator'); var URL_SEARCH_PARAMS$1 = 'URLSearchParams'; var URL_SEARCH_PARAMS_ITERATOR$1 = URL_SEARCH_PARAMS$1 + 'Iterator'; - var setInternalState$9 = internalState$1.set; + var setInternalState$c = internalState$1.set; var getInternalParamsState$1 = internalState$1.getterFor(URL_SEARCH_PARAMS$1); var getInternalIteratorState$1 = internalState$1.getterFor(URL_SEARCH_PARAMS_ITERATOR$1); @@ -13849,7 +17348,7 @@ typeof navigator === "object" && (function () { } }; - var find$2 = /[!'()~]|%20/g; + var find$3 = /[!'()~]|%20/g; var replace$1 = { '!': '%21', @@ -13865,7 +17364,7 @@ typeof navigator === "object" && (function () { }; var serialize$1 = function (it) { - return encodeURIComponent(it).replace(find$2, replacer$1); + return encodeURIComponent(it).replace(find$3, replacer$1); }; var parseSearchParams$1 = function (result, query) { @@ -13896,7 +17395,7 @@ typeof navigator === "object" && (function () { }; var URLSearchParamsIterator$1 = createIteratorConstructor$1(function Iterator(params, kind) { - setInternalState$9(this, { + setInternalState$c(this, { type: URL_SEARCH_PARAMS_ITERATOR$1, iterator: getIterator$1(getInternalParamsState$1(params).entries), kind: kind @@ -13920,7 +17419,7 @@ typeof navigator === "object" && (function () { var entries = []; var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; - setInternalState$9(that, { + setInternalState$c(that, { type: URL_SEARCH_PARAMS$1, entries: entries, updateURL: function () { /* empty */ }, @@ -13928,7 +17427,7 @@ typeof navigator === "object" && (function () { }); if (init !== undefined) { - if (isObject$4(init)) { + if (isObject$2(init)) { iteratorMethod = getIteratorMethod$1(init); if (typeof iteratorMethod === 'function') { iterator = iteratorMethod.call(init); @@ -14060,7 +17559,7 @@ typeof navigator === "object" && (function () { // `URLSearchParams.prototype.forEach` method forEach: function forEach(callback /* , thisArg */) { var entries = getInternalParamsState$1(this).entries; - var boundFunction = functionBindContext(callback, arguments.length > 1 ? arguments[1] : undefined, 3); + var boundFunction = functionBindContext$1(callback, arguments.length > 1 ? arguments[1] : undefined, 3); var index = 0; var entry; while (index < entries.length) { @@ -14106,17 +17605,17 @@ typeof navigator === "object" && (function () { // Wrap `fetch` for correct work with polyfilled `URLSearchParams` // https://github.com/zloirock/core-js/issues/674 - if (!nativeUrl$1 && typeof $fetch$1 == 'function' && typeof Headers$1 == 'function') { + if (!nativeUrl$1 && typeof $fetch$2 == 'function' && typeof Headers$2 == 'function') { _export$1({ global: true, enumerable: true, forced: true }, { fetch: function fetch(input /* , init */) { var args = [input]; var init, body, headers; if (arguments.length > 1) { init = arguments[1]; - if (isObject$4(init)) { + if (isObject$2(init)) { body = init.body; if (classof$1(body) === URL_SEARCH_PARAMS$1) { - headers = init.headers ? new Headers$1(init.headers) : new Headers$1(); + headers = init.headers ? new Headers$2(init.headers) : new Headers$2(); if (!headers.has('content-type')) { headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); } @@ -14127,7 +17626,7 @@ typeof navigator === "object" && (function () { } } args.push(init); - } return $fetch$1.apply(this, args); + } return $fetch$2.apply(this, args); } }); } @@ -14149,7 +17648,7 @@ typeof navigator === "object" && (function () { - var codeAt = stringMultibyte.codeAt; + var codeAt$1 = stringMultibyte$1.codeAt; @@ -14158,10 +17657,10 @@ typeof navigator === "object" && (function () { var NativeURL$1 = global_1$1.URL; var URLSearchParams$2 = web_urlSearchParams$1.URLSearchParams; var getInternalSearchParamsState$1 = web_urlSearchParams$1.getState; - var setInternalState$a = internalState$1.set; + var setInternalState$d = internalState$1.set; var getInternalURLState$1 = internalState$1.getterFor('URL'); - var floor$5 = Math.floor; - var pow$1 = Math.pow; + var floor$8 = Math.floor; + var pow$2 = Math.pow; var INVALID_AUTHORITY$1 = 'Invalid authority'; var INVALID_SCHEME$1 = 'Invalid scheme'; @@ -14169,7 +17668,7 @@ typeof navigator === "object" && (function () { var INVALID_PORT$1 = 'Invalid port'; var ALPHA$1 = /[A-Za-z]/; - var ALPHANUMERIC$1 = /[\d+\-.A-Za-z]/; + var ALPHANUMERIC$1 = /[\d+-.A-Za-z]/; var DIGIT$1 = /\d/; var HEX_START$1 = /^(0x|0X)/; var OCT$1 = /^[0-7]+$/; @@ -14202,7 +17701,7 @@ typeof navigator === "object" && (function () { } url.host = result; } else { - input = stringPunycodeToAscii(input); + input = stringPunycodeToAscii$1(input); if (FORBIDDEN_HOST_CODE_POINT$1.test(input)) return INVALID_HOST$1; result = parseIPv4$1(input); if (result === null) return INVALID_HOST$1; @@ -14238,12 +17737,12 @@ typeof navigator === "object" && (function () { for (index = 0; index < partsLength; index++) { number = numbers[index]; if (index == partsLength - 1) { - if (number >= pow$1(256, 5 - partsLength)) return null; + if (number >= pow$2(256, 5 - partsLength)) return null; } else if (number > 255) return null; } ipv4 = numbers.pop(); for (index = 0; index < numbers.length; index++) { - ipv4 += numbers[index] * pow$1(256, 3 - index); + ipv4 += numbers[index] * pow$2(256, 3 - index); } return ipv4; }; @@ -14358,7 +17857,7 @@ typeof navigator === "object" && (function () { result = []; for (index = 0; index < 4; index++) { result.unshift(host % 256); - host = floor$5(host / 256); + host = floor$8(host / 256); } return result.join('.'); // ipv6 } else if (typeof host == 'object') { @@ -14391,7 +17890,7 @@ typeof navigator === "object" && (function () { }); var percentEncode$1 = function (char, set) { - var code = codeAt(char, 0); + var code = codeAt$1(char, 0); return code > 0x20 && code < 0x7F && !has$2(set, char) ? char : encodeURIComponent(char); }; @@ -14875,7 +18374,7 @@ typeof navigator === "object" && (function () { var that = anInstance$1(this, URLConstructor$1, 'URL'); var base = arguments.length > 1 ? arguments[1] : undefined; var urlString = String(url); - var state = setInternalState$a(that, { type: 'URL' }); + var state = setInternalState$d(that, { type: 'URL' }); var baseState, failure; if (base !== undefined) { if (base instanceof URLConstructor$1) baseState = getInternalURLState$1(base); @@ -15144,18 +18643,18 @@ typeof navigator === "object" && (function () { URL: URLConstructor$1 }); - var $some = arrayIteration.some; + var $some$2 = arrayIteration$1.some; - var STRICT_METHOD$4 = arrayMethodIsStrict('some'); - var USES_TO_LENGTH$7 = arrayMethodUsesToLength('some'); + var STRICT_METHOD$9 = arrayMethodIsStrict$1('some'); + var USES_TO_LENGTH$h = arrayMethodUsesToLength$1('some'); // `Array.prototype.some` method // https://tc39.github.io/ecma262/#sec-array.prototype.some - _export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$4 || !USES_TO_LENGTH$7 }, { + _export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$9 || !USES_TO_LENGTH$h }, { some: function some(callbackfn /* , thisArg */) { - return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $some$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -15180,13 +18679,13 @@ typeof navigator === "object" && (function () { }; var nativeToFixed = 1.0.toFixed; - var floor$6 = Math.floor; + var floor$9 = Math.floor; - var pow$2 = function (x, n, acc) { - return n === 0 ? acc : n % 2 === 1 ? pow$2(x, n - 1, acc * x) : pow$2(x * x, n / 2, acc); + var pow$3 = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow$3(x, n - 1, acc * x) : pow$3(x * x, n / 2, acc); }; - var log = function (x) { + var log$1 = function (x) { var n = 0; var x2 = x; while (x2 >= 4096) { @@ -15199,7 +18698,7 @@ typeof navigator === "object" && (function () { } return n; }; - var FORCED$7 = nativeToFixed && ( + var FORCED$9 = nativeToFixed && ( 0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || 1.255.toFixed(2) !== '1.25' || @@ -15211,7 +18710,7 @@ typeof navigator === "object" && (function () { // `Number.prototype.toFixed` method // https://tc39.github.io/ecma262/#sec-number.prototype.tofixed - _export$1({ target: 'Number', proto: true, forced: FORCED$7 }, { + _export$1({ target: 'Number', proto: true, forced: FORCED$9 }, { // eslint-disable-next-line max-statements toFixed: function toFixed(fractionDigits) { var number = thisNumberValue(this); @@ -15227,7 +18726,7 @@ typeof navigator === "object" && (function () { while (++index < 6) { c2 += n * data[index]; data[index] = c2 % 1e7; - c2 = floor$6(c2 / 1e7); + c2 = floor$9(c2 / 1e7); } }; @@ -15236,7 +18735,7 @@ typeof navigator === "object" && (function () { var c = 0; while (--index >= 0) { c += data[index]; - data[index] = floor$6(c / n); + data[index] = floor$9(c / n); c = (c % n) * 1e7; } }; @@ -15261,8 +18760,8 @@ typeof navigator === "object" && (function () { number = -number; } if (number > 1e-21) { - e = log(number * pow$2(2, 69, 1)) - 69; - z = e < 0 ? number * pow$2(2, -e, 1) : number / pow$2(2, e, 1); + e = log$1(number * pow$3(2, 69, 1)) - 69; + z = e < 0 ? number * pow$3(2, -e, 1) : number / pow$3(2, e, 1); z *= 0x10000000000000; e = 52 - e; if (e > 0) { @@ -15272,7 +18771,7 @@ typeof navigator === "object" && (function () { multiply(1e7, 0); j -= 7; } - multiply(pow$2(10, j, 1), 0); + multiply(pow$3(10, j, 1), 0); j = e - 1; while (j >= 23) { divide(1 << 23); @@ -15302,7 +18801,7 @@ typeof navigator === "object" && (function () { var propertyIsEnumerable$1 = objectPropertyIsEnumerable$1.f; // `Object.{ entries, values }` methods implementation - var createMethod$4 = function (TO_ENTRIES) { + var createMethod$a = function (TO_ENTRIES) { return function (it) { var O = toIndexedObject$1(it); var keys = objectKeys$1(O); @@ -15323,19 +18822,19 @@ typeof navigator === "object" && (function () { var objectToArray$1 = { // `Object.entries` method // https://tc39.github.io/ecma262/#sec-object.entries - entries: createMethod$4(true), + entries: createMethod$a(true), // `Object.values` method // https://tc39.github.io/ecma262/#sec-object.values - values: createMethod$4(false) + values: createMethod$a(false) }; - var $entries = objectToArray$1.entries; + var $entries$1 = objectToArray$1.entries; // `Object.entries` method // https://tc39.github.io/ecma262/#sec-object.entries _export$1({ target: 'Object', stat: true }, { entries: function entries(O) { - return $entries(O); + return $entries$1(O); } }); @@ -15350,8 +18849,8 @@ typeof navigator === "object" && (function () { }); var max$5 = Math.max; - var min$8 = Math.min; - var floor$7 = Math.floor; + var min$a = Math.min; + var floor$a = Math.floor; var SUBSTITUTION_SYMBOLS$1 = /\$([$&'`]|\d\d?|<[^>]*>)/g; var SUBSTITUTION_SYMBOLS_NO_NAMED$1 = /\$([$&'`]|\d\d?)/g; @@ -15415,7 +18914,7 @@ typeof navigator === "object" && (function () { result = results[i]; var matched = String(result[0]); - var position = max$5(min$8(toInteger$1(result.index), S.length), 0); + var position = max$5(min$a(toInteger$1(result.index), S.length), 0); var captures = []; // NOTE: This is equivalent to // captures = result.slice(1).map(maybeToString) @@ -15463,7 +18962,7 @@ typeof navigator === "object" && (function () { var n = +ch; if (n === 0) return match; if (n > m) { - var f = floor$7(n / 10); + var f = floor$a(n / 10); if (f === 0) return match; if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); return match; @@ -15503,42 +19002,42 @@ typeof navigator === "object" && (function () { var f$e = wellKnownSymbol$1; - var wellKnownSymbolWrapped = { + var wellKnownSymbolWrapped$1 = { f: f$e }; - var defineProperty$b = objectDefineProperty$1.f; + var defineProperty$e = objectDefineProperty$1.f; var defineWellKnownSymbol$1 = function (NAME) { var Symbol = path$1.Symbol || (path$1.Symbol = {}); - if (!has$2(Symbol, NAME)) defineProperty$b(Symbol, NAME, { - value: wellKnownSymbolWrapped.f(NAME) + if (!has$2(Symbol, NAME)) defineProperty$e(Symbol, NAME, { + value: wellKnownSymbolWrapped$1.f(NAME) }); }; - var $forEach$1 = arrayIteration.forEach; + var $forEach$4 = arrayIteration$1.forEach; var HIDDEN$1 = sharedKey$1('hidden'); var SYMBOL$1 = 'Symbol'; - var PROTOTYPE$3 = 'prototype'; + var PROTOTYPE$4 = 'prototype'; var TO_PRIMITIVE$1 = wellKnownSymbol$1('toPrimitive'); - var setInternalState$b = internalState$1.set; - var getInternalState$6 = internalState$1.getterFor(SYMBOL$1); - var ObjectPrototype$5 = Object[PROTOTYPE$3]; + var setInternalState$e = internalState$1.set; + var getInternalState$7 = internalState$1.getterFor(SYMBOL$1); + var ObjectPrototype$5 = Object[PROTOTYPE$4]; var $Symbol$1 = global_1$1.Symbol; - var $stringify = getBuiltIn$1('JSON', 'stringify'); - var nativeGetOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor$1.f; + var $stringify$1 = getBuiltIn$1('JSON', 'stringify'); + var nativeGetOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor$1.f; var nativeDefineProperty$3 = objectDefineProperty$1.f; var nativeGetOwnPropertyNames$3 = objectGetOwnPropertyNamesExternal$1.f; var nativePropertyIsEnumerable$3 = objectPropertyIsEnumerable$1.f; var AllSymbols$1 = shared$1('symbols'); var ObjectPrototypeSymbols$1 = shared$1('op-symbols'); - var StringToSymbolRegistry = shared$1('string-to-symbol-registry'); - var SymbolToStringRegistry = shared$1('symbol-to-string-registry'); - var WellKnownSymbolsStore$2 = shared$1('wks'); + var StringToSymbolRegistry$1 = shared$1('string-to-symbol-registry'); + var SymbolToStringRegistry$1 = shared$1('symbol-to-string-registry'); + var WellKnownSymbolsStore$3 = shared$1('wks'); var QObject$1 = global_1$1.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 - var USE_SETTER$1 = !QObject$1 || !QObject$1[PROTOTYPE$3] || !QObject$1[PROTOTYPE$3].findChild; + var USE_SETTER$1 = !QObject$1 || !QObject$1[PROTOTYPE$4] || !QObject$1[PROTOTYPE$4].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 var setSymbolDescriptor$1 = descriptors$1 && fails$1(function () { @@ -15546,7 +19045,7 @@ typeof navigator === "object" && (function () { get: function () { return nativeDefineProperty$3(this, 'a', { value: 7 }).a; } })).a != 7; }) ? function (O, P, Attributes) { - var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$3(ObjectPrototype$5, P); + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$4(ObjectPrototype$5, P); if (ObjectPrototypeDescriptor) delete ObjectPrototype$5[P]; nativeDefineProperty$3(O, P, Attributes); if (ObjectPrototypeDescriptor && O !== ObjectPrototype$5) { @@ -15554,9 +19053,9 @@ typeof navigator === "object" && (function () { } } : nativeDefineProperty$3; - var wrap$2 = function (tag, description) { - var symbol = AllSymbols$1[tag] = objectCreate$1($Symbol$1[PROTOTYPE$3]); - setInternalState$b(symbol, { + var wrap$3 = function (tag, description) { + var symbol = AllSymbols$1[tag] = objectCreate$1($Symbol$1[PROTOTYPE$4]); + setInternalState$e(symbol, { type: SYMBOL$1, tag: tag, description: description @@ -15565,7 +19064,7 @@ typeof navigator === "object" && (function () { return symbol; }; - var isSymbol$1 = useSymbolAsUid ? function (it) { + var isSymbol$1 = useSymbolAsUid$1 ? function (it) { return typeof it == 'symbol'; } : function (it) { return Object(it) instanceof $Symbol$1; @@ -15591,7 +19090,7 @@ typeof navigator === "object" && (function () { anObject$1(O); var properties = toIndexedObject$1(Properties); var keys = objectKeys$1(properties).concat($getOwnPropertySymbols$1(properties)); - $forEach$1(keys, function (key) { + $forEach$4(keys, function (key) { if (!descriptors$1 || $propertyIsEnumerable$1.call(properties, key)) $defineProperty$1(O, key, properties[key]); }); return O; @@ -15612,7 +19111,7 @@ typeof navigator === "object" && (function () { var it = toIndexedObject$1(O); var key = toPrimitive$1(P, true); if (it === ObjectPrototype$5 && has$2(AllSymbols$1, key) && !has$2(ObjectPrototypeSymbols$1, key)) return; - var descriptor = nativeGetOwnPropertyDescriptor$3(it, key); + var descriptor = nativeGetOwnPropertyDescriptor$4(it, key); if (descriptor && has$2(AllSymbols$1, key) && !(has$2(it, HIDDEN$1) && it[HIDDEN$1][key])) { descriptor.enumerable = true; } @@ -15622,7 +19121,7 @@ typeof navigator === "object" && (function () { var $getOwnPropertyNames$1 = function getOwnPropertyNames(O) { var names = nativeGetOwnPropertyNames$3(toIndexedObject$1(O)); var result = []; - $forEach$1(names, function (key) { + $forEach$4(names, function (key) { if (!has$2(AllSymbols$1, key) && !has$2(hiddenKeys$2, key)) result.push(key); }); return result; @@ -15632,7 +19131,7 @@ typeof navigator === "object" && (function () { var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$5; var names = nativeGetOwnPropertyNames$3(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols$1 : toIndexedObject$1(O)); var result = []; - $forEach$1(names, function (key) { + $forEach$4(names, function (key) { if (has$2(AllSymbols$1, key) && (!IS_OBJECT_PROTOTYPE || has$2(ObjectPrototype$5, key))) { result.push(AllSymbols$1[key]); } @@ -15653,15 +19152,15 @@ typeof navigator === "object" && (function () { setSymbolDescriptor$1(this, tag, createPropertyDescriptor$1(1, value)); }; if (descriptors$1 && USE_SETTER$1) setSymbolDescriptor$1(ObjectPrototype$5, tag, { configurable: true, set: setter }); - return wrap$2(tag, description); + return wrap$3(tag, description); }; - redefine$1($Symbol$1[PROTOTYPE$3], 'toString', function toString() { - return getInternalState$6(this).tag; + redefine$1($Symbol$1[PROTOTYPE$4], 'toString', function toString() { + return getInternalState$7(this).tag; }); redefine$1($Symbol$1, 'withoutSetter', function (description) { - return wrap$2(uid$1(description), description); + return wrap$3(uid$1(description), description); }); objectPropertyIsEnumerable$1.f = $propertyIsEnumerable$1; @@ -15670,16 +19169,16 @@ typeof navigator === "object" && (function () { objectGetOwnPropertyNames$1.f = objectGetOwnPropertyNamesExternal$1.f = $getOwnPropertyNames$1; objectGetOwnPropertySymbols$1.f = $getOwnPropertySymbols$1; - wellKnownSymbolWrapped.f = function (name) { - return wrap$2(wellKnownSymbol$1(name), name); + wellKnownSymbolWrapped$1.f = function (name) { + return wrap$3(wellKnownSymbol$1(name), name); }; if (descriptors$1) { // https://github.com/tc39/proposal-Symbol-description - nativeDefineProperty$3($Symbol$1[PROTOTYPE$3], 'description', { + nativeDefineProperty$3($Symbol$1[PROTOTYPE$4], 'description', { configurable: true, get: function description() { - return getInternalState$6(this).description; + return getInternalState$7(this).description; } }); { @@ -15692,7 +19191,7 @@ typeof navigator === "object" && (function () { Symbol: $Symbol$1 }); - $forEach$1(objectKeys$1(WellKnownSymbolsStore$2), function (name) { + $forEach$4(objectKeys$1(WellKnownSymbolsStore$3), function (name) { defineWellKnownSymbol$1(name); }); @@ -15701,17 +19200,17 @@ typeof navigator === "object" && (function () { // https://tc39.github.io/ecma262/#sec-symbol.for 'for': function (key) { var string = String(key); - if (has$2(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + if (has$2(StringToSymbolRegistry$1, string)) return StringToSymbolRegistry$1[string]; var symbol = $Symbol$1(string); - StringToSymbolRegistry[string] = symbol; - SymbolToStringRegistry[symbol] = string; + StringToSymbolRegistry$1[string] = symbol; + SymbolToStringRegistry$1[symbol] = string; return symbol; }, // `Symbol.keyFor` method // https://tc39.github.io/ecma262/#sec-symbol.keyfor keyFor: function keyFor(sym) { if (!isSymbol$1(sym)) throw TypeError(sym + ' is not a symbol'); - if (has$2(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + if (has$2(SymbolToStringRegistry$1, sym)) return SymbolToStringRegistry$1[sym]; }, useSetter: function () { USE_SETTER$1 = true; }, useSimple: function () { USE_SETTER$1 = false; } @@ -15751,18 +19250,18 @@ typeof navigator === "object" && (function () { // `JSON.stringify` method behavior with symbols // https://tc39.github.io/ecma262/#sec-json.stringify - if ($stringify) { - var FORCED_JSON_STRINGIFY = !nativeSymbol$1 || fails$1(function () { + if ($stringify$1) { + var FORCED_JSON_STRINGIFY$1 = !nativeSymbol$1 || fails$1(function () { var symbol = $Symbol$1(); // MS Edge converts symbol values to JSON as {} - return $stringify([symbol]) != '[null]' + return $stringify$1([symbol]) != '[null]' // WebKit converts symbol values to JSON as null - || $stringify({ a: symbol }) != '{}' + || $stringify$1({ a: symbol }) != '{}' // V8 throws on boxed symbols - || $stringify(Object(symbol)) != '{}'; + || $stringify$1(Object(symbol)) != '{}'; }); - _export$1({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { + _export$1({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY$1 }, { // eslint-disable-next-line no-unused-vars stringify: function stringify(it, replacer, space) { var args = [it]; @@ -15770,21 +19269,21 @@ typeof navigator === "object" && (function () { var $replacer; while (arguments.length > index) args.push(arguments[index++]); $replacer = replacer; - if (!isObject$4(replacer) && it === undefined || isSymbol$1(it)) return; // IE8 returns string on undefined - if (!isArray$4(replacer)) replacer = function (key, value) { + if (!isObject$2(replacer) && it === undefined || isSymbol$1(it)) return; // IE8 returns string on undefined + if (!isArray$2(replacer)) replacer = function (key, value) { if (typeof $replacer == 'function') value = $replacer.call(this, key, value); if (!isSymbol$1(value)) return value; }; args[1] = replacer; - return $stringify.apply(null, args); + return $stringify$1.apply(null, args); } }); } // `Symbol.prototype[@@toPrimitive]` method // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive - if (!$Symbol$1[PROTOTYPE$3][TO_PRIMITIVE$1]) { - createNonEnumerableProperty($Symbol$1[PROTOTYPE$3], TO_PRIMITIVE$1, $Symbol$1[PROTOTYPE$3].valueOf); + if (!$Symbol$1[PROTOTYPE$4][TO_PRIMITIVE$1]) { + createNonEnumerableProperty$1($Symbol$1[PROTOTYPE$4], TO_PRIMITIVE$1, $Symbol$1[PROTOTYPE$4].valueOf); } // `Symbol.prototype[@@toStringTag]` property // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag @@ -15801,17 +19300,17 @@ typeof navigator === "object" && (function () { } }); - var nativeGetOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor$1.f; + var nativeGetOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor$1.f; - var FAILS_ON_PRIMITIVES$3 = fails$1(function () { nativeGetOwnPropertyDescriptor$4(1); }); - var FORCED$8 = !descriptors$1 || FAILS_ON_PRIMITIVES$3; + var FAILS_ON_PRIMITIVES$3 = fails$1(function () { nativeGetOwnPropertyDescriptor$5(1); }); + var FORCED$a = !descriptors$1 || FAILS_ON_PRIMITIVES$3; // `Object.getOwnPropertyDescriptor` method // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor - _export$1({ target: 'Object', stat: true, forced: FORCED$8, sham: !descriptors$1 }, { + _export$1({ target: 'Object', stat: true, forced: FORCED$a, sham: !descriptors$1 }, { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { - return nativeGetOwnPropertyDescriptor$4(toIndexedObject$1(it), key); + return nativeGetOwnPropertyDescriptor$5(toIndexedObject$1(it), key); } }); @@ -15950,47 +19449,47 @@ typeof navigator === "object" && (function () { isNullOrUndefined$1 = function isNullOrUndefined(e) { return null == e; }, - isObject$5 = function isObject(e) { + isObject$3 = function isObject(e) { return getConstructor$1(e) === Object; }, isNumber$1 = function isNumber(e) { return getConstructor$1(e) === Number && !Number.isNaN(e); }, - isString$3 = function isString(e) { + isString$2 = function isString(e) { return getConstructor$1(e) === String; }, isBoolean$1 = function isBoolean(e) { return getConstructor$1(e) === Boolean; }, - isFunction$3 = function isFunction(e) { + isFunction$1 = function isFunction(e) { return getConstructor$1(e) === Function; }, - isArray$5 = function isArray(e) { + isArray$3 = function isArray(e) { return Array.isArray(e); }, isNodeList$1 = function isNodeList(e) { return instanceOf$1(e, NodeList); }, - isElement$1 = function isElement(e) { + isElement$2 = function isElement(e) { return instanceOf$1(e, Element); }, - isEvent$1 = function isEvent(e) { + isEvent$2 = function isEvent(e) { return instanceOf$1(e, Event); }, isEmpty$1 = function isEmpty(e) { - return isNullOrUndefined$1(e) || (isString$3(e) || isArray$5(e) || isNodeList$1(e)) && !e.length || isObject$5(e) && !Object.keys(e).length; + return isNullOrUndefined$1(e) || (isString$2(e) || isArray$3(e) || isNodeList$1(e)) && !e.length || isObject$3(e) && !Object.keys(e).length; }, is$1 = { nullOrUndefined: isNullOrUndefined$1, - object: isObject$5, + object: isObject$3, number: isNumber$1, - string: isString$3, + string: isString$2, boolean: isBoolean$1, - function: isFunction$3, - array: isArray$5, + function: isFunction$1, + array: isArray$3, nodeList: isNodeList$1, - element: isElement$1, - event: isEvent$1, + element: isElement$2, + event: isEvent$2, empty: isEmpty$1 }; @@ -16088,7 +19587,7 @@ typeof navigator === "object" && (function () { }]), e; }(); - var nativePromiseConstructor = global_1$1.Promise; + var nativePromiseConstructor$1 = global_1$1.Promise; var SPECIES$b = wellKnownSymbol$1('species'); @@ -16104,12 +19603,12 @@ typeof navigator === "object" && (function () { } }; - var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent); + var engineIsIos$1 = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent$1); var location$1 = global_1$1.location; - var set$3 = global_1$1.setImmediate; + var set$4 = global_1$1.setImmediate; var clear$1 = global_1$1.clearImmediate; - var process$4 = global_1$1.process; + var process$6 = global_1$1.process; var MessageChannel$1 = global_1$1.MessageChannel; var Dispatch$1 = global_1$1.Dispatch; var counter$1 = 0; @@ -16142,8 +19641,8 @@ typeof navigator === "object" && (function () { }; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: - if (!set$3 || !clear$1) { - set$3 = function setImmediate(fn) { + if (!set$4 || !clear$1) { + set$4 = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) args.push(arguments[i++]); @@ -16158,9 +19657,9 @@ typeof navigator === "object" && (function () { delete queue$1[id]; }; // Node.js 0.8- - if (classofRaw$1(process$4) == 'process') { + if (classofRaw$1(process$6) == 'process') { defer$1 = function (id) { - process$4.nextTick(runner$1(id)); + process$6.nextTick(runner$1(id)); }; // Sphere (JS game engine) Dispatch API } else if (Dispatch$1 && Dispatch$1.now) { @@ -16169,14 +19668,20 @@ typeof navigator === "object" && (function () { }; // Browsers with MessageChannel, includes WebWorkers // except iOS - https://github.com/zloirock/core-js/issues/624 - } else if (MessageChannel$1 && !engineIsIos) { + } else if (MessageChannel$1 && !engineIsIos$1) { channel$1 = new MessageChannel$1(); port$1 = channel$1.port2; channel$1.port1.onmessage = listener$1; - defer$1 = functionBindContext(port$1.postMessage, port$1, 1); + defer$1 = functionBindContext$1(port$1.postMessage, port$1, 1); // Browsers with postMessage, skip WebWorkers // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if (global_1$1.addEventListener && typeof postMessage == 'function' && !global_1$1.importScripts && !fails$1(post$1)) { + } else if ( + global_1$1.addEventListener && + typeof postMessage == 'function' && + !global_1$1.importScripts && + !fails$1(post$1) && + location$1.protocol !== 'file:' + ) { defer$1 = post$1; global_1$1.addEventListener('message', listener$1, false); // IE8- @@ -16196,7 +19701,7 @@ typeof navigator === "object" && (function () { } var task$2 = { - set: set$3, + set: set$4, clear: clear$1 }; @@ -16206,20 +19711,20 @@ typeof navigator === "object" && (function () { var MutationObserver$2 = global_1$1.MutationObserver || global_1$1.WebKitMutationObserver; - var process$5 = global_1$1.process; + var process$7 = global_1$1.process; var Promise$2 = global_1$1.Promise; - var IS_NODE$2 = classofRaw$1(process$5) == 'process'; + var IS_NODE$2 = classofRaw$1(process$7) == 'process'; // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` var queueMicrotaskDescriptor$1 = getOwnPropertyDescriptor$7(global_1$1, 'queueMicrotask'); var queueMicrotask$1 = queueMicrotaskDescriptor$1 && queueMicrotaskDescriptor$1.value; - var flush$1, head$1, last$1, notify$2, toggle$1, node$1, promise$1, then; + var flush$1, head$1, last$1, notify$2, toggle$1, node$1, promise$1, then$1; // modern engines have queueMicrotask method if (!queueMicrotask$1) { flush$1 = function () { var parent, fn; - if (IS_NODE$2 && (parent = process$5.domain)) parent.exit(); + if (IS_NODE$2 && (parent = process$7.domain)) parent.exit(); while (head$1) { fn = head$1.fn; head$1 = head$1.next; @@ -16237,10 +19742,10 @@ typeof navigator === "object" && (function () { // Node.js if (IS_NODE$2) { notify$2 = function () { - process$5.nextTick(flush$1); + process$7.nextTick(flush$1); }; // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver$2 && !engineIsIos) { + } else if (MutationObserver$2 && !engineIsIos$1) { toggle$1 = true; node$1 = document.createTextNode(''); new MutationObserver$2(flush$1).observe(node$1, { characterData: true }); @@ -16251,9 +19756,9 @@ typeof navigator === "object" && (function () { } else if (Promise$2 && Promise$2.resolve) { // Promise.resolve without an argument throws an error in LG WebOS 2 promise$1 = Promise$2.resolve(undefined); - then = promise$1.then; + then$1 = promise$1.then; notify$2 = function () { - then.call(promise$1, flush$1); + then$1.call(promise$1, flush$1); }; // for other environments - macrotask based on: // - setImmediate @@ -16300,7 +19805,7 @@ typeof navigator === "object" && (function () { var promiseResolve$1 = function (C, x) { anObject$1(C); - if (isObject$4(x) && x.constructor === C) return x; + if (isObject$2(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability$2.f(C); var resolve = promiseCapability.resolve; resolve(x); @@ -16335,18 +19840,18 @@ typeof navigator === "object" && (function () { var SPECIES$c = wellKnownSymbol$1('species'); var PROMISE$1 = 'Promise'; - var getInternalState$7 = internalState$1.get; - var setInternalState$c = internalState$1.set; + var getInternalState$8 = internalState$1.get; + var setInternalState$f = internalState$1.set; var getInternalPromiseState$1 = internalState$1.getterFor(PROMISE$1); - var PromiseConstructor$1 = nativePromiseConstructor; + var PromiseConstructor$1 = nativePromiseConstructor$1; var TypeError$2 = global_1$1.TypeError; - var document$5 = global_1$1.document; - var process$6 = global_1$1.process; - var $fetch$2 = getBuiltIn$1('fetch'); + var document$4 = global_1$1.document; + var process$8 = global_1$1.process; + var $fetch$3 = getBuiltIn$1('fetch'); var newPromiseCapability$3 = newPromiseCapability$2.f; var newGenericPromiseCapability$1 = newPromiseCapability$3; - var IS_NODE$3 = classofRaw$1(process$6) == 'process'; - var DISPATCH_EVENT$1 = !!(document$5 && document$5.createEvent && global_1$1.dispatchEvent); + var IS_NODE$3 = classofRaw$1(process$8) == 'process'; + var DISPATCH_EVENT$1 = !!(document$4 && document$4.createEvent && global_1$1.dispatchEvent); var UNHANDLED_REJECTION$1 = 'unhandledrejection'; var REJECTION_HANDLED$1 = 'rejectionhandled'; var PENDING$1 = 0; @@ -16354,22 +19859,22 @@ typeof navigator === "object" && (function () { var REJECTED$1 = 2; var HANDLED$1 = 1; var UNHANDLED$1 = 2; - var Internal$1, OwnPromiseCapability$1, PromiseWrapper$1, nativeThen; + var Internal$1, OwnPromiseCapability$1, PromiseWrapper$1, nativeThen$1; - var FORCED$9 = isForced_1$1(PROMISE$1, function () { - var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor$1) !== String(PromiseConstructor$1); + var FORCED$b = isForced_1$1(PROMISE$1, function () { + var GLOBAL_CORE_JS_PROMISE = inspectSource$1(PromiseConstructor$1) !== String(PromiseConstructor$1); if (!GLOBAL_CORE_JS_PROMISE) { // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 // We can't detect it synchronously, so just check versions - if (engineV8Version === 66) return true; + if (engineV8Version$1 === 66) return true; // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test if (!IS_NODE$3 && typeof PromiseRejectionEvent != 'function') return true; } // We can't use @@species feature detection in V8 since it causes // deoptimization and performance degradation // https://github.com/zloirock/core-js/issues/679 - if (engineV8Version >= 51 && /native code/.test(PromiseConstructor$1)) return false; + if (engineV8Version$1 >= 51 && /native code/.test(PromiseConstructor$1)) return false; // Detect correctness of subclassing with @@species support var promise = PromiseConstructor$1.resolve(1); var FakePromise = function (exec) { @@ -16380,14 +19885,14 @@ typeof navigator === "object" && (function () { return !(promise.then(function () { /* empty */ }) instanceof FakePromise); }); - var INCORRECT_ITERATION$3 = FORCED$9 || !checkCorrectnessOfIteration$1(function (iterable) { + var INCORRECT_ITERATION$3 = FORCED$b || !checkCorrectnessOfIteration$1(function (iterable) { PromiseConstructor$1.all(iterable)['catch'](function () { /* empty */ }); }); // helpers - var isThenable$1 = function (it) { + var isThenable$2 = function (it) { var then; - return isObject$4(it) && typeof (then = it.then) == 'function' ? then : false; + return isObject$2(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify$3 = function (promise, state, isReject) { @@ -16423,7 +19928,7 @@ typeof navigator === "object" && (function () { } if (result === reaction.promise) { reject(TypeError$2('Promise-chain cycle')); - } else if (then = isThenable$1(result)) { + } else if (then = isThenable$2(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); @@ -16441,7 +19946,7 @@ typeof navigator === "object" && (function () { var dispatchEvent$1 = function (name, promise, reason) { var event, handler; if (DISPATCH_EVENT$1) { - event = document$5.createEvent('Event'); + event = document$4.createEvent('Event'); event.promise = promise; event.reason = reason; event.initEvent(name, false, true); @@ -16459,7 +19964,7 @@ typeof navigator === "object" && (function () { if (IS_UNHANDLED) { result = perform$1(function () { if (IS_NODE$3) { - process$6.emit('unhandledRejection', value, promise); + process$8.emit('unhandledRejection', value, promise); } else dispatchEvent$1(UNHANDLED_REJECTION$1, promise, value); }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should @@ -16476,7 +19981,7 @@ typeof navigator === "object" && (function () { var onHandleUnhandled$1 = function (promise, state) { task$3.call(global_1$1, function () { if (IS_NODE$3) { - process$6.emit('rejectionHandled', promise); + process$8.emit('rejectionHandled', promise); } else dispatchEvent$1(REJECTION_HANDLED$1, promise, state.value); }); }; @@ -16502,7 +20007,7 @@ typeof navigator === "object" && (function () { if (unwrap) state = unwrap; try { if (promise === value) throw TypeError$2("Promise can't be resolved itself"); - var then = isThenable$1(value); + var then = isThenable$2(value); if (then) { microtask$1(function () { var wrapper = { done: false }; @@ -16526,13 +20031,13 @@ typeof navigator === "object" && (function () { }; // constructor polyfill - if (FORCED$9) { + if (FORCED$b) { // 25.4.3.1 Promise(executor) PromiseConstructor$1 = function Promise(executor) { anInstance$1(this, PromiseConstructor$1, PROMISE$1); aFunction$3(executor); Internal$1.call(this); - var state = getInternalState$7(this); + var state = getInternalState$8(this); try { executor(bind$1(internalResolve$1, this, state), bind$1(internalReject$1, this, state)); } catch (error) { @@ -16541,7 +20046,7 @@ typeof navigator === "object" && (function () { }; // eslint-disable-next-line no-unused-vars Internal$1 = function Promise(executor) { - setInternalState$c(this, { + setInternalState$f(this, { type: PROMISE$1, done: false, notified: false, @@ -16560,7 +20065,7 @@ typeof navigator === "object" && (function () { var reaction = newPromiseCapability$3(speciesConstructor$1(this, PromiseConstructor$1)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE$3 ? process$6.domain : undefined; + reaction.domain = IS_NODE$3 ? process$8.domain : undefined; state.parent = true; state.reactions.push(reaction); if (state.state != PENDING$1) notify$3(this, state, false); @@ -16574,7 +20079,7 @@ typeof navigator === "object" && (function () { }); OwnPromiseCapability$1 = function () { var promise = new Internal$1(); - var state = getInternalState$7(promise); + var state = getInternalState$8(promise); this.promise = promise; this.resolve = bind$1(internalResolve$1, promise, state); this.reject = bind$1(internalReject$1, promise, state); @@ -16585,29 +20090,29 @@ typeof navigator === "object" && (function () { : newGenericPromiseCapability$1(C); }; - if ( typeof nativePromiseConstructor == 'function') { - nativeThen = nativePromiseConstructor.prototype.then; + if ( typeof nativePromiseConstructor$1 == 'function') { + nativeThen$1 = nativePromiseConstructor$1.prototype.then; // wrap native Promise#then for native async functions - redefine$1(nativePromiseConstructor.prototype, 'then', function then(onFulfilled, onRejected) { + redefine$1(nativePromiseConstructor$1.prototype, 'then', function then(onFulfilled, onRejected) { var that = this; return new PromiseConstructor$1(function (resolve, reject) { - nativeThen.call(that, resolve, reject); + nativeThen$1.call(that, resolve, reject); }).then(onFulfilled, onRejected); // https://github.com/zloirock/core-js/issues/640 }, { unsafe: true }); // wrap fetch result - if (typeof $fetch$2 == 'function') _export$1({ global: true, enumerable: true, forced: true }, { + if (typeof $fetch$3 == 'function') _export$1({ global: true, enumerable: true, forced: true }, { // eslint-disable-next-line no-unused-vars fetch: function fetch(input /* , init */) { - return promiseResolve$1(PromiseConstructor$1, $fetch$2.apply(global_1$1, arguments)); + return promiseResolve$1(PromiseConstructor$1, $fetch$3.apply(global_1$1, arguments)); } }); } } - _export$1({ global: true, wrap: true, forced: FORCED$9 }, { + _export$1({ global: true, wrap: true, forced: FORCED$b }, { Promise: PromiseConstructor$1 }); @@ -16617,7 +20122,7 @@ typeof navigator === "object" && (function () { PromiseWrapper$1 = getBuiltIn$1(PROMISE$1); // statics - _export$1({ target: PROMISE$1, stat: true, forced: FORCED$9 }, { + _export$1({ target: PROMISE$1, stat: true, forced: FORCED$b }, { // `Promise.reject` method // https://tc39.github.io/ecma262/#sec-promise.reject reject: function reject(r) { @@ -16627,7 +20132,7 @@ typeof navigator === "object" && (function () { } }); - _export$1({ target: PROMISE$1, stat: true, forced: FORCED$9 }, { + _export$1({ target: PROMISE$1, stat: true, forced: FORCED$b }, { // `Promise.resolve` method // https://tc39.github.io/ecma262/#sec-promise.resolve resolve: function resolve(x) { @@ -16648,7 +20153,7 @@ typeof navigator === "object" && (function () { var values = []; var counter = 0; var remaining = 1; - iterate_1(iterable, function (promise) { + iterate_1$1(iterable, function (promise) { var index = counter++; var alreadyCalled = false; values.push(undefined); @@ -16673,7 +20178,7 @@ typeof navigator === "object" && (function () { var reject = capability.reject; var result = perform$1(function () { var $promiseResolve = aFunction$3(C.resolve); - iterate_1(iterable, function (promise) { + iterate_1$1(iterable, function (promise) { $promiseResolve.call(C, promise).then(capability.resolve, reject); }); }); @@ -16690,7 +20195,7 @@ typeof navigator === "object" && (function () { var nativeStartsWith = ''.startsWith; - var min$9 = Math.min; + var min$b = Math.min; var CORRECT_IS_REGEXP_LOGIC = correctIsRegexpLogic$1('startsWith'); // https://github.com/zloirock/core-js/pull/702 @@ -16704,8 +20209,8 @@ typeof navigator === "object" && (function () { _export$1({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { startsWith: function startsWith(searchString /* , position = 0 */) { var that = String(requireObjectCoercible$1(this)); - notARegexp(searchString); - var index = toLength$1(min$9(arguments.length > 1 ? arguments[1] : undefined, that.length)); + notARegexp$1(searchString); + var index = toLength$1(min$b(arguments.length > 1 ? arguments[1] : undefined, that.length)); var search = String(searchString); return nativeStartsWith ? nativeStartsWith.call(that, search, index) @@ -16728,7 +20233,7 @@ typeof navigator === "object" && (function () { return input === null || typeof input === 'undefined'; }; - var isObject$6 = function isObject(input) { + var isObject$4 = function isObject(input) { return getConstructor$2(input) === Object; }; @@ -16736,7 +20241,7 @@ typeof navigator === "object" && (function () { return getConstructor$2(input) === Number && !Number.isNaN(input); }; - var isString$4 = function isString(input) { + var isString$3 = function isString(input) { return getConstructor$2(input) === String; }; @@ -16744,11 +20249,11 @@ typeof navigator === "object" && (function () { return getConstructor$2(input) === Boolean; }; - var isFunction$4 = function isFunction(input) { + var isFunction$2 = function isFunction(input) { return getConstructor$2(input) === Function; }; - var isArray$6 = function isArray(input) { + var isArray$4 = function isArray(input) { return Array.isArray(input); }; @@ -16760,7 +20265,7 @@ typeof navigator === "object" && (function () { return instanceOf$2(input, NodeList); }; - var isElement$2 = function isElement(input) { + var isElement$3 = function isElement(input) { return instanceOf$2(input, Element); }; @@ -16768,7 +20273,7 @@ typeof navigator === "object" && (function () { return getConstructor$2(input) === Text; }; - var isEvent$2 = function isEvent(input) { + var isEvent$3 = function isEvent(input) { return instanceOf$2(input, Event); }; @@ -16781,15 +20286,15 @@ typeof navigator === "object" && (function () { }; var isTrack = function isTrack(input) { - return instanceOf$2(input, TextTrack) || !isNullOrUndefined$2(input) && isString$4(input.kind); + return instanceOf$2(input, TextTrack) || !isNullOrUndefined$2(input) && isString$3(input.kind); }; var isPromise = function isPromise(input) { - return instanceOf$2(input, Promise); + return instanceOf$2(input, Promise) && isFunction$2(input.then); }; var isEmpty$2 = function isEmpty(input) { - return isNullOrUndefined$2(input) || (isString$4(input) || isArray$6(input) || isNodeList$2(input)) && !input.length || isObject$6(input) && !Object.keys(input).length; + return isNullOrUndefined$2(input) || (isString$3(input) || isArray$4(input) || isNodeList$2(input)) && !input.length || isObject$4(input) && !Object.keys(input).length; }; var isUrl = function isUrl(input) { @@ -16799,7 +20304,7 @@ typeof navigator === "object" && (function () { } // Must be string from here - if (!isString$4(input)) { + if (!isString$3(input)) { return false; } // Add the protocol if required @@ -16819,17 +20324,17 @@ typeof navigator === "object" && (function () { var is$2 = { nullOrUndefined: isNullOrUndefined$2, - object: isObject$6, + object: isObject$4, number: isNumber$2, - string: isString$4, + string: isString$3, boolean: isBoolean$2, - function: isFunction$4, - array: isArray$6, + function: isFunction$2, + array: isArray$4, weakMap: isWeakMap, nodeList: isNodeList$2, - element: isElement$2, + element: isElement$3, textNode: isTextNode, - event: isEvent$2, + event: isEvent$3, keyboardEvent: isKeyboardEvent, cue: isCue, track: isTrack, @@ -16881,7 +20386,7 @@ typeof navigator === "object" && (function () { }; // `Array.prototype.{ reduce, reduceRight }` methods implementation - var createMethod$5 = function (IS_RIGHT) { + var createMethod$b = function (IS_RIGHT) { return function (that, callbackfn, argumentsLength, memo) { aFunction$3(callbackfn); var O = toObject$1(that); @@ -16910,24 +20415,24 @@ typeof navigator === "object" && (function () { var arrayReduce$1 = { // `Array.prototype.reduce` method // https://tc39.github.io/ecma262/#sec-array.prototype.reduce - left: createMethod$5(false), + left: createMethod$b(false), // `Array.prototype.reduceRight` method // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright - right: createMethod$5(true) + right: createMethod$b(true) }; - var $reduce = arrayReduce$1.left; + var $reduce$1 = arrayReduce$1.left; - var STRICT_METHOD$5 = arrayMethodIsStrict('reduce'); - var USES_TO_LENGTH$8 = arrayMethodUsesToLength('reduce', { 1: 0 }); + var STRICT_METHOD$a = arrayMethodIsStrict$1('reduce'); + var USES_TO_LENGTH$i = arrayMethodUsesToLength$1('reduce', { 1: 0 }); // `Array.prototype.reduce` method // https://tc39.github.io/ecma262/#sec-array.prototype.reduce - _export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$5 || !USES_TO_LENGTH$8 }, { + _export$1({ target: 'Array', proto: true, forced: !STRICT_METHOD$a || !USES_TO_LENGTH$i }, { reduce: function reduce(callbackfn /* , initialValue */) { - return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + return $reduce$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); } }); @@ -16972,7 +20477,7 @@ typeof navigator === "object" && (function () { return extend$1.apply(void 0, [target].concat(sources)); } - function wrap$3(elements, wrapper) { + function wrap$4(elements, wrapper) { // Convert `elements` to an array, if necessary. var targets = elements.length ? elements : [elements]; // Loops backwards to prevent having to clone the wrapper on the // first element (see `child` below). @@ -17177,12 +20682,33 @@ typeof navigator === "object" && (function () { } // Element matches selector function matches$2(element, selector) { + var _Element = Element, + prototype = _Element.prototype; function match() { return Array.from(document.querySelectorAll(selector)).includes(this); } - var method = match; + var method = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match; + return method.call(element, selector); + } // Closest ancestor element matching selector (also tests element itself) + + function closest(element, selector) { + var _Element2 = Element, + prototype = _Element2.prototype; // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill + + function closestElement() { + var el = this; + + do { + if (matches$2.matches(el, selector)) return el; + el = el.parentElement || el.parentNode; + } while (el !== null && el.nodeType === 1); + + return null; + } + + var method = prototype.closest || closestElement; return method.call(element, selector); } // Find all elements @@ -17454,6 +20980,19 @@ typeof navigator === "object" && (function () { }).then(function () {}); } + /** + * Silence a Promise-like object. + * This is useful for avoiding non-harmful, but potentially confusing "uncaught + * play promise" rejection error messages. + * @param {Object} value An object that may or may not be `Promise`-like. + */ + + function silencePromise(value) { + if (is$2.promise(value)) { + value.then(null, function () {}); + } + } + function validateRatio(input) { if (!is$2.array(input) && (!is$2.string(input) || !input.includes(':'))) { return false; @@ -17522,8 +21061,8 @@ typeof navigator === "object" && (function () { var padding = 100 / w * h; wrapper.style.paddingBottom = "".concat(padding, "%"); // For Vimeo we have an extra <div> to hide the standard controls and UI - if (this.isVimeo && this.supported.ui) { - var height = 240; + if (this.isVimeo && !this.config.vimeo.premium && this.supported.ui) { + var height = 100 / this.media.offsetWidth * parseInt(window.getComputedStyle(this.media).paddingBottom, 10); var offset = (height - padding) / (height / 50); this.media.style.transform = "translateY(-".concat(offset, "%)"); } else if (this.isHTML5) { @@ -17629,7 +21168,7 @@ typeof navigator === "object" && (function () { player.currentTime = currentTime; // Resume playing if (!paused) { - player.play(); + silencePromise(player.play()); } }); // Load new source @@ -17676,7 +21215,7 @@ typeof navigator === "object" && (function () { }); } // Get the closest value in an array - function closest(array, value) { + function closest$1(array, value) { if (!is$2.array(array) || !array.length) { return null; } @@ -17686,8 +21225,8 @@ typeof navigator === "object" && (function () { }); } - var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$1('slice'); - var USES_TO_LENGTH$9 = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); + var HAS_SPECIES_SUPPORT$6 = arrayMethodHasSpeciesSupport$1('slice'); + var USES_TO_LENGTH$j = arrayMethodUsesToLength$1('slice', { ACCESSORS: true, 0: 0, 1: 2 }); var SPECIES$d = wellKnownSymbol$1('species'); var nativeSlice$1 = [].slice; @@ -17696,7 +21235,7 @@ typeof navigator === "object" && (function () { // `Array.prototype.slice` method // https://tc39.github.io/ecma262/#sec-array.prototype.slice // fallback for not array-like ES3 strings and DOM objects - _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 || !USES_TO_LENGTH$9 }, { + _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$6 || !USES_TO_LENGTH$j }, { slice: function slice(start, end) { var O = toIndexedObject$1(this); var length = toLength$1(O.length); @@ -17704,12 +21243,12 @@ typeof navigator === "object" && (function () { var fin = toAbsoluteIndex$1(end === undefined ? length : end, length); // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible var Constructor, result, n; - if (isArray$4(O)) { + if (isArray$2(O)) { Constructor = O.constructor; // cross-realm fallback - if (typeof Constructor == 'function' && (Constructor === Array || isArray$4(Constructor.prototype))) { + if (typeof Constructor == 'function' && (Constructor === Array || isArray$2(Constructor.prototype))) { Constructor = undefined; - } else if (isObject$4(Constructor)) { + } else if (isObject$2(Constructor)) { Constructor = Constructor[SPECIES$d]; if (Constructor === null) Constructor = undefined; } @@ -17724,14 +21263,14 @@ typeof navigator === "object" && (function () { } }); - var defineProperty$c = objectDefineProperty$1.f; - var getOwnPropertyNames$3 = objectGetOwnPropertyNames$1.f; + var defineProperty$f = objectDefineProperty$1.f; + var getOwnPropertyNames$4 = objectGetOwnPropertyNames$1.f; - var setInternalState$d = internalState$1.set; + var setInternalState$g = internalState$1.set; @@ -17744,9 +21283,9 @@ typeof navigator === "object" && (function () { // "new" should create a new object, old webkit bug var CORRECT_NEW$1 = new NativeRegExp$1(re1$1) !== re1$1; - var UNSUPPORTED_Y$2 = regexpStickyHelpers.UNSUPPORTED_Y; + var UNSUPPORTED_Y$5 = regexpStickyHelpers$1.UNSUPPORTED_Y; - var FORCED$a = descriptors$1 && isForced_1$1('RegExp', (!CORRECT_NEW$1 || UNSUPPORTED_Y$2 || fails$1(function () { + var FORCED$c = descriptors$1 && isForced_1$1('RegExp', (!CORRECT_NEW$1 || UNSUPPORTED_Y$5 || fails$1(function () { re2$1[MATCH$5] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match return NativeRegExp$1(re1$1) != re1$1 || NativeRegExp$1(re2$1) == re2$1 || NativeRegExp$1(re1$1, 'i') != '/a/i'; @@ -17754,7 +21293,7 @@ typeof navigator === "object" && (function () { // `RegExp` constructor // https://tc39.github.io/ecma262/#sec-regexp-constructor - if (FORCED$a) { + if (FORCED$c) { var RegExpWrapper$1 = function RegExp(pattern, flags) { var thisIsRegExp = this instanceof RegExpWrapper$1; var patternIsRegExp = isRegexp$1(pattern); @@ -17772,7 +21311,7 @@ typeof navigator === "object" && (function () { pattern = pattern.source; } - if (UNSUPPORTED_Y$2) { + if (UNSUPPORTED_Y$5) { sticky = !!flags && flags.indexOf('y') > -1; if (sticky) flags = flags.replace(/y/g, ''); } @@ -17783,20 +21322,20 @@ typeof navigator === "object" && (function () { RegExpWrapper$1 ); - if (UNSUPPORTED_Y$2 && sticky) setInternalState$d(result, { sticky: sticky }); + if (UNSUPPORTED_Y$5 && sticky) setInternalState$g(result, { sticky: sticky }); return result; }; var proxy$1 = function (key) { - key in RegExpWrapper$1 || defineProperty$c(RegExpWrapper$1, key, { + key in RegExpWrapper$1 || defineProperty$f(RegExpWrapper$1, key, { configurable: true, get: function () { return NativeRegExp$1[key]; }, set: function (it) { NativeRegExp$1[key] = it; } }); }; - var keys$5 = getOwnPropertyNames$3(NativeRegExp$1); - var index = 0; - while (keys$5.length > index) proxy$1(keys$5[index++]); + var keys$6 = getOwnPropertyNames$4(NativeRegExp$1); + var index$1 = 0; + while (keys$6.length > index$1) proxy$1(keys$6[index$1++]); RegExpPrototype$3.constructor = RegExpWrapper$1; RegExpWrapper$1.prototype = RegExpPrototype$3; redefine$1(global_1$1, 'RegExp', RegExpWrapper$1); @@ -17831,19 +21370,19 @@ typeof navigator === "object" && (function () { return (current / max * 100).toFixed(2); } // Replace all occurances of a string in a string - function replaceAll() { + var replaceAll = function replaceAll() { var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var find = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var replace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g, '\\$1'), 'g'), replace.toString()); - } // Convert to title case + }; // Convert to title case - function toTitleCase() { + var toTitleCase = function toTitleCase() { var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; return input.toString().replace(/\w\S*/g, function (text) { return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase(); }); - } // Convert string to pascalCase + }; // Convert string to pascalCase function toPascalCase() { var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; @@ -18100,13 +21639,13 @@ typeof navigator === "object" && (function () { } var ceil$2 = Math.ceil; - var floor$8 = Math.floor; + var floor$b = Math.floor; // `Math.trunc` method // https://tc39.github.io/ecma262/#sec-math.trunc _export$1({ target: 'Math', stat: true }, { trunc: function trunc(it) { - return (it > 0 ? floor$8 : ceil$2)(it); + return (it > 0 ? floor$b : ceil$2)(it); } }); @@ -18950,39 +22489,39 @@ typeof navigator === "object" && (function () { // Set the looping options /* setLoopMenu() { - // Menu required - if (!is.element(this.elements.settings.panels.loop)) { - return; - } - const options = ['start', 'end', 'all', 'reset']; - const list = this.elements.settings.panels.loop.querySelector('[role="menu"]'); - // Show the pane and tab - toggleHidden(this.elements.settings.buttons.loop, false); - toggleHidden(this.elements.settings.panels.loop, false); - // Toggle the pane and tab - const toggle = !is.empty(this.loop.options); - controls.toggleMenuButton.call(this, 'loop', toggle); - // Empty the menu - emptyElement(list); - options.forEach(option => { - const item = createElement('li'); - const button = createElement( - 'button', - extend(getAttributesFromSelector(this.config.selectors.buttons.loop), { - type: 'button', - class: this.config.classNames.control, - 'data-plyr-loop-action': option, - }), - i18n.get(option, this.config) - ); - if (['start', 'end'].includes(option)) { - const badge = controls.createBadge.call(this, '00:00'); - button.appendChild(badge); - } - item.appendChild(button); - list.appendChild(item); - }); - }, */ + // Menu required + if (!is.element(this.elements.settings.panels.loop)) { + return; + } + const options = ['start', 'end', 'all', 'reset']; + const list = this.elements.settings.panels.loop.querySelector('[role="menu"]'); + // Show the pane and tab + toggleHidden(this.elements.settings.buttons.loop, false); + toggleHidden(this.elements.settings.panels.loop, false); + // Toggle the pane and tab + const toggle = !is.empty(this.loop.options); + controls.toggleMenuButton.call(this, 'loop', toggle); + // Empty the menu + emptyElement(list); + options.forEach(option => { + const item = createElement('li'); + const button = createElement( + 'button', + extend(getAttributesFromSelector(this.config.selectors.buttons.loop), { + type: 'button', + class: this.config.classNames.control, + 'data-plyr-loop-action': option, + }), + i18n.get(option, this.config) + ); + if (['start', 'end'].includes(option)) { + const badge = controls.createBadge.call(this, '00:00'); + button.appendChild(badge); + } + item.appendChild(button); + list.appendChild(item); + }); + }, */ // Get current selected caption language // TODO: rework this to user the getter in the API? // Set a list of available captions languages @@ -19645,7 +23184,7 @@ typeof navigator === "object" && (function () { * @param {Boolean} safe - failsafe parsing */ - function parseUrl$2(input) { + function parseUrl$1(input) { var safe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var url = input; @@ -19708,7 +23247,7 @@ typeof navigator === "object" && (function () { var elements = this.media.querySelectorAll('track'); Array.from(elements).forEach(function (track) { var src = track.getAttribute('src'); - var url = parseUrl$2(src); + var url = parseUrl$1(src); if (url !== null && url.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(url.protocol)) { fetch(src, 'blob').then(function (blob) { @@ -19784,9 +23323,15 @@ typeof navigator === "object" && (function () { meta.set(track, { default: track.mode === 'showing' }); // Turn off native caption rendering to avoid double captions + // Note: mode='hidden' forces a track to download. To ensure every track + // isn't downloaded at once, only 'showing' tracks should be reassigned // eslint-disable-next-line no-param-reassign - track.mode = 'hidden'; // Add event listener for cue changes + if (track.mode === 'showing') { + // eslint-disable-next-line no-param-reassign + track.mode = 'hidden'; + } // Add event listener for cue changes + on.call(_this, track, 'cuechange', function () { return captions.updateCues.call(_this); @@ -19810,6 +23355,8 @@ typeof navigator === "object" && (function () { // Toggle captions display // Used internally for the toggleCaptions method, with the passive option forced to false toggle: function toggle(input) { + var _this2 = this; + var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; // If there's no full support @@ -19856,7 +23403,15 @@ typeof navigator === "object" && (function () { controls.updateSetting.call(this, 'captions'); // Trigger event (not used internally) triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled'); - } + } // Wait for the call stack to clear before setting mode='hidden' + // on the active track - forcing the browser to download it + + + setTimeout(function () { + if (active && _this2.captions.toggled) { + _this2.captions.currentTrackNode.mode = 'hidden'; + } + }); }, // Set captions by track index // Used internally for the currentTrack setter with the passive option forced to false @@ -19937,7 +23492,7 @@ typeof navigator === "object" && (function () { // If update is false it will also ignore tracks without metadata // This is used to "freeze" the language options when captions.update is false getTracks: function getTracks() { - var _this2 = this; + var _this3 = this; var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; // Handle media or textTracks missing or null @@ -19945,20 +23500,20 @@ typeof navigator === "object" && (function () { // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata) return tracks.filter(function (track) { - return !_this2.isHTML5 || update || _this2.captions.meta.has(track); + return !_this3.isHTML5 || update || _this3.captions.meta.has(track); }).filter(function (track) { return ['captions', 'subtitles'].includes(track.kind); }); }, // Match tracks based on languages and get the first findTrack: function findTrack(languages) { - var _this3 = this; + var _this4 = this; var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var tracks = captions.getTracks.call(this); var sortIsDefault = function sortIsDefault(track) { - return Number((_this3.captions.meta.get(track) || {}).default); + return Number((_this4.captions.meta.get(track) || {}).default); }; var sorted = Array.from(tracks).sort(function (a, b) { @@ -20091,7 +23646,7 @@ typeof navigator === "object" && (function () { // Sprite (for icons) loadSprite: true, iconPrefix: 'plyr', - iconUrl: 'https://cdn.plyr.io/3.5.10/plyr.svg', + iconUrl: 'https://cdn.plyr.io/3.6.1/plyr.svg', // Blank video (used to prevent errors on source change) blankVideo: 'https://cdn.plyr.io/static/blank.mp4', // Quality default @@ -20139,6 +23694,9 @@ typeof navigator === "object" && (function () { fallback: true, // Fallback using full viewport/window iosNative: false // Use the native fullscreen in iOS (disables custom controls) + // Selector for the fullscreen container so contextual / non-player content can remain visible in fullscreen mode + // Non-ancestors of the player element will be ignored + // container: null, // defaults to the player element }, // Local storage @@ -20376,16 +23934,16 @@ typeof navigator === "object" && (function () { title: false, speed: true, transparent: false, - // These settings require a pro or premium account to work - sidedock: false, - controls: false, + // Whether the owner of the video has a Pro or Business account + // (which allows us to properly hide controls without CSS hacks, etc) + premium: false, // Custom settings from Plyr referrerPolicy: null // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy }, // YouTube plugin youtube: { - noCookie: false, + noCookie: true, // Whether to use an alternative version of YouTube without cookies rel: 0, // No related vids @@ -20495,7 +24053,10 @@ typeof navigator === "object" && (function () { y: 0 }; // Force the use of 'full window/browser' rather than fullscreen - this.forceFallback = player.config.fullscreen.fallback === 'force'; // Register event listeners + this.forceFallback = player.config.fullscreen.fallback === 'force'; // Get the fullscreen element + // Checks container is an ancestor, defaults to null + + this.player.elements.fullscreen = player.config.fullscreen.container && closest(this.player.elements.container, player.config.fullscreen.container); // Register event listeners // Handle event (incase user presses escape etc) on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : "".concat(this.prefix, "fullscreenchange"), function () { @@ -20668,7 +24229,7 @@ typeof navigator === "object" && (function () { if (browser.isIos && this.player.config.fullscreen.iosNative) { this.target.webkitExitFullscreen(); - this.player.play(); + silencePromise(this.player.play()); } else if (!Fullscreen.native || this.forceFallback) { this.toggleFallback(false); } else if (!this.prefix) { @@ -20715,13 +24276,13 @@ typeof navigator === "object" && (function () { } var element = !this.prefix ? document.fullscreenElement : document["".concat(this.prefix).concat(this.property, "Element")]; - return element === this.target; + return element && element.shadowRoot ? element === this.target.getRootNode().host : element === this.target; } // Get target element }, { key: "target", get: function get() { - return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container; + return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.fullscreen || this.player.elements.container; } }], [{ key: "native", @@ -20930,12 +24491,7 @@ typeof navigator === "object" && (function () { } // Set property synchronously to respect the call order - this.media.setAttribute('poster', poster); // HTML5 uses native poster attribute - - if (this.isHTML5) { - return Promise.resolve(poster); - } // Wait until ui is ready - + this.media.setAttribute('data-poster', poster); // Wait until ui is ready return ready.call(this) // Load image .then(function () { @@ -21011,6 +24567,26 @@ typeof navigator === "object" && (function () { this.toggleControls(Boolean(force || this.loading || this.paused || controlsElement.pressed || controlsElement.hover || recentTouchSeek)); } + }, + // Migrate any custom properties from the media to the parent + migrateStyles: function migrateStyles() { + var _this5 = this; + + // Loop through values (as they are the keys when the object is spread 🤔) + Object.values(_objectSpread2({}, this.media.style)) // We're only fussed about Plyr specific properties + .filter(function (key) { + return !is$2.empty(key) && key.startsWith('--plyr'); + }).forEach(function (key) { + // Set on the container + _this5.elements.container.style.setProperty(key, _this5.media.style.getPropertyValue(key)); // Clean up from media element + + + _this5.media.style.removeProperty(key); + }); // Remove attribute if empty + + if (is$2.empty(this.media.style)) { + this.media.removeAttribute('style'); + } } }; @@ -21105,7 +24681,7 @@ typeof navigator === "object" && (function () { case 75: // Space and K key if (!repeat) { - player.togglePlay(); + silencePromise(player.togglePlay()); } break; @@ -21219,15 +24795,17 @@ typeof navigator === "object" && (function () { removeCurrent(); // Delay the adding of classname until the focus has changed // This event fires before the focusin event - this.focusTimer = setTimeout(function () { - var focused = document.activeElement; // Ignore if current focus element isn't inside the player + if (event.type !== 'focusout') { + this.focusTimer = setTimeout(function () { + var focused = document.activeElement; // Ignore if current focus element isn't inside the player - if (!elements.container.contains(focused)) { - return; - } + if (!elements.container.contains(focused)) { + return; + } - toggleClass(document.activeElement, player.config.classNames.tabFocus, true); - }, 10); + toggleClass(document.activeElement, player.config.classNames.tabFocus, true); + }, 10); + } } // Global window & document listeners }, { @@ -21245,7 +24823,7 @@ typeof navigator === "object" && (function () { once.call(player, document.body, 'touchstart', this.firstTouch); // Tab focus detection - toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true); + toggleListener.call(player, document.body, 'keydown focus blur focusout', this.setTabFocus, toggle, false, true); } // Container listeners }, { @@ -21288,7 +24866,7 @@ typeof navigator === "object" && (function () { }); // Set a gutter for Vimeo var setGutter = function setGutter(ratio, padding, toggle) { - if (!player.isVimeo) { + if (!player.isVimeo || player.config.vimeo.premium) { return; } @@ -21345,7 +24923,7 @@ typeof navigator === "object" && (function () { ratio = _setPlayerSize.ratio; // Set Vimeo gutter - setGutter(ratio, padding, isEnter); // If not using native fullscreen, we need to check for resizes of viewport + setGutter(ratio, padding, isEnter); // If not using native browser fullscreen API, we need to check for resizes of viewport if (!usingNative) { if (isEnter) { @@ -21423,9 +25001,13 @@ typeof navigator === "object" && (function () { if (player.ended) { _this.proxy(event, player.restart, 'restart'); - _this.proxy(event, player.play, 'play'); + _this.proxy(event, function () { + silencePromise(player.play()); + }, 'play'); } else { - _this.proxy(event, player.togglePlay, 'play'); + _this.proxy(event, function () { + silencePromise(player.togglePlay()); + }, 'play'); } }); } // Disable right click @@ -21523,7 +25105,9 @@ typeof navigator === "object" && (function () { if (elements.buttons.play) { Array.from(elements.buttons.play).forEach(function (button) { - _this3.bind(button, 'click', player.togglePlay, 'play'); + _this3.bind(button, 'click', function () { + silencePromise(player.togglePlay()); + }, 'play'); }); } // Pause @@ -21620,7 +25204,7 @@ typeof navigator === "object" && (function () { if (play && done) { seek.removeAttribute(attribute); - player.play(); + silencePromise(player.play()); } else if (!done && player.playing) { seek.setAttribute(attribute, ''); player.pause(); @@ -21718,7 +25302,18 @@ typeof navigator === "object" && (function () { this.bind(elements.controls, 'mouseenter mouseleave', function (event) { elements.controls.hover = !player.touch && event.type === 'mouseenter'; - }); // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting) + }); // Also update controls.hover state for any non-player children of fullscreen element (as above) + + if (elements.fullscreen) { + Array.from(elements.fullscreen.children).filter(function (c) { + return !c.contains(elements.container); + }).forEach(function (child) { + _this3.bind(child, 'mouseenter mouseleave', function (event) { + elements.controls.hover = !player.touch && event.type === 'mouseenter'; + }); + }); + } // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting) + this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) { elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type); @@ -21774,18 +25369,18 @@ typeof navigator === "object" && (function () { return Listeners; }(); - var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport$1('splice'); - var USES_TO_LENGTH$a = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 }); + var HAS_SPECIES_SUPPORT$7 = arrayMethodHasSpeciesSupport$1('splice'); + var USES_TO_LENGTH$k = arrayMethodUsesToLength$1('splice', { ACCESSORS: true, 0: 0, 1: 2 }); var max$7 = Math.max; - var min$a = Math.min; + var min$c = Math.min; var MAX_SAFE_INTEGER$3 = 0x1FFFFFFFFFFFFF; var MAXIMUM_ALLOWED_LENGTH_EXCEEDED$1 = 'Maximum allowed length exceeded'; // `Array.prototype.splice` method // https://tc39.github.io/ecma262/#sec-array.prototype.splice // with adding support of @@species - _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 || !USES_TO_LENGTH$a }, { + _export$1({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$7 || !USES_TO_LENGTH$k }, { splice: function splice(start, deleteCount /* , ...items */) { var O = toObject$1(this); var len = toLength$1(O.length); @@ -21799,7 +25394,7 @@ typeof navigator === "object" && (function () { actualDeleteCount = len - actualStart; } else { insertCount = argumentsLength - 2; - actualDeleteCount = min$a(max$7(toInteger$1(deleteCount), 0), len - actualStart); + actualDeleteCount = min$c(max$7(toInteger$1(deleteCount), 0), len - actualStart); } if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$3) { throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED$1); @@ -22187,15 +25782,28 @@ typeof navigator === "object" && (function () { var _this = this; var player = this; - var config = player.config.vimeo; // Get Vimeo params for the iframe + var config = player.config.vimeo; + + var premium = config.premium, + referrerPolicy = config.referrerPolicy, + frameParams = _objectWithoutProperties(config, ["premium", "referrerPolicy"]); // If the owner has a pro or premium account then we can hide controls etc + + + if (premium) { + Object.assign(frameParams, { + controls: false, + sidedock: false + }); + } // Get Vimeo params for the iframe + - var params = buildUrlParams(extend$1({}, { + var params = buildUrlParams(_objectSpread2({ loop: player.config.loop.active, autoplay: player.autoplay, muted: player.muted, gesture: 'media', playsinline: !this.config.fullscreen.iosNative - }, config)); // Get the source URL or ID + }, frameParams)); // Get the source URL or ID var source = player.media.getAttribute('src'); // Get from <div> if needed @@ -22209,22 +25817,27 @@ typeof navigator === "object" && (function () { var src = format(player.config.urls.vimeo.iframe, id, params); iframe.setAttribute('src', src); iframe.setAttribute('allowfullscreen', ''); - iframe.setAttribute('allowtransparency', ''); - iframe.setAttribute('allow', 'autoplay'); // Set the referrer policy if required + iframe.setAttribute('allow', 'autoplay,fullscreen,picture-in-picture'); // Set the referrer policy if required - if (!is$2.empty(config.referrerPolicy)) { - iframe.setAttribute('referrerPolicy', config.referrerPolicy); - } // Get poster, if already set + if (!is$2.empty(referrerPolicy)) { + iframe.setAttribute('referrerPolicy', referrerPolicy); + } // Inject the package - var poster = player.poster; // Inject the package + var poster = player.poster; + + if (premium) { + iframe.setAttribute('data-poster', poster); + player.media = replaceElement(iframe, player.media); + } else { + var wrapper = createElement$1('div', { + class: player.config.classNames.embedContainer, + 'data-poster': poster + }); + wrapper.appendChild(iframe); + player.media = replaceElement(wrapper, player.media); + } // Get poster image - var wrapper = createElement$1('div', { - poster: poster, - class: player.config.classNames.embedContainer - }); - wrapper.appendChild(iframe); - player.media = replaceElement(wrapper, player.media); // Get poster image fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) { if (is$2.empty(response)) { @@ -22308,6 +25921,9 @@ typeof navigator === "object" && (function () { player.embed.setPlaybackRate(input).then(function () { speed = input; triggerEvent.call(player, player.media, 'ratechange'); + }).catch(function () { + // Cannot set Playback Rate, Video is probably not on Pro account + player.options.speed = [1]; }); } }); // Volume @@ -22592,7 +26208,7 @@ typeof navigator === "object" && (function () { var container = createElement$1('div', { id: id, - poster: poster + 'data-poster': poster }); player.media = replaceElement(container, player.media); // Id to poster wrapper @@ -22910,14 +26526,12 @@ typeof navigator === "object" && (function () { class: this.config.classNames.video }); // Wrap the video in a container - wrap$3(this.media, this.elements.wrapper); // Faux poster container + wrap$4(this.media, this.elements.wrapper); // Poster image container - if (this.isEmbed) { - this.elements.poster = createElement$1('div', { - class: this.config.classNames.poster - }); - this.elements.wrapper.appendChild(this.elements.poster); - } + this.elements.poster = createElement$1('div', { + class: this.config.classNames.poster + }); + this.elements.wrapper.appendChild(this.elements.poster); } if (this.isHTML5) { @@ -23044,6 +26658,8 @@ typeof navigator === "object" && (function () { * mobile devices, this initialization is done as the result of a user action. */ value: function setupIMA() { + var _this4 = this; + // Create the container for our advertisements this.elements.container = createElement$1('div', { class: this.player.config.classNames.ads @@ -23056,7 +26672,16 @@ typeof navigator === "object" && (function () { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline); // We assume the adContainer is the video container of the plyr element that will house the ads - this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Request video ads to be pre-loaded + this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Create ads loader + + this.loader = new google.ima.AdsLoader(this.elements.displayContainer); // Listen and respond to ads loaded and error events + + this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (event) { + return _this4.onAdsManagerLoaded(event); + }, false); + this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) { + return _this4.onAdError(error); + }, false); // Request video ads to be pre-loaded this.requestAds(); } @@ -23067,21 +26692,10 @@ typeof navigator === "object" && (function () { }, { key: "requestAds", value: function requestAds() { - var _this4 = this; - var container = this.player.elements.container; try { - // Create ads loader - this.loader = new google.ima.AdsLoader(this.elements.displayContainer); // Listen and respond to ads loaded and error events - - this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (event) { - return _this4.onAdsManagerLoaded(event); - }, false); - this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) { - return _this4.onAdError(error); - }, false); // Request video ads - + // Request video ads var request = new google.ima.AdsRequest(); request.adTagUrl = this.tagUrl; // Specify the linear and nonlinear slot sizes. This helps the SDK // to select the correct creative if multiple are returned @@ -23260,7 +26874,13 @@ typeof navigator === "object" && (function () { // }; // TODO: So there is still this thing where a video should only be allowed to start // playing when the IMA SDK is ready or has failed - this.loadAds(); + if (this.player.ended) { + this.loadAds(); + } else { + // The SDK won't allow new ads to be called without receiving a contentComplete() + this.loader.contentComplete(); + } + break; case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED: @@ -23396,7 +27016,7 @@ typeof navigator === "object" && (function () { this.playing = false; // Play video - this.player.media.play(); + silencePromise(this.player.media.play()); } /** * Pause our video @@ -23453,7 +27073,9 @@ typeof navigator === "object" && (function () { _this11.on('loaded', resolve); _this11.player.debug.log(_this11.manager); - }); // Now request some new advertisements + }); // Now that the manager has been destroyed set it to also be un-initialized + + _this11.initialized = false; // Now request some new advertisements _this11.requestAds(); }).catch(function () {}); @@ -23566,46 +27188,46 @@ typeof navigator === "object" && (function () { return Ads; }(); - var $findIndex = arrayIteration.findIndex; + var $findIndex$1 = arrayIteration$1.findIndex; var FIND_INDEX = 'findIndex'; var SKIPS_HOLES$2 = true; - var USES_TO_LENGTH$b = arrayMethodUsesToLength(FIND_INDEX); + var USES_TO_LENGTH$l = arrayMethodUsesToLength$1(FIND_INDEX); // Shouldn't skip holes if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES$2 = false; }); // `Array.prototype.findIndex` method // https://tc39.github.io/ecma262/#sec-array.prototype.findindex - _export$1({ target: 'Array', proto: true, forced: SKIPS_HOLES$2 || !USES_TO_LENGTH$b }, { + _export$1({ target: 'Array', proto: true, forced: SKIPS_HOLES$2 || !USES_TO_LENGTH$l }, { findIndex: function findIndex(callbackfn /* , that = undefined */) { - return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return $findIndex$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); } }); // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables addToUnscopables$1(FIND_INDEX); - var min$b = Math.min; + var min$d = Math.min; var nativeLastIndexOf$1 = [].lastIndexOf; var NEGATIVE_ZERO$3 = !!nativeLastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0; - var STRICT_METHOD$6 = arrayMethodIsStrict('lastIndexOf'); + var STRICT_METHOD$b = arrayMethodIsStrict$1('lastIndexOf'); // For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method - var USES_TO_LENGTH$c = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); - var FORCED$b = NEGATIVE_ZERO$3 || !STRICT_METHOD$6 || !USES_TO_LENGTH$c; + var USES_TO_LENGTH$m = arrayMethodUsesToLength$1('indexOf', { ACCESSORS: true, 1: 0 }); + var FORCED$d = NEGATIVE_ZERO$3 || !STRICT_METHOD$b || !USES_TO_LENGTH$m; // `Array.prototype.lastIndexOf` method implementation // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof - var arrayLastIndexOf$1 = FORCED$b ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { + var arrayLastIndexOf$1 = FORCED$d ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { // convert -0 to +0 if (NEGATIVE_ZERO$3) return nativeLastIndexOf$1.apply(this, arguments) || 0; var O = toIndexedObject$1(this); var length = toLength$1(O.length); var index = length - 1; - if (arguments.length > 1) index = min$b(index, toInteger$1(arguments[1])); + if (arguments.length > 1) index = min$d(index, toInteger$1(arguments[1])); if (index < 0) index = length + index; for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; return -1; @@ -23748,15 +27370,10 @@ typeof navigator === "object" && (function () { if (is$2.empty(src)) { throw new Error('Missing previewThumbnails.src config attribute'); - } // If string, convert into single-element list + } // Resolve promise - var urls = is$2.string(src) ? [src] : src; // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails - - var promises = urls.map(function (u) { - return _this2.getThumbnail(u); - }); - Promise.all(promises).then(function () { + var sortAndResolve = function sortAndResolve() { // Sort smallest to biggest (e.g., [120p, 480p, 1080p]) _this2.thumbnails.sort(function (x, y) { return x.height - y.height; @@ -23765,7 +27382,25 @@ typeof navigator === "object" && (function () { _this2.player.debug.log('Preview thumbnails', _this2.thumbnails); resolve(); - }); + }; // Via callback() + + + if (is$2.function(src)) { + src(function (thumbnails) { + _this2.thumbnails = thumbnails; + sortAndResolve(); + }); + } // VTT urls + else { + // If string, convert into single-element list + var urls = is$2.string(src) ? [src] : src; // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails + + var promises = urls.map(function (u) { + return _this2.getThumbnail(u); + }); // Resolve + + Promise.all(promises).then(sortAndResolve); + } }); } // Process individual VTT file @@ -24553,6 +28188,7 @@ typeof navigator === "object" && (function () { this.elements = { container: null, + fullscreen: null, captions: null, buttons: {}, display: {}, @@ -24629,7 +28265,7 @@ typeof navigator === "object" && (function () { if (is$2.element(iframe)) { // Detect provider - url = parseUrl$2(iframe.getAttribute('src')); + url = parseUrl$1(iframe.getAttribute('src')); this.provider = getProviderByUrl(url.toString()); // Rework elements this.elements.container = this.media; @@ -24726,10 +28362,12 @@ typeof navigator === "object" && (function () { this.elements.container = createElement$1('div', { tabindex: 0 }); - wrap$3(this.media, this.elements.container); - } // Add style hook + wrap$4(this.media, this.elements.container); + } // Migrate custom properties from media to container (so they work 😉) + ui.migrateStyles.call(this); // Add style hook + ui.addStyleHook.call(this); // Setup media media.setup.call(this); // Listen for events if debugging @@ -24738,10 +28376,12 @@ typeof navigator === "object" && (function () { on.call(this, this.elements.container, this.config.events.join(' '), function (event) { _this.debug.log("event: ".concat(event.type)); }); - } // Setup interface - // If embed but not fully supported, build interface now to avoid flash of controls + } // Setup fullscreen + this.fullscreen = new Fullscreen(this); // Setup interface + // If embed but not fully supported, build interface now to avoid flash of controls + if (this.isHTML5 || this.isEmbed && !this.supported.ui) { ui.build.call(this); } // Container listeners @@ -24749,9 +28389,7 @@ typeof navigator === "object" && (function () { this.listeners.container(); // Global listeners - this.listeners.global(); // Setup fullscreen - - this.fullscreen = new Fullscreen(this); // Setup ads if provided + this.listeners.global(); // Setup ads if provided if (this.config.ads.enabled) { this.ads = new Ads(this); @@ -24760,7 +28398,7 @@ typeof navigator === "object" && (function () { if (this.isHTML5 && this.config.autoplay) { setTimeout(function () { - return _this.play(); + return silencePromise(_this.play()); }, 10); } // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek @@ -24797,7 +28435,7 @@ typeof navigator === "object" && (function () { this.ads.managerPromise.then(function () { return _this2.ads.play(); }).catch(function () { - return _this2.media.play(); + return silencePromise(_this2.media.play()); }); } // Return the promise (for HTML5) @@ -25450,7 +29088,7 @@ typeof navigator === "object" && (function () { var updateStorage = true; if (!options.includes(quality)) { - var value = closest(options, quality); + var value = closest$1(options, quality); this.debug.warn("Unsupported quality option: ".concat(quality, ", using ").concat(value, " instead")); quality = value; // Don't update storage if quality is not supported @@ -25489,41 +29127,41 @@ typeof navigator === "object" && (function () { this.media.loop = toggle; // Set default to be a true toggle /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle'; - switch (type) { - case 'start': - if (this.config.loop.end && this.config.loop.end <= this.currentTime) { - this.config.loop.end = null; - } - this.config.loop.start = this.currentTime; - // this.config.loop.indicator.start = this.elements.display.played.value; - break; - case 'end': - if (this.config.loop.start >= this.currentTime) { - return this; - } - this.config.loop.end = this.currentTime; - // this.config.loop.indicator.end = this.elements.display.played.value; - break; - case 'all': - this.config.loop.start = 0; - this.config.loop.end = this.duration - 2; - this.config.loop.indicator.start = 0; - this.config.loop.indicator.end = 100; - break; - case 'toggle': - if (this.config.loop.active) { - this.config.loop.start = 0; - this.config.loop.end = null; - } else { + switch (type) { + case 'start': + if (this.config.loop.end && this.config.loop.end <= this.currentTime) { + this.config.loop.end = null; + } + this.config.loop.start = this.currentTime; + // this.config.loop.indicator.start = this.elements.display.played.value; + break; + case 'end': + if (this.config.loop.start >= this.currentTime) { + return this; + } + this.config.loop.end = this.currentTime; + // this.config.loop.indicator.end = this.elements.display.played.value; + break; + case 'all': this.config.loop.start = 0; this.config.loop.end = this.duration - 2; - } - break; - default: - this.config.loop.start = 0; - this.config.loop.end = null; - break; - } */ + this.config.loop.indicator.start = 0; + this.config.loop.indicator.end = 100; + break; + case 'toggle': + if (this.config.loop.active) { + this.config.loop.start = 0; + this.config.loop.end = null; + } else { + this.config.loop.start = 0; + this.config.loop.end = this.duration - 2; + } + break; + default: + this.config.loop.start = 0; + this.config.loop.end = null; + break; + } */ } /** * Get current loop state @@ -25595,7 +29233,7 @@ typeof navigator === "object" && (function () { return null; } - return this.media.getAttribute('poster'); + return this.media.getAttribute('poster') || this.media.getAttribute('data-poster'); } /** * Get the current aspect ratio in use @@ -25812,7 +29450,10 @@ typeof navigator === "object" && (function () { label: 'French', srclang: 'fr', src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt' - }] + }], + previewThumbnails: { + src: ['https://cdn.plyr.io/static/demo/thumbs/100p.vtt', 'https://cdn.plyr.io/static/demo/thumbs/240p.vtt'] + } }, audio: { type: 'audio', @@ -25849,132 +29490,131 @@ typeof navigator === "object" && (function () { }; (function () { - var host = window.location.host; - var env = { - prod: host === 'plyr.io', - dev: host === 'dev.plyr.io' - }; + var production = 'plyr.io'; // Sentry for demo site (https://plyr.io) only + + if (window.location.host === production) { + init({ + dsn: 'https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555', + whitelistUrls: [production].map(function (d) { + return new RegExp("https://(([a-z0-9])+(.))*".concat(d)); + }) + }); + } + document.addEventListener('DOMContentLoaded', function () { - singleton.context(function () { - var selector = '#player'; // Setup share buttons + var selector = '#player'; // Setup share buttons - Shr.setup('.js-shr', { - count: { - className: 'button__count' - }, - wrapper: { - className: 'button--with-count' - } - }); // Setup the player - - var player = new Plyr(selector, { - debug: true, - title: 'View From A Blue Moon', - iconUrl: 'dist/demo.svg', - keyboard: { - global: true - }, - tooltips: { - controls: true - }, - captions: { - active: true - }, - ads: { - enabled: env.prod || env.dev, - publisherId: '918848828995742' - }, - previewThumbnails: { - enabled: true, - src: ['https://cdn.plyr.io/static/demo/thumbs/100p.vtt', 'https://cdn.plyr.io/static/demo/thumbs/240p.vtt'] - }, - vimeo: { - // Prevent Vimeo blocking plyr.io demo site - referrerPolicy: 'no-referrer' - } - }); // Expose for tinkering in the console + Shr.setup('.js-shr', { + count: { + className: 'button__count' + }, + wrapper: { + className: 'button--with-count' + } + }); // Setup the player - window.player = player; // Setup type toggle + var player = new Plyr(selector, { + debug: true, + title: 'View From A Blue Moon', + iconUrl: 'dist/demo.svg', + keyboard: { + global: true + }, + tooltips: { + controls: true + }, + captions: { + active: true + }, + ads: { + enabled: window.location.host.includes(production), + publisherId: '918848828995742' + }, + previewThumbnails: { + enabled: true, + src: ['https://cdn.plyr.io/static/demo/thumbs/100p.vtt', 'https://cdn.plyr.io/static/demo/thumbs/240p.vtt'] + }, + vimeo: { + // Prevent Vimeo blocking plyr.io demo site + referrerPolicy: 'no-referrer' + } + }); // Expose for tinkering in the console - var buttons = document.querySelectorAll('[data-source]'); - var types = Object.keys(sources); - var historySupport = Boolean(window.history && window.history.pushState); - var currentType = window.location.hash.substring(1); - var hasCurrentType = !currentType.length; + window.player = player; // Setup type toggle - function render(type) { - // Remove active classes - Array.from(buttons).forEach(function (button) { - return toggleClass$1(button.parentElement, 'active', false); - }); // Set active on parent + var buttons = document.querySelectorAll('[data-source]'); + var types = Object.keys(sources); + var historySupport = Boolean(window.history && window.history.pushState); + var currentType = window.location.hash.substring(1); + var hasInitialType = currentType.length; - toggleClass$1(document.querySelector("[data-source=\"".concat(type, "\"]")), 'active', true); // Show cite + function render(type) { + // Remove active classes + Array.from(buttons).forEach(function (button) { + return toggleClass$1(button.parentElement, 'active', false); + }); // Set active on parent - Array.from(document.querySelectorAll('.plyr__cite')).forEach(function (cite) { - // eslint-disable-next-line no-param-reassign - cite.hidden = true; - }); - document.querySelector(".plyr__cite--".concat(type)).hidden = false; - } // Set a new source + toggleClass$1(document.querySelector("[data-source=\"".concat(type, "\"]")), 'active', true); // Show cite + Array.from(document.querySelectorAll('.plyr__cite')).forEach(function (cite) { + // eslint-disable-next-line no-param-reassign + cite.hidden = true; + }); + document.querySelector(".plyr__cite--".concat(type)).hidden = false; + } // Set a new source - function setSource(type, init) { - // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video - if (!types.includes(type) || !init && type === currentType || !currentType.length && type === 'video') { - return; - } // Set the new source + function setSource(type, init) { + // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video + if (!types.includes(type) || !init && type === currentType || !currentType.length && type === 'video') { + return; + } // Set the new source - player.source = sources[type]; // Set the current type for next time - currentType = type; - render(type); - } // Bind to each button + player.source = sources[type]; // Set the current type for next time + currentType = type; + render(type); + } // Bind to each button - Array.from(buttons).forEach(function (button) { - button.addEventListener('click', function () { - var type = button.getAttribute('data-source'); - setSource(type); - - if (historySupport) { - window.history.pushState({ - type: type - }, '', "#".concat(type)); - } - }); - }); // List for backwards/forwards - window.addEventListener('popstate', function (event) { - if (event.state && Object.keys(event.state).includes('type')) { - setSource(event.state.type); + Array.from(buttons).forEach(function (button) { + button.addEventListener('click', function () { + var type = button.getAttribute('data-source'); + setSource(type); + + if (historySupport) { + window.history.pushState({ + type: type + }, '', "#".concat(type)); } - }); // If there's no current type set, assume video + }); + }); // List for backwards/forwards - if (hasCurrentType) { - currentType = 'video'; - } // Replace current history state + window.addEventListener('popstate', function (event) { + if (event.state && Object.keys(event.state).includes('type')) { + setSource(event.state.type); + } + }); // If there's no current type set, assume video + if (!hasInitialType) { + currentType = 'video'; + } // Replace current history state - if (historySupport && types.includes(currentType)) { - window.history.replaceState({ - type: currentType - }, '', hasCurrentType ? '' : "#".concat(currentType)); - } // If it's not video, load the source + if (historySupport && types.includes(currentType)) { + window.history.replaceState({ + type: currentType + }, '', hasInitialType ? "#".concat(currentType) : ''); + } // If it's not video, load the source - if (currentType !== 'video') { - setSource(currentType, true); - } - render(currentType); - }); - }); // Raven / Sentry - // For demo site (https://plyr.io) only + if (currentType !== 'video') { + setSource(currentType, true); + } - if (env.prod) { - singleton.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install(); - } + render(currentType); + }); })(); }()); |