cwj_monitoring 0.0.1 → 0.0.3
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 +43 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +1 -2
- package/package.json +50 -36
- package/dist/index.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# monitor
|
|
2
|
+
|
|
3
|
+
一个简易的前端监控 SDK DEMO,仅供学习,请勿在生产环境中使用。
|
|
4
|
+
|
|
5
|
+
## DEMO
|
|
6
|
+
|
|
7
|
+
克隆项目后,执行命令打开服务器。
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npm run server
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
然后用 vscode 的 `live server` 插件访问 index.html 文件,即可尝试体验监控 SDK 的效果。同时打开开发者工具,点击 network 标签,可以看到上报数据的发送请求。
|
|
14
|
+
|
|
15
|
+
## 目前已实现的功能
|
|
16
|
+
|
|
17
|
+
1. 行为监控:点击监控,页面跳转监控,页面停留时间监控
|
|
18
|
+
2. 错误监控:js错误,资源加载错误,手动console.error抛出的错误,promise未捕获的错误
|
|
19
|
+
3. 性能监控:FP、DCL、Load、FPS
|
|
20
|
+
|
|
21
|
+
## 通过 npm 使用
|
|
22
|
+
|
|
23
|
+
安装
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
npm i cwj_monitoring
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
引入
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
import { init, emit } from "cwj_monitoring";
|
|
33
|
+
|
|
34
|
+
//使用 init 全局进行初始化
|
|
35
|
+
init({
|
|
36
|
+
url: "http://localhost:8080", //数据上传服务器地址
|
|
37
|
+
max: 10, //可选参数,最大缓存数,即超过缓存数立即上传,默认为5
|
|
38
|
+
time: 60000, //可选参数,最大缓存时间,即超过最大缓存时间立即上传,默认30s
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
//无论vue的全局错误捕获,还是react的错误边界,都可使用emit手动上传错误
|
|
42
|
+
emit(type,data)
|
|
43
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type Options = {
|
|
2
|
+
url: string;
|
|
3
|
+
max?: number;
|
|
4
|
+
time?: number;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
declare function emit(type: string, data?: any): void;
|
|
8
|
+
|
|
9
|
+
declare const init: (options: Options) => void;
|
|
10
|
+
|
|
11
|
+
declare const _default: {
|
|
12
|
+
init: (options: Options) => void;
|
|
13
|
+
emit: typeof emit;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { _default as default, emit, init };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
function e(){var e;window.onerror=function(e,t,r,n,i){Q("js_error",{msg:e,url:t,line:r,column:n,error:i})},window.addEventListener("error",(function(e){var t=e.target;t&&(t.src||t.href)&&Q("resource_error",t.src||t.href)}),!0),e=window.console.error,window.console.error=function(t){Q("console_error",t),e.apply(window.console,arguments)},window.addEventListener("unhandledrejection",(function(e){Q("promise_error",e.error.stack)}))}function t(){var e,t;window.addEventListener("hashchange",(function(){Q("hashchange")})),e=window.history.pushState,t=window.history.replaceState,window.history.pushState=function(){e.apply(window.history,arguments),Q("historychange")},window.history.replaceState=function(){t.apply(window.history,arguments),Q("historychange")},window.addEventListener("popstate",(function(){Q("historychange")}))}function r(){window.addEventListener("click",(function(e){Q("click",e.target.innerHTML)}))}function n(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return i(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return i(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 s,a=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){u=!0,s=e},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw s}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function o(){var e;(e=new PerformanceObserver((function(t){var r,i=n(t.getEntries());try{for(i.s();!(r=i.n()).done;){var o=r.value;"first-paint"===o.name&&(e.disconnect(),Q("fp",o.startTime))}}catch(e){i.e(e)}finally{i.f()}}))).observe({type:"paint",buffered:!0}),window.addEventListener("DOMContentLoaded",(function(e){Q("DOMContentLoaded",e.timeStamp)})),window.addEventListener("load",(function(e){Q("load",e.timeStamp)}))}var s,a=0,u=0,c=performance.now();function d(e){u++;var t=e-c;t>=1e3&&(Math.round(u/(t/1e3))<20?++a>=3&&(Q("fps","卡顿"),a=0):--a<0&&(a=0),u=0,c=e);requestAnimationFrame(d)}function f(e){return f="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},f(e)}function l(e){var t=function(e,t){if("object"!==f(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==f(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===f(t)?t:String(t)}function h(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function g(e,t,r){return t&&h(e.prototype,t),r&&h(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var m=new Uint8Array(16);function p(){if(!s&&!(s="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 s(m)}for(var b=[],y=0;y<256;++y)b.push((y+256).toString(16).slice(1));var w={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function M(e,t,r){if(w.randomUUID&&!t&&!e)return w.randomUUID();var n=(e=e||{}).random||(e.rng||p)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(var i=0;i<16;++i)t[r+i]=n[i];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(b[e[t+0]]+b[e[t+1]]+b[e[t+2]]+b[e[t+3]]+"-"+b[e[t+4]]+b[e[t+5]]+"-"+b[e[t+6]]+b[e[t+7]]+"-"+b[e[t+8]]+b[e[t+9]]+"-"+b[e[t+10]]+b[e[t+11]]+b[e[t+12]]+b[e[t+13]]+b[e[t+14]]+b[e[t+15]]).toLowerCase()}(n)}var S,k,F,B,O={"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"},_={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"},A={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},E={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"},P={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"},N=function(){function e(){v(this,e)}return g(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 n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=e.getVersionPrecision(t),o=e.getVersionPrecision(r),s=Math.max(i,o),a=0,u=e.map([t,r],(function(t){var r=s-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(a=s-Math.min(i,o)),s-=1;s>=a;){if(u[0][s]>u[1][s])return 1;if(u[0][s]===u[1][s]){if(s===a)return 0;s-=1}else if(u[0][s]<u[1][s])return-1}}},{key:"map",value:function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n}},{key:"find",value:function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}}},{key:"assign",value:function(e){for(var t,r,n=e,i=arguments.length,o=new Array(i>1?i-1:0),s=1;s<i;s++)o[s-1]=arguments[s];if(Object.assign)return Object.assign.apply(Object,[e].concat(o));var a=function(){var e=o[t];"object"===f(e)&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=o.length;t<r;t+=1)a();return e}},{key:"getBrowserAlias",value:function(e){return O[e]}},{key:"getBrowserTypeByAlias",value:function(e){return _[e]||""}}]),e}(),x=/version\/(\d+(\.?_?\d+)+)/i,R=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=N.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=N.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=N.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=N.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(x,e)||N.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=N.getFirstMatch(x,e)||N.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,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=N.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=N.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=N.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=N.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=N.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=N.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=N.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=N.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=N.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=N.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=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(x,e)||N.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=N.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=N.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=N.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=N.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=N.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=N.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=N.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=N.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=N.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=N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=N.getFirstMatch(x,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:N.getFirstMatch(t,e),version:N.getSecondMatch(t,e)}}}],C=[{test:[/Roku\/DVP/],describe:function(e){var t=N.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:E.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=N.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:E.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=N.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=N.getWindowsVersionName(t);return{name:E.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:E.iOS},r=N.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=N.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=N.getMacOSVersionName(t),n={name:E.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=N.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:E.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=N.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=N.getAndroidVersionName(t),n={name:E.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=N.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:E.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=N.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||N.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||N.getFirstMatch(/\bbb(\d+)/i,e);return{name:E.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=N.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:E.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=N.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:E.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:E.Linux}}},{test:[/CrOS/],describe:function(){return{name:E.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=N.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:E.PlayStation4,version:t}}}],L=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=N.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:A.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:A.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:A.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:A.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:A.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:A.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:A.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=N.getFirstMatch(/(ipod|iphone)/i,e);return{type:A.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:A.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:A.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:A.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:A.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:A.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:A.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:A.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:A.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:A.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:A.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:A.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:A.tv}}}],T=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:P.Blink};var t=N.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:P.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:P.Trident},r=N.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:P.Presto},r=N.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:P.Gecko},r=N.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:P.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:P.WebKit},r=N.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}],V=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(v(this,e),null==t||""===t)throw new Error("UserAgent parameter can't be empty");this._ua=t,this.parsedResult={},!0!==r&&this.parse()}return g(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=N.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=N.find(C,(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=N.find(L,(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=N.find(T,(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 N.assign({},this.parsedResult)}},{key:"satisfies",value:function(e){var t=this,r={},n=0,i={},o=0;if(Object.keys(e).forEach((function(t){var s=e[t];"string"==typeof s?(i[t]=s,o+=1):"object"===f(s)&&(r[t]=s,n+=1)})),n>0){var s=Object.keys(r),a=N.find(s,(function(e){return t.isOS(e)}));if(a){var u=this.satisfies(r[a]);if(void 0!==u)return u}var c=N.find(s,(function(e){return t.isPlatform(e)}));if(c){var d=this.satisfies(r[c]);if(void 0!==d)return d}}if(o>0){var l=Object.keys(i),h=N.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}}},{key:"isBrowser",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=N.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r}},{key:"compareVersion",value:function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(N.compareVersions(i,r,n))>-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}(),j=function(){function e(){v(this,e)}return g(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 V(e,t)}},{key:"parse",value:function(e){return new V(e).getResult()}},{key:"BROWSER_MAP",get:function(){return _}},{key:"ENGINE_MAP",get:function(){return P}},{key:"OS_MAP",get:function(){return E}},{key:"PLATFORMS_MAP",get:function(){return A}}]),e}(),W="uuid",z=new(g((function e(){v(this,e),this.device=j.parse(window.navigator.userAgent),localStorage.getItem(W)?this.uuid=localStorage.getItem(W):(this.uuid=M(),localStorage.setItem(W,this.uuid))}))),q=navigator.sendBeacon?function(e,t){navigator.sendBeacon(e,JSON.stringify(t))}:function(e,t){var r=new XMLHttpRequest;r.open("POST",e),r.send(JSON.stringify(t))},I=[],U=Date.now();function G(){I.length&&(q(S,I),I.splice(0,I.length))}function Q(e,t){var r=Date.now(),n=Object.assign({},z,{type:e,data:t,date:r,url:window.location.href,referrer:document.referrer,uuid:localStorage.getItem(W)});"hashchange"!==e&&"historychange"!==e||(Object.assign(n,{duration:r-U}),U=r),I.push(n),clearTimeout(B),I.length>=k?G():B=setTimeout((function(){G()}),F)}function D(n){n.url?(S=n.url,k=n.max||5,F=n.time||3e4,o(),d(),e(),t(),r(),window.addEventListener("beforeunload",G,!0)):console.log("@web-tracing: ","缺少参数url")}var H,K=(H=null,function(e){H||(D(e),H=!0)}),Z={init:K,emit:Q};export{Z as default,Q as emit,K as init};
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
function e(){var e;window.onerror=(e,t,r,n,i)=>{I("js_error",{msg:e,url:t,line:r,column:n,error:i})},window.addEventListener("error",(function(e){const t=e.target;t&&(t.src||t.href)&&I("resource_error",t.src||t.href)}),!0),e=window.console.error,window.console.error=function(t){I("console_error",t),e.apply(window.console,arguments)},window.addEventListener("unhandledrejection",(function(e){I("promise_error",e.error.stack)}))}function t(){window.addEventListener("hashchange",(function(){I("hashchange")})),function(){const e=window.history.pushState,t=window.history.replaceState;window.history.pushState=function(){e.apply(window.history,arguments),I("historychange")},window.history.replaceState=function(){t.apply(window.history,arguments),I("historychange")},window.addEventListener("popstate",(function(){I("historychange")}))}()}function r(){!function(){let e;window.addEventListener("click",(t=>{clearTimeout(e),e=setTimeout((()=>{console.log(t),I("click",t.target.innerHTML)}),500)}))}()}function n(){!function(){const e=new PerformanceObserver((t=>{for(const r of t.getEntries())"first-paint"===r.name&&(e.disconnect(),I("fp",r.startTime))}));e.observe({type:"paint",buffered:!0})}(),window.addEventListener("DOMContentLoaded",(function(e){I("DOMContentLoaded",e.timeStamp)})),window.addEventListener("load",(function(e){I("load",e.timeStamp)}))}let i=0,s=0,o=performance.now();function a(e){s++;const t=e-o;if(t>=1e3){Math.round(s/(t/1e3))<20?(i++,i>=3&&(I("fps","卡顿"),i=0)):(i--,i<0&&(i=0)),s=0,o=e}requestAnimationFrame(a)}var u,c=new Uint8Array(16);function d(){if(!u&&!(u="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 u(c)}for(var f=[],l=0;l<256;++l)f.push((l+256).toString(16).slice(1));var h={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function g(e,t,r){if(h.randomUUID&&!t&&!e)return h.randomUUID();var n=(e=e||{}).random||(e.rng||d)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,t){r=r||0;for(var i=0;i<16;++i)t[r+i]=n[i];return t}return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(f[e[t+0]]+f[e[t+1]]+f[e[t+2]]+f[e[t+3]]+"-"+f[e[t+4]]+f[e[t+5]]+"-"+f[e[t+6]]+f[e[t+7]]+"-"+f[e[t+8]]+f[e[t+9]]+"-"+f[e[t+10]]+f[e[t+11]]+f[e[t+12]]+f[e[t+13]]+f[e[t+14]]+f[e[t+15]]).toLowerCase()}(n)}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m(e){return m="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},m(e)}function p(e){var t=function(e,t){if("object"!==m(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===m(t)?t:String(t)}function b(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,p(n.key),n)}}function w(e,t,r){return t&&b(e.prototype,t),r&&b(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}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"},S={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},k={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"},F={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"},B=function(){function e(){v(this,e)}return w(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 n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),o=Math.max(i,s),a=0,u=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(n&&(a=o-Math.min(i,s)),o-=1;o>=a;){if(u[0][o]>u[1][o])return 1;if(u[0][o]===u[1][o]){if(o===a)return 0;o-=1}else if(u[0][o]<u[1][o])return-1}}},{key:"map",value:function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n}},{key:"find",value:function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}}},{key:"assign",value:function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),o=1;o<i;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"===m(e)&&null!==e&&Object.keys(e).forEach((function(t){n[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,_=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=B.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=B.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=B.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=B.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(O,e)||B.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=B.getFirstMatch(O,e)||B.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||B.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=B.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=B.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=B.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=B.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=B.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=B.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=B.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=B.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=B.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=B.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=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(O,e)||B.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=B.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=B.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=B.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=B.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=B.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=B.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=B.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=B.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=B.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=B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=B.getFirstMatch(O,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:B.getFirstMatch(t,e),version:B.getSecondMatch(t,e)}}}],A=[{test:[/Roku\/DVP/],describe:function(e){var t=B.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:k.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=B.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:k.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=B.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=B.getWindowsVersionName(t);return{name:k.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:k.iOS},r=B.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=B.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=B.getMacOSVersionName(t),n={name:k.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=B.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:k.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=B.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=B.getAndroidVersionName(t),n={name:k.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=B.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:k.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=B.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||B.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||B.getFirstMatch(/\bbb(\d+)/i,e);return{name:k.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=B.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:k.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=B.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:k.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:k.Linux}}},{test:[/CrOS/],describe:function(){return{name:k.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=B.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:k.PlayStation4,version:t}}}],E=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=B.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:S.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:S.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:S.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:S.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:S.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:S.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:S.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=B.getFirstMatch(/(ipod|iphone)/i,e);return{type:S.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:S.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:S.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:S.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:S.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:S.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:S.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:S.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:S.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:S.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:S.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:S.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:S.tv}}}],P=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:F.Blink};var t=B.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:F.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:F.Trident},r=B.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:F.Presto},r=B.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:F.Gecko},r=B.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:F.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:F.WebKit},r=B.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}],N=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(v(this,e),null==t||""===t)throw new Error("UserAgent parameter can't be empty");this._ua=t,this.parsedResult={},!0!==r&&this.parse()}return w(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=B.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.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=B.find(A,(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=B.find(E,(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=B.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 B.assign({},this.parsedResult)}},{key:"satisfies",value:function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var o=e[t];"string"==typeof o?(i[t]=o,s+=1):"object"===m(o)&&(r[t]=o,n+=1)})),n>0){var o=Object.keys(r),a=B.find(o,(function(e){return t.isOS(e)}));if(a){var u=this.satisfies(r[a]);if(void 0!==u)return u}var c=B.find(o,(function(e){return t.isPlatform(e)}));if(c){var d=this.satisfies(r[c]);if(void 0!==d)return d}}if(s>0){var f=Object.keys(i),l=B.find(f,(function(e){return t.isBrowser(e,!0)}));if(void 0!==l)return this.compareVersion(i[l])}}},{key:"isBrowser",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=B.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r}},{key:"compareVersion",value:function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(B.compareVersions(i,r,n))>-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}(),x=function(){function e(){v(this,e)}return w(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 N(e,t)}},{key:"parse",value:function(e){return new N(e).getResult()}},{key:"BROWSER_MAP",get:function(){return M}},{key:"ENGINE_MAP",get:function(){return F}},{key:"OS_MAP",get:function(){return k}},{key:"PLATFORMS_MAP",get:function(){return S}}]),e}();const R="uuid";var C=new class{device;uuid;constructor(){this.device=x.parse(window.navigator.userAgent),localStorage.getItem(R)?this.uuid=localStorage.getItem(R):(this.uuid=g(),localStorage.setItem(R,this.uuid))}};const L=navigator.sendBeacon?(e,t)=>{navigator.sendBeacon(e,JSON.stringify(t))}:(e,t)=>{let r=new XMLHttpRequest;r.open("POST",e),r.send(JSON.stringify(t))};let T,V="",j=0,W=0,z=[],q=Date.now();function U(){z.length&&(L(V,z),z.splice(0,z.length))}function I(e,t){const r=Date.now(),n=Object.assign({},C,{type:e,data:t,date:r,url:window.location.href,referrer:document.referrer,uuid:localStorage.getItem(R)});"hashchange"!==e&&"historychange"!==e||(Object.assign(n,{duration:r-q}),q=r),z.push(n),clearTimeout(T),z.length>=j?U():T=setTimeout((()=>{U()}),W)}function G(i){i.url?(V=i.url,j=i.max||5,W=i.time||3e4,n(),a(),e(),t(),r(),window.addEventListener("beforeunload",U,!0)):console.log("@web-tracing: ","缺少参数url")}const Q=function(){let e=!1;return function(t){e||(G(t),e=!0)}}();var D={init:Q,emit:I};export{D as default,I as emit,Q as init};
|
package/package.json
CHANGED
|
@@ -1,36 +1,50 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "cwj_monitoring",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"rollup
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "cwj_monitoring",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "基于 JS 适用Web端的插件,为前端项目提供【 行为、性能、异常 】监控手段",
|
|
5
|
+
"main": "dist",
|
|
6
|
+
"module": "dist",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "rollup -c",
|
|
9
|
+
"serve": "rollup -c -w"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/*"
|
|
13
|
+
],
|
|
14
|
+
"keywords": [
|
|
15
|
+
"埋点",
|
|
16
|
+
"性能",
|
|
17
|
+
"异常",
|
|
18
|
+
"性能采集",
|
|
19
|
+
"异常采集",
|
|
20
|
+
"前端埋点",
|
|
21
|
+
"前端性能采集"
|
|
22
|
+
],
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@babel/core": "^7.22.10",
|
|
26
|
+
"@babel/plugin-transform-runtime": "^7.22.10",
|
|
27
|
+
"@babel/preset-env": "^7.22.10",
|
|
28
|
+
"@rollup/plugin-alias": "^5.0.0",
|
|
29
|
+
"@rollup/plugin-babel": "^6.0.3",
|
|
30
|
+
"@rollup/plugin-commonjs": "^25.0.3",
|
|
31
|
+
"@rollup/plugin-json": "^6.0.0",
|
|
32
|
+
"@rollup/plugin-node-resolve": "^15.1.0",
|
|
33
|
+
"@rollup/plugin-terser": "^0.4.3",
|
|
34
|
+
"@types/node": "^20.5.6",
|
|
35
|
+
"@types/uuid": "^9.0.2",
|
|
36
|
+
"esbuild": "^0.19.2",
|
|
37
|
+
"rimraf": "^5.0.1",
|
|
38
|
+
"rollup": "^3.27.2",
|
|
39
|
+
"rollup-plugin-delete": "^2.0.0",
|
|
40
|
+
"rollup-plugin-dts": "^6.0.0",
|
|
41
|
+
"rollup-plugin-esbuild": "^5.0.0",
|
|
42
|
+
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
43
|
+
"tslib": "^2.6.1",
|
|
44
|
+
"typescript": "^5.1.6"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"bowser": "^2.11.0",
|
|
48
|
+
"uuid": "^9.0.0"
|
|
49
|
+
}
|
|
50
|
+
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/lib/error.js","../src/lib/pv.js","../src/lib/behavior.js","../src/lib/performance.js","../src/lib/fps.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/bowser/src/constants.js","../src/lib/index.js","../node_modules/bowser/src/utils.js","../node_modules/bowser/src/parser-browsers.js","../node_modules/bowser/src/parser-os.js","../node_modules/bowser/src/parser-platforms.js","../node_modules/bowser/src/parser-engines.js","../node_modules/bowser/src/parser.js","../node_modules/bowser/src/bowser.js","../src/lib/constant.js","../src/lib/baseInfo.js","../src/utils/index.js","../src/index.js"],"sourcesContent":["import { emit } from \"./index\";\r\n\r\nexport default function Error() {\r\n JSError(); //js错误\r\n resourceError(); //资源加载错误\r\n consoleError(); //手动抛出错误\r\n promiseError(); //promise错误\r\n}\r\n\r\n/**\r\n * @param {String} msg 错误信息\r\n * @param {String} url 出错文件\r\n * @param {Number} line 行号\r\n * @param {Number} column 列号\r\n * @param {Object} error Error对象\r\n */\r\nfunction JSError() {\r\n window.onerror = (msg, url, line, column, error) => {\r\n emit(\"js_error\", { msg, url, line, column, error });\r\n };\r\n}\r\n\r\nfunction resourceError() {\r\n window.addEventListener(\r\n \"error\",\r\n function (e) {\r\n const target = e.target;\r\n if (!target) return;\r\n if (target.src || target.href) {\r\n const url = target.src || target.href;\r\n emit(\"resource_error\", url);\r\n }\r\n },\r\n true\r\n );\r\n}\r\n\r\nfunction consoleError() {\r\n var oldError = window.console.error;\r\n window.console.error = function (errorMsg) {\r\n emit(\"console_error\", errorMsg);\r\n oldError.apply(window.console, arguments);\r\n };\r\n}\r\n\r\nfunction promiseError() {\r\n window.addEventListener(\"unhandledrejection\", function (e) {\r\n emit(\"promise_error\", e.error.stack);\r\n });\r\n}\r\n","import { emit } from \"./index\";\r\n\r\nexport default function pv() {\r\n Hash(); //监听hash路由\r\n History(); //监听history路由\r\n}\r\n\r\nfunction Hash() {\r\n window.addEventListener(\"hashchange\", function () {\r\n emit(\"hashchange\");\r\n });\r\n}\r\n\r\nfunction History() {\r\n const historyPushState = window.history.pushState;\r\n const historyReplaceState = window.history.replaceState;\r\n window.history.pushState = function () {\r\n historyPushState.apply(window.history, arguments);\r\n emit(\"historychange\");\r\n };\r\n window.history.replaceState = function () {\r\n historyReplaceState.apply(window.history, arguments);\r\n emit(\"historychange\");\r\n };\r\n window.addEventListener(\"popstate\", function () {\r\n emit(\"historychange\");\r\n });\r\n}\r\n","import { emit } from \"./index\";\r\n\r\nexport default function behavior() {\r\n click(); //点击事件监听\r\n}\r\n\r\nfunction click() {\r\n window.addEventListener(\"click\", function (e) {\r\n emit(\"click\", e.target.innerHTML);\r\n });\r\n}\r\n","import { emit } from \"./index\";\r\n\r\nexport default function performance() {\r\n fp(); //首次渲染时间\r\n dcl(); //DOM加载完成时间\r\n load(); //样式表与图片都加载完成时间\r\n}\r\n\r\nfunction fp() {\r\n const entryHandler = (list) => {\r\n for (const entry of list.getEntries()) {\r\n if (entry.name === \"first-paint\") {\r\n observer.disconnect();\r\n emit(\"fp\", entry.startTime);\r\n }\r\n }\r\n };\r\n\r\n const observer = new PerformanceObserver(entryHandler);\r\n // buffered 属性表示是否观察缓存数据,也就是说观察代码添加时机比事情触发时机晚也没关系。\r\n observer.observe({ type: \"paint\", buffered: true });\r\n}\r\n\r\nfunction dcl() {\r\n window.addEventListener(\"DOMContentLoaded\", function (e) {\r\n emit(\"DOMContentLoaded\", e.timeStamp);\r\n });\r\n}\r\n\r\nfunction load() {\r\n window.addEventListener(\"load\", function (e) {\r\n emit(\"load\", e.timeStamp);\r\n });\r\n}\r\n","import { emit } from \"./index\";\r\n\r\nlet count = 0;\r\nlet frames = 0;\r\nlet lastTimestamp = performance.now();\r\n\r\n//timestamp开始执行函数的时间戳\r\nexport default function updateFPS(timestamp) {\r\n frames++;\r\n\r\n const deltaTime = timestamp - lastTimestamp;\r\n if (deltaTime >= 1000) {\r\n const fps = Math.round(frames / (deltaTime / 1000));\r\n if (fps < 20) {\r\n count++;\r\n if (count >= 3) {\r\n //连续3次小于20的fps进行数据上报\r\n emit(\"fps\", '卡顿');\r\n count = 0;\r\n }\r\n } else {\r\n count--;\r\n if (count < 0) count = 0;\r\n }\r\n frames = 0;\r\n lastTimestamp = timestamp;\r\n }\r\n\r\n requestAnimationFrame(updateFPS);\r\n}\r\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// NOTE: this list must be up-to-date with browsers listed in\n// test/acceptance/useragentstrings.yml\nexport const BROWSER_ALIASES_MAP = {\n 'Amazon Silk': 'amazon_silk',\n 'Android Browser': 'android',\n Bada: 'bada',\n BlackBerry: 'blackberry',\n Chrome: 'chrome',\n Chromium: 'chromium',\n Electron: 'electron',\n Epiphany: 'epiphany',\n Firefox: 'firefox',\n Focus: 'focus',\n Generic: 'generic',\n 'Google Search': 'google_search',\n Googlebot: 'googlebot',\n 'Internet Explorer': 'ie',\n 'K-Meleon': 'k_meleon',\n Maxthon: 'maxthon',\n 'Microsoft Edge': 'edge',\n 'MZ Browser': 'mz',\n 'NAVER Whale Browser': 'naver',\n Opera: 'opera',\n 'Opera Coast': 'opera_coast',\n PhantomJS: 'phantomjs',\n Puffin: 'puffin',\n QupZilla: 'qupzilla',\n QQ: 'qq',\n QQLite: 'qqlite',\n Safari: 'safari',\n Sailfish: 'sailfish',\n 'Samsung Internet for Android': 'samsung_internet',\n SeaMonkey: 'seamonkey',\n Sleipnir: 'sleipnir',\n Swing: 'swing',\n Tizen: 'tizen',\n 'UC Browser': 'uc',\n Vivaldi: 'vivaldi',\n 'WebOS Browser': 'webos',\n WeChat: 'wechat',\n 'Yandex Browser': 'yandex',\n Roku: 'roku',\n};\n\nexport const BROWSER_MAP = {\n amazon_silk: 'Amazon Silk',\n android: 'Android Browser',\n bada: 'Bada',\n blackberry: 'BlackBerry',\n chrome: 'Chrome',\n chromium: 'Chromium',\n electron: 'Electron',\n epiphany: 'Epiphany',\n firefox: 'Firefox',\n focus: 'Focus',\n generic: 'Generic',\n googlebot: 'Googlebot',\n google_search: 'Google Search',\n ie: 'Internet Explorer',\n k_meleon: 'K-Meleon',\n maxthon: 'Maxthon',\n edge: 'Microsoft Edge',\n mz: 'MZ Browser',\n naver: 'NAVER Whale Browser',\n opera: 'Opera',\n opera_coast: 'Opera Coast',\n phantomjs: 'PhantomJS',\n puffin: 'Puffin',\n qupzilla: 'QupZilla',\n qq: 'QQ Browser',\n qqlite: 'QQ Browser Lite',\n safari: 'Safari',\n sailfish: 'Sailfish',\n samsung_internet: 'Samsung Internet for Android',\n seamonkey: 'SeaMonkey',\n sleipnir: 'Sleipnir',\n swing: 'Swing',\n tizen: 'Tizen',\n uc: 'UC Browser',\n vivaldi: 'Vivaldi',\n webos: 'WebOS Browser',\n wechat: 'WeChat',\n yandex: 'Yandex Browser',\n};\n\nexport const PLATFORMS_MAP = {\n tablet: 'tablet',\n mobile: 'mobile',\n desktop: 'desktop',\n tv: 'tv',\n};\n\nexport const OS_MAP = {\n WindowsPhone: 'Windows Phone',\n Windows: 'Windows',\n MacOS: 'macOS',\n iOS: 'iOS',\n Android: 'Android',\n WebOS: 'WebOS',\n BlackBerry: 'BlackBerry',\n Bada: 'Bada',\n Tizen: 'Tizen',\n Linux: 'Linux',\n ChromeOS: 'Chrome OS',\n PlayStation4: 'PlayStation 4',\n Roku: 'Roku',\n};\n\nexport const ENGINE_MAP = {\n EdgeHTML: 'EdgeHTML',\n Blink: 'Blink',\n Trident: 'Trident',\n Presto: 'Presto',\n Gecko: 'Gecko',\n WebKit: 'WebKit',\n};\n","import Error from \"./error\";\r\nimport pv from \"./pv\";\r\nimport behavior from \"./behavior\";\r\nimport performance from \"./performance\";\r\nimport updateFPS from \"./fps\";\r\nimport baseInfo from \"./baseInfo\";\r\nimport { MAX_CACHE_LEN, MAX_WAITING_TIME, UUID } from \"./constant\";\r\nimport { sendData } from \"../utils\";\r\n\r\nlet url, //上传url\r\n max, //最大缓存数\r\n time, //最大缓存时间\r\n events = [], //存储的数据\r\n timer; //定时器ID\r\n\r\nlet visitTime = Date.now();\r\n\r\nexport function send() {\r\n if (events.length) {\r\n sendData(url, events);\r\n events.splice(0, events.length); //发送完,数组置空\r\n }\r\n}\r\n\r\nexport function emit(type, data) {\r\n const date = Date.now();\r\n const info = Object.assign({}, baseInfo, {\r\n type, //类型\r\n data, //自定义数据\r\n date, //日期\r\n url: window.location.href, //当前路由\r\n referrer: document.referrer, //上一次的路由\r\n uuid: localStorage.getItem(UUID), //如果已经有uuid,则用之前的\r\n });\r\n if (type === \"hashchange\" || type === \"historychange\") {\r\n //停留时间 = 跳转时间 - 访问时间\r\n Object.assign(info, { duration: date - visitTime });\r\n visitTime = date;\r\n }\r\n events.push(info);\r\n clearTimeout(timer);\r\n // 满足最大记录数,立即发送\r\n events.length >= max\r\n ? send()\r\n : (timer = setTimeout(() => {\r\n send();\r\n }, time));\r\n}\r\n\r\nfunction listenBeforeunload() {\r\n window.addEventListener(\"beforeunload\", send, true);\r\n}\r\n\r\nexport default function initBase(options) {\r\n if (!options.url) {\r\n console.log(\"@web-tracing: \", \"缺少参数url\");\r\n return;\r\n }\r\n\r\n url = options.url;\r\n max = options.max || MAX_CACHE_LEN;\r\n time = options.time || MAX_WAITING_TIME;\r\n\r\n performance(); //监听性能\r\n updateFPS(); //监听fps\r\n Error(); //监听错误\r\n pv(); //监听路由\r\n behavior(); //监听用户行为\r\n listenBeforeunload(); //监听页面刷新或卸载\r\n}\r\n","import { BROWSER_MAP, BROWSER_ALIASES_MAP } from './constants.js';\n\nexport default class Utils {\n /**\n * Get first matched item for a string\n * @param {RegExp} regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getFirstMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n /**\n * Get second matched item for a string\n * @param regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getSecondMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n /**\n * Match a regexp and return a constant or undefined\n * @param {RegExp} regexp\n * @param {String} ua\n * @param {*} _const Any const that will be returned if regexp matches the string\n * @return {*}\n */\n static matchAndReturnConst(regexp, ua, _const) {\n if (regexp.test(ua)) {\n return _const;\n }\n return void (0);\n }\n\n static getWindowsVersionName(version) {\n switch (version) {\n case 'NT': return 'NT';\n case 'XP': return 'XP';\n case 'NT 5.0': return '2000';\n case 'NT 5.1': return 'XP';\n case 'NT 5.2': return '2003';\n case 'NT 6.0': return 'Vista';\n case 'NT 6.1': return '7';\n case 'NT 6.2': return '8';\n case 'NT 6.3': return '8.1';\n case 'NT 10.0': return '10';\n default: return undefined;\n }\n }\n\n /**\n * Get macOS version name\n * 10.5 - Leopard\n * 10.6 - Snow Leopard\n * 10.7 - Lion\n * 10.8 - Mountain Lion\n * 10.9 - Mavericks\n * 10.10 - Yosemite\n * 10.11 - El Capitan\n * 10.12 - Sierra\n * 10.13 - High Sierra\n * 10.14 - Mojave\n * 10.15 - Catalina\n *\n * @example\n * getMacOSVersionName(\"10.14\") // 'Mojave'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getMacOSVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] !== 10) return undefined;\n switch (v[1]) {\n case 5: return 'Leopard';\n case 6: return 'Snow Leopard';\n case 7: return 'Lion';\n case 8: return 'Mountain Lion';\n case 9: return 'Mavericks';\n case 10: return 'Yosemite';\n case 11: return 'El Capitan';\n case 12: return 'Sierra';\n case 13: return 'High Sierra';\n case 14: return 'Mojave';\n case 15: return 'Catalina';\n default: return undefined;\n }\n }\n\n /**\n * Get Android version name\n * 1.5 - Cupcake\n * 1.6 - Donut\n * 2.0 - Eclair\n * 2.1 - Eclair\n * 2.2 - Froyo\n * 2.x - Gingerbread\n * 3.x - Honeycomb\n * 4.0 - Ice Cream Sandwich\n * 4.1 - Jelly Bean\n * 4.4 - KitKat\n * 5.x - Lollipop\n * 6.x - Marshmallow\n * 7.x - Nougat\n * 8.x - Oreo\n * 9.x - Pie\n *\n * @example\n * getAndroidVersionName(\"7.0\") // 'Nougat'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getAndroidVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] === 1 && v[1] < 5) return undefined;\n if (v[0] === 1 && v[1] < 6) return 'Cupcake';\n if (v[0] === 1 && v[1] >= 6) return 'Donut';\n if (v[0] === 2 && v[1] < 2) return 'Eclair';\n if (v[0] === 2 && v[1] === 2) return 'Froyo';\n if (v[0] === 2 && v[1] > 2) return 'Gingerbread';\n if (v[0] === 3) return 'Honeycomb';\n if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';\n if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';\n if (v[0] === 4 && v[1] >= 4) return 'KitKat';\n if (v[0] === 5) return 'Lollipop';\n if (v[0] === 6) return 'Marshmallow';\n if (v[0] === 7) return 'Nougat';\n if (v[0] === 8) return 'Oreo';\n if (v[0] === 9) return 'Pie';\n return undefined;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n static getVersionPrecision(version) {\n return version.split('.').length;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions('1.10.2.1', '1.8.2.1.90') // 1\n * compareVersions('1.010.2.1', '1.09.2.1.90'); // 1\n * compareVersions('1.10.2.1', '1.10.2.1'); // 0\n * compareVersions('1.10.2.1', '1.0800.2'); // -1\n * compareVersions('1.10.2.1', '1.10', true); // 0\n *\n * @param {String} versionA versions versions to compare\n * @param {String} versionB versions versions to compare\n * @param {boolean} [isLoose] enable loose comparison\n * @return {Number} comparison result: -1 when versionA is lower,\n * 1 when versionA is bigger, 0 when both equal\n */\n /* eslint consistent-return: 1 */\n static compareVersions(versionA, versionB, isLoose = false) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n const versionAPrecision = Utils.getVersionPrecision(versionA);\n const versionBPrecision = Utils.getVersionPrecision(versionB);\n\n let precision = Math.max(versionAPrecision, versionBPrecision);\n let lastPrecision = 0;\n\n const chunks = Utils.map([versionA, versionB], (version) => {\n const delta = precision - Utils.getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n const _version = version + new Array(delta + 1).join('.0');\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();\n });\n\n // adjust precision for loose comparison\n if (isLoose) {\n lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);\n }\n\n // iterate in reverse order by reversed chunks array\n precision -= 1;\n while (precision >= lastPrecision) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n\n if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === lastPrecision) {\n // all version chunks are same\n return 0;\n }\n\n precision -= 1;\n } else if (chunks[0][precision] < chunks[1][precision]) {\n return -1;\n }\n }\n\n return undefined;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n static map(arr, iterator) {\n const result = [];\n let i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i += 1) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Array::find polyfill\n *\n * @param {Array} arr\n * @param {Function} predicate\n * @return {Array}\n */\n static find(arr, predicate) {\n let i;\n let l;\n if (Array.prototype.find) {\n return Array.prototype.find.call(arr, predicate);\n }\n for (i = 0, l = arr.length; i < l; i += 1) {\n const value = arr[i];\n if (predicate(value, i)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Object::assign polyfill\n *\n * @param {Object} obj\n * @param {Object} ...objs\n * @return {Object}\n */\n static assign(obj, ...assigners) {\n const result = obj;\n let i;\n let l;\n if (Object.assign) {\n return Object.assign(obj, ...assigners);\n }\n for (i = 0, l = assigners.length; i < l; i += 1) {\n const assigner = assigners[i];\n if (typeof assigner === 'object' && assigner !== null) {\n const keys = Object.keys(assigner);\n keys.forEach((key) => {\n result[key] = assigner[key];\n });\n }\n }\n return obj;\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('Microsoft Edge') // edge\n *\n * @param {string} browserName\n * @return {string}\n */\n static getBrowserAlias(browserName) {\n return BROWSER_ALIASES_MAP[browserName];\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('edge') // Microsoft Edge\n *\n * @param {string} browserAlias\n * @return {string}\n */\n static getBrowserTypeByAlias(browserAlias) {\n return BROWSER_MAP[browserAlias] || '';\n }\n}\n","/**\n * Browsers' descriptors\n *\n * The idea of descriptors is simple. You should know about them two simple things:\n * 1. Every descriptor has a method or property called `test` and a `describe` method.\n * 2. Order of descriptors is important.\n *\n * More details:\n * 1. Method or property `test` serves as a way to detect whether the UA string\n * matches some certain browser or not. The `describe` method helps to make a result\n * object with params that show some browser-specific things: name, version, etc.\n * 2. Order of descriptors is important because a Parser goes through them one by one\n * in course. For example, if you insert Chrome's descriptor as the first one,\n * more then a half of browsers will be described as Chrome, because they will pass\n * the Chrome descriptor's test.\n *\n * Descriptor's `test` could be a property with an array of RegExps, where every RegExp\n * will be applied to a UA string to test it whether it matches or not.\n * If a descriptor has two or more regexps in the `test` array it tests them one by one\n * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA.\n *\n * Or `test` could be a method. In that case it gets a Parser instance and should\n * return true/false to get the Parser know if this browser descriptor matches the UA or not.\n */\n\nimport Utils from './utils.js';\n\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\n\nconst browsersList = [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe(ua) {\n const browser = {\n name: 'Googlebot',\n };\n const version = Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera < 13.0 */\n {\n test: [/opera/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera > 13.0 */\n {\n test: [/opr\\/|opios/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/SamsungBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Samsung Internet for Android',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Whale/i],\n describe(ua) {\n const browser = {\n name: 'NAVER Whale Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MZBrowser/i],\n describe(ua) {\n const browser = {\n name: 'MZ Browser',\n };\n const version = Utils.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/focus/i],\n describe(ua) {\n const browser = {\n name: 'Focus',\n };\n const version = Utils.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/swing/i],\n describe(ua) {\n const browser = {\n name: 'Swing',\n };\n const version = Utils.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/coast/i],\n describe(ua) {\n const browser = {\n name: 'Opera Coast',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe(ua) {\n const browser = {\n name: 'Opera Touch',\n };\n const version = Utils.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/yabrowser/i],\n describe(ua) {\n const browser = {\n name: 'Yandex Browser',\n };\n const version = Utils.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/ucbrowser/i],\n describe(ua) {\n const browser = {\n name: 'UC Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Maxthon|mxios/i],\n describe(ua) {\n const browser = {\n name: 'Maxthon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/epiphany/i],\n describe(ua) {\n const browser = {\n name: 'Epiphany',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/puffin/i],\n describe(ua) {\n const browser = {\n name: 'Puffin',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sleipnir/i],\n describe(ua) {\n const browser = {\n name: 'Sleipnir',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/k-meleon/i],\n describe(ua) {\n const browser = {\n name: 'K-Meleon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/micromessenger/i],\n describe(ua) {\n const browser = {\n name: 'WeChat',\n };\n const version = Utils.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qqbrowser/i],\n describe(ua) {\n const browser = {\n name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',\n };\n const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/msie|trident/i],\n describe(ua) {\n const browser = {\n name: 'Internet Explorer',\n };\n const version = Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/\\sedg\\//i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/edg([ea]|ios)/i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/vivaldi/i],\n describe(ua) {\n const browser = {\n name: 'Vivaldi',\n };\n const version = Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/seamonkey/i],\n describe(ua) {\n const browser = {\n name: 'SeaMonkey',\n };\n const version = Utils.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sailfish/i],\n describe(ua) {\n const browser = {\n name: 'Sailfish',\n };\n\n const version = Utils.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/silk/i],\n describe(ua) {\n const browser = {\n name: 'Amazon Silk',\n };\n const version = Utils.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/phantom/i],\n describe(ua) {\n const browser = {\n name: 'PhantomJS',\n };\n const version = Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/slimerjs/i],\n describe(ua) {\n const browser = {\n name: 'SlimerJS',\n };\n const version = Utils.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const browser = {\n name: 'BlackBerry',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const browser = {\n name: 'WebOS Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/bada/i],\n describe(ua) {\n const browser = {\n name: 'Bada',\n };\n const version = Utils.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/tizen/i],\n describe(ua) {\n const browser = {\n name: 'Tizen',\n };\n const version = Utils.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qupzilla/i],\n describe(ua) {\n const browser = {\n name: 'QupZilla',\n };\n const version = Utils.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe(ua) {\n const browser = {\n name: 'Firefox',\n };\n const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/electron/i],\n describe(ua) {\n const browser = {\n name: 'Electron',\n };\n const version = Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MiuiBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Miui',\n };\n const version = Utils.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chromium/i],\n describe(ua) {\n const browser = {\n name: 'Chromium',\n };\n const version = Utils.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chrome|crios|crmo/i],\n describe(ua) {\n const browser = {\n name: 'Chrome',\n };\n const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/GSA/i],\n describe(ua) {\n const browser = {\n name: 'Google Search',\n };\n const version = Utils.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Android Browser */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const browser = {\n name: 'Android Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* PlayStation 4 */\n {\n test: [/playstation 4/i],\n describe(ua) {\n const browser = {\n name: 'PlayStation 4',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Safari */\n {\n test: [/safari|applewebkit/i],\n describe(ua) {\n const browser = {\n name: 'Safari',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Something else */\n {\n test: [/.*/i],\n describe(ua) {\n /* Here we try to make sure that there are explicit details about the device\n * in order to decide what regexp exactly we want to apply\n * (as there is a specific decision based on that conclusion)\n */\n const regexpWithoutDeviceSpec = /^(.*)\\/(.*) /;\n const regexpWithDeviceSpec = /^(.*)\\/(.*)[ \\t]\\((.*)/;\n const hasDeviceSpec = ua.search('\\\\(') !== -1;\n const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;\n return {\n name: Utils.getFirstMatch(regexp, ua),\n version: Utils.getSecondMatch(regexp, ua),\n };\n },\n },\n];\n\nexport default browsersList;\n","import Utils from './utils.js';\nimport { OS_MAP } from './constants.js';\n\nexport default [\n /* Roku */\n {\n test: [/Roku\\/DVP/],\n describe(ua) {\n const version = Utils.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, ua);\n return {\n name: OS_MAP.Roku,\n version,\n };\n },\n },\n\n /* Windows Phone */\n {\n test: [/windows phone/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.WindowsPhone,\n version,\n };\n },\n },\n\n /* Windows */\n {\n test: [/windows /i],\n describe(ua) {\n const version = Utils.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, ua);\n const versionName = Utils.getWindowsVersionName(version);\n\n return {\n name: OS_MAP.Windows,\n version,\n versionName,\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe(ua) {\n const result = {\n name: OS_MAP.iOS,\n };\n const version = Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, ua);\n if (version) {\n result.version = version;\n }\n return result;\n },\n },\n\n /* macOS */\n {\n test: [/macintosh/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, ua).replace(/[_\\s]/g, '.');\n const versionName = Utils.getMacOSVersionName(version);\n\n const os = {\n name: OS_MAP.MacOS,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* iOS */\n {\n test: [/(ipod|iphone|ipad)/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, ua).replace(/[_\\s]/g, '.');\n\n return {\n name: OS_MAP.iOS,\n version,\n };\n },\n },\n\n /* Android */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const version = Utils.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, ua);\n const versionName = Utils.getAndroidVersionName(version);\n const os = {\n name: OS_MAP.Android,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* WebOS */\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, ua);\n const os = {\n name: OS_MAP.WebOS,\n };\n\n if (version && version.length) {\n os.version = version;\n }\n return os;\n },\n },\n\n /* BlackBerry */\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, ua)\n || Utils.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, ua)\n || Utils.getFirstMatch(/\\bbb(\\d+)/i, ua);\n\n return {\n name: OS_MAP.BlackBerry,\n version,\n };\n },\n },\n\n /* Bada */\n {\n test: [/bada/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Bada,\n version,\n };\n },\n },\n\n /* Tizen */\n {\n test: [/tizen/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Tizen,\n version,\n };\n },\n },\n\n /* Linux */\n {\n test: [/linux/i],\n describe() {\n return {\n name: OS_MAP.Linux,\n };\n },\n },\n\n /* Chrome OS */\n {\n test: [/CrOS/],\n describe() {\n return {\n name: OS_MAP.ChromeOS,\n };\n },\n },\n\n /* Playstation 4 */\n {\n test: [/PlayStation 4/],\n describe(ua) {\n const version = Utils.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.PlayStation4,\n version,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { PLATFORMS_MAP } from './constants.js';\n\n/*\n * Tablets go first since usually they have more specific\n * signs to detect.\n */\n\nexport default [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe() {\n return {\n type: 'bot',\n vendor: 'Google',\n };\n },\n },\n\n /* Huawei */\n {\n test: [/huawei/i],\n describe(ua) {\n const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';\n const platform = {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Huawei',\n };\n if (model) {\n platform.model = model;\n }\n return platform;\n },\n },\n\n /* Nexus Tablet */\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Nexus',\n };\n },\n },\n\n /* iPad */\n {\n test: [/ipad/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Amazon Kindle Fire */\n {\n test: [/kftt build/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n model: 'Kindle Fire HD 7',\n };\n },\n },\n\n /* Another Amazon Tablet with Silk */\n {\n test: [/silk/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n };\n },\n },\n\n /* Tablet */\n {\n test: [/tablet(?! pc)/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* iPod/iPhone */\n {\n test(parser) {\n const iDevice = parser.test(/ipod|iphone/i);\n const likeIDevice = parser.test(/like (ipod|iphone)/i);\n return iDevice && !likeIDevice;\n },\n describe(ua) {\n const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Apple',\n model,\n };\n },\n },\n\n /* Nexus Mobile */\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Nexus',\n };\n },\n },\n\n /* Mobile */\n {\n test: [/[^-]mobi/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* BlackBerry */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'blackberry';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'BlackBerry',\n };\n },\n },\n\n /* Bada */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'bada';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* Windows Phone */\n {\n test(parser) {\n return parser.getBrowserName() === 'windows phone';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Microsoft',\n };\n },\n },\n\n /* Android Tablet */\n {\n test(parser) {\n const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);\n return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* Android Mobile */\n {\n test(parser) {\n return parser.getOSName(true) === 'android';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* desktop */\n {\n test(parser) {\n return parser.getOSName(true) === 'macos';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n vendor: 'Apple',\n };\n },\n },\n\n /* Windows */\n {\n test(parser) {\n return parser.getOSName(true) === 'windows';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* Linux */\n {\n test(parser) {\n return parser.getOSName(true) === 'linux';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* PlayStation 4 */\n {\n test(parser) {\n return parser.getOSName(true) === 'playstation 4';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n\n /* Roku */\n {\n test(parser) {\n return parser.getOSName(true) === 'roku';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { ENGINE_MAP } from './constants.js';\n\n/*\n * More specific goes first\n */\nexport default [\n /* EdgeHTML */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'microsoft edge';\n },\n describe(ua) {\n const isBlinkBased = /\\sedg\\//i.test(ua);\n\n // return blink if it's blink-based one\n if (isBlinkBased) {\n return {\n name: ENGINE_MAP.Blink,\n };\n }\n\n // otherwise match the version and return EdgeHTML\n const version = Utils.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n return {\n name: ENGINE_MAP.EdgeHTML,\n version,\n };\n },\n },\n\n /* Trident */\n {\n test: [/trident/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Trident,\n };\n\n const version = Utils.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Presto */\n {\n test(parser) {\n return parser.test(/presto/i);\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Presto,\n };\n\n const version = Utils.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Gecko */\n {\n test(parser) {\n const isGecko = parser.test(/gecko/i);\n const likeGecko = parser.test(/like gecko/i);\n return isGecko && !likeGecko;\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Gecko,\n };\n\n const version = Utils.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Blink */\n {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe() {\n return {\n name: ENGINE_MAP.Blink,\n };\n },\n },\n\n /* WebKit */\n {\n test: [/(apple)?webkit/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.WebKit,\n };\n\n const version = Utils.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n];\n","import browserParsersList from './parser-browsers.js';\nimport osParsersList from './parser-os.js';\nimport platformParsersList from './parser-platforms.js';\nimport enginesParsersList from './parser-engines.js';\nimport Utils from './utils.js';\n\n/**\n * The main class that arranges the whole parsing process.\n */\nclass Parser {\n /**\n * Create instance of Parser\n *\n * @param {String} UA User-Agent string\n * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance\n * improvements if you need to make a more particular parsing\n * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}\n *\n * @throw {Error} in case of empty UA String\n *\n * @constructor\n */\n constructor(UA, skipParsing = false) {\n if (UA === void (0) || UA === null || UA === '') {\n throw new Error(\"UserAgent parameter can't be empty\");\n }\n\n this._ua = UA;\n\n /**\n * @typedef ParsedResult\n * @property {Object} browser\n * @property {String|undefined} [browser.name]\n * Browser name, like `\"Chrome\"` or `\"Internet Explorer\"`\n * @property {String|undefined} [browser.version] Browser version as a String `\"12.01.45334.10\"`\n * @property {Object} os\n * @property {String|undefined} [os.name] OS name, like `\"Windows\"` or `\"macOS\"`\n * @property {String|undefined} [os.version] OS version, like `\"NT 5.1\"` or `\"10.11.1\"`\n * @property {String|undefined} [os.versionName] OS name, like `\"XP\"` or `\"High Sierra\"`\n * @property {Object} platform\n * @property {String|undefined} [platform.type]\n * platform type, can be either `\"desktop\"`, `\"tablet\"` or `\"mobile\"`\n * @property {String|undefined} [platform.vendor] Vendor of the device,\n * like `\"Apple\"` or `\"Samsung\"`\n * @property {String|undefined} [platform.model] Device model,\n * like `\"iPhone\"` or `\"Kindle Fire HD 7\"`\n * @property {Object} engine\n * @property {String|undefined} [engine.name]\n * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML`\n * @property {String|undefined} [engine.version] String version of the engine\n */\n this.parsedResult = {};\n\n if (skipParsing !== true) {\n this.parse();\n }\n }\n\n /**\n * Get UserAgent string of current Parser instance\n * @return {String} User-Agent String of the current <Parser> object\n *\n * @public\n */\n getUA() {\n return this._ua;\n }\n\n /**\n * Test a UA string for a regexp\n * @param {RegExp} regex\n * @return {Boolean}\n */\n test(regex) {\n return regex.test(this._ua);\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n */\n parseBrowser() {\n this.parsedResult.browser = {};\n\n const browserDescriptor = Utils.find(browserParsersList, (_browser) => {\n if (typeof _browser.test === 'function') {\n return _browser.test(this);\n }\n\n if (_browser.test instanceof Array) {\n return _browser.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (browserDescriptor) {\n this.parsedResult.browser = browserDescriptor.describe(this.getUA());\n }\n\n return this.parsedResult.browser;\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n *\n * @public\n */\n getBrowser() {\n if (this.parsedResult.browser) {\n return this.parsedResult.browser;\n }\n\n return this.parseBrowser();\n }\n\n /**\n * Get browser's name\n * @return {String} Browser's name or an empty string\n *\n * @public\n */\n getBrowserName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getBrowser().name).toLowerCase() || '';\n }\n return this.getBrowser().name || '';\n }\n\n\n /**\n * Get browser's version\n * @return {String} version of browser\n *\n * @public\n */\n getBrowserVersion() {\n return this.getBrowser().version;\n }\n\n /**\n * Get OS\n * @return {Object}\n *\n * @example\n * this.getOS();\n * {\n * name: 'macOS',\n * version: '10.11.12'\n * }\n */\n getOS() {\n if (this.parsedResult.os) {\n return this.parsedResult.os;\n }\n\n return this.parseOS();\n }\n\n /**\n * Parse OS and save it to this.parsedResult.os\n * @return {*|{}}\n */\n parseOS() {\n this.parsedResult.os = {};\n\n const os = Utils.find(osParsersList, (_os) => {\n if (typeof _os.test === 'function') {\n return _os.test(this);\n }\n\n if (_os.test instanceof Array) {\n return _os.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (os) {\n this.parsedResult.os = os.describe(this.getUA());\n }\n\n return this.parsedResult.os;\n }\n\n /**\n * Get OS name\n * @param {Boolean} [toLowerCase] return lower-cased value\n * @return {String} name of the OS — macOS, Windows, Linux, etc.\n */\n getOSName(toLowerCase) {\n const { name } = this.getOS();\n\n if (toLowerCase) {\n return String(name).toLowerCase() || '';\n }\n\n return name || '';\n }\n\n /**\n * Get OS version\n * @return {String} full version with dots ('10.11.12', '5.6', etc)\n */\n getOSVersion() {\n return this.getOS().version;\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n getPlatform() {\n if (this.parsedResult.platform) {\n return this.parsedResult.platform;\n }\n\n return this.parsePlatform();\n }\n\n /**\n * Get platform name\n * @param {Boolean} [toLowerCase=false]\n * @return {*}\n */\n getPlatformType(toLowerCase = false) {\n const { type } = this.getPlatform();\n\n if (toLowerCase) {\n return String(type).toLowerCase() || '';\n }\n\n return type || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parsePlatform() {\n this.parsedResult.platform = {};\n\n const platform = Utils.find(platformParsersList, (_platform) => {\n if (typeof _platform.test === 'function') {\n return _platform.test(this);\n }\n\n if (_platform.test instanceof Array) {\n return _platform.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (platform) {\n this.parsedResult.platform = platform.describe(this.getUA());\n }\n\n return this.parsedResult.platform;\n }\n\n /**\n * Get parsed engine\n * @return {{}}\n */\n getEngine() {\n if (this.parsedResult.engine) {\n return this.parsedResult.engine;\n }\n\n return this.parseEngine();\n }\n\n /**\n * Get engines's name\n * @return {String} Engines's name or an empty string\n *\n * @public\n */\n getEngineName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getEngine().name).toLowerCase() || '';\n }\n return this.getEngine().name || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parseEngine() {\n this.parsedResult.engine = {};\n\n const engine = Utils.find(enginesParsersList, (_engine) => {\n if (typeof _engine.test === 'function') {\n return _engine.test(this);\n }\n\n if (_engine.test instanceof Array) {\n return _engine.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (engine) {\n this.parsedResult.engine = engine.describe(this.getUA());\n }\n\n return this.parsedResult.engine;\n }\n\n /**\n * Parse full information about the browser\n * @returns {Parser}\n */\n parse() {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n this.parseEngine();\n\n return this;\n }\n\n /**\n * Get parsed result\n * @return {ParsedResult}\n */\n getResult() {\n return Utils.assign({}, this.parsedResult);\n }\n\n /**\n * Check if parsed browser matches certain conditions\n *\n * @param {Object} checkTree It's one or two layered object,\n * which can include a platform or an OS on the first layer\n * and should have browsers specs on the bottom-laying layer\n *\n * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.\n * Returns `undefined` when the browser is no described in the checkTree object.\n *\n * @example\n * const browser = Bowser.getParser(window.navigator.userAgent);\n * if (browser.satisfies({chrome: '>118.01.1322' }))\n * // or with os\n * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))\n * // or with platforms\n * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))\n */\n satisfies(checkTree) {\n const platformsAndOSes = {};\n let platformsAndOSCounter = 0;\n const browsers = {};\n let browsersCounter = 0;\n\n const allDefinitions = Object.keys(checkTree);\n\n allDefinitions.forEach((key) => {\n const currentDefinition = checkTree[key];\n if (typeof currentDefinition === 'string') {\n browsers[key] = currentDefinition;\n browsersCounter += 1;\n } else if (typeof currentDefinition === 'object') {\n platformsAndOSes[key] = currentDefinition;\n platformsAndOSCounter += 1;\n }\n });\n\n if (platformsAndOSCounter > 0) {\n const platformsAndOSNames = Object.keys(platformsAndOSes);\n const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));\n\n if (OSMatchingDefinition) {\n const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);\n\n if (osResult !== void 0) {\n return osResult;\n }\n }\n\n const platformMatchingDefinition = Utils.find(\n platformsAndOSNames,\n name => (this.isPlatform(name)),\n );\n if (platformMatchingDefinition) {\n const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);\n\n if (platformResult !== void 0) {\n return platformResult;\n }\n }\n }\n\n if (browsersCounter > 0) {\n const browserNames = Object.keys(browsers);\n const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));\n\n if (matchingDefinition !== void 0) {\n return this.compareVersion(browsers[matchingDefinition]);\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the browser name equals the passed string\n * @param browserName The string to compare with the browser name\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {boolean}\n */\n isBrowser(browserName, includingAlias = false) {\n const defaultBrowserName = this.getBrowserName().toLowerCase();\n let browserNameLower = browserName.toLowerCase();\n const alias = Utils.getBrowserTypeByAlias(browserNameLower);\n\n if (includingAlias && alias) {\n browserNameLower = alias.toLowerCase();\n }\n return browserNameLower === defaultBrowserName;\n }\n\n compareVersion(version) {\n let expectedResults = [0];\n let comparableVersion = version;\n let isLoose = false;\n\n const currentBrowserVersion = this.getBrowserVersion();\n\n if (typeof currentBrowserVersion !== 'string') {\n return void 0;\n }\n\n if (version[0] === '>' || version[0] === '<') {\n comparableVersion = version.substr(1);\n if (version[1] === '=') {\n isLoose = true;\n comparableVersion = version.substr(2);\n } else {\n expectedResults = [];\n }\n if (version[0] === '>') {\n expectedResults.push(1);\n } else {\n expectedResults.push(-1);\n }\n } else if (version[0] === '=') {\n comparableVersion = version.substr(1);\n } else if (version[0] === '~') {\n isLoose = true;\n comparableVersion = version.substr(1);\n }\n\n return expectedResults.indexOf(\n Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),\n ) > -1;\n }\n\n isOS(osName) {\n return this.getOSName(true) === String(osName).toLowerCase();\n }\n\n isPlatform(platformType) {\n return this.getPlatformType(true) === String(platformType).toLowerCase();\n }\n\n isEngine(engineName) {\n return this.getEngineName(true) === String(engineName).toLowerCase();\n }\n\n /**\n * Is anything? Check if the browser is called \"anything\",\n * the OS called \"anything\" or the platform called \"anything\"\n * @param {String} anything\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {Boolean}\n */\n is(anything, includingAlias = false) {\n return this.isBrowser(anything, includingAlias) || this.isOS(anything)\n || this.isPlatform(anything);\n }\n\n /**\n * Check if any of the given values satisfies this.is(anything)\n * @param {String[]} anythings\n * @returns {Boolean}\n */\n some(anythings = []) {\n return anythings.some(anything => this.is(anything));\n }\n}\n\nexport default Parser;\n","/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */\nimport Parser from './parser.js';\nimport {\n BROWSER_MAP,\n ENGINE_MAP,\n OS_MAP,\n PLATFORMS_MAP,\n} from './constants.js';\n\n/**\n * Bowser class.\n * Keep it simple as much as it can be.\n * It's supposed to work with collections of {@link Parser} instances\n * rather then solve one-instance problems.\n * All the one-instance stuff is located in Parser class.\n *\n * @class\n * @classdesc Bowser is a static object, that provides an API to the Parsers\n * @hideconstructor\n */\nclass Bowser {\n /**\n * Creates a {@link Parser} instance\n *\n * @param {String} UA UserAgent string\n * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it\n * explicitly. Same as `skipParsing` for {@link Parser}.\n * @returns {Parser}\n * @throws {Error} when UA is not a String\n *\n * @example\n * const parser = Bowser.getParser(window.navigator.userAgent);\n * const result = parser.getResult();\n */\n static getParser(UA, skipParsing = false) {\n if (typeof UA !== 'string') {\n throw new Error('UserAgent should be a string');\n }\n return new Parser(UA, skipParsing);\n }\n\n /**\n * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately\n *\n * @param UA\n * @return {ParsedResult}\n *\n * @example\n * const result = Bowser.parse(window.navigator.userAgent);\n */\n static parse(UA) {\n return (new Parser(UA)).getResult();\n }\n\n static get BROWSER_MAP() {\n return BROWSER_MAP;\n }\n\n static get ENGINE_MAP() {\n return ENGINE_MAP;\n }\n\n static get OS_MAP() {\n return OS_MAP;\n }\n\n static get PLATFORMS_MAP() {\n return PLATFORMS_MAP;\n }\n}\n\nexport default Bowser;\n","export const MAX_CACHE_LEN = 5; //最大缓存数\r\n\r\nexport const MAX_WAITING_TIME = 30000; //最大等待时间\r\n\r\nexport const UUID = 'uuid'; //存储uuid的字段","import { v4 as uuidv4 } from \"uuid\";\r\nimport Bowser from \"bowser\";\r\nimport { UUID } from \"./constant\";\r\n\r\n//基本信息\r\nexport class BaseInfo {\r\n constructor() {\r\n this.device = Bowser.parse(window.navigator.userAgent); //设备信息\r\n if (!localStorage.getItem(UUID)) {\r\n this.uuid = uuidv4(); //唯一id;\r\n localStorage.setItem(UUID, this.uuid); //如果不存在uuid,则进行存储\r\n }else{\r\n this.uuid = localStorage.getItem(UUID)\r\n }\r\n }\r\n}\r\n\r\nexport default new BaseInfo();\r\n","//发送数据\r\nexport const sendData = navigator.sendBeacon\r\n ? (url, data) => {\r\n navigator.sendBeacon(url, JSON.stringify(data));\r\n }\r\n : (url, data) => {\r\n let xhr = new XMLHttpRequest();\r\n xhr.open(\"POST\", url);\r\n xhr.send(JSON.stringify(data));\r\n };","import initBase, { emit } from \"./lib\";\n\nconst init = (function () {\n let connect = null;\n return function (options) {\n if (!connect) {\n initBase(options);\n connect = true;\n }\n };\n})();\n\nexport { init, emit };\n\nexport default { init, emit };\n"],"names":["Error","oldError","window","onerror","msg","url","line","column","error","emit","addEventListener","e","target","src","href","console","errorMsg","apply","arguments","stack","pv","historyPushState","historyReplaceState","history","pushState","replaceState","behavior","innerHTML","performance","observer","PerformanceObserver","list","_step","_iterator","_createForOfIteratorHelper","getEntries","s","n","done","entry","value","name","disconnect","startTime","err","f","observe","type","buffered","timeStamp","getRandomValues","count","frames","lastTimestamp","now","updateFPS","timestamp","deltaTime","Math","round","requestAnimationFrame","_typeof","obj","Symbol","iterator","constructor","prototype","_toPropertyKey","arg","key","input","hint","prim","toPrimitive","undefined","res","call","TypeError","String","Number","_defineProperties","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","toPropertyKey","_createClass","Constructor","protoProps","staticProps","_classCallCheck","instance","rnds8","Uint8Array","rng","crypto","bind","byteToHex","push","toString","slice","_native","randomUUID","v4","options","buf","offset","native","rnds","random","arr","toLowerCase","unsafeStringify","max","time","timer","BROWSER_ALIASES_MAP","Bada","BlackBerry","Chrome","Chromium","Electron","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","BROWSER_MAP","amazon_silk","android","bada","blackberry","chrome","chromium","electron","epiphany","firefox","focus","generic","googlebot","google_search","ie","k_meleon","maxthon","edge","mz","naver","opera","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","safari","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","PLATFORMS_MAP","tablet","mobile","desktop","tv","OS_MAP","WindowsPhone","Windows","MacOS","iOS","Android","WebOS","Linux","ChromeOS","PlayStation4","ENGINE_MAP","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","Utils","regexp","ua","match","_const","test","version","v","split","splice","map","parseInt","versionA","versionB","isLoose","versionAPrecision","getVersionPrecision","versionBPrecision","precision","lastPrecision","chunks","delta","_version","Array","join","chunk","reverse","min","result","predicate","l","find","_len","assigners","_key","assign","concat","_loop","assigner","keys","forEach","browserName","browserAlias","commonVersionIdentifier","browsersList","describe","browser","getFirstMatch","getSecondMatch","parser","notLikeAndroid","butAndroid","search","osParsersList","versionName","getWindowsVersionName","replace","getMacOSVersionName","os","getAndroidVersionName","platformParsersList","vendor","model","platform","iDevice","likeIDevice","getBrowserName","osMajorVersion","getOSVersion","getOSName","enginesParsersList","engine","isGecko","likeGecko","Parser","UA","skipParsing","this","_ua","parsedResult","parse","regex","_this","browserDescriptor","browserParsersList","_browser","some","condition","getUA","parseBrowser","getBrowser","parseOS","_this2","_os","getOS","parsePlatform","getPlatform","_this3","_platform","parseEngine","getEngine","_this4","_engine","checkTree","_this5","platformsAndOSes","platformsAndOSCounter","browsers","browsersCounter","currentDefinition","platformsAndOSNames","OSMatchingDefinition","isOS","osResult","satisfies","platformMatchingDefinition","isPlatform","platformResult","browserNames","matchingDefinition","isBrowser","compareVersion","includingAlias","defaultBrowserName","browserNameLower","alias","getBrowserTypeByAlias","expectedResults","comparableVersion","currentBrowserVersion","getBrowserVersion","substr","indexOf","compareVersions","osName","platformType","getPlatformType","engineName","getEngineName","anything","_this6","is","Bowser","getResult","get","UUID","baseInfo","BaseInfo","device","navigator","userAgent","localStorage","getItem","uuid","uuidv4","setItem","sendData","sendBeacon","data","JSON","stringify","xhr","XMLHttpRequest","open","send","events","visitTime","Date","date","info","location","referrer","document","duration","clearTimeout","setTimeout","initBase","log","init","connect","index"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22]}
|