aboutsummaryrefslogtreecommitdiffstats
path: root/demo/dist/demo.js
diff options
context:
space:
mode:
Diffstat (limited to 'demo/dist/demo.js')
-rw-r--r--demo/dist/demo.js13632
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);
+ });
})();
}());