UNPKG

@meta-track/core

Version:
1,565 lines (1,547 loc) 567 kB
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var n = 0, F = function () {}; return { s: F, n: function () { return n >= r.length ? { done: !0 } : { done: !1, value: r[n++] }; }, e: function (r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function () { t = t.call(r); }, n: function () { var r = t.next(); return a = r.done, r; }, e: function (r) { u = !0, o = r; }, f: function () { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _regeneratorRuntime() { _regeneratorRuntime = function () { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof Symbol ? Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function (t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { ["next", "throw", "return"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == typeof f && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i.return && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(typeof r + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), c(GeneratorFunctionPrototype, u, GeneratorFunction.displayName = "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function (r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function () { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function (r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function (t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function (t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function (t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, catch: function (t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function (r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } 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 isFlase(val) { return isBoolean(val) && String(val) === "false"; }; function isEmpty(wat) { return isString(wat) && wat.trim() === "" || wat === void 0 || wat === null; } var _window, _window$process, _window$process$versi; var isBrowserEnv = isWindow(typeof window !== "undefined" ? window : 0); var isElectronEnv = !!((_window = window) !== null && _window !== void 0 && (_window$process = _window.process) !== null && _window$process !== void 0 && (_window$process$versi = _window$process.versions) !== null && _window$process$versi !== void 0 && _window$process$versi.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.__metaTrack__ = _global.__metaTrack__ || {}; return _global.__metaTrack__; } function isInit() { return !!_global.__metaTrackInit__; } var _global = getGlobal(); var _support = getGlobalSupport(); var Dep = /*#__PURE__*/function () { function Dep() { _classCallCheck(this, Dep); // set结构可以自动去重,因为不可避免有些依赖会被重复添加 // 例如有两个计算属性是依赖于dataA,第一遍计算出那两个计算属性时,dataA的dep是收集了他俩的watcher // 但是当其中一个计算属性重新计算时(比如另外一个依赖项改动了会影响此计算属性重新计算),会再次调取dataA // 的get拦截,也就是会再次触发 dep.addSub(),如果不加重复过滤这样的场景会一直递增下去,然后当dataA发生 // 更改时遍历其subs,届时有太多不需要遍历的watcher,很大概率卡死 _defineProperty(this, "subs", /* @__PURE__ */new Set()); } return _createClass(Dep, [{ key: "addSub", value: // 全局唯一收集容器 function addSub() { if (Dep.target) this.subs.add(Dep.target); } }, { key: "notify", value: function notify() { for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) { params[_key] = arguments[_key]; } this.subs.forEach(function (watcher) { watcher.proxy.dirty = true; watcher.update.apply(watcher, params); }); } }]); }(); _defineProperty(Dep, "target", void 0); var OBSERVERSIGNBOARD = "__metatrackobserver__"; function isRegExp(value) { return Object.prototype.toString.call(value) === "[object RegExp]"; } var Observer = /*#__PURE__*/function () { function Observer(target) { _classCallCheck(this, Observer); _defineProperty(this, "target", void 0); this.target = target; } return _createClass(Observer, [{ key: "defineReactive", value: function defineReactive() { var dep = new Dep(); var handlers = getHandlers(function () { dep.addSub(); }, function (oldValue) { dep.notify(oldValue); }); return new Proxy(this.target, handlers); } }]); }(); function getHandlers(getCallBack, setCallBack) { var proxyCache = /* @__PURE__ */new WeakMap(); var handlers = { get: function get(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 set(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 = /*#__PURE__*/function () { function Watcher(vm, options, getter) { _classCallCheck(this, Watcher); _defineProperty(this, "vm", void 0); _defineProperty(this, "computed", void 0); _defineProperty(this, "watch", void 0); _defineProperty(this, "proxy", void 0); _defineProperty(this, "dep", void 0); _defineProperty(this, "getter", void 0); _defineProperty(this, "callback", void 0); 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(); } } return _createClass(Watcher, [{ key: "update", value: function update(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(); } } }, { key: "get", value: function get() { 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; } /** * 监听属性专用 - 拿到最新值并添加依赖 */ }, { key: "watchGet", value: function watchGet() { pushTarget(this); this.proxy.dirty = false; if (this.getter) { this.proxy.value = this.getter(); } popTarget(); } /** * 计算属性专用 - 添加依赖 * 其他值用到了这个计算属性就会被记录添加到依赖中 */ }, { key: "depend", value: function depend() { this.dep.addSub(); } }]); }(); var Computed = /*#__PURE__*/function () { function Computed(target) { _classCallCheck(this, Computed); _defineProperty(this, "target", void 0); this.target = target; } return _createClass(Computed, [{ key: "defineReactive", value: function defineReactive() { var computedWatcher = new Watcher(this, { computed: true }); var handlers = { get: function get() { if (computedWatcher.proxy.dirty) { computedWatcher.depend(); return computedWatcher.get(); } else { computedWatcher.depend(); return computedWatcher.proxy.value; } } }; return new Proxy(this.target, handlers); } }]); }(); 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: 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 = /*#__PURE__*/function () { function Options(initOptions2) { _classCallCheck(this, Options); _defineProperty(this, "dsn", ""); // 上报地址 _defineProperty(this, "appName", ""); // 应用名称 _defineProperty(this, "appCode", ""); // 应用code _defineProperty(this, "appVersion", ""); // 应用版本 _defineProperty(this, "userUuid", ""); // 用户id(外部填充进来的id) _defineProperty(this, "sdkUserUuid", ""); // 用户id(sdk内部生成的id) _defineProperty(this, "debug", false); // 是否开启调试模式(控制台会输出sdk动作) _defineProperty(this, "pv", { core: false // 页面跳转-是否自动发送页面跳转相关数据 }); _defineProperty(this, "performance", { core: false, // 性能数据-是否采集静态资源、接口的相关数据 firstResource: false, // 性能数据-是否采集首次进入页面的数据(ps: tcp连接耗时,HTML加载完成时间,首次可交互时间) server: false // 接口请求-是否采集接口请求(成功的才会采集) }); _defineProperty(this, "error", { core: false, // 是否采集异常数据(ps: 资源引入错误,promise错误,控制台输出错误) server: false // 接口请求-是否采集报错接口数据 }); _defineProperty(this, "event", { core: false // 页面点击-是否采集点击事件 }); _defineProperty(this, "recordScreen", true); // 是否启动录屏 _defineProperty(this, "ext", {}); // 自定义全局附加参数(放在baseInfo中) _defineProperty(this, "tracesSampleRate", 1); // 抽样发送 _defineProperty(this, "cacheMaxLength", 5); // 上报数据最大缓存数 _defineProperty(this, "cacheWatingTime", 5e3); // 上报数据最大等待时间 _defineProperty(this, "ignoreErrors", []); // 错误类型事件过滤 _defineProperty(this, "ignoreRequest", []); // 请求类型事件过滤 _defineProperty(this, "scopeError", false); // 当某个时间段报错时,会将此类错误转为特殊错误类型,会新增错误持续时间范围 _defineProperty(this, "localization", false); // 是否本地化:sdk不再主动发送事件,事件都存储在本地,由用户手动调用方法发送 _defineProperty(this, "sendTypeByXmlBody", false); // 是否强制指定发送形式为xml,body请求方式 // whiteScreen = false // 开启白屏检测 // 添加到行为列表前的 hook (在这里面可以给出错误类型,然后就能达到用户想拿到是何种事件类型的触发) _defineProperty(this, "beforePushEventList", []); // 数据上报前的 hook _defineProperty(this, "beforeSendData", []); // 数据上报后的 hook _defineProperty(this, "afterSendData", []); // 本地化存储溢出后的回调 _defineProperty(this, "localizationOverFlow", function () {}); var _options = this.transitionOptions(initOptions2); _options.ignoreRequest.push(new RegExp(_options.dsn)); deepAssign(this, _options); } /** * 对入参配置项进行转换 */ return _createClass(Options, [{ key: "transitionOptions", value: function transitionOptions(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; } }]); }(); 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; 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")]; 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; } var options; function initOptions(initOptions2) { if (!_validateMustFill(initOptions2) || !_validateInitOption(initOptions2)) return false; options = ref(new Options(initOptions2)); _support.options = options; return true; } function debug() { var _console; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (options.value.debug) (_console = console).log.apply(_console, ["@meta-track: "].concat(args)); } function logError() { var _console2; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } (_console2 = console).error.apply(_console2, ["@meta-track: "].concat(args)); } function on$1(target, eventName, handler) { var opitons = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; target.addEventListener(eventName, handler, opitons); } function replaceAop(source, name, replacement) { var isForced = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 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) { var runFirst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var timer = null; var lastArgs; return function () { var _this = this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } 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) { var runFirst = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var timer = null; return function () { var _this2 = this; for (var _len2 = arguments.length, arg = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { arg[_key2] = arguments[_key2]; } if (runFirst) { func.call.apply(func, [this].concat(arg)); runFirst = false; } if (timer) clearTimeout(timer); timer = setTimeout(function () { func.call.apply(func, [_this2].concat(arg)); }, wait); }; } function groupArray(arr) { var groups = /* @__PURE__ */new Map(); for (var _len3 = arguments.length, keys = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { keys[_key3 - 1] = arguments[_key3]; } var _iterator = _createForOfIteratorHelper(arr), _step; try { var _loop = function _loop() { var obj = _step.value; var key = keys.filter(function (k) { return obj[k]; }).map(function (k) { return obj[k]; }).join(":"); if (!groups.has(key)) { groups.set(key, []); } groups.get(key).push(obj); }; for (_iterator.s(); !(_step = _iterator.n()).done;) { _loop(); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return Array.from(groups.values()); } function deepAssign(target) { for (var _len4 = arguments.length, sources = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { sources[_key4 - 1] = arguments[_key4]; } 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) { var placeholder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "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("&"); var _iterator2 = _createForOfIteratorHelper(pairs), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var pair = _step2.value; var _pair$split = pair.split("="), _pair$split2 = _slicedToArray(_pair$split, 2), key = _pair$split2[0], value = _pair$split2[1]; params[decodeURIComponent(key)] = decodeURIComponent(value); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } return params; } function deepCopy(target) { var map2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : /* @__PURE__ */new Map(); if (target !== null && _typeof(target) === "object") { var res = map2.get(target); if (res) return res; if (target instanceof Array) { res = []; map2.set(target, res); target.forEach(function (item, index) { res[index] = deepCopy(item, map2); }); } else { res = {}; map2.set(target, res); Object.keys(target).forEach(function (key) { if (isValidKey(key, target)) { res[key] = deepCopy(target[key], map2); } }); } return res; } return target; } function formatDate(date) { if (!date) return ""; var d = new Date(date); var pad2 = function pad2(n) { return n.toString().padStart(2, "0"); }; var year = d.getFullYear(); var month = pad2(d.getMonth() + 1); var day = pad2(d.getDate()); var hours = pad2(d.getHours()); var minutes = pad2(d.getMinutes()); var seconds = pad2(d.getSeconds()); return "".concat(year, "-").concat(month, "-").concat(day, " ").concat(hours, ":").concat(minutes, ":").concat(seconds); } var version$1 = "1.0.4"; var DEVICE_KEY = "_meta_track_device_id"; var SESSION_KEY = "_meta_track_session_id"; var SURVIVIE_MILLI_SECONDS = 18e5; var SDK_LOCAL_KEY = "_meta_track_localization_key"; var SDK_VERSION = version$1; var EVENTTYPES = /* @__PURE__ */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"; return EVENTTYPES2; }(EVENTTYPES || {}); var SEDNEVENTTYPES = /* @__PURE__ */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"; return SEDNEVENTTYPES2; }(SEDNEVENTTYPES || {}); var SENDID = /* @__PURE__ */function (SENDID2) { SENDID2["PAGE"] = "page"; SENDID2["RESOURCE"] = "resource"; SENDID2["SERVER"] = "server"; SENDID2["CODE"] = "code"; SENDID2["REJECT"] = "reject"; SENDID2["CONSOLEERROR"] = "console.error"; return SENDID2; }(SENDID || {}); var WEBPAGELOAD = { 0: "navigate", // 网页通过点击链接,地址栏输入,表单提交,脚本操作等方式加载 1: "reload", // 网页通过“重新加载”按钮或者location.reload()方法加载 2: "back_forward", // 网页通过“前进”或“后退”按钮加载 255: "reserved" // 任何其他来源的加载 }; var EventBus = /*#__PURE__*/function () { function EventBus() { _classCallCheck(this, EventBus); _defineProperty(this, "handlers", void 0); this.handlers = {}; } /** * 为目标类型事件添加回调 * @param handler 需要被添加的类型以及回调函数 */ return _createClass(EventBus, [{ key: "addEvent", value: function addEvent(handler) { !this.handlers[handler.type] && (this.handlers[handler.type] = []); var funIndex = this._getCallbackIndex(handler); if (funIndex === -1) { var _this$handlers$handle; (_this$handlers$handle = this.handlers[handler.type]) === null || _this$handlers$handle === void 0 ? void 0 : _this$handlers$handle.push(handler.callback); } } /** * 为目标类型事件删除回调 * @param handler 需要被删除的类型以及回调函数 */ }, { key: "delEvent", value: function delEvent(handler) { var funIndex = this._getCallbackIndex(handler); if (funIndex !== -1) { var _this$handlers$handle2; (_this$handlers$handle2 = this.handlers[handler.type]) === null || _this$handlers$handle2 === void 0 ? void 0 : _this$handlers$handle2.splice(funIndex, 1); } } /** * 为目标类型事件更改回调 * @param handler 需要被更改的类型以及回调函数 * @param newCallback 新的回调函数 */ }, { key: "changeEvent", value: function changeEvent(handler, newCallback) { var funIndex = this._getCallbackIndex(handler); if (funIndex !== -1) { var _this$handlers$handle3; (_this$handlers$handle3 = this.handlers[handler.type]) === null || _this$handlers$handle3 === void 0 ? void 0 : _this$handlers$handle3.splice(funIndex, 1, newCallback); } } /** * 获取目标类型事件所有的回调 * @param type 事件类型 */ }, { key: "getEvent", value: function getEvent(type) { return this.handlers[type] || []; } /** * 执行目标类型事件所有的回调 * @param type 事件类型 * @param args 额外参数 */ }, { key: "runEvent", value: function runEvent(type) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var allEvent = this.getEvent(type); allEvent.forEach(function (fun) { fun.apply(void 0, args); }); } /** * 获取函数在 callback 列表中的位置 */ }, { key: "_getCallbackIndex", value: function _getCallbackIndex(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; } } }]); }(); 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 () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (!(args[0] && args[0].slice && args[0].slice(0, 12) === "@web-tracing")) { 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 () { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } eventBus.runEvent.apply(eventBus, [type].concat(args)); originalOpen.apply(this, args); }; }); } function replaceXHRSend(type) { if (!("XMLHttpRequest" in _global)) return; replaceAop(XMLHttpRequest.prototype, "send", function (originalSend) { return function () { for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { args[_key3] = arguments[_