@papa-sports/web-tracing-core
Version:
基于 JS 跨平台插件,为前端项目提供【 埋点、行为、性能、异常、请求、资源、路由、曝光、录屏 】监控手段
1,361 lines (1,334 loc) • 581 kB
JavaScript
(function (exports) {
'use strict';
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
var __assign = function() {
__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];
}
return t;
};
return __assign.apply(this, arguments);
};
function __awaiter$1(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
}
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};
function isType(type) {
return function (value) {
return Object.prototype.toString.call(value) === "[object ".concat(type, "]");
};
}
var isRegExp$1 = isType("RegExp");
var isNumber = isType("Number");
var isString = isType("String");
var isBoolean = isType("Boolean");
var isFunction = isType("Function");
var isArray = isType("Array");
var isWindow = isType("Window");
var isFlase = function (val) {
return isBoolean(val) && String(val) === "false";
};
function isEmpty(wat) {
return isString(wat) && wat.trim() === "" || wat === void 0 || wat === null;
}
var _a, _b;
var isBrowserEnv = isWindow(typeof window !== "undefined" ? window : 0);
var isElectronEnv = !!((_b = (_a = window === null || window === void 0 ? void 0 : window.process) === null || _a === void 0 ? void 0 : _a.versions) === null || _b === void 0 ? void 0 : _b.electron);
var isTestEnv = typeof navigator !== "undefined" && navigator.userAgent.includes("jsdom") ||
// @ts-expect-error: jsdom
typeof window !== "undefined" && window.jsdom;
function getGlobal() {
if (isBrowserEnv || isElectronEnv || isTestEnv) return window;
return {};
}
function getGlobalSupport() {
_global.__webTracing__ = _global.__webTracing__ || {};
return _global.__webTracing__;
}
function isInit() {
return !!_global.__webTracingInit__;
}
var _global = getGlobal();
var _support = getGlobalSupport();
var Dep = /** @class */
function () {
function Dep2() {
this.subs = /* @__PURE__ */new Set();
}
Dep2.prototype.addSub = function () {
if (Dep2.target) this.subs.add(Dep2.target);
};
Dep2.prototype.notify = function () {
var params = [];
for (var _i = 0; _i < arguments.length; _i++) {
params[_i] = arguments[_i];
}
this.subs.forEach(function (watcher) {
watcher.proxy.dirty = true;
watcher.update.apply(
// 标明数据脏了,当再次使用到这个值会重新计算
watcher, params);
});
};
return Dep2;
}();
var OBSERVERSIGNBOARD = "__webtracingobserver__";
function isRegExp(value) {
return Object.prototype.toString.call(value) === "[object RegExp]";
}
var Observer = /** @class */
function () {
function Observer2(target) {
this.target = target;
}
Observer2.prototype.defineReactive = function () {
var dep = new Dep();
var handlers = getHandlers(function () {
dep.addSub();
}, function (oldValue) {
dep.notify(oldValue);
});
return new Proxy(this.target, handlers);
};
return Observer2;
}();
function getHandlers(getCallBack, setCallBack) {
var proxyCache = /* @__PURE__ */new WeakMap();
var handlers = {
get: function (target, key, receiver) {
var value = Reflect.get(target, key, receiver);
getCallBack && getCallBack();
if (typeof value === "object" && value !== null && !isRegExp(value)) {
var proxy = proxyCache.get(value);
if (!proxy) {
proxy = new Proxy(value, handlers);
proxyCache.set(value, proxy);
}
return proxy;
}
return value;
},
set: function (target, key, value, receiver) {
var oldValue = Reflect.get(target, key, receiver);
if (oldValue === value) return oldValue;
var beforeTarget = JSON.parse(JSON.stringify(target));
var result = Reflect.set(target, key, value, receiver);
setCallBack && setCallBack(beforeTarget);
return result;
}
};
return handlers;
}
var refMap = /* @__PURE__ */new WeakMap();
function ref$1(target) {
var newObj = {
value: target
};
newObj[OBSERVERSIGNBOARD] = true;
var ob = new Observer(newObj);
var proxy = ob.defineReactive();
refMap.set(ob, proxy);
return proxy;
}
function isRef(ref2) {
return !!ref2[OBSERVERSIGNBOARD];
}
var targetStack = [];
function pushTarget(_target) {
if (Dep.target) targetStack.push(Dep.target);
Dep.target = _target;
}
function popTarget() {
Dep.target = targetStack.pop();
}
var Watcher = /** @class */
function () {
function Watcher2(vm, options, getter) {
var computed = options.computed,
watch = options.watch,
callback = options.callback;
this.getter = getter;
this.computed = computed || false;
this.watch = watch || false;
this.callback = callback;
this.proxy = {
value: "",
// 存储这个属性的值,在不需要更新的时候会直接取这个值
dirty: true
// 表示这个属性是否脏了(脏了代表需要重新运算更新这个值)
};
this.vm = vm;
if (computed) {
this.dep = new Dep();
} else if (watch) {
this.watchGet();
} else {
this.get();
}
}
Watcher2.prototype.update = function (oldValue) {
if (this.computed) {
this.dep.notify();
} else if (this.watch) {
if (oldValue !== this.proxy.value) {
this.callback && this.callback(this.proxy.value, oldValue);
}
} else {
this.get();
}
};
Watcher2.prototype.get = function () {
pushTarget(this);
var value = this.computed ? computedMap.get(this.vm).call(this.vm) : "";
if (value !== this.proxy.value) {
this.proxy.dirty = false;
this.proxy.value = value;
}
popTarget();
return value;
};
Watcher2.prototype.watchGet = function () {
pushTarget(this);
this.proxy.dirty = false;
if (this.getter) {
this.proxy.value = this.getter();
}
popTarget();
};
Watcher2.prototype.depend = function () {
this.dep.addSub();
};
return Watcher2;
}();
var Computed = /** @class */
function () {
function Computed2(target) {
this.target = target;
}
Computed2.prototype.defineReactive = function () {
var computedWatcher = new Watcher(this, {
computed: true
});
var handlers = {
get: function () {
if (computedWatcher.proxy.dirty) {
computedWatcher.depend();
return computedWatcher.get();
} else {
computedWatcher.depend();
return computedWatcher.proxy.value;
}
}
};
return new Proxy(this.target, handlers);
};
return Computed2;
}();
var computedMap = /* @__PURE__ */new WeakMap();
function computed$1(fun) {
var target = {
value: 0
};
target[OBSERVERSIGNBOARD] = true;
var ob = new Computed(target);
var proxy = ob.defineReactive();
computedMap.set(ob, fun);
return proxy;
}
function watchInit(callback, getter) {
new Watcher("", {
watch: true,
callback
}, getter);
}
function watch$1(target, fun) {
if (!isRef(target)) return;
watchInit(function (newValue, oldValue) {
fun(newValue, oldValue);
}, function () {
return target.value;
});
}
function hasProxy() {
return !!window.Proxy;
}
function ref(target) {
return hasProxy() ? ref$1(target) : {
value: target
};
}
function computed(fun) {
return hasProxy() ? computed$1(fun) : {
value: fun()
};
}
function watch(target, fun) {
return hasProxy() ? watch$1(target, fun) : function () {
return {};
};
}
var Options = /** @class */
function () {
function Options2(initOptions2) {
this.dsn = "";
this.appName = "";
this.appCode = "";
this.appVersion = "";
this.userUuid = "";
this.sdkUserUuid = "";
this.debug = false;
this.pv = {
core: false
// 页面跳转-是否自动发送页面跳转相关数据
};
this.performance = {
core: false,
// 性能数据-是否采集静态资源、接口的相关数据
firstResource: false,
// 性能数据-是否采集首次进入页面的数据(ps: tcp连接耗时,HTML加载完成时间,首次可交互时间)
server: false
// 接口请求-是否采集接口请求(成功的才会采集)
};
this.error = {
core: false,
// 是否采集异常数据(ps: 资源引入错误,promise错误,控制台输出错误)
server: false
// 接口请求-是否采集报错接口数据
};
this.event = {
core: false
// 页面点击-是否采集点击事件
};
this.recordScreen = true;
this.ext = {};
this.tracesSampleRate = 1;
this.cacheMaxLength = 5;
this.cacheWatingTime = 5e3;
this.ignoreErrors = [];
this.ignoreRequest = [];
this.scopeError = false;
this.localization = false;
this.sendTypeByXmlBody = false;
this.beforePushEventList = [];
this.beforeSendData = [];
this.afterSendData = [];
this.localizationOverFlow = function () {};
var _options = this.transitionOptions(initOptions2);
_options.ignoreRequest.push(new RegExp(_options.dsn));
deepAssign(this, _options);
}
Options2.prototype.transitionOptions = function (options2) {
var _options = deepAssign({}, this, options2);
var beforePushEventList = options2.beforePushEventList,
beforeSendData = options2.beforeSendData,
afterSendData = options2.afterSendData;
var pv = _options.pv,
performance = _options.performance,
error = _options.error,
event = _options.event;
if (typeof pv === "boolean") {
_options.pv = {
core: pv
};
}
if (typeof performance === "boolean") {
_options.performance = {
core: performance,
firstResource: performance,
server: performance
};
}
if (typeof error === "boolean") {
_options.error = {
core: error,
server: error
};
}
if (typeof event === "boolean") {
_options.event = {
core: event
};
}
if (beforePushEventList) {
_options.beforePushEventList = [beforePushEventList];
}
if (beforeSendData) {
_options.beforeSendData = [beforeSendData];
}
if (afterSendData) {
_options.afterSendData = [afterSendData];
}
return _options;
};
return Options2;
}();
function _validateInitOption(options2) {
var dsn = options2.dsn,
appName = options2.appName,
appCode = options2.appCode,
appVersion = options2.appVersion,
userUuid = options2.userUuid,
debug = options2.debug,
recordScreen = options2.recordScreen,
pv = options2.pv,
performance = options2.performance,
error = options2.error,
event = options2.event,
ext = options2.ext,
tracesSampleRate = options2.tracesSampleRate,
cacheMaxLength = options2.cacheMaxLength,
cacheWatingTime = options2.cacheWatingTime,
ignoreErrors = options2.ignoreErrors,
ignoreRequest = options2.ignoreRequest,
scopeError = options2.scopeError,
localization = options2.localization,
sendTypeByXmlBody = options2.sendTypeByXmlBody,
beforePushEventList = options2.beforePushEventList,
beforeSendData = options2.beforeSendData,
isParseDataCode = options2.isParseDataCode,
parseDataOption = options2.parseDataOption;
var validateFunList = [];
if (pv && typeof pv === "object") {
validateFunList.push(validateOption(pv.core, "pv.core", "boolean"));
} else {
validateFunList.push(validateOption(pv, "pv", "boolean"));
}
if (performance && typeof performance === "object") {
validateFunList.push(validateOption(performance.core, "performance.core", "boolean"), validateOption(performance.firstResource, "performance.firstResource", "boolean"), validateOption(performance.server, "performance.server", "boolean"));
} else {
validateFunList.push(validateOption(performance, "performance", "boolean"));
}
if (error && typeof error === "object") {
validateFunList.push(validateOption(error.core, "error.core", "boolean"), validateOption(error.server, "error.server", "boolean"));
} else {
validateFunList.push(validateOption(error, "error", "boolean"));
}
if (event && typeof event === "object") {
validateFunList.push(validateOption(event.core, "event.core", "boolean"));
} else {
validateFunList.push(validateOption(event, "event", "boolean"));
}
var validateList = [validateOption(dsn, "dsn", "string"), validateOption(appName, "appName", "string"), validateOption(appCode, "appCode", "string"), validateOption(appVersion, "appVersion", "string"), validateOption(userUuid, "userUuid", "string"), validateOption(debug, "debug", "boolean"), validateOption(recordScreen, "recordScreen", "boolean"), validateOption(ext, "ext", "object"), validateOption(tracesSampleRate, "tracesSampleRate", "number"), validateOption(cacheMaxLength, "cacheMaxLength", "number"), validateOption(cacheWatingTime, "cacheWatingTime", "number"), validateOption(ignoreErrors, "ignoreErrors", "array"), validateOptionArray(ignoreErrors, "ignoreErrors", ["string", "regexp"]), validateOption(ignoreRequest, "ignoreRequest", "array"), validateOptionArray(ignoreRequest, "ignoreRequest", ["string", "regexp"]), validateOption(scopeError, "scopeError", "boolean"), validateOption(localization, "localization", "boolean"), validateOption(sendTypeByXmlBody, "sendTypeByXmlBody", "boolean"),
// validateOption(whiteScreen, 'whiteScreen', 'boolean'),
validateOption(beforePushEventList, "beforePushEventList", "function"), validateOption(beforeSendData, "beforeSendData", "function"), validateOption(isParseDataCode, "isParseDataCode", "boolean"), validateOption(parseDataOption, "parseDataOption", "object")];
return validateList.every(function (res) {
return !!res;
});
}
function _validateMustFill(options2) {
var validateList = [validateOptionMustFill(options2.appName, "appName"), validateOptionMustFill(options2.dsn, "dsn")];
return validateList.every(function (res) {
return !!res;
});
}
function validateOptionMustFill(target, targetName) {
if (isEmpty(target)) {
logError("\u3010".concat(targetName, "\u3011\u53C2\u6570\u5FC5\u586B"));
return false;
}
return true;
}
function validateOption(target, targetName, expectType) {
if (!target || typeofAny(target) === expectType) return true;
logError("TypeError:\u3010".concat(targetName, "\u3011\u671F\u671B\u4F20\u5165").concat(expectType, "\u7C7B\u578B\uFF0C\u76EE\u524D\u662F").concat(typeofAny(target), "\u7C7B\u578B"));
return false;
}
function validateOptionArray(target, targetName, expectTypes) {
if (!target) return true;
var pass = true;
target.forEach(function (item) {
if (!expectTypes.includes(typeofAny(item))) {
logError("TypeError:\u3010".concat(targetName, "\u3011\u6570\u7EC4\u5185\u7684\u503C\u671F\u671B\u4F20\u5165").concat(expectTypes.join("|"), "\u7C7B\u578B\uFF0C\u76EE\u524D\u503C").concat(item, "\u662F").concat(typeofAny(item), "\u7C7B\u578B"));
pass = false;
}
});
return pass;
}
exports.options = void 0;
function initOptions(initOptions2) {
if (!_validateMustFill(initOptions2) || !_validateInitOption(initOptions2)) return false;
exports.options = ref(new Options(initOptions2));
_support.options = exports.options;
return true;
}
function debug() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (exports.options.value.debug) console.log.apply(console, __spreadArray(["@papa-sports: "], args, false));
}
function logError() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
console.error.apply(console, __spreadArray(["@papa-sports: "], args, false));
}
function on$1(target, eventName, handler, opitons) {
if (opitons === void 0) {
opitons = false;
}
target.addEventListener(eventName, handler, opitons);
}
function replaceAop(source, name, replacement, isForced) {
if (isForced === void 0) {
isForced = false;
}
if (source === void 0) return;
if (name in source || isForced) {
var original = source[name];
var wrapped = replacement(original);
if (isFunction(wrapped)) {
source[name] = wrapped;
}
}
}
function normalizeObj(source) {
Object.keys(source).forEach(function (p) {
var v = source[p];
if (isNumber(v)) {
source[p] = v === 0 ? void 0 : parseFloat(v.toFixed(2));
}
});
return source;
}
function getLocationHref() {
if (typeof document === "undefined" || document.location == null) return "";
return document.location.href;
}
function getTimestamp() {
return Date.now();
}
function throttle$1(func, wait, runFirst) {
if (runFirst === void 0) {
runFirst = false;
}
var timer = null;
var lastArgs;
return function () {
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
lastArgs = args;
if (timer === null) {
if (runFirst) {
func.apply(this, lastArgs);
}
timer = setTimeout(function () {
timer = null;
func.apply(_this, lastArgs);
}, wait);
}
};
}
function debounce(func, wait, runFirst) {
if (runFirst === void 0) {
runFirst = false;
}
var timer = null;
return function () {
var _this = this;
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i] = arguments[_i];
}
if (runFirst) {
func.call.apply(func, __spreadArray([this], arg, false));
runFirst = false;
}
if (timer) clearTimeout(timer);
timer = setTimeout(function () {
func.call.apply(func, __spreadArray([_this], arg, false));
}, wait);
};
}
function groupArray(arr) {
var keys = [];
for (var _i = 1; _i < arguments.length; _i++) {
keys[_i - 1] = arguments[_i];
}
var groups = /* @__PURE__ */new Map();
var _loop_1 = function (obj2) {
var key = keys.filter(function (k) {
return obj2[k];
}).map(function (k) {
return obj2[k];
}).join(":");
if (!groups.has(key)) {
groups.set(key, []);
}
groups.get(key).push(obj2);
};
for (var _a = 0, arr_1 = arr; _a < arr_1.length; _a++) {
var obj = arr_1[_a];
_loop_1(obj);
}
return Array.from(groups.values());
}
function deepAssign(target) {
var sources = [];
for (var _i = 1; _i < arguments.length; _i++) {
sources[_i - 1] = arguments[_i];
}
sources.forEach(function (source) {
for (var key in source) {
if (source[key] !== null && isRegExp$1(source[key])) {
target[key] = source[key];
} else if (source[key] !== null && typeof source[key] === "object") {
target[key] = deepAssign(target[key] || (isArray(source[key]) ? [] : {}), source[key]);
} else {
target[key] = source[key];
}
}
});
return target;
}
function validateMethods(methodsName) {
if (!isInit()) {
logError("".concat(methodsName, " \u9700\u8981\u5728SDK\u521D\u59CB\u5316\u4E4B\u540E\u4F7F\u7528"));
return false;
}
return true;
}
function typeofAny(target) {
return Object.prototype.toString.call(target).slice(8, -1).toLowerCase();
}
function isValidKey(key, object) {
return key in object;
}
function randomBoolean(randow) {
return Math.random() <= randow;
}
function pad(num, len, placeholder) {
if (placeholder === void 0) {
placeholder = "0";
}
var str = String(num);
if (str.length < len) {
var result = str;
for (var i = 0; i < len - str.length; i += 1) {
result = placeholder + result;
}
return result;
}
return str;
}
function getBaseUrl(url) {
return url.split("?")[0];
}
function uuid() {
var date = /* @__PURE__ */new Date();
var hexDate = parseInt("".concat(date.getFullYear()).concat(pad(date.getMonth() + 1, 2)).concat(pad(date.getDate(), 2)), 10).toString(16);
var hexTime = parseInt("".concat(pad(date.getHours(), 2)).concat(pad(date.getMinutes(), 2)).concat(pad(date.getSeconds(), 2)).concat(pad(date.getMilliseconds(), 3)), 10).toString(16);
var guid = hexDate + hexTime.length + hexTime;
while (guid.length < 32) {
guid += Math.floor(Math.random() * 16).toString(16);
}
return "".concat(guid.slice(0, 8), "-").concat(guid.slice(8, 16), "-").concat(guid.slice(16));
}
function getCookieByName(name) {
var result = document.cookie.match(new RegExp("".concat(name, "=([^;]+)(;|$)")));
return result ? result[1] : void 0;
}
function sendByBeacon(url, data) {
return navigator.sendBeacon(url, JSON.stringify(data));
}
var sendReaconImageList = [];
function sendByImage(url, data) {
return new Promise(function (resolve) {
var beacon = new Image();
beacon.src = "".concat(url, "?v=").concat(encodeURIComponent(JSON.stringify(data)));
sendReaconImageList.push(beacon);
beacon.onload = function () {
resolve();
};
beacon.onerror = function () {
resolve();
};
});
}
function sendByXML(url, data) {
return new Promise(function (resolve) {
var xhr = new XMLHttpRequest();
xhr.open("post", url);
xhr.setRequestHeader("content-type", "application/json");
xhr.send(JSON.stringify(data));
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
resolve();
}
};
});
}
function executeFunctions(funList, through, args) {
if (funList.length === 0) return args;
var result = void 0;
for (var i = 0; i < funList.length; i++) {
var func = funList[i];
if (i === 0 || through) {
result = func(args);
} else {
result = func(result);
}
}
return result;
}
function unKnowToArray(target) {
return isArray(target) ? target : [target];
}
var arrayMap = Array.prototype.map || function polyfillMap(fn) {
var result = [];
for (var i = 0; i < this.length; i += 1) {
result.push(fn(this[i], i, this));
}
return result;
};
function map(arr, fn) {
return arrayMap.call(arr, fn);
}
var arrayFilter = Array.prototype.filter || function filterPolyfill(fn) {
var result = [];
for (var i = 0; i < this.length; i += 1) {
if (fn(this[i], i, this)) {
result.push(this[i]);
}
}
return result;
};
function filter(arr, fn) {
return arrayFilter.call(arr, fn);
}
var nextTime = window.requestIdleCallback || window.requestAnimationFrame || function (callback) {
return setTimeout(callback, 17);
};
function isObjectOverSizeLimit(object, limitInKB) {
var serializedObject = JSON.stringify(object);
var sizeInBytes = new TextEncoder().encode(serializedObject).length;
var sizeInKB = sizeInBytes / 1024;
return sizeInKB > limitInKB;
}
function parseGetParams(url) {
var params = {};
var query = url.split("?")[1];
if (query) {
var pairs = query.split("&");
for (var _i = 0, pairs_1 = pairs; _i < pairs_1.length; _i++) {
var pair = pairs_1[_i];
var _a = pair.split("="),
key = _a[0],
value = _a[1];
params[decodeURIComponent(key)] = decodeURIComponent(value);
}
}
return params;
}
function deepCopy(target, map2) {
if (map2 === void 0) {
map2 = /* @__PURE__ */new Map();
}
if (target !== null && typeof target === "object") {
var res_1 = map2.get(target);
if (res_1) return res_1;
if (target instanceof Array) {
res_1 = [];
map2.set(target, res_1);
target.forEach(function (item, index) {
res_1[index] = deepCopy(item, map2);
});
} else {
res_1 = {};
map2.set(target, res_1);
Object.keys(target).forEach(function (key) {
if (isValidKey(key, target)) {
res_1[key] = deepCopy(target[key], map2);
}
});
}
return res_1;
}
return target;
}
var version$1 = "2.0.13";
var DEVICE_KEY = "_webtracing_device_id";
var SESSION_KEY = "_webtracing_session_id";
var SURVIVIE_MILLI_SECONDS = 18e5;
var SDK_LOCAL_KEY = "_webtracing_localization_key";
var SDK_VERSION = version$1;
var EVENTTYPES;
(function (EVENTTYPES2) {
EVENTTYPES2["ERROR"] = "error";
EVENTTYPES2["CONSOLEERROR"] = "consoleError";
EVENTTYPES2["UNHANDLEDREJECTION"] = "unhandledrejection";
EVENTTYPES2["CLICK"] = "click";
EVENTTYPES2["LOAD"] = "load";
EVENTTYPES2["BEFOREUNLOAD"] = "beforeunload";
EVENTTYPES2["FETCH"] = "fetch";
EVENTTYPES2["XHROPEN"] = "xhr-open";
EVENTTYPES2["XHRSEND"] = "xhr-send";
EVENTTYPES2["HASHCHANGE"] = "hashchange";
EVENTTYPES2["HISTORYPUSHSTATE"] = "history-pushState";
EVENTTYPES2["HISTORYREPLACESTATE"] = "history-replaceState";
EVENTTYPES2["POPSTATE"] = "popstate";
EVENTTYPES2["READYSTATECHANGE"] = "readystatechange";
EVENTTYPES2["ONLINE"] = "online";
EVENTTYPES2["OFFLINE"] = "offline";
})(EVENTTYPES || (EVENTTYPES = {}));
var SEDNEVENTTYPES;
(function (SEDNEVENTTYPES2) {
SEDNEVENTTYPES2["PV"] = "pv";
SEDNEVENTTYPES2["PVDURATION"] = "pv-duration";
SEDNEVENTTYPES2["ERROR"] = "error";
SEDNEVENTTYPES2["PERFORMANCE"] = "performance";
SEDNEVENTTYPES2["CLICK"] = "click";
SEDNEVENTTYPES2["DWELL"] = "dwell";
SEDNEVENTTYPES2["CUSTOM"] = "custom";
SEDNEVENTTYPES2["INTERSECTION"] = "intersection";
})(SEDNEVENTTYPES || (SEDNEVENTTYPES = {}));
exports.SENDID = void 0;
(function (SENDID2) {
SENDID2["PAGE"] = "page";
SENDID2["RESOURCE"] = "resource";
SENDID2["SERVER"] = "server";
SENDID2["CODE"] = "code";
SENDID2["REJECT"] = "reject";
SENDID2["CONSOLEERROR"] = "console.error";
})(exports.SENDID || (exports.SENDID = {}));
var WEBPAGELOAD = {
0: "navigate",
// 网页通过点击链接,地址栏输入,表单提交,脚本操作等方式加载
1: "reload",
// 网页通过“重新加载”按钮或者location.reload()方法加载
2: "back_forward",
// 网页通过“前进”或“后退”按钮加载
255: "reserved"
// 任何其他来源的加载
};
var EventBus = /** @class */
function () {
function EventBus2() {
this.handlers = {};
}
EventBus2.prototype.addEvent = function (handler) {
var _a;
!this.handlers[handler.type] && (this.handlers[handler.type] = []);
var funIndex = this._getCallbackIndex(handler);
if (funIndex === -1) {
(_a = this.handlers[handler.type]) === null || _a === void 0 ? void 0 : _a.push(handler.callback);
}
};
EventBus2.prototype.delEvent = function (handler) {
var _a;
var funIndex = this._getCallbackIndex(handler);
if (funIndex !== -1) {
(_a = this.handlers[handler.type]) === null || _a === void 0 ? void 0 : _a.splice(funIndex, 1);
}
};
EventBus2.prototype.changeEvent = function (handler, newCallback) {
var _a;
var funIndex = this._getCallbackIndex(handler);
if (funIndex !== -1) {
(_a = this.handlers[handler.type]) === null || _a === void 0 ? void 0 : _a.splice(funIndex, 1, newCallback);
}
};
EventBus2.prototype.getEvent = function (type) {
return this.handlers[type] || [];
};
EventBus2.prototype.runEvent = function (type) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var allEvent = this.getEvent(type);
allEvent.forEach(function (fun) {
fun.apply(void 0, args);
});
};
EventBus2.prototype._getCallbackIndex = function (handler) {
if (this.handlers[handler.type]) {
var callbackList = this.handlers[handler.type];
if (callbackList) {
return callbackList.findIndex(function (fun) {
return fun === handler.callback;
});
} else {
return -1;
}
} else {
return -1;
}
};
return EventBus2;
}();
var eventBus = _support.eventBus || (_support.eventBus = new EventBus());
function initReplace() {
for (var key in EVENTTYPES) {
if (isValidKey(key, EVENTTYPES)) {
replace(key);
}
}
}
function replace(type) {
if (!isValidKey(type, EVENTTYPES)) return;
var value = EVENTTYPES[type];
switch (value) {
case EVENTTYPES.ERROR:
listenError(EVENTTYPES.ERROR);
break;
case EVENTTYPES.UNHANDLEDREJECTION:
listenUnhandledrejection(EVENTTYPES.UNHANDLEDREJECTION);
break;
case EVENTTYPES.CONSOLEERROR:
replaceConsoleError(EVENTTYPES.CONSOLEERROR);
break;
case EVENTTYPES.CLICK:
listenClick(EVENTTYPES.CLICK);
break;
case EVENTTYPES.LOAD:
listenLoad(EVENTTYPES.LOAD);
break;
case EVENTTYPES.BEFOREUNLOAD:
listenBeforeunload(EVENTTYPES.BEFOREUNLOAD);
break;
case EVENTTYPES.XHROPEN:
replaceXHROpen(EVENTTYPES.XHROPEN);
break;
case EVENTTYPES.XHRSEND:
replaceXHRSend(EVENTTYPES.XHRSEND);
break;
case EVENTTYPES.FETCH:
replaceFetch(EVENTTYPES.FETCH);
break;
case EVENTTYPES.HASHCHANGE:
listenHashchange(EVENTTYPES.HASHCHANGE);
break;
case EVENTTYPES.HISTORYPUSHSTATE:
replaceHistoryPushState(EVENTTYPES.HISTORYPUSHSTATE);
break;
case EVENTTYPES.HISTORYREPLACESTATE:
replaceHistoryReplaceState(EVENTTYPES.HISTORYREPLACESTATE);
break;
case EVENTTYPES.POPSTATE:
listenPopState(EVENTTYPES.POPSTATE);
break;
case EVENTTYPES.OFFLINE:
listenOffline(EVENTTYPES.OFFLINE);
break;
case EVENTTYPES.ONLINE:
listenOnline(EVENTTYPES.ONLINE);
break;
}
}
function listenError(type) {
on$1(_global, "error", function (e) {
eventBus.runEvent(type, e);
}, true);
}
function listenUnhandledrejection(type) {
on$1(_global, "unhandledrejection", function (ev) {
eventBus.runEvent(type, ev);
});
}
function replaceConsoleError(type) {
replaceAop(console, "error", function (originalError) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (!(args[0] && args[0].slice && args[0].slice(0, 12) === "@papa-sports")) {
eventBus.runEvent(type, args);
}
originalError.apply(this, args);
};
});
}
function listenClick(type) {
if (!("document" in _global)) return;
var clickThrottle = throttle$1(eventBus.runEvent, 100, true);
on$1(_global.document, "click", function (e) {
clickThrottle.call(eventBus, type, e);
}, true);
}
function listenLoad(type) {
on$1(_global, "load", function (e) {
eventBus.runEvent(type, e);
}, true);
}
function listenBeforeunload(type) {
on$1(_global, "beforeunload", function (e) {
eventBus.runEvent(type, e);
}, false);
}
function replaceXHROpen(type) {
if (!("XMLHttpRequest" in _global)) return;
replaceAop(XMLHttpRequest.prototype, "open", function (originalOpen) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
eventBus.runEvent.apply(eventBus, __spreadArray([type], args, false));
originalOpen.apply(this, args);
};
});
}
function replaceXHRSend(type) {
if (!("XMLHttpRequest" in _global)) return;
replaceAop(XMLHttpRequest.prototype, "send", function (originalSend) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
eventBus.runEvent.apply(eventBus, __spreadArray([type, this], args, false));
originalSend.apply(this, args);
};
});
}
function replaceFetch(type) {
if (!("fetch" in _global)) return;
replaceAop(_global, "fetch", function (originalFetch) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var fetchStart = getTimestamp();
var traceObj = {};
return originalFetch.apply(_global, args).then(function (res) {
eventBus.runEvent(type, args[0], args[1], res, fetchStart, traceObj);
return res;
});
};
});
}
function listenHashchange(type) {
on$1(_global, "hashchange", function (e) {
eventBus.runEvent(type, e);
});
}
function replaceHistoryReplaceState(type) {
if (!("history" in _global)) return;
if (!("pushState" in _global.history)) return;
replaceAop(_global.history, "replaceState", function (originalSend) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
eventBus.runEvent.apply(eventBus, __spreadArray([type], args, false));
originalSend.apply(this, args);
};
});
}
function replaceHistoryPushState(type) {
if (!("history" in _global)) return;
if (!("pushState" in _global.history)) return;
replaceAop(_global.history, "pushState", function (originalSend) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
eventBus.runEvent.apply(eventBus, __spreadArray([type], args, false));
originalSend.apply(this, args);
};
});
}
function listenPopState(type) {
on$1(_global, "popstate", function (e) {
eventBus.runEvent(type, e);
});
}
function listenOffline(type) {
on$1(_global, "offline", function (e) {
eventBus.runEvent(type, e);
}, true);
}
function listenOnline(type) {
on$1(_global, "online", function (e) {
eventBus.runEvent(type, e);
}, true);
}
var e = function () {
return e = Object.assign || function (e2) {
for (var n2, t2 = 1, r2 = arguments.length; t2 < r2; t2++) for (var o_1 in n2 = arguments[t2]) Object.prototype.hasOwnProperty.call(n2, o_1) && (e2[o_1] = n2[o_1]);
return e2;
}, e.apply(this, arguments);
};
function n(e2, n2, t2, r2) {
return new (t2 || (t2 = Promise))(function (o2, a2) {
function i2(e3) {
try {
u2(r2.next(e3));
} catch (n3) {
a2(n3);
}
}
function c2(e3) {
try {
u2(r2.throw(e3));
} catch (n3) {
a2(n3);
}
}
function u2(e3) {
var n3;
e3.done ? o2(e3.value) : (n3 = e3.value, n3 instanceof t2 ? n3 : new t2(function (e4) {
e4(n3);
})).then(i2, c2);
}
u2((r2 = r2.apply(e2, n2 || [])).next());
});
}
function t(e2, n2) {
var t2,
r2,
o2,
a2,
i2 = {
label: 0,
sent: function () {
if (1 & o2[0]) throw o2[1];
return o2[1];
},
trys: [],
ops: []
};
return a2 = {
next: c2(0),
throw: c2(1),
return: c2(2)
}, "function" == typeof Symbol && (a2[Symbol.iterator] = function () {
return this;
}), a2;
function c2(c3) {
return function (u2) {
return function (c4) {
if (t2) throw new TypeError("Generator is already executing.");
for (; a2 && (a2 = 0, c4[0] && (i2 = 0)), i2;) try {
if (t2 = 1, r2 && (o2 = 2 & c4[0] ? r2.return : c4[0] ? r2.throw || ((o2 = r2.return) && o2.call(r2), 0) : r2.next) && !(o2 = o2.call(r2, c4[1])).done) return o2;
switch (r2 = 0, o2 && (c4 = [2 & c4[0], o2.value]), c4[0]) {
case 0:
case 1:
o2 = c4;
break;
case 4:
return i2.label++, {
value: c4[1],
done: false
};
case 5:
i2.label++, r2 = c4[1], c4 = [0];
continue;
case 7:
;
c4 = i2.ops.pop(), i2.trys.pop();
continue;
default:
if (!(o2 = i2.trys, (o2 = o2.length > 0 && o2[o2.length - 1]) || 6 !== c4[0] && 2 !== c4[0])) {
i2 = 0;
continue;
}
if (3 === c4[0] && (!o2 || c4[1] > o2[0] && c4[1] < o2[3])) {
i2.label = c4[1];
break;
}
if (6 === c4[0] && i2.label < o2[1]) {
;
i2.label = o2[1], o2 = c4;
break;
}
if (o2 && i2.label < o2[2]) {
;
i2.label = o2[2], i2.ops.push(c4);
break;
}
o2[2] && i2.ops.pop(), i2.trys.pop();
continue;
}
c4 = n2.call(e2, i2);
} catch (u3) {
c4 = [6, u3], r2 = 0;
} finally {
t2 = o2 = 0;
}
if (5 & c4[0]) throw c4[1];
return {
value: c4[0] ? c4[1] : void 0,
done: true
};
}([c3, u2]);
};
}
}
function r(e2, n2, t2) {
if (t2 || 2 === arguments.length) for (var r2, o2 = 0, a2 = n2.length; o2 < a2; o2++) !r2 && o2 in n2 || (r2 || (r2 = Array.prototype.slice.call(n2, 0, o2)), r2[o2] = n2[o2]);
return e2.concat(r2 || Array.prototype.slice.call(n2));
}
function o(e2, n2) {
return new Promise(function (t2) {
return setTimeout(t2, e2, n2);
});
}
function a(e2) {
return !!e2 && "function" == typeof e2.then;
}
function i$1(e2, n2) {
try {
var t_1 = e2();
a(t_1) ? t_1.then(function (e3) {
return n2(true, e3);
}, function (e3) {
return n2(false, e3);
}) : n2(true, t_1);
} catch (r2) {
n2(false, r2);
}
}
function c(e2, r2, a2) {
return void 0 === a2 && (a2 = 16), n(this, void 0, void 0, function () {
var n2, i2, c2;
return t(this, function (t2) {
switch (t2.label) {
case 0:
n2 = Date.now(), i2 = 0, t2.label = 1;
case 1:
return i2 < e2.length ? (r2(e2[i2], i2), (c2 = Date.now()) >= n2 + a2 ? (n2 = c2, [4, o(0)]) : [3, 3]) : [3, 4];
case 2:
t2.sent(), t2.label = 3;
case 3:
return ++i2, [3, 1];
case 4:
return [2];
}
});
});
}
function u(e2) {
e2.then(void 0, function () {});
}
function l(e2, n2) {
e2 = [e2[0] >>> 16, 65535 & e2[0], e2[1] >>> 16, 65535 & e2[1]], n2 = [n2[0] >>> 16, 65535 & n2[0], n2[1] >>> 16, 65535 & n2[1]];
var t2 = [0, 0, 0, 0];
return t2[3] += e2[3] + n2[3], t2[2] += t2[3] >>> 16, t2[3] &= 65535, t2[2] += e2[2] + n2[2], t2[1] += t2[2] >>> 16, t2[2] &= 65535, t2[1] += e2[1] + n2[1], t2[0] += t2[1] >>> 16, t2[1] &= 65535, t2[0] += e2[0] + n2[0], t2[0] &= 65535, [t2[0] << 16 | t2[1], t2[2] << 16 | t2[3]];
}
function s(e2, n2) {
e2 = [e2[0] >>> 16, 65535 & e2[0], e2[1] >>> 16, 65535 & e2[1]], n2 = [n2[0] >>> 16, 65535 & n2[0], n2[1] >>> 16, 65535 & n2[1]];
var t2 = [0, 0, 0, 0];
return t2[3] += e2[3] * n2[3], t2[2] += t2[3] >>> 16, t2[3] &= 65535, t2[2] += e2[2] * n2[3], t2[1] += t2[2] >>> 16, t2[2] &= 65535, t2[2] += e2[3] * n2[2], t2[1] += t2[2] >>> 16, t2[2] &= 65535, t2[1] += e2[1] * n2[3], t2[0] += t2[1] >>> 16, t2[1] &= 65535, t2[1] += e2[2] * n2[2], t2[0] += t2[1] >>> 16, t2[1] &= 65535, t2[1] += e2[3] * n2[1], t2[0] += t2[1] >>> 16, t2[1] &= 65535, t2[0] += e2[0] * n2[3] + e2[1] * n2[2] + e2[2] * n2[1] + e2[3] * n2[0], t2[0] &= 65535, [t2[0] << 16 | t2[1], t2[2] << 16 | t2[3]];
}
function d(e2, n2) {
return 32 === (n2 %= 64) ? [e2[1], e2[0]] : n2 < 32 ? [e2[0] << n2 | e2[1] >>> 32 - n2, e2[1] << n2 | e2[0] >>> 32 - n2] : (n2 -= 32, [e2[1] << n2 | e2[0] >>> 32 - n2, e2[0] << n2 | e2[1] >>> 32 - n2]);
}
function m(e2, n2) {
return 0 === (n2 %= 64) ? e2 : n2 < 32 ? [e2[0] << n2 | e2[1] >>> 32 - n2, e2[1] << n2] : [e2[1] << n2 - 32, 0];
}
function f(e2, n2) {
return [e2[0] ^ n2[0], e2[1] ^ n2[1]];
}
function v(e2) {
return e2 = f(e2, [0, e2[0] >>> 1]), e2 = f(e2 = s(e2, [4283543511, 3981806797]), [0, e2[0] >>> 1]), e2 = f(e2 = s(e2, [3301882366, 444984403]), [0, e2[0] >>> 1]);
}
function h(e2, n2) {
n2 = n2 || 0;
var t2,
r2 = (e2 = e2 || "").length % 16,
o2 = e2.length - r2,
a2 = [0, n2],
i2 = [0, n2],
c2 = [0, 0],
u2 = [0, 0],
h2 = [2277735313, 289559509],
b2 = [1291169091, 658871167];
for (t2 = 0; t2 < o2; t2 += 16) c2 = [255 & e2.charCodeAt(t2 + 4) | (255 & e2.charCodeAt(t2 + 5)) << 8 | (255 & e2.charCodeAt(t2 + 6)) << 16 | (255 & e2.charCodeAt(t2 + 7)) << 24, 255 & e2.charCodeAt(t2) | (255 & e2.charCodeAt(t2 + 1)) << 8 | (255 & e2.charCodeAt(t2 + 2)) << 16 | (255 & e2.charCodeAt(t2 + 3)) << 24], u2 = [255 & e2.charCodeAt(t2 + 12) | (255 & e2.charCodeAt(t2 + 13)) << 8 | (255 & e2.charCodeAt(t2 + 14)) << 16 | (255 & e2.charCodeAt(t2 + 15)) << 24, 255 & e2.charCodeAt(t2 + 8) | (255 & e2.charCodeAt(t2 + 9)) << 8 | (255 & e2.charCodeAt(t2 + 10)) << 16 | (255 & e2.charCodeAt(t2 + 11)) << 24], c2 = d(c2 = s(c2, h2), 31), a2 = l(a2 = d(a2 = f(a2, c2 = s(c2, b2)), 27), i2), a2 = l(s(a2, [0, 5]), [0, 1390208809]), u2 = d(u2 = s(u2, b2), 33), i2 = l(i2 = d(i2 = f(i2, u2 = s(u2, h2)), 31), a2), i2 = l(s(i2, [0, 5]), [0, 944331445]);
switch (c2 = [0, 0], u2 = [0, 0], r2) {
case 15:
u2 = f(u2, m([0, e2.charCodeAt(t2 + 14)], 48));
case 14:
u2 = f(u2, m([0, e2.charCodeAt(t2 + 13)], 40));
case 13:
u2 = f(u2, m([0, e2.charCodeAt(t2 + 12)], 32));
case 12:
u2 = f(u2, m([0, e2.charCodeAt(t2 + 11)], 24));
case 11:
u2 = f(u2, m([0, e2.charCodeAt(t2 + 10)], 16));
case 10:
u2 = f(u2, m([0, e2.charCodeAt(t2 + 9)], 8));
case 9:
u2 = s(u2 = f(u2, [0, e2.charCodeAt(t2 + 8)]), b2), i2 = f(i2, u2 = s(u2 = d(u2, 33), h2));
case 8:
c2 = f(c2, m([0, e2.charCodeAt(t2 + 7)], 56));
case 7:
c2 = f(c2, m([0, e2.charCodeAt(t2 + 6)], 48));
case 6:
c2 = f(c2, m([0, e2.charCodeAt(t2 + 5)], 40));
case 5:
c2 = f(c2, m([0, e2.charCodeAt(t2 + 4)], 32));
case 4:
c2 = f(c2, m([0, e2.charCodeAt(t2 + 3)], 24));
case 3:
c2 = f(c2, m([0, e2.charCodeAt(t2 + 2)], 16));
case 2: