cwj_monitoring 0.0.21 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -22
- package/dist/index.d.ts +25 -0
- package/dist/index.js +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -1,35 +1,51 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 🚀 前端监控 SDK DEMO
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> ⚠️ **注意**:这是一个简易的前端监控 SDK DEMO,仅供学习使用,请勿在生产环境中使用!
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 🌟 功能概览
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
| 功能类别 | 具体功能 | 状态 |
|
|
8
|
+
|----------------|--------------------------------------------------------------------------|------|
|
|
9
|
+
| **行为监控** | 🔍 点击监控、🔄 页面跳转监控、⏱️ 页面停留时间监控 | ✅ |
|
|
10
|
+
| **错误监控** | ❌ JS错误、🖼️ 资源加载错误、💻 console.error错误、🤞 Promise未捕获错误 | ✅ |
|
|
11
|
+
| **性能监控** | ⚡ DCL、FP、FCP、LCP、Load、FPS 等性能指标 | ✅ |
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
## 📦 安装
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
npm i cwj_monitoring
|
|
15
|
+
```bash
|
|
16
|
+
npm install cwj_monitoring
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## 🛠️ 使用指南
|
|
20
|
+
|
|
21
|
+
1.基础用法
|
|
20
22
|
|
|
21
23
|
```js
|
|
22
|
-
import { init
|
|
24
|
+
import { init, TYPES } from 'cwj_monitoring';
|
|
23
25
|
|
|
24
|
-
//使用 init 全局进行初始化
|
|
25
26
|
init({
|
|
26
|
-
url: 'http://localhost:8080',
|
|
27
|
-
max: 10,
|
|
28
|
-
time: 60000,
|
|
29
|
-
plugin:[
|
|
30
|
-
|
|
27
|
+
url: 'http://localhost:8080', // 🔴 必填 - 数据上报地址
|
|
28
|
+
max: 10, // 🔵 可选 - 最大缓存数(默认5)
|
|
29
|
+
time: 60000, // 🔵 可选 - 最大缓存时间(默认30s)
|
|
30
|
+
plugin: [ // 🔵 可选 - 要启用的插件,不传plugin则启动所有插件
|
|
31
|
+
TYPES.ERROR, // 错误监控
|
|
32
|
+
TYPES.CLICK, // 点击监控
|
|
33
|
+
TYPES.PERFORMANCE, // 性能监控
|
|
34
|
+
TYPES.ROUTER // 路由监控
|
|
35
|
+
],
|
|
36
|
+
data: { // 🔵 可选 - 自定义元数据
|
|
37
|
+
vs: '0.1.1', // 版本号
|
|
38
|
+
env: 'production' // 环境标识
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
2.手动上报错误
|
|
43
|
+
```js
|
|
44
|
+
// 适用于Vue/React等框架的错误捕获
|
|
45
|
+
window.$track.emit('ERROR_TYPE', {
|
|
46
|
+
message: '自定义错误信息',
|
|
47
|
+
// 其他错误详情...
|
|
31
48
|
});
|
|
32
|
-
|
|
33
|
-
//无论vue的全局错误捕获,还是react的错误边界,都可使用window.$track.emit手动上传错误
|
|
34
|
-
window.$track.emit(type, data);
|
|
35
49
|
```
|
|
50
|
+
## 🤝 参与贡献
|
|
51
|
+
欢迎提交Issue或PR!🎉
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
type Plugin = 'error' | 'click' | 'performance' | 'router';
|
|
2
|
+
|
|
3
|
+
//初始化时传入的参数
|
|
4
|
+
interface Options {
|
|
5
|
+
url: string;
|
|
6
|
+
max?: number;
|
|
7
|
+
time?: number;
|
|
8
|
+
plugin?: Plugin[];
|
|
9
|
+
data?: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare enum TYPES {
|
|
13
|
+
ERROR = "error",
|
|
14
|
+
CLICK = "click",
|
|
15
|
+
PERFORMANCE = "performance",
|
|
16
|
+
ROUTER = "router"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare const init: (options: Options) => void;
|
|
20
|
+
|
|
21
|
+
declare const _default: {
|
|
22
|
+
init: (options: Options) => void;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { TYPES, _default as default, init };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e,t=new Uint8Array(16);function r(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(t)}for(var i=[],n=0;n<256;++n)i.push((n+256).toString(16).slice(1));var s={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function o(e,t,n){if(s.randomUUID&&!t&&!e)return s.randomUUID();var o=(e=e||{}).random||(e.rng||r)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){n=n||0;for(var a=0;a<16;++a)t[n+a]=o[a];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]).toLowerCase()}(o)}const a="track_uuid",c=e=>{const t=new Date(e),r=t.getFullYear(),i=t.getMonth()+1,n=t.getDate(),s=t.getHours(),o=t.getMinutes(),a=t.getSeconds(),c=e=>{let t="";return t=e<10?"0"+e:e.toString(),t};return r+"-"+c(i)+"-"+c(n)+" "+c(s)+":"+c(o)+":"+c(a)};function u(e){return/^\d+$/.test(e.toString())}const d=window.requestIdleCallback||window.requestAnimationFrame||(e=>window.setTimeout(e,1e3/60));class l{nextValidator;constructor(){this.nextValidator=null}}const h=new class extends l{constructor(){super()}setNext(e){this.nextValidator=e}validate(e){return t=e.url,new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)?!this.nextValidator||this.nextValidator.validate(e):(console.error("请输入符合规范的url"),!1);var t}},f=new class extends l{constructor(){super()}setNext(e){this.nextValidator=e}validate(e){return e.max&&!u(e.max)?(console.error("max请输入正整数"),!1):!this.nextValidator||this.nextValidator.validate(e)}},m=new class extends l{constructor(){super()}setNext(e){this.nextValidator=e}validate(e){return e.time&&!u(e.time)?(console.error("time请输入正整数"),!1):!this.nextValidator||this.nextValidator.validate(e)}};function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function p(e){var t=function(e,t){if("object"!=v(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=v(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==v(t)?t:t+""}function w(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,p(i.key),i)}}function b(e,t,r){return t&&w(e.prototype,t),r&&w(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}h.setNext(f),f.setNext(m);var y={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"},M={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"},k={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},S={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"},R={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"},E=function(){function e(){g(this,e)}return b(e,null,[{key:"getFirstMatch",value:function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""}},{key:"getSecondMatch",value:function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""}},{key:"matchAndReturnConst",value:function(e,t,r){if(e.test(t))return r}},{key:"getWindowsVersionName",value:function(e){switch(e){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}}},{key:"getMacOSVersionName",value:function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}}},{key:"getAndroidVersionName",value:function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0}},{key:"getVersionPrecision",value:function(e){return e.split(".").length}},{key:"compareVersions",value:function(t,r){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(n,s),a=0,c=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),i=t+new Array(r+1).join(".0");return e.map(i.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(i&&(a=o-Math.min(n,s)),o-=1;o>=a;){if(c[0][o]>c[1][o])return 1;if(c[0][o]===c[1][o]){if(o===a)return 0;o-=1}else if(c[0][o]<c[1][o])return-1}}},{key:"map",value:function(e,t){var r,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)i.push(t(e[r]));return i}},{key:"find",value:function(e,t){var r,i;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,i=e.length;r<i;r+=1){var n=e[r];if(t(n,r))return n}}},{key:"assign",value:function(e){for(var t,r,i=e,n=arguments.length,s=new Array(n>1?n-1:0),o=1;o<n;o++)s[o-1]=arguments[o];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var a=function(){var e=s[t];"object"===v(e)&&null!==e&&Object.keys(e).forEach((function(t){i[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)a();return e}},{key:"getBrowserAlias",value:function(e){return y[e]}},{key:"getBrowserTypeByAlias",value:function(e){return M[e]||""}}]),e}(),O=/version\/(\d+(\.?_?\d+)+)/i,F=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=E.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=E.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=E.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=E.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=E.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=E.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=E.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=E.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=E.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=E.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=E.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=E.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=E.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=E.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=E.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=E.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=E.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=E.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=E.getFirstMatch(O,e)||E.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=E.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=E.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=E.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=E.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=E.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=E.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=E.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=E.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=E.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=E.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:E.getFirstMatch(t,e),version:E.getSecondMatch(t,e)}}}],_=[{test:[/Roku\/DVP/],describe:function(e){var t=E.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:S.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=E.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:S.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=E.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=E.getWindowsVersionName(t);return{name:S.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:S.iOS},r=E.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=E.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=E.getMacOSVersionName(t),i={name:S.MacOS,version:t};return r&&(i.versionName=r),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=E.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:S.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=E.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=E.getAndroidVersionName(t),i={name:S.Android,version:t};return r&&(i.versionName=r),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=E.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:S.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=E.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||E.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||E.getFirstMatch(/\bbb(\d+)/i,e);return{name:S.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=E.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:S.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=E.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:S.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:S.Linux}}},{test:[/CrOS/],describe:function(){return{name:S.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=E.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:S.PlayStation4,version:t}}}],B=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=E.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:k.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:k.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:k.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:k.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:k.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:k.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:k.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=E.getFirstMatch(/(ipod|iphone)/i,e);return{type:k.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:k.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:k.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:k.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:k.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:k.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:function(){return{type:k.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:k.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:k.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:k.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:k.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:k.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:k.tv}}}],P=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:R.Blink};var t=E.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:R.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:R.Trident},r=E.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:R.Presto},r=E.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:R.Gecko},r=E.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:R.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:R.WebKit},r=E.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}],x=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(g(this,e),null==t||""===t)throw new Error("UserAgent parameter can't be empty");this._ua=t,this.parsedResult={},!0!==r&&this.parse()}return b(e,[{key:"getUA",value:function(){return this._ua}},{key:"test",value:function(e){return e.test(this._ua)}},{key:"parseBrowser",value:function(){var e=this;this.parsedResult.browser={};var t=E.find(F,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser}},{key:"getBrowser",value:function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}},{key:"getBrowserName",value:function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""}},{key:"getBrowserVersion",value:function(){return this.getBrowser().version}},{key:"getOS",value:function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}},{key:"parseOS",value:function(){var e=this;this.parsedResult.os={};var t=E.find(_,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os}},{key:"getOSName",value:function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""}},{key:"getOSVersion",value:function(){return this.getOS().version}},{key:"getPlatform",value:function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}},{key:"getPlatformType",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""}},{key:"parsePlatform",value:function(){var e=this;this.parsedResult.platform={};var t=E.find(B,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform}},{key:"getEngine",value:function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}},{key:"getEngineName",value:function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""}},{key:"parseEngine",value:function(){var e=this;this.parsedResult.engine={};var t=E.find(P,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine}},{key:"parse",value:function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}},{key:"getResult",value:function(){return E.assign({},this.parsedResult)}},{key:"satisfies",value:function(e){var t=this,r={},i=0,n={},s=0;if(Object.keys(e).forEach((function(t){var o=e[t];"string"==typeof o?(n[t]=o,s+=1):"object"===v(o)&&(r[t]=o,i+=1)})),i>0){var o=Object.keys(r),a=E.find(o,(function(e){return t.isOS(e)}));if(a){var c=this.satisfies(r[a]);if(void 0!==c)return c}var u=E.find(o,(function(e){return t.isPlatform(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}}if(s>0){var l=Object.keys(n),h=E.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(n[h])}}},{key:"isBrowser",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),n=E.getBrowserTypeByAlias(i);return t&&n&&(i=n.toLowerCase()),i===r}},{key:"compareVersion",value:function(e){var t=[0],r=e,i=!1,n=this.getBrowserVersion();if("string"==typeof n)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(i=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(i=!0,r=e.substr(1)),t.indexOf(E.compareVersions(n,r,i))>-1}},{key:"isOS",value:function(e){return this.getOSName(!0)===String(e).toLowerCase()}},{key:"isPlatform",value:function(e){return this.getPlatformType(!0)===String(e).toLowerCase()}},{key:"isEngine",value:function(e){return this.getEngineName(!0)===String(e).toLowerCase()}},{key:"is",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}},{key:"some",value:function(){var e=this;return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).some((function(t){return e.is(t)}))}}]),e}(),A=function(){function e(){g(this,e)}return b(e,null,[{key:"getParser",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof e)throw new Error("UserAgent should be a string");return new x(e,t)}},{key:"parse",value:function(e){return new x(e).getResult()}},{key:"BROWSER_MAP",get:function(){return M}},{key:"ENGINE_MAP",get:function(){return R}},{key:"OS_MAP",get:function(){return S}},{key:"PLATFORMS_MAP",get:function(){return k}}]),e}();function C(){let e=0;const t=window.screen,r=navigator.userAgent.toLowerCase();return void 0!==window.devicePixelRatio?e=window.devicePixelRatio:~r.indexOf("msie")?t.deviceXDPI&&t.logicalXDPI&&(e=t.deviceXDPI/t.logicalXDPI):void 0!==window.outerWidth&&void 0!==window.innerWidth&&(e=window.outerWidth/window.innerWidth),e&&(e=Math.round(100*e)),e}class N{device;uuid;constructor(){this.device=function(){const{browser:e,os:t,platform:r}=A.parse(window.navigator.userAgent);return{browser:e,os:t,platform:r,ratio:C(),wh:{width:window.screen.width,height:window.screen.height}}}(),localStorage.getItem(a)?this.uuid=localStorage.getItem(a):(this.uuid=o(),localStorage.setItem(a,this.uuid))}}class T extends N{url;max;time;timer;visitTime;data;events;constructor(e){var t;super(),this.url=e.url,this.max=e.max||5,this.time=e.time||3e4,this.timer,this.visitTime=Date.now(),this.data=e.data,this.events=[],t=this.send.bind(this,!0),window.addEventListener("beforeunload",(()=>{t()}))}formatter(e,t){const r=Date.now(),i=Object.assign({},{device:this.device,uuid:this.uuid},{type:e,data:t,date:c(r),url:window.location.href,referrer:document.referrer,uuid:localStorage.getItem(a),duration:(n=r,s=this.visitTime,n<s&&([n,s]=[s,n]),Math.floor((n-s)/1e3)),userData:this.data});var n,s;return this.visitTime=r,i}send(e){if(this.events.length){const t=e?this.events.length:this.max,r=this.events.slice(0,t);this.events=this.events.slice(t),this.safeSend(r),this.events.length&&d(this.send.bind(this,!1))}}emit(e,t){const r=this.formatter(e,t);this.events.push(r),this.timer&&clearTimeout(this.timer),this.events.length>=this.max?this.send(!1):this.timer=setTimeout((()=>{this.send(!1)}),this.time)}safeSend(e){if(e.length)if(window.navigator.sendBeacon instanceof Function)window.navigator.sendBeacon(this.url,JSON.stringify(e));else{const t=new XMLHttpRequest;t.open("POST",this.url,!0),t.send(JSON.stringify(e))}}}class L extends T{pluginMap=new Map;constructor(e){super(e)}use(e){return this.pluginMap.has(e.name)||this.pluginMap.set(e.name,e),this}run(){this.pluginMap.forEach((e=>{e.monitor(this)}))}}class V{static instance;static plugins=new Map;static registerPlugin(e){this.plugins.set(e.name,e)}static start(e){h.validate(e)&&(this.instance=new L(e),window.$track=this.instance,this.loadPlugins(e))}static loadPlugins(e){const{plugin:t=[]}=e;(t.length>0?t:Array.from(this.plugins.keys())).forEach((e=>{const t=this.plugins.get(e);t&&this.instance.use(t)})),this.instance.run()}}class I{name;track;constructor(e){this.name=e}}var z=(e=>(e.ERROR="error",e.CLICK="click",e.PERFORMANCE="performance",e.ROUTER="router",e))(z||{}),H=(e=>(e.ERROR_JS="error_js",e.ERROR_PROMISE="error_promise",e.ERROR_RESOURCE="error_resource",e.ROUTER_HASH="hashchange",e.ROUTER_HISTORY="historychange",e.PERFORMANCE_FP="performance_fp",e.PERFORMANCE_FCP="performance_fcp",e.PERFORMANCE_LCP="performance_lcp",e.PERFORMANCE_DOMCONTENTLOADED="performance_DOMContentLoaded",e.PERFORMANCE_LOAD="performance_load",e.BEHAVIOR_CLICK="click",e))(H||{});var U=new class extends I{constructor(){super(z.ERROR)}monitor(e){window.addEventListener("error",(t=>{this.syncError(t,e)})),window.addEventListener("unhandledrejection",(t=>{this.asyncError(t,e)}))}syncError(e,t){const{error:r,target:i}=e;if(r instanceof Error)return t.emit(H.ERROR_JS,{message:r.message,stack:r.stack,filename:e.filename});if(i instanceof HTMLLinkElement||i instanceof HTMLScriptElement||i instanceof HTMLImageElement||i instanceof HTMLAudioElement||i instanceof HTMLVideoElement||i instanceof HTMLIFrameElement){const e=i.src||i.href;return t.emit(H.ERROR_RESOURCE,{message:`Failed to get resource:${e}`,url:e})}return t.emit(H.ERROR_JS,{message:e.message,filename:e.filename})}asyncError(e,t){e.reason instanceof Error?t.emit(H.ERROR_PROMISE,{stack:e.reason.stack,message:e.reason.message}):t.emit(H.ERROR_PROMISE,{message:e.reason})}};var W=new class extends I{constructor(){super(z.ROUTER)}monitor(e){this.track=e,this.setupHashListener(),this.setupHistoryListener()}setupHashListener(){window.addEventListener("hashchange",(()=>{this.track?.emit(H.ROUTER_HASH)}))}setupHistoryListener(){const e=window.history.pushState,t=window.history.replaceState;window.history.pushState=(...t)=>{e.apply(window.history,t),this.track?.emit(H.ROUTER_HISTORY)},window.history.replaceState=(...e)=>{t.apply(window.history,e),this.track?.emit(H.ROUTER_HISTORY)},window.addEventListener("popstate",(()=>{this.track?.emit(H.ROUTER_HISTORY)}))}};var D=new class extends I{constructor(){super(z.CLICK)}monitor(e){this.track=e,this.setupClickListeners()}setupClickListeners(){const e=e=>{const t=e.target;t instanceof HTMLButtonElement&&this.track?.emit(H.BEHAVIOR_CLICK,t.textContent)};document.addEventListener(H.BEHAVIOR_CLICK,(t=>{setTimeout((()=>e(t)),300)}),!0)}};var j=new class extends I{constructor(){super(z.PERFORMANCE)}monitor(e){this.track=e,this.paint(),this.lcp(),this.dcl(),this.load()}paint(){const e=new PerformanceObserver((t=>{for(const e of t.getEntries())"first-paint"===e.name?this.track?.emit(H.PERFORMANCE_FP,e.startTime):"first-contentful-paint"===e.name&&this.track?.emit(H.PERFORMANCE_FCP,e.startTime);e.disconnect()}));e.observe({type:"paint",buffered:!0})}lcp(){const e=new PerformanceObserver((t=>{e&&e.disconnect();for(const e of t.getEntries())this.track?.emit(H.PERFORMANCE_LCP,e.startTime)}));e.observe({type:"largest-contentful-paint",buffered:!0})}dcl(){window.addEventListener("DOMContentLoaded",(e=>{this.track?.emit(H.PERFORMANCE_DOMCONTENTLOADED,e.timeStamp)}))}load(){window.addEventListener("load",(e=>{this.track?.emit(H.PERFORMANCE_LOAD,e.timeStamp)}))}};V.registerPlugin(D),V.registerPlugin(U),V.registerPlugin(j),V.registerPlugin(W);const q=function(){let e=!1;return function(t){e||(V.start(t),e=!0)}}();var G={init:q};export{z as TYPES,G as default,q as init};
|
|
1
|
+
var e,t=new Uint8Array(16);function r(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(t)}for(var i=[],n=0;n<256;++n)i.push((n+256).toString(16).slice(1));var s={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function o(e,t,n){if(s.randomUUID&&!t&&!e)return s.randomUUID();var o=(e=e||{}).random||(e.rng||r)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){n=n||0;for(var a=0;a<16;++a)t[n+a]=o[a];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]).toLowerCase()}(o)}const a="track_uuid",c=e=>{const t=new Date(e),r=t.getFullYear(),i=t.getMonth()+1,n=t.getDate(),s=t.getHours(),o=t.getMinutes(),a=t.getSeconds(),c=e=>{let t="";return t=e<10?"0"+e:e.toString(),t};return r+"-"+c(i)+"-"+c(n)+" "+c(s)+":"+c(o)+":"+c(a)};function u(e){return/^\d+$/.test(e.toString())}const d=window.requestIdleCallback||window.requestAnimationFrame||(e=>window.setTimeout(e,1e3/60));class l{nextValidator;constructor(){this.nextValidator=null}}const h=new class extends l{constructor(){super()}setNext(e){this.nextValidator=e}validate(e){return t=e.url,new RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i").test(t)?!this.nextValidator||this.nextValidator.validate(e):(console.error("请输入符合规范的url"),!1);var t}},f=new class extends l{constructor(){super()}setNext(e){this.nextValidator=e}validate(e){return e.max&&!u(e.max)?(console.error("max请输入正整数"),!1):!this.nextValidator||this.nextValidator.validate(e)}},m=new class extends l{constructor(){super()}setNext(e){this.nextValidator=e}validate(e){return e.time&&!u(e.time)?(console.error("time请输入正整数"),!1):!this.nextValidator||this.nextValidator.validate(e)}};function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function v(e){var t=function(e,t){if("object"!=p(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||"default");if("object"!=p(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==p(t)?t:t+""}function w(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,v(i.key),i)}}function b(e,t,r){return t&&w(e.prototype,t),r&&w(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}h.setNext(f),f.setNext(m);var y={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"},M={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"},k={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},S={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"},E={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"},F=function(){function e(){g(this,e)}return b(e,null,[{key:"getFirstMatch",value:function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""}},{key:"getSecondMatch",value:function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""}},{key:"matchAndReturnConst",value:function(e,t,r){if(e.test(t))return r}},{key:"getWindowsVersionName",value:function(e){switch(e){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}}},{key:"getMacOSVersionName",value:function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}}},{key:"getAndroidVersionName",value:function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0}},{key:"getVersionPrecision",value:function(e){return e.split(".").length}},{key:"compareVersions",value:function(t,r){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(n,s),a=0,c=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),i=t+new Array(r+1).join(".0");return e.map(i.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(i&&(a=o-Math.min(n,s)),o-=1;o>=a;){if(c[0][o]>c[1][o])return 1;if(c[0][o]===c[1][o]){if(o===a)return 0;o-=1}else if(c[0][o]<c[1][o])return-1}}},{key:"map",value:function(e,t){var r,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)i.push(t(e[r]));return i}},{key:"find",value:function(e,t){var r,i;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,i=e.length;r<i;r+=1){var n=e[r];if(t(n,r))return n}}},{key:"assign",value:function(e){for(var t,r,i=e,n=arguments.length,s=new Array(n>1?n-1:0),o=1;o<n;o++)s[o-1]=arguments[o];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var a=function(){var e=s[t];"object"===p(e)&&null!==e&&Object.keys(e).forEach((function(t){i[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)a();return e}},{key:"getBrowserAlias",value:function(e){return y[e]}},{key:"getBrowserTypeByAlias",value:function(e){return M[e]||""}}]),e}(),O=/version\/(\d+(\.?_?\d+)+)/i,R=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=F.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=F.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=F.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=F.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=F.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=F.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=F.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=F.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=F.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=F.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=F.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=F.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=F.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=F.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=F.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=F.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=F.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=F.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=F.getFirstMatch(O,e)||F.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=F.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=F.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=F.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=F.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=F.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=F.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=F.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=F.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=F.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=F.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:F.getFirstMatch(t,e),version:F.getSecondMatch(t,e)}}}],P=[{test:[/Roku\/DVP/],describe:function(e){var t=F.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:S.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=F.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:S.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=F.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=F.getWindowsVersionName(t);return{name:S.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:S.iOS},r=F.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=F.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=F.getMacOSVersionName(t),i={name:S.MacOS,version:t};return r&&(i.versionName=r),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=F.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:S.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=F.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=F.getAndroidVersionName(t),i={name:S.Android,version:t};return r&&(i.versionName=r),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=F.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:S.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=F.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||F.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||F.getFirstMatch(/\bbb(\d+)/i,e);return{name:S.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=F.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:S.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=F.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:S.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:S.Linux}}},{test:[/CrOS/],describe:function(){return{name:S.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=F.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:S.PlayStation4,version:t}}}],_=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=F.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:k.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:k.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:k.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:k.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:k.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:k.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:k.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=F.getFirstMatch(/(ipod|iphone)/i,e);return{type:k.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:k.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:k.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:k.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:k.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:k.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:function(){return{type:k.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:k.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:k.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:k.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:k.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:k.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:k.tv}}}],B=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:E.Blink};var t=F.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:E.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:E.Trident},r=F.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:E.Presto},r=F.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:E.Gecko},r=F.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:E.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:E.WebKit},r=F.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}],x=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(g(this,e),null==t||""===t)throw new Error("UserAgent parameter can't be empty");this._ua=t,this.parsedResult={},!0!==r&&this.parse()}return b(e,[{key:"getUA",value:function(){return this._ua}},{key:"test",value:function(e){return e.test(this._ua)}},{key:"parseBrowser",value:function(){var e=this;this.parsedResult.browser={};var t=F.find(R,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser}},{key:"getBrowser",value:function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}},{key:"getBrowserName",value:function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""}},{key:"getBrowserVersion",value:function(){return this.getBrowser().version}},{key:"getOS",value:function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}},{key:"parseOS",value:function(){var e=this;this.parsedResult.os={};var t=F.find(P,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os}},{key:"getOSName",value:function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""}},{key:"getOSVersion",value:function(){return this.getOS().version}},{key:"getPlatform",value:function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}},{key:"getPlatformType",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""}},{key:"parsePlatform",value:function(){var e=this;this.parsedResult.platform={};var t=F.find(_,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform}},{key:"getEngine",value:function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}},{key:"getEngineName",value:function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""}},{key:"parseEngine",value:function(){var e=this;this.parsedResult.engine={};var t=F.find(B,(function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error("Browser's test function is not valid")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine}},{key:"parse",value:function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}},{key:"getResult",value:function(){return F.assign({},this.parsedResult)}},{key:"satisfies",value:function(e){var t=this,r={},i=0,n={},s=0;if(Object.keys(e).forEach((function(t){var o=e[t];"string"==typeof o?(n[t]=o,s+=1):"object"===p(o)&&(r[t]=o,i+=1)})),i>0){var o=Object.keys(r),a=F.find(o,(function(e){return t.isOS(e)}));if(a){var c=this.satisfies(r[a]);if(void 0!==c)return c}var u=F.find(o,(function(e){return t.isPlatform(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}}if(s>0){var l=Object.keys(n),h=F.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(n[h])}}},{key:"isBrowser",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),n=F.getBrowserTypeByAlias(i);return t&&n&&(i=n.toLowerCase()),i===r}},{key:"compareVersion",value:function(e){var t=[0],r=e,i=!1,n=this.getBrowserVersion();if("string"==typeof n)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(i=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(i=!0,r=e.substr(1)),t.indexOf(F.compareVersions(n,r,i))>-1}},{key:"isOS",value:function(e){return this.getOSName(!0)===String(e).toLowerCase()}},{key:"isPlatform",value:function(e){return this.getPlatformType(!0)===String(e).toLowerCase()}},{key:"isEngine",value:function(e){return this.getEngineName(!0)===String(e).toLowerCase()}},{key:"is",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}},{key:"some",value:function(){var e=this;return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).some((function(t){return e.is(t)}))}}]),e}(),A=function(){function e(){g(this,e)}return b(e,null,[{key:"getParser",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof e)throw new Error("UserAgent should be a string");return new x(e,t)}},{key:"parse",value:function(e){return new x(e).getResult()}},{key:"BROWSER_MAP",get:function(){return M}},{key:"ENGINE_MAP",get:function(){return E}},{key:"OS_MAP",get:function(){return S}},{key:"PLATFORMS_MAP",get:function(){return k}}]),e}();function C(){let e=0;const t=window.screen,r=navigator.userAgent.toLowerCase();return void 0!==window.devicePixelRatio?e=window.devicePixelRatio:~r.indexOf("msie")?t.deviceXDPI&&t.logicalXDPI&&(e=t.deviceXDPI/t.logicalXDPI):void 0!==window.outerWidth&&void 0!==window.innerWidth&&(e=window.outerWidth/window.innerWidth),e&&(e=Math.round(100*e)),e}class N{device;uuid;constructor(){this.device=function(){const{browser:e,os:t,platform:r}=A.parse(window.navigator.userAgent);return{browser:e,os:t,platform:r,ratio:C(),wh:{width:window.screen.width,height:window.screen.height}}}(),localStorage.getItem(a)?this.uuid=localStorage.getItem(a):(this.uuid=o(),localStorage.setItem(a,this.uuid))}}class T extends N{url;max;time;timer;visitTime;data;events;constructor(e){var t;super(),this.url=e.url,this.max=e.max||5,this.time=e.time||3e4,this.timer,this.visitTime=Date.now(),this.data=e.data,this.events=[],t=this.send.bind(this,!0),window.addEventListener("beforeunload",(()=>{t()}))}formatter(e,t){const r=Date.now(),i=Object.assign({},{device:this.device,uuid:this.uuid},{type:e,data:t,date:c(r),url:window.location.href,referrer:document.referrer,uuid:localStorage.getItem(a),duration:(n=r,s=this.visitTime,n<s&&([n,s]=[s,n]),Math.floor((n-s)/1e3)),userData:this.data});var n,s;return this.visitTime=r,i}send(e){if(this.events.length){const t=e?this.events.length:this.max,r=this.events.slice(0,t);this.events=this.events.slice(t),this.safeSend(r),this.events.length&&d(this.send.bind(this,!1))}}emit(e,t){const r=this.formatter(e,t);this.events.push(r),this.timer&&clearTimeout(this.timer),this.events.length>=this.max?this.send(!1):this.timer=setTimeout((()=>{this.send(!1)}),this.time)}safeSend(e){if(e.length)if(window.navigator.sendBeacon instanceof Function)window.navigator.sendBeacon(this.url,JSON.stringify(e));else{const t=new XMLHttpRequest;t.open("POST",this.url,!0),t.send(JSON.stringify(e))}}}class L extends T{pluginMap=new Map;constructor(e){super(e)}use(e){return this.pluginMap.has(e.name)||this.pluginMap.set(e.name,e),this}run(){this.pluginMap.forEach((e=>{e.install(this)}))}}class V{static instance;static plugins=new Map;static registerPlugin(e){this.plugins.set(e.name,e)}static start(e){h.validate(e)&&(this.instance=new L(e),window.$track=this.instance,this.loadPlugins(e))}static loadPlugins(e){const{plugin:t=[]}=e;(t.length>0?t:Array.from(this.plugins.keys())).forEach((e=>{const t=this.plugins.get(e);t&&this.instance.use(t)})),this.instance.run()}}class I{name;track;constructor(e){this.name=e}}var D=(e=>(e.ERROR="error",e.CLICK="click",e.PERFORMANCE="performance",e.ROUTER="router",e))(D||{}),z=(e=>(e.ERROR="error",e.ROUTER_HASH="hashchange",e.ROUTER_HISTORY="historychange",e.PERFORMANCE_FP="performance_fp",e.PERFORMANCE_FCP="performance_fcp",e.PERFORMANCE_LCP="performance_lcp",e.PERFORMANCE_DOMCONTENTLOADED="performance_DOMContentLoaded",e.PERFORMANCE_LOAD="performance_load",e.BEHAVIOR_CLICK="click",e))(z||{});var U=new class extends I{originalConsoleError;constructor(){super(D.ERROR)}install(e){this.track=e,this.overrideConsoleError(),this.setupErrorListeners()}overrideConsoleError(){this.originalConsoleError=console.error,console.error=(...e)=>{this.originalConsoleError?.apply(console,e);const t={type:"console",message:e.map((e=>String(e))).join(" "),stack:(new Error).stack};this.track?.emit(z.ERROR,t)}}setupErrorListeners(){window.addEventListener("error",(e=>{this.handleSyncError(e,this.track)}),!0),window.addEventListener("unhandledrejection",(e=>{this.handleAsyncError(e,this.track)}),!0)}handleSyncError(e,t){const r={type:"sync",...this.getErrorDetails(e)};t?.emit(z.ERROR,r)}handleAsyncError(e,t){const r={type:"async",...this.getPromiseErrorDetails(e)};t?.emit(z.ERROR,r)}getPromiseErrorDetails(e){return e.reason instanceof Error?{errorType:"promise",message:e.reason.message,stack:e.reason.stack}:{errorType:"promise",message:String(e.reason)}}getErrorDetails(e){const{error:t,target:r,filename:i,message:n}=e;if(t instanceof Error)return{errorType:"js",message:t.message,stack:t.stack,filename:i,colno:e.colno,lineno:e.lineno};if(this.isResourceError(r)){const e=r.src||r.href;return{errorType:"resource",message:`Resource load failed: ${e}`,url:e}}return{errorType:"unknown",message:n,filename:i}}isResourceError(e){return e&&["LINK","SCRIPT","IMG","AUDIO","VIDEO","IFRAME"].includes(e.tagName)}};var W=new class extends I{constructor(){super(D.ROUTER)}install(e){this.track=e,this.setupHashListener(),this.setupHistoryListener()}setupHashListener(){window.addEventListener("hashchange",(()=>{this.track?.emit(z.ROUTER_HASH)}))}setupHistoryListener(){const e=window.history.pushState,t=window.history.replaceState;window.history.pushState=(...t)=>{e.apply(window.history,t),this.track?.emit(z.ROUTER_HISTORY)},window.history.replaceState=(...e)=>{t.apply(window.history,e),this.track?.emit(z.ROUTER_HISTORY)},window.addEventListener("popstate",(()=>{this.track?.emit(z.ROUTER_HISTORY)}))}};var j=new class extends I{constructor(){super(D.CLICK)}install(e){this.track=e,this.setupClickListeners()}setupClickListeners(){const e=e=>{const t=e.target;if(!t)return;const r={tagName:t.tagName,id:t.id,className:t.className,text:t.textContent?.trim(),xPath:this.getElementXPath(t)};this.track?.emit(z.BEHAVIOR_CLICK,r)};document.addEventListener(z.BEHAVIOR_CLICK,(t=>{setTimeout((()=>e(t)),300)}),!0)}getElementXPath(e){if(!e||1!==e.nodeType)return"";if(e.id)return`//*[@id="${e.id}"]`;const t=Array.from(e.parentNode?.children||[]).filter((t=>t.tagName===e.tagName)).indexOf(e)+1;return`${this.getElementXPath(e.parentNode)}/${e.tagName.toLowerCase()}[${t}]`}};var H=new class extends I{constructor(){super(D.PERFORMANCE)}install(e){this.track=e,this.setupPerformanceMonitoring()}setupPerformanceMonitoring(){this.monitorPaintMetrics(),this.monitorLCP(),this.monitorDCL(),this.monitorLoad()}monitorPaintMetrics(){const e=new PerformanceObserver((t=>{for(const e of t.getEntries())"first-paint"===e.name?this.track?.emit(z.PERFORMANCE_FP,e.startTime):"first-contentful-paint"===e.name&&this.track?.emit(z.PERFORMANCE_FCP,e.startTime);e.disconnect()}));e.observe({type:"paint",buffered:!0})}monitorLCP(){const e=new PerformanceObserver((t=>{e&&e.disconnect();for(const e of t.getEntries())this.track?.emit(z.PERFORMANCE_LCP,e.startTime)}));e.observe({type:"largest-contentful-paint",buffered:!0})}monitorDCL(){window.addEventListener("DOMContentLoaded",(e=>{this.track?.emit(z.PERFORMANCE_DOMCONTENTLOADED,e.timeStamp)}))}monitorLoad(){window.addEventListener("load",(e=>{this.track?.emit(z.PERFORMANCE_LOAD,e.timeStamp)}))}};V.registerPlugin(j),V.registerPlugin(U),V.registerPlugin(H),V.registerPlugin(W);const q=function(){let e=!1;return function(t){e||(V.start(t),e=!0)}}();var G={init:q};export{D as TYPES,G as default,q as init};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cwj_monitoring",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"description": "基于 JS 适用Web端的插件,为前端项目提供【 行为、性能、异常 】监控手段",
|
|
5
5
|
"repository": "https://github.com/cwjbjy/cwj_monitoring",
|
|
6
6
|
"main": "dist",
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "rollup -c",
|
|
11
11
|
"server": "rollup -c -w",
|
|
12
|
+
"changeset": "changeset",
|
|
13
|
+
"version-packages": "changeset version",
|
|
14
|
+
"publish-packages": "changeset publish",
|
|
12
15
|
"lint": "eslint src --fix --ext .ts,.js --max-warnings 0"
|
|
13
16
|
},
|
|
14
17
|
"files": [
|