cwj_monitoring 0.0.22 → 0.0.24

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.
@@ -0,0 +1,931 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.CWJMonitoring = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ const urlAlphabet =
8
+ 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';
9
+
10
+ /* @ts-self-types="./index.d.ts" */
11
+ let nanoid = (size = 21) => {
12
+ let id = '';
13
+ let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)));
14
+ while (size--) {
15
+ id += urlAlphabet[bytes[size] & 63];
16
+ }
17
+ return id
18
+ };
19
+
20
+ const getDate = (time = Date.now()) => {
21
+ const date = new Date(time);
22
+ const year = date.getFullYear();
23
+ const month = date.getMonth() + 1;
24
+ const day = date.getDate();
25
+ const hour = date.getHours();
26
+ const minute = date.getMinutes();
27
+ const second = date.getSeconds();
28
+ const formatter = (date2) => {
29
+ let res = "";
30
+ if (date2 < 10) {
31
+ res = "0" + date2;
32
+ } else {
33
+ res = date2.toString();
34
+ }
35
+ return res;
36
+ };
37
+ return year + "-" + formatter(month) + "-" + formatter(day) + " " + formatter(hour) + ":" + formatter(minute) + ":" + formatter(second);
38
+ };
39
+ const getSeconds = (timestamp1, timestamp2) => {
40
+ if (timestamp1 < timestamp2) {
41
+ [timestamp1, timestamp2] = [timestamp2, timestamp1];
42
+ }
43
+ return Math.floor((timestamp1 - timestamp2) / 1e3);
44
+ };
45
+
46
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
47
+
48
+ function getDefaultExportFromCjs (x) {
49
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
50
+ }
51
+
52
+ var es5 = {exports: {}};
53
+
54
+ (function (module, exports) {
55
+ !function(e,t){module.exports=t();}(commonjsGlobal,(function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,r),n.l=!0,n.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(i,n,function(t){return e[t]}.bind(null,n));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){t.__esModule=!0,t.default=void 0;var i=r(18),n=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";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}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map((function(e){return parseInt(e,10)||0}));t.push(0);var r=t[0],i=t[1];if(10===r)switch(i){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}switch(r){case 11:return "Big Sur";case 12:return "Monterey";case 13:return "Ventura";case 14:return "Sonoma";case 15:return "Sequoia";default:return}},e.getAndroidVersionName=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},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,i){void 0===i&&(i=!1);var n=e.getVersionPrecision(t),a=e.getVersionPrecision(r),o=Math.max(n,a),s=0,u=e.map([t,r],(function(t){var r=o-e.getVersionPrecision(t),i=t+new Array(r+1).join(".0");return e.map(i.split("."),(function(e){return new Array(20-e.length).join("0")+e})).reverse()}));for(i&&(s=o-Math.min(n,a)),o-=1;o>=s;){if(u[0][o]>u[1][o])return 1;if(u[0][o]===u[1][o]){if(o===s)return 0;o-=1;}else if(u[0][o]<u[1][o])return -1}},e.map=function(e,t){var r,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)i.push(t(e[r]));return i},e.find=function(e,t){var r,i;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,i=e.length;r<i;r+=1){var n=e[r];if(t(n,r))return n}},e.assign=function(e){for(var t,r,i=e,n=arguments.length,a=new Array(n>1?n-1:0),o=1;o<n;o++)a[o-1]=arguments[o];if(Object.assign)return Object.assign.apply(Object,[e].concat(a));var s=function(){var e=a[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){i[t]=e[t];}));};for(t=0,r=a.length;t<r;t+=1)s();return e},e.getBrowserAlias=function(e){return i.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return i.BROWSER_MAP[e]||""},e}();t.default=n,e.exports=t.default;},18:function(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={AmazonBot:"amazonbot","Amazon Silk":"amazon_silk","Android Browser":"android",BaiduSpider:"baiduspider",Bada:"bada",BingCrawler:"bingcrawler",BlackBerry:"blackberry","ChatGPT-User":"chatgpt_user",Chrome:"chrome",ClaudeBot:"claudebot",Chromium:"chromium",Diffbot:"diffbot",DuckDuckBot:"duckduckbot",Electron:"electron",Epiphany:"epiphany",FacebookExternalHit:"facebookexternalhit",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot",GPTBot:"gptbot","Internet Explorer":"ie",InternetArchiveCrawler:"internetarchivecrawler","K-Meleon":"k_meleon",LibreWolf:"librewolf",Maxthon:"maxthon","Meta-ExternalAds":"meta_externalads","Meta-ExternalAgent":"meta_externalagent","Meta-ExternalFetcher":"meta_externalfetcher","Meta-WebIndexer":"meta_webindexer","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver","OAI-SearchBot":"oai_searchbot",Omgilibot:"omgilibot",Opera:"opera","Opera Coast":"opera_coast","Pale Moon":"pale_moon",PerplexityBot:"perplexitybot","Perplexity-User":"perplexity_user",PhantomJS:"phantomjs",PingdomBot:"pingdombot",Puffin:"puffin",QQ:"qq",QQLite:"qqlite",QupZilla:"qupzilla",Roku:"roku",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir","Sogou Browser":"sogou",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat",YahooSlurp:"yahooslurp","Yandex Browser":"yandex",YandexBot:"yandexbot",YouBot:"youbot"};t.BROWSER_MAP={amazonbot:"AmazonBot",amazon_silk:"Amazon Silk",android:"Android Browser",baiduspider:"BaiduSpider",bada:"Bada",bingcrawler:"BingCrawler",blackberry:"BlackBerry",chatgpt_user:"ChatGPT-User",chrome:"Chrome",claudebot:"ClaudeBot",chromium:"Chromium",diffbot:"Diffbot",duckduckbot:"DuckDuckBot",edge:"Microsoft Edge",electron:"Electron",epiphany:"Epiphany",facebookexternalhit:"FacebookExternalHit",firefox:"Firefox",focus:"Focus",generic:"Generic",google_search:"Google Search",googlebot:"Googlebot",gptbot:"GPTBot",ie:"Internet Explorer",internetarchivecrawler:"InternetArchiveCrawler",k_meleon:"K-Meleon",librewolf:"LibreWolf",maxthon:"Maxthon",meta_externalads:"Meta-ExternalAds",meta_externalagent:"Meta-ExternalAgent",meta_externalfetcher:"Meta-ExternalFetcher",meta_webindexer:"Meta-WebIndexer",mz:"MZ Browser",naver:"NAVER Whale Browser",oai_searchbot:"OAI-SearchBot",omgilibot:"Omgilibot",opera:"Opera",opera_coast:"Opera Coast",pale_moon:"Pale Moon",perplexitybot:"PerplexityBot",perplexity_user:"Perplexity-User",phantomjs:"PhantomJS",pingdombot:"PingdomBot",puffin:"Puffin",qq:"QQ Browser",qqlite:"QQ Browser Lite",qupzilla:"QupZilla",roku:"Roku",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",sogou:"Sogou Browser",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yahooslurp:"YahooSlurp",yandex:"Yandex Browser",yandexbot:"YandexBot",youbot:"YouBot"};t.PLATFORMS_MAP={bot:"bot",desktop:"desktop",mobile:"mobile",tablet:"tablet",tv:"tv"};t.OS_MAP={Android:"Android",Bada:"Bada",BlackBerry:"BlackBerry",ChromeOS:"Chrome OS",HarmonyOS:"HarmonyOS",iOS:"iOS",Linux:"Linux",MacOS:"macOS",PlayStation4:"PlayStation 4",Roku:"Roku",Tizen:"Tizen",WebOS:"WebOS",Windows:"Windows",WindowsPhone:"Windows Phone"};t.ENGINE_MAP={Blink:"Blink",EdgeHTML:"EdgeHTML",Gecko:"Gecko",Presto:"Presto",Trident:"Trident",WebKit:"WebKit"};},90:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,n=(i=r(91))&&i.__esModule?i:{default:i},a=r(18);function o(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i);}}var s=function(){function e(){}var t,r,i;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new n.default(e,t)},e.parse=function(e){return new n.default(e).getResult()},t=e,i=[{key:"BROWSER_MAP",get:function(){return a.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return a.ENGINE_MAP}},{key:"OS_MAP",get:function(){return a.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return a.PLATFORMS_MAP}}],(r=null)&&o(t.prototype,r),i&&o(t,i),e}();t.default=s,e.exports=t.default;},91:function(e,t,r){t.__esModule=!0,t.default=void 0;var i=u(r(92)),n=u(r(93)),a=u(r(94)),o=u(r(95)),s=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=s.default.find(i.default,(function(t){if("function"==typeof t.test)return t.test(e);if(Array.isArray(t.test))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},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=s.default.find(n.default,(function(t){if("function"==typeof t.test)return t.test(e);if(Array.isArray(t.test))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},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=s.default.find(a.default,(function(t){if("function"==typeof t.test)return t.test(e);if(Array.isArray(t.test))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},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=s.default.find(o.default,(function(t){if("function"==typeof t.test)return t.test(e);if(Array.isArray(t.test))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},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return s.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},i=0,n={},a=0;if(Object.keys(e).forEach((function(t){var o=e[t];"string"==typeof o?(n[t]=o,a+=1):"object"==typeof o&&(r[t]=o,i+=1);})),i>0){var o=Object.keys(r),u=s.default.find(o,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=s.default.find(o,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(a>0){var l=Object.keys(n),b=s.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==b)return this.compareVersion(n[b])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),n=s.default.getBrowserTypeByAlias(i);return t&&n&&(i=n.toLowerCase()),i===r},t.compareVersion=function(e){var t=[0],r=e,i=!1,n=this.getBrowserVersion();if("string"==typeof n)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(i=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(i=!0,r=e.substr(1)),t.indexOf(s.default.compareVersions(n,r,i))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default;},92:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i};var a=/version\/(\d+(\.?_?\d+)+)/i,o=[{test:[/gptbot/i],describe:function(e){var t={name:"GPTBot"},r=n.default.getFirstMatch(/gptbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/chatgpt-user/i],describe:function(e){var t={name:"ChatGPT-User"},r=n.default.getFirstMatch(/chatgpt-user\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/oai-searchbot/i],describe:function(e){var t={name:"OAI-SearchBot"},r=n.default.getFirstMatch(/oai-searchbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe:function(e){var t={name:"ClaudeBot"},r=n.default.getFirstMatch(/(?:claudebot|claude-web|claude-user|claude-searchbot)\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/omgilibot/i,/webzio-extended/i],describe:function(e){var t={name:"Omgilibot"},r=n.default.getFirstMatch(/(?:omgilibot|webzio-extended)\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/diffbot/i],describe:function(e){var t={name:"Diffbot"},r=n.default.getFirstMatch(/diffbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/perplexitybot/i],describe:function(e){var t={name:"PerplexityBot"},r=n.default.getFirstMatch(/perplexitybot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/perplexity-user/i],describe:function(e){var t={name:"Perplexity-User"},r=n.default.getFirstMatch(/perplexity-user\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/youbot/i],describe:function(e){var t={name:"YouBot"},r=n.default.getFirstMatch(/youbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/meta-webindexer/i],describe:function(e){var t={name:"Meta-WebIndexer"},r=n.default.getFirstMatch(/meta-webindexer\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/meta-externalads/i],describe:function(e){var t={name:"Meta-ExternalAds"},r=n.default.getFirstMatch(/meta-externalads\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/meta-externalagent/i],describe:function(e){var t={name:"Meta-ExternalAgent"},r=n.default.getFirstMatch(/meta-externalagent\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/meta-externalfetcher/i],describe:function(e){var t={name:"Meta-ExternalFetcher"},r=n.default.getFirstMatch(/meta-externalfetcher\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=n.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/amazonbot/i],describe:function(e){var t={name:"AmazonBot"},r=n.default.getFirstMatch(/amazonbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/bingbot/i],describe:function(e){var t={name:"BingCrawler"},r=n.default.getFirstMatch(/bingbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/baiduspider/i],describe:function(e){var t={name:"BaiduSpider"},r=n.default.getFirstMatch(/baiduspider\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/duckduckbot/i],describe:function(e){var t={name:"DuckDuckBot"},r=n.default.getFirstMatch(/duckduckbot\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/ia_archiver/i],describe:function(e){var t={name:"InternetArchiveCrawler"},r=n.default.getFirstMatch(/ia_archiver\/(\d+(\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe:function(){return {name:"FacebookExternalHit"}}},{test:[/yahoo!?[\s/]*slurp/i],describe:function(){return {name:"YahooSlurp"}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe:function(){return {name:"YandexBot"}}},{test:[/pingdom/i],describe:function(){return {name:"PingdomBot"}}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=n.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=n.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/PaleMoon/i],describe:function(e){var t={name:"Pale Moon"},r=n.default.getFirstMatch(a,e)||n.default.getFirstMatch(/(?:PaleMoon)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=n.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=n.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=n.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=n.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=n.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=n.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,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.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=n.default.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.default.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.default.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.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=n.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=n.default.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.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=n.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(a,e)||n.default.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.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=n.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=n.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/librewolf/i],describe:function(e){var t={name:"LibreWolf"},r=n.default.getFirstMatch(/(?:librewolf)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=n.default.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.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sogoumobilebrowser/i,/metasr/i,/se 2\.[x]/i],describe:function(e){var t={name:"Sogou Browser"},r=n.default.getFirstMatch(/(?:sogoumobilebrowser)[\s/](\d+(\.?_?\d+)+)/i,e),i=n.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e),a=n.default.getFirstMatch(/se ([\d.]+)x/i,e),o=r||i||a;return o&&(t.version=o),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=n.default.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.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=n.default.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.default.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.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=n.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:n.default.getFirstMatch(t,e),version:n.default.getSecondMatch(t,e)}}}];t.default=o,e.exports=t.default;},93:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},a=r(18);var o=[{test:[/Roku\/DVP/],describe:function(e){var t=n.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:a.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=n.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:a.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=n.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=n.default.getWindowsVersionName(t);return {name:a.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:a.OS_MAP.iOS},r=n.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=n.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=n.default.getMacOSVersionName(t),i={name:a.OS_MAP.MacOS,version:t};return r&&(i.versionName=r),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=n.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:a.OS_MAP.iOS,version:t}}},{test:[/OpenHarmony/i],describe:function(e){var t=n.default.getFirstMatch(/OpenHarmony\s+(\d+(\.\d+)*)/i,e);return {name:a.OS_MAP.HarmonyOS,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.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=n.default.getAndroidVersionName(t),i={name:a.OS_MAP.Android,version:t};return r&&(i.versionName=r),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=n.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:a.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=n.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||n.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||n.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:a.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=n.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:a.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=n.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:a.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return {name:a.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return {name:a.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=n.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:a.OS_MAP.PlayStation4,version:t}}}];t.default=o,e.exports=t.default;},94:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},a=r(18);var o=[{test:[/googlebot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Google"}}},{test:[/amazonbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Amazon"}}},{test:[/gptbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"OpenAI"}}},{test:[/chatgpt-user/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"OpenAI"}}},{test:[/oai-searchbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"OpenAI"}}},{test:[/baiduspider/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Baidu"}}},{test:[/bingbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Bing"}}},{test:[/duckduckbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"DuckDuckGo"}}},{test:[/claudebot/i,/claude-web/i,/claude-user/i,/claude-searchbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Anthropic"}}},{test:[/omgilibot/i,/webzio-extended/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Webz.io"}}},{test:[/diffbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Diffbot"}}},{test:[/perplexitybot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Perplexity AI"}}},{test:[/perplexity-user/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Perplexity AI"}}},{test:[/youbot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"You.com"}}},{test:[/ia_archiver/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Internet Archive"}}},{test:[/meta-webindexer/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Meta"}}},{test:[/meta-externalads/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Meta"}}},{test:[/meta-externalagent/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Meta"}}},{test:[/meta-externalfetcher/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Meta"}}},{test:[/facebookexternalhit/i,/facebookcatalog/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Meta"}}},{test:[/yahoo/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Yahoo"}}},{test:[/yandexbot/i,/yandexmobilebot/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Yandex"}}},{test:[/pingdom/i],describe:function(){return {type:a.PLATFORMS_MAP.bot,vendor:"Pingdom"}}},{test:[/huawei/i],describe:function(e){var t=n.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:a.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return {type:a.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return {type:a.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return {type:a.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return {type:a.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return {type:a.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return {type:a.PLATFORMS_MAP.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.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:a.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return {type:a.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/Nokia/i],describe:function(e){var t=n.default.getFirstMatch(/Nokia\s+([0-9]+(\.[0-9]+)?)/i,e),r={type:a.PLATFORMS_MAP.mobile,vendor:"Nokia"};return t&&(r.model=t),r}},{test:[/[^-]mobi/i],describe:function(){return {type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return "blackberry"===e.getBrowserName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return "bada"===e.getBrowserName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return "windows phone"===e.getBrowserName()},describe:function(){return {type:a.PLATFORMS_MAP.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.PLATFORMS_MAP.tablet}}},{test:function(e){return "android"===e.getOSName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return "macos"===e.getOSName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return "windows"===e.getOSName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return "linux"===e.getOSName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return "playstation 4"===e.getOSName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.tv}}},{test:function(e){return "roku"===e.getOSName(!0)},describe:function(){return {type:a.PLATFORMS_MAP.tv}}}];t.default=o,e.exports=t.default;},95:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,n=(i=r(17))&&i.__esModule?i:{default:i},a=r(18);var o=[{test:function(e){return "microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return {name:a.ENGINE_MAP.Blink};var t=n.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:a.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:a.ENGINE_MAP.Trident},r=n.default.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:a.ENGINE_MAP.Presto},r=n.default.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:a.ENGINE_MAP.Gecko},r=n.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return {name:a.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:a.ENGINE_MAP.WebKit},r=n.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=o,e.exports=t.default;}})}));
56
+ } (es5));
57
+
58
+ var es5Exports = es5.exports;
59
+ var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5Exports);
60
+
61
+ function getBrowserNameVersion() {
62
+ const { browser, os, platform } = Bowser.parse(window.navigator.userAgent);
63
+ return {
64
+ browser,
65
+ os,
66
+ platform,
67
+ ratio: getRatio(),
68
+ wh: getWH()
69
+ };
70
+ }
71
+ function getRatio() {
72
+ let ratio = 0;
73
+ const screen = window.screen;
74
+ const ua = navigator.userAgent.toLowerCase();
75
+ if (window.devicePixelRatio !== void 0) {
76
+ ratio = window.devicePixelRatio;
77
+ } else if (~ua.indexOf("msie")) {
78
+ if (screen.deviceXDPI && screen.logicalXDPI) {
79
+ ratio = screen.deviceXDPI / screen.logicalXDPI;
80
+ }
81
+ } else if (window.outerWidth !== void 0 && window.innerWidth !== void 0) {
82
+ ratio = window.outerWidth / window.innerWidth;
83
+ }
84
+ if (ratio) {
85
+ ratio = Math.round(ratio * 100);
86
+ }
87
+ return ratio;
88
+ }
89
+ function getWH() {
90
+ return {
91
+ width: window.screen.width,
92
+ height: window.screen.height
93
+ };
94
+ }
95
+ const nextTime = window.requestIdleCallback || window.requestAnimationFrame || ((callback) => window.setTimeout(callback, 1e3 / 60));
96
+ const beforeUnload = (callback) => {
97
+ window.addEventListener("beforeunload", () => {
98
+ callback();
99
+ });
100
+ };
101
+
102
+ function throttle(fn, delay) {
103
+ let lastTime = 0;
104
+ return function(...args) {
105
+ const now = Date.now();
106
+ if (now - lastTime >= delay) {
107
+ fn.apply(this, args);
108
+ lastTime = now;
109
+ }
110
+ };
111
+ }
112
+
113
+ const MAX_CACHE_LEN = 5;
114
+ const MAX_WAITING_TIME = 3e4;
115
+ const UUID = "track_uuid";
116
+ const DEFAULT_LONG_TASK_THRESHOLD = 100;
117
+ const DEFAULT_RESOURCE_THRESHOLD = 1e3;
118
+ const DEFAULT_INP_THRESHOLD = 200;
119
+
120
+ var __defProp$3 = Object.defineProperty;
121
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
122
+ var __publicField$3 = (obj, key, value) => {
123
+ __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
124
+ return value;
125
+ };
126
+ class DeviceInfo {
127
+ constructor(uuidKey = UUID) {
128
+ __publicField$3(this, "device");
129
+ __publicField$3(this, "uuid", "");
130
+ this.device = getBrowserNameVersion();
131
+ this.getUUid(uuidKey);
132
+ }
133
+ getUUid(key) {
134
+ try {
135
+ const uuid = localStorage.getItem(key);
136
+ if (uuid) {
137
+ this.uuid = uuid;
138
+ } else {
139
+ this.uuid = nanoid();
140
+ localStorage.setItem(key, this.uuid);
141
+ }
142
+ } catch (e) {
143
+ this.uuid = nanoid();
144
+ console.warn("[CWJ Monitor] localStorage access failed, UUID will not be persisted:", e);
145
+ }
146
+ }
147
+ }
148
+
149
+ var __defProp$2 = Object.defineProperty;
150
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
151
+ var __publicField$2 = (obj, key, value) => {
152
+ __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
153
+ return value;
154
+ };
155
+ class EventTrack {
156
+ constructor(options, reporter) {
157
+ __publicField$2(this, "deviceInfo");
158
+ __publicField$2(this, "reporter");
159
+ __publicField$2(this, "data");
160
+ this.deviceInfo = new DeviceInfo(options.uuidKey);
161
+ this.reporter = reporter;
162
+ this.data = options.data;
163
+ }
164
+ /**
165
+ * 格式化事件数据用于传输
166
+ */
167
+ formatter(type, data) {
168
+ const timestamp = Date.now();
169
+ return {
170
+ device: this.deviceInfo.device,
171
+ uuid: this.deviceInfo.uuid,
172
+ type,
173
+ data,
174
+ date: getDate(timestamp),
175
+ userData: this.data
176
+ };
177
+ }
178
+ /**
179
+ * 公共方法:发送事件
180
+ * 将事件格式化后交给 reporter 处理
181
+ */
182
+ emit(type, data) {
183
+ const payload = this.formatter(type, data);
184
+ this.reporter.send(payload);
185
+ }
186
+ /**
187
+ * 获取上报器实例 (供 Core 使用)
188
+ */
189
+ getReporter() {
190
+ return this.reporter;
191
+ }
192
+ }
193
+
194
+ var __defProp$1 = Object.defineProperty;
195
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
196
+ var __publicField$1 = (obj, key, value) => {
197
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
198
+ return value;
199
+ };
200
+ class Reporter {
201
+ constructor(url, config) {
202
+ __publicField$1(this, "url");
203
+ __publicField$1(this, "transportConfig");
204
+ __publicField$1(this, "events", []);
205
+ __publicField$1(this, "isSending", false);
206
+ __publicField$1(this, "timer", null);
207
+ this.url = url;
208
+ this.transportConfig = {
209
+ maxBatchSize: config?.maxBatchSize ?? MAX_CACHE_LEN,
210
+ maxWaitTime: config?.maxWaitTime ?? MAX_WAITING_TIME
211
+ };
212
+ beforeUnload(() => this.flush());
213
+ }
214
+ /**
215
+ * 将事件加入队列
216
+ */
217
+ send(payload) {
218
+ this.events.push(payload);
219
+ if (this.events.length >= this.transportConfig.maxBatchSize) {
220
+ this.clearTimer();
221
+ this.triggerSend();
222
+ } else if (!this.timer) {
223
+ this.timer = setTimeout(() => {
224
+ this.timer = null;
225
+ this.triggerSend();
226
+ }, this.transportConfig.maxWaitTime);
227
+ }
228
+ }
229
+ /**
230
+ * 立即刷新所有待发送事件
231
+ */
232
+ flush() {
233
+ return this.triggerSend(true);
234
+ }
235
+ clearTimer() {
236
+ if (this.timer) {
237
+ clearTimeout(this.timer);
238
+ this.timer = null;
239
+ }
240
+ }
241
+ /**
242
+ * 触发发送逻辑
243
+ */
244
+ async triggerSend(isFlush = false) {
245
+ if (this.isSending || !this.events.length)
246
+ return;
247
+ this.isSending = true;
248
+ try {
249
+ const maxLen = isFlush ? this.events.length : this.transportConfig.maxBatchSize;
250
+ const sendEvents = this.events.slice(0, maxLen);
251
+ this.events = this.events.slice(maxLen);
252
+ await this.safeSend(sendEvents);
253
+ if (this.events.length) {
254
+ nextTime(() => this.triggerSend());
255
+ }
256
+ } catch (error) {
257
+ } finally {
258
+ this.isSending = false;
259
+ }
260
+ }
261
+ /**
262
+ * 使用 navigator.sendBeacon 或 XMLHttpRequest 安全发送事件
263
+ */
264
+ safeSend(events) {
265
+ return new Promise((resolve, reject) => {
266
+ if (!events.length) {
267
+ resolve();
268
+ return;
269
+ }
270
+ const data = JSON.stringify(events);
271
+ if (typeof navigator.sendBeacon === "function") {
272
+ const blob = new Blob([data], { type: "application/json" });
273
+ const success = navigator.sendBeacon(this.url, blob);
274
+ if (success) {
275
+ resolve();
276
+ } else {
277
+ this.sendViaXHR(data, resolve, reject);
278
+ }
279
+ } else {
280
+ this.sendViaXHR(data, resolve, reject);
281
+ }
282
+ });
283
+ }
284
+ /**
285
+ * 通过 XMLHttpRequest 发送
286
+ */
287
+ sendViaXHR(data, resolve, reject) {
288
+ const xhr = new XMLHttpRequest();
289
+ xhr.open("POST", this.url, true);
290
+ xhr.setRequestHeader("Content-Type", "application/json");
291
+ xhr.onload = () => {
292
+ if (xhr.status >= 200 && xhr.status < 300) {
293
+ resolve();
294
+ } else {
295
+ reject(new Error(`HTTP ${xhr.status}: ${xhr.statusText}`));
296
+ }
297
+ };
298
+ xhr.onerror = () => reject(new Error("Network error"));
299
+ xhr.ontimeout = () => reject(new Error("Request timeout"));
300
+ xhr.timeout = 1e4;
301
+ xhr.send(data);
302
+ }
303
+ }
304
+
305
+ var TYPES = /* @__PURE__ */ ((TYPES2) => {
306
+ TYPES2["ERROR"] = "error";
307
+ TYPES2["CLICK"] = "click";
308
+ TYPES2["PERFORMANCE"] = "performance";
309
+ TYPES2["ROUTER"] = "router";
310
+ TYPES2["XHR"] = "xhr";
311
+ TYPES2["FETCH"] = "fetch";
312
+ return TYPES2;
313
+ })(TYPES || {});
314
+ var EMIT_TYPE = /* @__PURE__ */ ((EMIT_TYPE2) => {
315
+ EMIT_TYPE2["ERROR"] = "error";
316
+ EMIT_TYPE2["BEHAVIOR_CLICK"] = "click";
317
+ EMIT_TYPE2["ROUTE_CHANGE"] = "route_change";
318
+ EMIT_TYPE2["PERFORMANCE_FP"] = "performance_fp";
319
+ EMIT_TYPE2["PERFORMANCE_FCP"] = "performance_fcp";
320
+ EMIT_TYPE2["PERFORMANCE_LCP"] = "performance_lcp";
321
+ EMIT_TYPE2["PERFORMANCE_INP"] = "performance_inp";
322
+ EMIT_TYPE2["PERFORMANCE_LONGTASK"] = "performance_longtask";
323
+ EMIT_TYPE2["PERFORMANCE_RESOURCE"] = "performance_resource";
324
+ EMIT_TYPE2["XHR"] = "xhr";
325
+ EMIT_TYPE2["FETCH"] = "fetch";
326
+ EMIT_TYPE2["CUSTOM"] = "custom";
327
+ return EMIT_TYPE2;
328
+ })(EMIT_TYPE || {});
329
+
330
+ var __defProp = Object.defineProperty;
331
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
332
+ var __publicField = (obj, key, value) => {
333
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
334
+ return value;
335
+ };
336
+ class Core extends EventTrack {
337
+ constructor(options) {
338
+ const reporter = new Reporter(options.url, options.transport);
339
+ super(options, reporter);
340
+ __publicField(this, "pluginMap", /* @__PURE__ */ new Map());
341
+ __publicField(this, "options");
342
+ this.options = options;
343
+ }
344
+ use(plugin) {
345
+ if (!this.pluginMap.has(plugin.name)) {
346
+ this.pluginMap.set(plugin.name, plugin);
347
+ }
348
+ return this;
349
+ }
350
+ /**
351
+ * 自定义事件上报
352
+ * @param data 上报的数据
353
+ * @param type 事件类型,默认为 'custom'
354
+ */
355
+ log(data, type = EMIT_TYPE.CUSTOM) {
356
+ this.emit(type, data);
357
+ }
358
+ // 启动插件
359
+ run() {
360
+ const context = {
361
+ emit: this.emit.bind(this),
362
+ url: this.options.url
363
+ };
364
+ this.pluginMap.forEach((plugin) => {
365
+ plugin.install(context);
366
+ });
367
+ this.mount();
368
+ }
369
+ // 停止并卸载所有插件
370
+ stop() {
371
+ this.pluginMap.forEach((plugin) => {
372
+ plugin.uninstall?.();
373
+ });
374
+ this.pluginMap.clear();
375
+ this.unmount();
376
+ }
377
+ mount() {
378
+ const { globalKey = "$track" } = this.options;
379
+ if (typeof window !== "undefined") {
380
+ window[globalKey] = this;
381
+ }
382
+ }
383
+ unmount() {
384
+ const { globalKey = "$track" } = this.options;
385
+ if (typeof window !== "undefined" && window[globalKey] === this) {
386
+ delete window[globalKey];
387
+ }
388
+ }
389
+ }
390
+ function createMonitor(options) {
391
+ return new Core(options);
392
+ }
393
+
394
+ const ErrorPlugin = (options = {}) => {
395
+ let originalConsoleError;
396
+ let context;
397
+ const overrideConsoleError = () => {
398
+ originalConsoleError = console.error;
399
+ console.error = (...args) => {
400
+ originalConsoleError?.apply(console, args);
401
+ const errorData = {
402
+ type: "console",
403
+ message: args.map((arg) => String(arg)).join(" "),
404
+ stack: new Error().stack
405
+ };
406
+ if (options.filter && !options.filter(errorData)) {
407
+ return;
408
+ }
409
+ context?.emit(EMIT_TYPE.ERROR, errorData);
410
+ };
411
+ };
412
+ const restoreConsoleError = () => {
413
+ if (originalConsoleError) {
414
+ console.error = originalConsoleError;
415
+ }
416
+ };
417
+ const cleanStack = (stack) => {
418
+ if (!stack)
419
+ return void 0;
420
+ const lines = stack.split("\n").slice(0, 11);
421
+ return lines.join("\n");
422
+ };
423
+ const simpleHash = (str) => {
424
+ let hash = 0;
425
+ for (let i = 0; i < str.length; i++) {
426
+ const char = str.charCodeAt(i);
427
+ hash = (hash << 5) - hash + char;
428
+ hash = hash & hash;
429
+ }
430
+ return Math.abs(hash).toString(36);
431
+ };
432
+ const generateFingerprint = (...parts) => {
433
+ const combined = parts.filter(Boolean).join("|");
434
+ return simpleHash(combined);
435
+ };
436
+ const isResourceError = (target) => {
437
+ const resourceTags = ["LINK", "SCRIPT", "IMG", "AUDIO", "VIDEO", "IFRAME"];
438
+ return target && resourceTags.includes(target.tagName);
439
+ };
440
+ const getPromiseErrorDetails = (e) => {
441
+ if (e.reason instanceof Error) {
442
+ return {
443
+ errorType: "promise",
444
+ message: e.reason.message,
445
+ stack: cleanStack(e.reason.stack),
446
+ name: e.reason.name,
447
+ fingerprint: generateFingerprint(e.reason.message, e.reason.stack)
448
+ };
449
+ }
450
+ return {
451
+ errorType: "promise",
452
+ message: String(e.reason)
453
+ };
454
+ };
455
+ const getErrorDetails = (e) => {
456
+ const { error, target, filename, message } = e;
457
+ if (error instanceof Error) {
458
+ return {
459
+ errorType: "js",
460
+ name: error.name,
461
+ message: error.message,
462
+ stack: cleanStack(error.stack),
463
+ filename,
464
+ colno: e.colno,
465
+ lineno: e.lineno,
466
+ fingerprint: generateFingerprint(error.message, error.stack)
467
+ };
468
+ }
469
+ if (isResourceError(target)) {
470
+ const element = target;
471
+ const url = "src" in element ? element.src : element.href;
472
+ return {
473
+ errorType: "resource",
474
+ message: `Resource load failed: ${url}`,
475
+ url,
476
+ tagName: element.tagName,
477
+ fingerprint: generateFingerprint(`resource:${url}`)
478
+ };
479
+ }
480
+ return {
481
+ errorType: "unknown",
482
+ message,
483
+ filename
484
+ };
485
+ };
486
+ const errorHandler = (e) => {
487
+ const errorData = { type: "sync", ...getErrorDetails(e) };
488
+ if (options.filter && !options.filter(errorData))
489
+ return;
490
+ context?.emit(EMIT_TYPE.ERROR, errorData);
491
+ };
492
+ const rejectionHandler = (e) => {
493
+ const errorData = { type: "async", ...getPromiseErrorDetails(e) };
494
+ if (options.filter && !options.filter(errorData))
495
+ return;
496
+ context?.emit(EMIT_TYPE.ERROR, errorData);
497
+ };
498
+ return {
499
+ name: TYPES.ERROR,
500
+ install: (ctx) => {
501
+ context = ctx;
502
+ overrideConsoleError();
503
+ window.addEventListener("error", errorHandler, true);
504
+ window.addEventListener("unhandledrejection", rejectionHandler, true);
505
+ },
506
+ uninstall: () => {
507
+ restoreConsoleError();
508
+ window.removeEventListener("error", errorHandler, true);
509
+ window.removeEventListener("unhandledrejection", rejectionHandler, true);
510
+ }
511
+ };
512
+ };
513
+
514
+ const PVPlugin = (options = {}) => {
515
+ let lastRouteTime = Date.now();
516
+ let context;
517
+ let originPushState;
518
+ let originReplaceState;
519
+ const emitRouteChange = (type) => {
520
+ const now = Date.now();
521
+ const to = window.location.href;
522
+ const from = document.referrer;
523
+ if (options.filter && !options.filter(to, from)) {
524
+ return;
525
+ }
526
+ context?.emit(EMIT_TYPE.ROUTE_CHANGE, {
527
+ from,
528
+ to,
529
+ type,
530
+ duration: getSeconds(now, lastRouteTime)
531
+ });
532
+ lastRouteTime = now;
533
+ };
534
+ const handleHashChange = () => emitRouteChange("hashchange");
535
+ const handlePopState = () => emitRouteChange("popstate");
536
+ const setupHistoryListener = () => {
537
+ originPushState = window.history.pushState;
538
+ originReplaceState = window.history.replaceState;
539
+ window.history.pushState = (...args) => {
540
+ originPushState.apply(window.history, args);
541
+ emitRouteChange("pushState");
542
+ };
543
+ window.history.replaceState = (...args) => {
544
+ originReplaceState.apply(window.history, args);
545
+ emitRouteChange("replaceState");
546
+ };
547
+ };
548
+ const restoreHistoryListener = () => {
549
+ if (originPushState)
550
+ window.history.pushState = originPushState;
551
+ if (originReplaceState)
552
+ window.history.replaceState = originReplaceState;
553
+ };
554
+ return {
555
+ name: TYPES.ROUTER,
556
+ install: (ctx) => {
557
+ context = ctx;
558
+ lastRouteTime = Date.now();
559
+ window.addEventListener("hashchange", handleHashChange);
560
+ window.addEventListener("popstate", handlePopState);
561
+ setupHistoryListener();
562
+ },
563
+ uninstall: () => {
564
+ window.removeEventListener("hashchange", handleHashChange);
565
+ window.removeEventListener("popstate", handlePopState);
566
+ restoreHistoryListener();
567
+ }
568
+ };
569
+ };
570
+
571
+ const BehaviorPlugin = (options = {}) => {
572
+ const { throttleDelay = 500 } = options;
573
+ let context;
574
+ const getElementXPath = (element) => {
575
+ if (!element || element.nodeType !== 1)
576
+ return "";
577
+ if (element.id)
578
+ return `//*[@id="${element.id}"]`;
579
+ const sameTagSiblings = Array.from(element.parentNode?.children || []).filter(
580
+ (el) => el.tagName === element.tagName
581
+ );
582
+ const idx = sameTagSiblings.indexOf(element) + 1;
583
+ return `${getElementXPath(element.parentNode)}/${element.tagName.toLowerCase()}[${idx}]`;
584
+ };
585
+ const handleClick = throttle((e) => {
586
+ const target = e.target;
587
+ if (!target)
588
+ return;
589
+ if (options.filter && !options.filter(target)) {
590
+ return;
591
+ }
592
+ const clickData = {
593
+ tagName: target.tagName,
594
+ id: target.id,
595
+ className: target.className,
596
+ text: target.textContent?.trim(),
597
+ xPath: getElementXPath(target)
598
+ };
599
+ context?.emit(EMIT_TYPE.BEHAVIOR_CLICK, clickData);
600
+ }, throttleDelay);
601
+ return {
602
+ name: TYPES.CLICK,
603
+ install: (ctx) => {
604
+ context = ctx;
605
+ document.addEventListener(EMIT_TYPE.BEHAVIOR_CLICK, handleClick, true);
606
+ },
607
+ uninstall: () => {
608
+ document.removeEventListener(EMIT_TYPE.BEHAVIOR_CLICK, handleClick, true);
609
+ }
610
+ };
611
+ };
612
+
613
+ const PerformancePlugin = (options = {}) => {
614
+ let context;
615
+ let paintObserver = null;
616
+ let lcpObserver = null;
617
+ let inpObserver = null;
618
+ let longTaskObserver = null;
619
+ let resourceObserver = null;
620
+ const interactionMap = /* @__PURE__ */ new Map();
621
+ const monitorPaintMetrics = () => {
622
+ const entryHandler = (list) => {
623
+ for (const entry of list.getEntries()) {
624
+ if (entry.name === "first-paint") {
625
+ if (options.filter && !options.filter(EMIT_TYPE.PERFORMANCE_FP, entry.startTime)) {
626
+ continue;
627
+ }
628
+ context?.emit(EMIT_TYPE.PERFORMANCE_FP, entry.startTime);
629
+ } else if (entry.name === "first-contentful-paint") {
630
+ if (options.filter && !options.filter(EMIT_TYPE.PERFORMANCE_FCP, entry.startTime)) {
631
+ continue;
632
+ }
633
+ context?.emit(EMIT_TYPE.PERFORMANCE_FCP, entry.startTime);
634
+ }
635
+ }
636
+ paintObserver?.disconnect();
637
+ };
638
+ try {
639
+ paintObserver = new PerformanceObserver(entryHandler);
640
+ paintObserver.observe({ type: "paint", buffered: true });
641
+ } catch (e) {
642
+ console.warn("[CWJ Monitor] Paint observation not supported:", e);
643
+ }
644
+ };
645
+ const monitorLCP = () => {
646
+ const entryHandler = (list) => {
647
+ if (lcpObserver) {
648
+ lcpObserver.disconnect();
649
+ }
650
+ for (const entry of list.getEntries()) {
651
+ if (options.filter && !options.filter(EMIT_TYPE.PERFORMANCE_LCP, entry.startTime)) {
652
+ continue;
653
+ }
654
+ context?.emit(EMIT_TYPE.PERFORMANCE_LCP, entry.startTime);
655
+ }
656
+ };
657
+ try {
658
+ lcpObserver = new PerformanceObserver(entryHandler);
659
+ lcpObserver.observe({ type: "largest-contentful-paint", buffered: true });
660
+ } catch (e) {
661
+ console.warn("[CWJ Monitor] LCP observation not supported:", e);
662
+ }
663
+ };
664
+ const monitorINP = () => {
665
+ const entryHandler = (list) => {
666
+ for (const entry of list.getEntries()) {
667
+ if (!entry.interactionId)
668
+ continue;
669
+ const existing = interactionMap.get(entry.interactionId);
670
+ if (existing) {
671
+ clearTimeout(existing.timeoutId);
672
+ }
673
+ const maxEntry = existing && existing.entry.duration > entry.duration ? existing.entry : entry;
674
+ const timeoutId = setTimeout(() => {
675
+ interactionMap.delete(maxEntry.interactionId);
676
+ if (options.filter && !options.filter(EMIT_TYPE.PERFORMANCE_INP, maxEntry)) {
677
+ return;
678
+ }
679
+ const threshold = options.inpThreshold ?? DEFAULT_INP_THRESHOLD;
680
+ if (maxEntry.duration > threshold) {
681
+ context?.emit(EMIT_TYPE.PERFORMANCE_INP, {
682
+ value: maxEntry.duration,
683
+ startTime: maxEntry.startTime,
684
+ name: maxEntry.name,
685
+ interactionId: maxEntry.interactionId
686
+ });
687
+ }
688
+ }, 200);
689
+ interactionMap.set(entry.interactionId, { entry: maxEntry, timeoutId });
690
+ }
691
+ };
692
+ try {
693
+ inpObserver = new PerformanceObserver(entryHandler);
694
+ inpObserver.observe({ type: "event", buffered: true });
695
+ } catch (e) {
696
+ console.warn("[CWJ Monitor] INP observation not supported:", e);
697
+ }
698
+ };
699
+ const monitorLongTask = () => {
700
+ const entryHandler = (list) => {
701
+ for (const entry of list.getEntries()) {
702
+ if (options.filter && !options.filter(EMIT_TYPE.PERFORMANCE_LONGTASK, entry)) {
703
+ continue;
704
+ }
705
+ const threshold = options.longTaskThreshold ?? DEFAULT_LONG_TASK_THRESHOLD;
706
+ if (entry.duration > threshold) {
707
+ context?.emit(EMIT_TYPE.PERFORMANCE_LONGTASK, {
708
+ startTime: entry.startTime,
709
+ duration: entry.duration,
710
+ name: entry.name,
711
+ attribution: entry.attribution
712
+ });
713
+ }
714
+ }
715
+ };
716
+ try {
717
+ longTaskObserver = new PerformanceObserver(entryHandler);
718
+ longTaskObserver.observe({ type: "longtask", buffered: true });
719
+ } catch (e) {
720
+ console.warn("[CWJ Monitor] Long Task observation not supported:", e);
721
+ }
722
+ };
723
+ const monitorResource = () => {
724
+ const entryHandler = (list) => {
725
+ for (const entry of list.getEntries()) {
726
+ if (entry.initiatorType !== "fetch" && entry.initiatorType !== "xmlhttprequest") {
727
+ continue;
728
+ }
729
+ if (options.filter && !options.filter(EMIT_TYPE.PERFORMANCE_RESOURCE, entry)) {
730
+ continue;
731
+ }
732
+ const threshold = options.resourceThreshold ?? DEFAULT_RESOURCE_THRESHOLD;
733
+ if (entry.duration > threshold) {
734
+ context?.emit(EMIT_TYPE.PERFORMANCE_RESOURCE, {
735
+ name: entry.name,
736
+ // 资源 URL
737
+ initiatorType: entry.initiatorType,
738
+ duration: entry.duration,
739
+ startTime: entry.startTime,
740
+ transferSize: entry.transferSize,
741
+ encodedBodySize: entry.encodedBodySize,
742
+ decodedBodySize: entry.decodedBodySize
743
+ });
744
+ }
745
+ }
746
+ };
747
+ try {
748
+ resourceObserver = new PerformanceObserver(entryHandler);
749
+ resourceObserver.observe({ type: "resource", buffered: true });
750
+ } catch (e) {
751
+ console.warn("[CWJ Monitor] Resource observation not supported:", e);
752
+ }
753
+ };
754
+ return {
755
+ name: TYPES.PERFORMANCE,
756
+ install: (ctx) => {
757
+ context = ctx;
758
+ monitorPaintMetrics();
759
+ monitorLCP();
760
+ monitorINP();
761
+ monitorLongTask();
762
+ monitorResource();
763
+ },
764
+ uninstall: () => {
765
+ paintObserver?.disconnect();
766
+ lcpObserver?.disconnect();
767
+ inpObserver?.disconnect();
768
+ longTaskObserver?.disconnect();
769
+ resourceObserver?.disconnect();
770
+ interactionMap.forEach((value) => clearTimeout(value.timeoutId));
771
+ interactionMap.clear();
772
+ }
773
+ };
774
+ };
775
+
776
+ const XHRPlugin = (options = {}) => {
777
+ let context;
778
+ let originOpen;
779
+ let originSend;
780
+ const setupXHRListeners = () => {
781
+ const originXhr = window.XMLHttpRequest;
782
+ if (!originXhr)
783
+ return;
784
+ originOpen = originXhr.prototype.open;
785
+ originSend = originXhr.prototype.send;
786
+ originXhr.prototype.open = function(...args) {
787
+ this._xhr_info = {
788
+ method: args[0].toUpperCase(),
789
+ url: String(args[1]),
790
+ startTime: 0
791
+ };
792
+ return originOpen.apply(this, args);
793
+ };
794
+ originXhr.prototype.send = function(...args) {
795
+ if (this._xhr_info) {
796
+ this._xhr_info.startTime = Date.now();
797
+ }
798
+ const onLoadend = () => {
799
+ if (this._xhr_info) {
800
+ const trackerUrl = context?.url;
801
+ const { url, method, startTime } = this._xhr_info;
802
+ if (trackerUrl && url.includes(trackerUrl)) {
803
+ return;
804
+ }
805
+ if (options.filter && !options.filter(method, url)) {
806
+ return;
807
+ }
808
+ const duration = Date.now() - startTime;
809
+ const status = this.status;
810
+ if (!(status >= 200 && status < 300)) {
811
+ const data = {
812
+ method,
813
+ url,
814
+ status,
815
+ duration,
816
+ // 限制响应体大小,避免数据过大
817
+ response: this.response ? String(this.response).slice(0, 200) : ""
818
+ };
819
+ context?.emit(EMIT_TYPE.XHR, data);
820
+ }
821
+ }
822
+ };
823
+ this.addEventListener("loadend", onLoadend);
824
+ return originSend.apply(this, args);
825
+ };
826
+ };
827
+ const restoreXHR = () => {
828
+ const originXhr = window.XMLHttpRequest;
829
+ if (!originXhr)
830
+ return;
831
+ if (originOpen)
832
+ originXhr.prototype.open = originOpen;
833
+ if (originSend)
834
+ originXhr.prototype.send = originSend;
835
+ };
836
+ return {
837
+ name: TYPES.XHR,
838
+ install: (ctx) => {
839
+ context = ctx;
840
+ setupXHRListeners();
841
+ },
842
+ uninstall: () => {
843
+ restoreXHR();
844
+ }
845
+ };
846
+ };
847
+
848
+ const FetchPlugin = (options = {}) => {
849
+ let context;
850
+ let originFetch;
851
+ const setupFetchListeners = () => {
852
+ originFetch = window.fetch;
853
+ if (!originFetch)
854
+ return;
855
+ window.fetch = function(input, init) {
856
+ const startTime = Date.now();
857
+ const method = (init?.method || "GET").toUpperCase();
858
+ const url = input instanceof Request ? input.url : String(input);
859
+ return originFetch.apply(this, [input, init]).then(
860
+ (response) => {
861
+ const trackerUrl = context?.url;
862
+ if (trackerUrl && url.includes(trackerUrl)) {
863
+ return response;
864
+ }
865
+ if (options.filter && !options.filter(method, url)) {
866
+ return response;
867
+ }
868
+ if (!response.ok) {
869
+ const duration = Date.now() - startTime;
870
+ const data = {
871
+ method,
872
+ url,
873
+ status: response.status,
874
+ duration,
875
+ success: false
876
+ };
877
+ context?.emit(EMIT_TYPE.FETCH, data);
878
+ }
879
+ return response;
880
+ },
881
+ (error) => {
882
+ const trackerUrl = context?.url;
883
+ if (trackerUrl && url.includes(trackerUrl)) {
884
+ throw error;
885
+ }
886
+ if (options.filter && !options.filter(method, url)) {
887
+ throw error;
888
+ }
889
+ const duration = Date.now() - startTime;
890
+ const data = {
891
+ method,
892
+ url,
893
+ status: 0,
894
+ duration,
895
+ success: false,
896
+ message: error.message
897
+ };
898
+ context?.emit(EMIT_TYPE.FETCH, data);
899
+ throw error;
900
+ }
901
+ );
902
+ };
903
+ };
904
+ const restoreFetch = () => {
905
+ if (originFetch)
906
+ window.fetch = originFetch;
907
+ };
908
+ return {
909
+ name: TYPES.FETCH,
910
+ install: (ctx) => {
911
+ context = ctx;
912
+ setupFetchListeners();
913
+ },
914
+ uninstall: () => {
915
+ restoreFetch();
916
+ }
917
+ };
918
+ };
919
+
920
+ exports.BehaviorPlugin = BehaviorPlugin;
921
+ exports.Core = Core;
922
+ exports.EMIT_TYPE = EMIT_TYPE;
923
+ exports.ErrorPlugin = ErrorPlugin;
924
+ exports.FetchPlugin = FetchPlugin;
925
+ exports.PVPlugin = PVPlugin;
926
+ exports.PerformancePlugin = PerformancePlugin;
927
+ exports.XHRPlugin = XHRPlugin;
928
+ exports.createMonitor = createMonitor;
929
+
930
+ }));
931
+ //# sourceMappingURL=index.umd.js.map