diff --git a/README.md b/README.md index 2a22699c..94a26a10 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,14 @@ ```js var browser = require("browser-tool"); -// 同步获取信息 -console.log(browser()); +// 解析User-Agent +let info = browser.parse('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'); -// 异步获取信息(结果更为全面) -browser.getInfo().then(console.log); +// 获取浏览器详细信息 - 指定字段:'browser','engine','system','device','gpu','network','battery','screen','language','timezone' +let networkInfo = await browser.getInfo(['network']); + +// 获取浏览器详细信息 - 全部字段 +let info = await browser.getInfo(); ``` #### 返回 ```js diff --git a/babel.config.js b/babel.config.js index ac7d2c0e..ba00125d 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,10 @@ module.exports = { presets: [ - '@babel/preset-env' + ['@babel/preset-env',{ + "targets" : { + "chrome" : "88" + } + }] ], plugins: [ '@babel/plugin-transform-runtime' diff --git a/dist/browser.min.js b/dist/browser.min.js index fdbaf55c..4e9694f7 100644 --- a/dist/browser.min.js +++ b/dist/browser.min.js @@ -1,5 +1,5 @@ /*! - * browser-tool v1.2.8 + * browser-tool v1.3.0 * Useragent analysis tool. * https://passer-by.com/browser/ * @@ -8,6 +8,6 @@ * Released under the MIT License * https://github.com/mumuy/browser * - * Created on: 2024-07-21 + * Created on: 2024-08-01 */ -!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(n="undefined"!=typeof globalThis?globalThis:n||self).browser=e()}(this,(function(){"use strict";function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},n(e)}var e={name:"Safari",match:function(n){return n.includes("Safari")},version:function(n){var e;return(null===(e=n.match(/Version\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},r={name:"Chrome",match:function(n){return n.includes("Chrome")||n.includes("CriOS")},version:function(n){var e,r;return(null===(e=n.match(/Chrome\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/CriOS\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},i={name:"Edge",match:function(n){return n.includes("Edge")||n.includes("Edg/")||n.includes("EdgA")||n.includes("EdgiOS")},version:function(n){var e,r,i,o;return(null===(e=n.match(/Edge\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/Edg\/([\d.]+)/))||void 0===r?void 0:r[1])||(null===(i=n.match(/EdgA\/([\d.]+)/))||void 0===i?void 0:i[1])||(null===(o=n.match(/EdgiOS\/([\d.]+)/))||void 0===o?void 0:o[1])||""}},o={name:"IE",match:function(n){return n.includes("MSIE")||n.includes("Trident")},version:function(n){var e,r;return(null===(e=n.match(/MSIE ([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/rv:([\d.]+)/))||void 0===r?void 0:r[1])||""}},t={name:"Firefox",match:function(n){return n.includes("Firefox")||n.includes("FxiOS")},version:function(n){var e,r;return(null===(e=n.match(/Firefox\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/FxiOS\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},u={name:"Firefox Focus",match:function(n){return n.includes("Focus")},version:function(n){var e;return(null===(e=n.match(/Focus\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},a={name:"Chromium",match:function(n){return n.includes("Chromium")},version:function(n){var e;return(null===(e=n.match(/Chromium\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},c={name:"Opera",match:function(n){return n.includes("Opera")||n.includes("OPR")},version:function(n){var e,r;return(null===(e=n.match(/Opera\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/OPR\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},l={name:"Opera GX",match:function(n){var e=!1;return c.match(n)&&(e=n.includes("Edition GX")),e},version:function(n){var e,r;return(null===(e=n.match(/Opera\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/OPR\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},d={};"undefined"!=typeof globalThis?d=globalThis:"undefined"!=typeof self?d=self:"undefined"!=typeof window?d=window:"undefined"!=typeof global&&(d=global);var v=d,s={name:"Vivaldi",match:function(n){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!n.includes("Vivaldi")&&e)return new Promise((function(n){fetch("chrome-extension://jffbochibkahlbbmanpmndnhmeliecah/config.json").then((function(){n(!0)})).catch((function(){n(!1)}))}))},version:function(n){var e,r;return(null===(e=n.match(/Vivaldi\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/Chrome\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},m={name:"Yandex",match:function(n){return n.includes("YaBrowser")},version:function(n){var e;return(null===(e=n.match(/YaBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},f={name:"Brave",match:function(n){var e;return!(null==v||null===(e=v.navigator)||void 0===e||!e.brave)},version:function(n){var e;return(null===(e=n.match(/Chrome\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},h={name:"Arora",match:function(n){return n.includes("Arora")},version:function(n){var e;return(null===(e=n.match(/Arora\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},p={name:"Lunascape",match:function(n){return n.includes("Lunascape")},version:function(n){var e;return(null===(e=n.match(/Lunascape[\/\s]([\d.]+)/))||void 0===e?void 0:e[1])||""}},g={name:"QupZilla",match:function(n){return n.includes("QupZilla")},version:function(n){var e;return(null===(e=n.match(/QupZilla[\/\s]([\d.]+)/))||void 0===e?void 0:e[1])||""}},b={name:"Coc Coc",match:function(n){return n.includes("coc_coc_browser")},version:function(n){var e;return(null===(e=n.match(/coc_coc_browser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},w={name:"Kindle",match:function(n){return n.includes("Kindle")||n.includes("Silk/")},version:function(n){var e;return(null===(e=n.match(/Version\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},B={name:"Iceweasel",match:function(n){return n.includes("Iceweasel")},version:function(n){var e;return(null===(e=n.match(/Iceweasel\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},S={name:"Konqueror",match:function(n){return n.includes("Konqueror")},version:function(n){var e;return(null===(e=n.match(/Konqueror\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},y={name:"Iceape",match:function(n){return n.includes("Iceape")},version:function(n){var e;return(null===(e=n.match(/Iceape\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},E={name:"SeaMonkey",match:function(n){return n.includes("SeaMonkey")},version:function(n){var e;return(null===(e=n.match(/SeaMonkey\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},A={name:"Epiphany",match:function(n){return n.includes("Epiphany")},version:function(n){var e;return(null===(e=n.match(/Epiphany\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},M={name:"Huawei",match:function(n){return n.includes("HuaweiBrowser")||n.includes("HBPC/")},version:function(n){var e,r,i;return(null===(e=n.match(/HuaweiBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/HBPC\/([\d.]+)/))||void 0===r?void 0:r[1])||(null===(i=n.match(/Version\/([\d.]+)/))||void 0===i?void 0:i[1])||""}},P={name:"OPPO",match:function(n){return n.includes("HeyTapBrowser")||n.includes("OPPO")},version:function(n){var e;return(null===(e=n.match(/HeyTapBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},I={name:"Vivo",match:function(n){return n.includes("VivoBrowser")},version:function(n){var e;return(null===(e=n.match(/VivoBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},O={name:"Xiaomi",match:function(n){return n.includes("MiuiBrowser")},version:function(n){var e;return(null===(e=n.match(/MiuiBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},x={name:"Meizu",match:function(n){return n.includes("MZBrowser")},version:function(n){var e;return(null===(e=n.match(/MZBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},C={name:"OnePlus",match:function(n){return n.includes("ONEPLUS")},version:function(n){return""}},k={name:"Samsung",match:function(n){return n.includes("SamsungBrowser")},version:function(n){var e;return(null===(e=n.match(/SamsungBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}};function T(n,e){var r,i=null==v||null===(r=v.navigator)||void 0===r?void 0:r.mimeTypes;for(var o in i)if(i[o][n]&&i[o][n]==e)return i[o];return null}var W={name:"360",match:function(n){var e=!1;if(null!=v&&v.chrome){var r=n.replace(/^.*Chrome\/([\d]+).*$/,"$1");T("type","application/360softmgrplugin")||T("type","application/mozilla-npqihooquicklogin")||T("type","application/npjlgplayer3-chrome-jlp")||r>36&&null!=v&&v.showModalDialog?e=!0:r>45&&!(e=T("type","application/vnd.chromium.remoting-viewer"))&&r>=69&&(e=T("type","application/asx"))}return n.includes("QihooBrowser")||n.includes("QHBrowser")||n.includes(" 360 ")||e},version:function(n){var e,r;return(null===(e=n.match(/QihooBrowser(HD)?\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/Browser \(v([\d.]+)/))||void 0===r?void 0:r[1])||""}},D={name:"360SE",match:function(n){var e,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=!1;W.match(n)&&((T("type","application/gameplugin")||null!=v&&null!==(e=v.navigator)&&void 0!==e&&null!==(e=e.userAgentData)&&void 0!==e&&e.brands.filter((function(n){return"Not.A/Brand"==n.brand})).length)&&(i=!0));return!i&&r?new Promise((function(n){fetch("chrome-extension://fjbbmgamncjadhlpmffehlmmkdnkiadk/css/content.css").then((function(){n(!0)})).catch((function(){n(!1)}))})):n.includes("360SE")||i},version:function(n){return{122:"15.3",114:"15.0",108:"14.0",86:"13.0",78:"12.0",69:"11.0",63:"10.0",55:"9.1",45:"8.1",42:"8.0",31:"7.0",21:"6.3"}[parseInt(r.version(n))]||""}},V={name:"360EE",match:function(n){var e=!1;if(T("type","application/cenroll.cenroll.version.1")||T("type","application/hwepass2001.installepass2001"))e=!0;else if(W.match(n)){var r;null!=v&&null!==(r=v.navigator)&&void 0!==r&&null!==(r=r.userAgentData)&&void 0!==r&&r.brands.find((function(n){return"Not A(Brand"==n.brand||"Not?A_Brand"==n.brand}))&&(e=!0)}return n.includes("360EE")||e},version:function(n){var e,i=parseInt(r.version(n));return(null===(e=n.match(/Browser \(v([\d.]+)/))||void 0===e?void 0:e[1])||{122:"22.3",119:"22.0",108:"14.0",95:"21.0",86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[i]||""}},Q={name:"360AI",match:function(n){var e,r=!1;W.match(n)&&(null!=v&&null!==(e=v.navigator)&&void 0!==e&&null!==(e=e.userAgentData)&&void 0!==e&&e.brands.filter((function(n){return"Not.A/Brand"==n.brand})).length&&!T("type","application/gameplugin")&&(r=!0));return n.includes("360SEAI")||r},version:function(n){return{114:"1.0"}[parseInt(r.version(n))]||""}},L={name:"360AI",match:function(n){return n.includes("360EEAI")},version:function(n){var e;return(null===(e=n.match(/360EE\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},H=function(){return new Promise((function(n){var e,r="cv_".concat((new Date).getTime()%1e5).concat(100*Math.floor(Math.random())),i={key:"GetDeviceInfo",data:{},callback:r},o=JSON.stringify(i);if(null==v||null===(e=v.webkit)||void 0===e||!e.messageHandlers)return n({});v.webkit.messageHandlers.excuteCmd.postMessage(o),v[r]=function(e){delete v[r],n(JSON.parse(e||"{}"))}}))},_={name:"360EE",match:function(n){return!!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])&&H().then((function(n){return"360csexm"==(null==n?void 0:n.pid)||!1}))},version:function(n){return H().then((function(n){return(null==n?void 0:n.module_version)||""}))}},F={name:"360ENT",match:function(n){return n.includes("360ENT")},version:function(n){return{86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[parseInt(r.version(n))]||""}},N={name:"UC",match:function(n){return n.includes("UCBrowser")||n.includes(" UBrowser")||n.includes("UCWEB")},version:function(n){var e;return(null===(e=n.match(/UC?Browser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},Y={name:"QQBrowser",match:function(n){return n.includes("QQBrowser")},version:function(n){var e;return(null===(e=n.match(/QQBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},R={name:"QQ",match:function(n){return n.includes("QQ/")},version:function(n){var e;return(null===(e=n.match(/QQ\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},U={name:"Baidu",match:function(n){return n.includes("Baidu")||n.includes("BIDUBrowser")||n.includes("baidubrowser")||n.includes("baiduboxapp")||n.includes("BaiduD")},version:function(n){var e,r;return(null===(e=n.match(/BIDUBrowser[\s\/]([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/baiduboxapp\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},G={name:"Maxthon",match:function(n){return n.includes("Maxthon")||(null==v?void 0:v.maxthon)},version:function(n){var e,i,o=parseInt(r.version(n));return(null===(e=n.match(/Maxthon\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(i=n.match(/Version\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"7.0",78:"6.0"}[o]||""}},j={name:"Sogou",match:function(n){return n.includes("MetaSr")||n.includes("Sogou")},version:function(n){var e,r,i,o=(null===(e=n.match(/Chrome\/([\d]+)/))||void 0===e?void 0:e[1])||"";return(null===(r=n.match(/SogouMobileBrowser\/([\d.]+)/))||void 0===r?void 0:r[1])||(null===(i=n.match(/SogouMSE\/([\d.]+)/))||void 0===i?void 0:i[1])||{94:"12.0",80:"11.0"}[o]||""}},K={name:"Liebao",match:function(n){return n.includes("LBBROWSER")||n.includes("LieBaoFast")||(null==v?void 0:v.liebao)},version:function(n){var e,i=parseInt(r.version(n));return(null===(e=n.match(/LieBaoFast\/([\d.]+)/))||void 0===e?void 0:e[1])||{112:"9.0",79:"8.0",57:"6.5",49:"6.0",46:"5.9",42:"5.3",39:"5.2",34:"5.0",29:"4.5",21:"4.0"}[i]||""}},q={name:"2345Explorer",match:function(n){var e,r,i=(null==v?void 0:v.chrome)&&((null==v||null===(e=v.chrome)||void 0===e?void 0:e.adblock2345)||(null==v||null===(r=v.chrome)||void 0===r?void 0:r.common2345));return n.includes("2345Explorer")||n.includes("Mb2345Browser")||n.includes("2345chrome")||i},version:function(n){var e,i,o=parseInt(r.version(n));return(null===(e=n.match(/2345Explorer\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(i=n.match(/Mb2345Browser\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"13.0",69:"10.0",55:"9.9"}[o]||""}},X={name:"115Browser",match:function(n){return n.includes("115Browser")},version:function(n){var e;return(null===(e=n.match(/115Browser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},z={name:"TheWorld",match:function(n){return n.includes("TheWorld")},version:function(n){var e;return(null===(e=n.match(/TheWorld ([\d.]+)/))||void 0===e?void 0:e[1])||""}},Z={name:"Quark",match:function(n){return n.includes("Quark")},version:function(n){var e,r;return(null===(e=n.match(/Quark\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/QuarkPC\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},$={name:"Qiyu",match:function(n){return n.includes("Qiyu")},version:function(n){var e;return(null===(e=n.match(/Qiyu\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},J={name:"Lenovo",match:function(n){return n.includes("SLBrowser")},version:function(n){var e;return(null===(e=n.match(/SLBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},nn={name:"Wechat",match:function(n){return n.includes("MicroMessenger")},version:function(n){var e;return(null===(e=n.match(/MicroMessenger\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},en={name:"WechatWork",match:function(n){return n.includes("wxwork/")},version:function(n){var e;return(null===(e=n.match(/wxwork\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},rn={name:"Taobao",match:function(n){return n.includes("AliApp(TB")},version:function(n){var e;return(null===(e=n.match(/AliApp\(TB\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},on={name:"Alipay",match:function(n){return n.includes("AliApp(AP")},version:function(n){var e;return(null===(e=n.match(/AliApp\(AP\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},tn={name:"Weibo",match:function(n){return n.includes("Weibo")},version:function(n){var e;return(null===(e=n.match(/weibo__([\d.]+)/))||void 0===e?void 0:e[1])||""}},un={name:"Douban",match:function(n){return n.includes("com.douban.frodo")},version:function(n){var e;return(null===(e=n.match(/com.douban.frodo\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},an={name:"Toutiao",match:function(n){return n.includes("NewsArticle")},version:function(n){var e;return(null===(e=n.match(/NewsArticle\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},cn={name:"Suning",match:function(n){return n.includes("SNEBUY-APP")},version:function(n){var e;return(null===(e=n.match(/SNEBUY-APP([\d.]+)/))||void 0===e?void 0:e[1])||""}},ln={name:"iQIYI",match:function(n){return n.includes("IqiyiApp")},version:function(n){var e;return(null===(e=n.match(/IqiyiVersion\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},dn={name:"DingTalk",match:function(n){return n.includes("DingTalk")},version:function(n){var e;return(null===(e=n.match(/DingTalk\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},vn={name:"Douyin",match:function(n){return n.includes("aweme")},version:function(n){var e;return(null===(e=n.match(/app_version\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},sn={name:"Googlebot",match:function(n){return n.includes("Googlebot")},version:function(n){var e;return(null===(e=n.match(/Googlebot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},mn={name:"Baiduspider",match:function(n){return n.includes("Baiduspider")},version:function(n){var e;return(null===(e=n.match(/Baiduspider(-render)?\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},fn={name:"Sogouspider",match:function(n){return n.match(/Sogou (\S+) Spider\/([\d.]+)/i)},version:function(n){var e;return(null===(e=n.match(/Sogou (\S+) Spider\/([\d.]+)/i))||void 0===e?void 0:e[1])||""}},hn={name:"Bingbot",match:function(n){return n.includes("bingbot")},version:function(n){var e;return(null===(e=n.match(/bingbot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},pn={name:"360Spider",match:function(n){return n.includes("360Spider")||n.includes("HaosouSpider")},version:function(n){return""}},gn={name:"Bytespider",match:function(n){return n.includes("Bytespider")},version:function(n){return""}},bn={name:"YisouSpider",match:function(n){return n.includes("YisouSpider")},version:function(n){var e;return(null===(e=n.match(/YisouSpider\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},wn={name:"YodaoBot",match:function(n){return n.includes("YodaoBot")},version:function(n){var e;return(null===(e=n.match(/YodaoBot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},Bn={name:"YandexBot",match:function(n){return n.includes("YandexBot")},version:function(n){var e;return(null===(e=n.match(/YandexBot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}};function Sn(n){return n.map((function(n){return n instanceof Promise?n:Promise.resolve(n)}))}function yn(n){var d=arguments.length>1&&void 0!==arguments[1]&&arguments[1],v=n.userAgent,T=[e,r,i,o,t,u,a,c,l,s,m,f,h,p,g,b,w,B,S,y,E,A,M,P,I,O,x,C,k,W,V,D,_,Q,L,F,N,Y,R,U,G,j,K,q,X,z,Z,$,J,nn,en,rn,on,tn,un,cn,ln,dn,vn,an,sn,mn,fn,hn,pn,gn,bn,wn,Bn];if(n.browser="",n.browserVersion="",d){var H=Sn(T.map((function(n){return n.match(v,d)})));n.browser=Promise.all(H).then((function(n){var e="";return n.forEach((function(n,r){n&&(e=T[r].name)})),"Chrome"==e&&v.match(/\S+Browser/)&&(e=v.match(/\S+Browser/)[0]),e})),n.browserVersion=Promise.all(H).then((function(n){var e,r,i="",o="";(n.forEach((function(n,e){n&&(i=T[e].name,o=T[e].version(v))})),"Chrome"==i&&v.match(/\S+Browser/))&&(o=(null===(e=v.replace(/^.*Browser\/([\d.]+).*$/))||void 0===e?void 0:e[1])||"");o||(o=(null===(r=v.match(/Version\/([\d.]+)/))||void 0===r?void 0:r[1])||"");return o}))}else{var yn,En;if(T.forEach((function(e){e.match(v,d)&&(n.browser=e.name,n.browserVersion=e.version(v,d))})),"Chrome"==n.browser&&v.match(/\S+Browser/))n.browser=v.match(/\S+Browser/)[0],n.browserVersion=(null===(yn=v.replace(/^.*Browser\/([\d.]+).*$/))||void 0===yn?void 0:yn[1])||"";if(!n.browserVersion)n.browserVersion=(null===(En=v.match(/Version\/([\d.]+)/))||void 0===En?void 0:En[1])||""}}var En={name:"Mobile",match:function(n){return n.includes("Mobi")||n.includes("iPh")||n.includes("480")}},An={name:"Tablet",match:function(n){var e=(null==v?void 0:v.navigator)||{};return n.includes("Tablet")||n.includes("Pad")||n.includes("Nexus 7")||"MacIntel"===e.platform&&e.maxTouchPoints>1}};function Mn(n){n.device="Desktop",[En,An].forEach((function(e){e.match(n.userAgent)&&(n.device=e.name)}))}var Pn={name:"WebKit",match:function(n){return n.includes("AppleWebKit")}},In={name:"Trident",match:function(n){return n.includes("Trident")||n.includes("NET CLR")}},On={name:"Gecko",match:function(n){return n.includes("Gecko/")}},xn={name:"Servo",match:function(n){return n.includes("Servo/")}},Cn={name:"Presto",match:function(n){return n.includes("Presto")}},kn={name:"KHTML",match:function(n){return n.includes("KHTML/")}};function Tn(n){n.engine="",[Pn,In,On,xn,Cn,kn].forEach((function(e){e.match(n.userAgent)&&(n.engine=e.name)})),"Edge"==n.browser?n.engine=parseInt(n.browserVersion)>75?"Blink":"EdgeHTML":(r.match(n.userAgent)&&"WebKit"==n.engine&&parseInt(r.version(n.userAgent))>27||"Opera"==n.browser&&parseInt(n.browserVersion)>12||"Yandex"==n.browser)&&(n.engine="Blink")}var Wn={name:"Windows",match:function(n){return n.includes("Windows")},version:function(n){var e,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=(null===(e=n.match(/^Mozilla\/\d.0 \(Windows NT ([\d.]+)[;)].*$/))||void 0===e?void 0:e[1])||"",o={"10.0":"10",6.4:"10 Technical Preview",6.3:"8.1",6.2:"8",6.1:"7","6.0":"Vista",5.2:"XP 64-bit",5.1:"XP",5.01:"2000 SP1","5.0":"2000","4.0":"NT","4.90":"ME"};return r?new Promise((function(n){var e;null!=v&&null!==(e=v.navigator)&&void 0!==e&&e.userAgentData?v.navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then((function(e){var r="";"Windows"===navigator.userAgentData.platform&&(r=parseInt(e.platformVersion.split(".")[0])>=13?"11":"10");n(r)})):n(o[i]||i)})):o[i]||i}},Dn={name:"Linux",match:function(n){return n.includes("Linux")||n.includes("X11")},version:function(n){return""}},Vn={name:"macOS",match:function(n){return n.includes("Macintosh")},version:function(n){var e;return(null===(e=n.match(/Mac OS X -?([\d_]+)/))||void 0===e?void 0:e[1].replace(/_/g,"."))||""}},Qn={name:"Android",match:function(n){return n.includes("Android")||n.includes("Adr")},version:function(n){var e;return(null===(e=n.match(/Android ([\d.]+);/))||void 0===e?void 0:e[1])||""}},Ln={name:"HarmonyOS",match:function(n){return n.includes("HarmonyOS")},version:function(n){var e,r=+(null===(e=n.match(/HMSCore (\d+.\d+)/))||void 0===e?void 0:e[1])||0;return r>=6.1?"4.0":r>=6?"3.0":r>=5?"2.0":r>=4?"1.0":""}},Hn={name:"Ubuntu",match:function(n){return n.includes("Ubuntu")},version:function(n){return""}},_n={name:"FreeBSD",match:function(n){return n.includes("FreeBSD")},version:function(n){return""}},Fn={name:"Debian",match:function(n){return n.includes("Debian")},version:function(n){var e;return(null===(e=n.match(/Debian\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},Nn={name:"iOS",match:function(n){return n.includes("like Mac OS X")},version:function(n){var e;return(null===(e=n.match(/OS ([\d_]+) like/))||void 0===e?void 0:e[1].replace(/_/g,"."))||""}},Yn={name:"Windows Phone",match:function(n){return n.includes("IEMobile")||n.includes("Windows Phone")},version:function(n){var e;return(null===(e=n.match(/Windows Phone( OS)? ([\d.]+);/))||void 0===e?void 0:e[2])||""}},Rn={name:"BlackBerry",match:function(n){return n.includes("BlackBerry")||n.includes("RIM")},version:function(n){return""}},Un={name:"MeeGo",match:function(n){return n.includes("MeeGo")},version:function(n){return""}},Gn={name:"Symbian",match:function(n){return n.includes("Symbian")},version:function(n){var e;return(null===(e=n.match(/Series60\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},jn={name:"Chrome OS",match:function(n){return n.includes("CrOS")},version:function(n){var e,r;return(null===(e=n.match(/MSIE ([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/rv:([\d.]+)/))||void 0===r?void 0:r[1])||""}},Kn={name:"WebOS",match:function(n){return n.includes("hpwOS")},version:function(n){var e;return(null===(e=n.match(/hpwOS\/([\d.]+);/))||void 0===e?void 0:e[1])||""}};function qn(n,e){var r,i=n.userAgent;n.system="",n.systemVersion="",[Wn,Dn,Vn,Qn,Ln,Hn,_n,Fn,Nn,Yn,Rn,Un,Gn,jn,Kn].forEach((function(r){r.match(i)&&(n.system=r.name,n.systemVersion=r.version(i,e))})),n.platform="",i.match(/(Win64|x64|WOW64|x86_64)/i)?n.platform="Win64":i.match(/(Win32|x86|WOW32)/i)?n.platform="Win32":i.match(/aarch64|arm64/)?n.platform="ARM64":i.match(/arm32/)?n.platform="ARM32":null!=v&&null!==(r=v.navigator)&&void 0!==r&&r.platform&&(n.platform=v.navigator.platform),n.architecture="";var o=i+"|"+n.platform,t="";t=o.match(/armv?\d+/i)||o.match(/aarch64/)?"arm":o.match(/loongarch64/)?"loongarch":"x86",n.architecture=t;var u,a=i.match(/Win64|x64|WOW64|x86_64|aarch64|arm64|loongarch64/i)?64:32;(n.bitness=a,e)&&(null!=v&&null!==(u=v.navigator)&&void 0!==u&&u.userAgentData&&(n.architecture=v.navigator.userAgentData.getHighEntropyValues(["architecture"]).then((function(n){return n.architecture||t})),n.bitness=v.navigator.userAgentData.getHighEntropyValues(["bitness"]).then((function(n){return+n.bitness||a}))))}function Xn(n){if(n.gpu="",n.gpuModel="",null!=v&&v.document){var e=v.document.createElement("canvas").getContext("experimental-webgl");if(e){var r,i,o=e.getExtension("WEBGL_debug_renderer_info"),t=e.getParameter(o.UNMASKED_RENDERER_WEBGL);n.gpu=(null===(r=t.match(/ANGLE \((.+?),/))||void 0===r?void 0:r[1])||"",n.gpuModel=(null===(i=t.match(/, (.+?) (\(|vs_)/))||void 0===i?void 0:i[1])||""}}}function zn(n){n.language=function(n,e){var r=(null==v||null===(n=v.navigator)||void 0===n?void 0:n.browserLanguage)||(null==v||null===(e=v.navigator)||void 0===e?void 0:e.language);if("string"!=typeof r)return"Unknown language";var i=r.split("-");return i[1]&&(i[1]=i[1].toUpperCase()),i.join("_")}()}function Zn(n){var e,r,i,o;n.network=(i="unknown",(o=null==v||null===(r=v.navigator)||void 0===r?void 0:r.connection)&&("2"!=(i=o.type||o.effectiveType)&&"unknown"!=i||(i="wifi")),i),n.isOnline=(null==v||null===(e=v.navigator)||void 0===e?void 0:e.onLine)||!1}function $n(n){var e;null!=v&&null!==(e=v.navigator)&&void 0!==e&&e.getBattery?(n.isCharging=v.navigator.getBattery().then((function(n){return null==n?void 0:n.charging})),n.battery=v.navigator.getBattery().then((function(n){return+(null==n?void 0:n.level)||-1}))):(n.isCharging=!0,n.battery=1)}function Jn(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,i=Array(e);r0)if(r<12)i.push(t-e),e=t,r++,requestAnimationFrame(o);else{i.sort();var u=(i=i.slice(1,11)).reduce((function(n,e){return n+e})),a=10*Math.round(1e4/u/10);n(a)}else e=t,requestAnimationFrame(o)}))}))}var oe=function(n){var e,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i={};return i.userAgent=n||(null==v||null===(e=v.navigator)||void 0===e?void 0:e.userAgent)||"",[yn,Mn,Tn,qn,Xn,zn,Zn,$n,ie].forEach((function(n){return n(i,r)})),i};function te(e){var r=oe(e);for(var i in r)"object"==n(r[i])&&(r[i]="");return r}return te.getInfo=function(n){var e=oe(n,!0),r=Object.keys(e),i=Sn(Object.values(e));return Promise.all(i).then((function(n){var e={};return n.forEach((function(n,i){e[r[i]]=n})),e}))},te})); +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).browser=n()}(this,(function(){"use strict";let e={};"undefined"!=typeof globalThis?e=globalThis:"undefined"!=typeof self?e=self:"undefined"!=typeof window?e=window:"undefined"!=typeof global&&(e=global);var n,i=e,r=null==i||null===(n=i.navigator)||void 0===n?void 0:n.userAgent,a={name:"Safari",parse(e=r){var n;return{is:e.includes("Safari"),version:(null===(n=e.match(/Version\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},s={name:"Chrome",parse(e=r){var n,i;return{is:e.includes("Chrome")||e.includes("CriOS"),version:(null===(n=e.match(/Chrome\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/CriOS\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},o={name:"Edge",parse(e=r){var n,i,a,s;return{is:e.includes("Edge")||e.includes("Edg/")||e.includes("EdgA")||e.includes("EdgiOS"),version:(null===(n=e.match(/Edge\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Edg\/([\d.]+)/))||void 0===i?void 0:i[1])||(null===(a=e.match(/EdgA\/([\d.]+)/))||void 0===a?void 0:a[1])||(null===(s=e.match(/EdgiOS\/([\d.]+)/))||void 0===s?void 0:s[1])||""}}},l={name:"IE",parse(e=r){var n,i;return{is:e.includes("MSIE")||e.includes("Trident"),version:(null===(n=e.match(/MSIE ([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/rv:([\d.]+)/))||void 0===i?void 0:i[1])||""}}},t={name:"Firefox",parse(e=r){var n,i;return{is:e.includes("Firefox")||e.includes("FxiOS"),version:(null===(n=e.match(/Firefox\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/FxiOS\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},d={name:"Firefox Focus",parse(e=r){var n;return{is:e.includes("Focus"),version:(null===(n=e.match(/Focus\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},u={name:"Chromium",parse(e=r){var n;return{is:e.includes("Chromium"),version:(null===(n=e.match(/Chromium\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},v={name:"Opera",parse(e=r){var n,i;return{is:e.includes("Opera")||e.includes("OPR"),version:(null===(n=e.match(/Opera\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/OPR\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},c={name:"Opera GX",parse(e=r){let n=!1;return v.parse(e).is&&(n=e.includes("Edition GX")),{is:n,version:v.parse(e).version}}},m={name:"Vivaldi",parse(e=r){var n,i;return{is:e.includes("Vivaldi"),version:(null===(n=e.match(/Vivaldi\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Chrome\/([\d.]+)/))||void 0===i?void 0:i[1])||""}},async is(){let e=this.parse().is;return new Promise((function(n){e?n(!1):fetch("chrome-extension://jffbochibkahlbbmanpmndnhmeliecah/config.json").then((function(){n(!0)})).catch((function(){n(!1)}))}))}},p={name:"Yandex",parse(e=r){var n;return{is:e.includes("YaBrowser"),version:(null===(n=e.match(/YaBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},h={name:"Brave",parse(e=r){var n;return{is:e.includes("Brave"),version:(null===(n=e.match(/Chrome\/([\d.]+)/))||void 0===n?void 0:n[1])||""}},is:async function(){var e;return!!(this.parse().is||null!=i&&null!==(e=i.navigator)&&void 0!==e&&e.brave)}},g={name:"Arora",parse(e=r){var n;return{is:e.includes("Arora"),version:(null===(n=e.match(/Arora\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},f={name:"Lunascape",parse(e=r){var n;return{is:e.includes("Lunascape"),version:(null===(n=e.match(/Lunascape[\/\s]([\d.]+)/))||void 0===n?void 0:n[1])||""}}},w={name:"QupZilla",parse(e=r){var n;return{is:e.includes("QupZilla"),version:(null===(n=e.match(/QupZilla[\/\s]([\d.]+)/))||void 0===n?void 0:n[1])||""}}},b={name:"Coc Coc",parse(e=r){var n;return{is:e.includes("coc_coc_browser"),version:(null===(n=e.match(/coc_coc_browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},y={name:"Kindle",parse(e=r){var n;return{is:e.includes("Kindle")||e.includes("Silk/"),version:(null===(n=e.match(/Version\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},B={name:"Iceweasel",parse(e=r){var n;return{is:e.includes("Iceweasel"),version:(null===(n=e.match(/Iceweasel\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},S={name:"Konqueror",parse(e=r){var n;return{is:e.includes("Konqueror"),version:(null===(n=e.match(/Konqueror\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},E={name:"Iceape",parse(e=r){var n;return{is:e.includes("Iceape"),version:(null===(n=e.match(/Iceape\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},A={name:"SeaMonkey",parse(e=r){var n;return{is:e.includes("SeaMonkey"),version:(null===(n=e.match(/SeaMonkey\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},I={name:"Epiphany",parse(e=r){var n;return{is:e.includes("Epiphany"),version:(null===(n=e.match(/Epiphany\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},T={name:"Huawei",parse(e=r){var n,i,a;return{is:e.includes("HuaweiBrowser")||e.includes("HBPC/"),version:(null===(n=e.match(/HuaweiBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/HBPC\/([\d.]+)/))||void 0===i?void 0:i[1])||(null===(a=e.match(/Version\/([\d.]+)/))||void 0===a?void 0:a[1])||""}}},M={name:"OPPO",parse(e=r){var n;return{is:e.includes("HeyTapBrowser")||e.includes("OPPO"),version:(null===(n=e.match(/HeyTapBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},x={name:"Vivo",parse(e=r){var n;return{is:e.includes("VivoBrowser"),version:(null===(n=e.match(/VivoBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},O={name:"Xiaomi",parse(e=r){var n;return{is:e.includes("MiuiBrowser"),version:(null===(n=e.match(/115Browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},k={name:"Meizu",parse(e=r){var n;return{is:e.includes("MZBrowser"),version:(null===(n=e.match(/MZBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},P={name:"OnePlus",parse:(e=r)=>({is:e.includes("ONEPLUS"),version:""})},W={name:"Samsung",parse(e=r){var n;return{is:e.includes("SamsungBrowser"),version:(null===(n=e.match(/SamsungBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}};function C(e,n){var i;let r=null===globalThis||void 0===globalThis||null===(i=globalThis.navigator)||void 0===i?void 0:i.mimeTypes;for(let i in r)if(r[i][e]&&r[i][e]==n)return r[i];return null}var D={name:"360",parse(e=r){var n,i;return{is:e.includes("QihooBrowser")||e.includes("QHBrowser")||e.includes(" 360 "),version:(null===(n=e.match(/QihooBrowser(HD)?\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Browser \(v([\d.]+)/))||void 0===i?void 0:i[1])||""}},async is(){let e=this.parse().is;if(null!=i&&i.chrome){let n=parseInt(s.parse().version);C("type","application/360softmgrplugin")||C("type","application/mozilla-npqihooquicklogin")||C("type","application/npjlgplayer3-chrome-jlp")||n>36&&null!=i&&i.showModalDialog?e=!0:n>45&&(e=C("type","application/vnd.chromium.remoting-viewer"),!e&&n>=69&&(e=C("type","application/asx")))}return e}},Q={name:"360SE",parse(e=r){let n=parseInt(s.parse(e).version);return{is:e.includes("360SE"),version:{122:"15.3",114:"15.0",108:"14.0",86:"13.0",78:"12.0",69:"11.0",63:"10.0",55:"9.1",45:"8.1",42:"8.0",31:"7.0",21:"6.3"}[n]||""}},async is(){let e=!1;var n;await D.is()&&((C("type","application/gameplugin")||null!=i&&null!==(n=i.navigator)&&void 0!==n&&null!==(n=n.userAgentData)&&void 0!==n&&n.brands.filter((e=>"Not.A/Brand"==e.brand)).length)&&(e=!0));return e||new Promise((function(e){fetch("chrome-extension://fjbbmgamncjadhlpmffehlmmkdnkiadk/css/content.css").then((function(){e(!0)})).catch((function(){e(!1)}))}))}},V={name:"360EE",parse(e=(e=>null===globalThis||void 0===globalThis||null===(e=globalThis.navigator)||void 0===e?void 0:e.userAgent)()){var n;let i=parseInt(s.parse(e).version);return{is:e.includes("360EE"),version:(null===(n=e.match(/Browser \(v([\d.]+)/))||void 0===n?void 0:n[1])||{122:"22.3",119:"22.0",108:"14.0",95:"21.0",86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[i]||""}},async is(){let e=this.parse().is;if(C("type","application/cenroll.cenroll.version.1")||C("type","application/hwepass2001.installepass2001"))e=!0;else if(await D.is()){var n;null!==globalThis&&void 0!==globalThis&&null!==(n=globalThis.navigator)&&void 0!==n&&null!==(n=n.userAgentData)&&void 0!==n&&n.brands.find((e=>"Not A(Brand"==e.brand||"Not?A_Brand"==e.brand))&&(e=!0)}return e}},H={name:"360AI",parse(e=r){let n=parseInt(s.parse(e).version);return{is:e.includes("360SEAI"),version:{114:"1.0"}[n]||""}},async is(){let e=this.parse().is;var n;await D.is()&&(null!=i&&null!==(n=i.navigator)&&void 0!==n&&null!==(n=n.userAgentData)&&void 0!==n&&n.brands.filter((e=>"Not.A/Brand"==e.brand)).length&&!C("type","application/gameplugin")&&(e=!0));return e}},L={name:"360AI",parse(e=r){var n;return{is:e.includes("360EEAI"),version:(null===(n=e.match(/360EE\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}};const _=()=>new Promise((e=>{var n;const r=`cv_${(new Date).getTime()%1e5}${100*Math.floor(Math.random())}`,a={key:"GetDeviceInfo",data:{},callback:r},s=JSON.stringify(a);if(null==i||null===(n=i.webkit)||void 0===n||!n.messageHandlers)return e({});i.webkit.messageHandlers.excuteCmd.postMessage(s),i[r]=function(n){delete i[r],e(JSON.parse(n||"{}"))}}));var F={name:"360EE",parse:()=>({is:!1,version:""}),is:async()=>_().then((function(e){return"360csexm"==(null==e?void 0:e.pid)||!1})),version:async()=>_().then((function(e){return(null==e?void 0:e.module_version)||""}))},N={name:"360ENT",parse(e=r){var n;let i=parseInt(s.parse(e).version);return{is:e.includes("360ENT"),version:(null===(n=e.match(/Browser \(v([\d.]+)/))||void 0===n?void 0:n[1])||{86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[i]||""}}},R={name:"UC",parse(e=r){var n;return{is:e.includes("UCBrowser")||e.includes(" UBrowser")||e.includes("UCWEB"),version:(null===(n=e.match(/UC?Browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},Y={name:"QQBrowser",parse(e=r){var n;return{is:e.includes("QQBrowser"),version:(null===(n=e.match(/QQBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},U={name:"QQ",parse(e=r){var n;return{is:e.includes("QQ"),version:(null===(n=e.match(/QQ\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},G={name:"Baidu",parse(e=r){var n,i;return{is:e.includes("Baidu")||e.includes("BIDUBrowser")||e.includes("baidubrowser")||e.includes("baiduboxapp")||e.includes("BaiduD"),version:(null===(n=e.match(/BIDUBrowser[\s\/]([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/baiduboxapp\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},j={name:"Maxthon",parse(e=r){var n,i;let a=parseInt(s.parse(e).version);return{is:e.includes("Maxthon"),version:(null===(n=e.match(/Maxthon\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Version\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"7.0",78:"6.0"}[a]||""}},is(){return this.parse().is||(null==i?void 0:i.maxthon)}},q={name:"Sogou",parse(e=r){var n,i,a=parseInt(s.parse(e).version);return{is:e.includes("MetaSr")||e.includes("Sogou"),version:(null===(n=e.match(/SogouMobileBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/SogouMSE\/([\d.]+)/))||void 0===i?void 0:i[1])||{94:"12.0",80:"11.0"}[a]||""}}},K={name:"Liebao",parse(e=r){var n;let i=parseInt(s.parse(e).version);return{is:e.includes("LBBROWSER")||e.includes("LieBaoFast"),version:(null===(n=e.match(/LieBaoFast\/([\d.]+)/))||void 0===n?void 0:n[1])||{112:"9.0",79:"8.0",57:"6.5",49:"6.0",46:"5.9",42:"5.3",39:"5.2",34:"5.0",29:"4.5",21:"4.0"}[i]||""}},is(){return this.parse().is||(null==i?void 0:i.liebao)}},z={name:"2345Explorer",parse(e=r){var n,i;let a=parseInt(s.parse(e).version);return{is:e.includes("2345Explorer")||e.includes("Mb2345Browser")||e.includes("2345chrome"),version:(null===(n=e.match(/2345Explorer\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Mb2345Browser\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"13.0",69:"10.0",55:"9.9"}[a]||""}},async is(){let e=this.parse().is;var n,r;e||(e=(null==i?void 0:i.chrome)&&((null==i||null===(n=i.chrome)||void 0===n?void 0:n.adblock2345)||(null==i||null===(r=i.chrome)||void 0===r?void 0:r.common2345)));return e}},X={name:"115Browser",parse(e=r){var n;return{is:e.includes("115Browser"),version:(null===(n=e.match(/115Browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},Z={name:"TheWorld",parse(e=r){var n;return{is:e.includes("TheWorld"),version:(null===(n=e.match(/TheWorld ([\d.]+)/))||void 0===n?void 0:n[1])||""}}},$={name:"Quark",parse(e=r){var n,i;return{is:e.includes("Quark"),version:(null===(n=e.match(/Quark\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/QuarkPC\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},J={name:"Qiyu",parse(e=r){var n;return{is:e.includes("Qiyu"),version:(null===(n=e.match(/Qiyu\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ee={name:"Lenovo",parse(e=r){var n;return{is:e.includes("SLBrowser"),version:(null===(n=e.match(/SLBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ne={name:"Wechat",parse(e=r){var n;return{is:e.includes("MicroMessenger"),version:(null===(n=e.match(/MicroMessenger\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ie={name:"WechatWork",parse(e=r){var n;return{is:e.includes("wxwork"),version:(null===(n=e.match(/wxwork\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},re={name:"Taobao",parse(e=r){var n;return{is:e.includes("AliApp(TB"),version:(null===(n=e.match(/AliApp\(TB\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ae={name:"Alipay",parse(e=r){var n;return{is:e.includes("AliApp(AP"),version:(null===(n=e.match(/AliApp\(AP\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},se={name:"Weibo",parse(e=r){var n;return{is:e.includes("Weibo"),version:(null===(n=e.match(/weibo__([\d.]+)/))||void 0===n?void 0:n[1])||""}}},oe={name:"Douban",parse(e=r){var n;return{is:e.includes("com.douban.frodo"),version:(null===(n=e.match(/com.douban.frodo\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},le={name:"Toutiao",parse(e=r){var n;return{is:e.includes("NewsArticle"),version:(null===(n=e.match(/NewsArticle\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}};let te=[a,s,o,l,t,d,u,v,c,m,p,h,g,f,w,b,y,B,S,E,A,I,T,M,x,O,k,P,W,D,V,Q,F,H,L,N,R,Y,U,G,j,q,K,z,X,Z,$,J,ee,ne,ie,re,ae,se,oe,{name:"Suning",parse(e=r){var n;return{is:e.includes("SNEBUY-APP"),version:(null===(n=e.match(/SNEBUY-APP([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"iQIYI",parse(e=r){var n;return{is:e.includes("IqiyiApp"),version:(null===(n=e.match(/IqiyiVersion\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"DingTalk",parse(e=r){var n;return{is:e.includes("DingTalk"),version:(null===(n=e.match(/DingTalk\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Douyin",parse(e=r){var n;return{is:e.includes("aweme"),version:(null===(n=e.match(/app_version\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},le,{name:"Googlebot",parse(e=r){var n;return{is:e.includes("Googlebot"),version:(null===(n=e.match(/Googlebot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Baiduspider",parse(e=r){var n;return{is:e.includes("Baiduspider"),version:(null===(n=e.match(/Baiduspider(-render)?\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Sogouspider",parse(e=r){var n;return{is:e.match(/Sogou (\S+) Spider\/([\d.]+)/i),version:(null===(n=e.match(/Sogou (\S+) Spider\/([\d.]+)/i))||void 0===n?void 0:n[1])||""}}},{name:"Bingbot",parse(e=r){var n;return{is:e.includes("bingbot"),version:(null===(n=e.match(/bingbot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"360Spider",parse:(e=r)=>({is:e.includes("360Spider")||e.includes("HaosouSpider"),version:""})},{name:"Bytespider",parse:(e=r)=>({is:e.includes("Bytespider"),version:""})},{name:"YisouSpider",parse(e=r){var n;return{is:e.includes("YisouSpider"),version:(null===(n=e.match(/YisouSpider\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"YodaoBot",parse(e=r){var n;return{is:e.includes("YodaoBot"),version:(null===(n=e.match(/YodaoBot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"YandexBot",parse(e=r){var n;return{is:e.includes("YandexBot"),version:(null===(n=e.match(/YandexBot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}}];te.forEach((e=>{e.is||(e.is=async function(){return e.parse().is}),e.version||(e.version=async function(){return e.parse().version})}));var de={name:"browser",parse(e=r){let n="",i="";var a,s;(te.forEach((function(r){r.parse(e).is&&(n=r.name,i=r.parse(e).version)})),"Chrome"==n&&e.match(/\S+Browser/)&&(n=e.match(/\S+Browser/)[0]),"Chrome"==n&&e.match(/\S+Browser/))&&(i=(null===(a=e.replace(/^.*Browser\/([\d.]+).*$/))||void 0===a?void 0:a[1])||"");i||(i=(null===(s=e.match(/Version\/([\d.]+)/))||void 0===s?void 0:s[1])||"");let o=e.includes("; wv)"),l=["Googlebot","Baiduspider","Sogouspider","Bingbot","360Spider","Bytespider","YandexBot"].includes(n);return{browser:n,browserVersion:i,isWebview:o,isRobot:l}},async getInfo(){let{browser:e,browserVersion:n,isWebview:i,isRobot:a}=this.parse();for(let i of te)await i.is()&&(e=i.name,n=await i.version());let s=r;var o,l;("Chrome"==e&&s.match(/\S+Browser/)&&(e=s.match(/\S+Browser/)[0]),"Chrome"==e&&s.match(/\S+Browser/))&&(n=(null===(o=s.replace(/^.*Browser\/([\d.]+).*$/))||void 0===o?void 0:o[1])||"");n||(n=(null===(l=s.match(/Version\/([\d.]+)/))||void 0===l?void 0:l[1])||"");return{browser:e,browserVersion:n,isWebview:i,isRobot:a,userAgent:s}}};let ue=[{name:"WebKit",parse:(e=r)=>({is:e.includes("AppleWebKit")})},{name:"Trident",parse:(e=r)=>({is:e.includes("Trident")||e.includes("NET CLR")})},{name:"Gecko",parse:(e=r)=>({is:e.includes("Gecko/")})},{name:"Servo",parse:(e=r)=>({is:e.includes("Servo/")})},{name:"Presto",parse:(e=r)=>({is:e.includes("Presto")})},{name:"KHTML",parse:(e=r)=>({is:e.includes("KHTML/")})}];ue.forEach((e=>{e.is||(e.is=async function(){return e.parse().is})}));var ve={name:"engine",parse(e=r){let n="";return ue.forEach((function(i){i.parse(e).is&&(n=i.name)})),o.parse(e).is?n=parseInt(o.parse(e).version)>75?"Blink":"EdgeHTML":s.parse(e).is&&parseInt(s.parse(e).version)>27&&(n="Blink"),{engine:n}},async getInfo(){return this.parse()}},ce={name:"Windows",parse(e=r){var n;let i=(null===(n=e.match(/^Mozilla\/\d.0 \(Windows NT ([\d.]+)[;)].*$/))||void 0===n?void 0:n[1])||"";return{is:e.includes("Windows"),version:{"10.0":"10",6.4:"10 Technical Preview",6.3:"8.1",6.2:"8",6.1:"7","6.0":"Vista",5.2:"XP 64-bit",5.1:"XP",5.01:"2000 SP1","5.0":"2000","4.0":"NT","4.90":"ME"}[i]||i}},async version(){let e=this.parse().version;return new Promise((function(n){var r;null!=i&&null!==(r=i.navigator)&&void 0!==r&&r.userAgentData?i.navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then((function(e){let r="";if("Windows"===i.navigator.userAgentData.platform){r=parseInt(e.platformVersion.split(".")[0])>=13?"11":"10"}n(r)})):n(e)}))}};let me=[ce,{name:"Linux",parse:(e=r)=>({is:e.includes("Linux")||e.includes("X11"),version:""})},{name:"macOS",parse(e=r){var n;return{is:e.includes("Macintosh"),version:(null===(n=e.match(/Mac OS X -?([\d_]+)/))||void 0===n?void 0:n[1].replace(/_/g,"."))||""}}},{name:"Android",parse(e=r){var n;return{is:e.includes("Android")||e.includes("Adr"),version:(null===(n=e.match(/Android ([\d.]+);/))||void 0===n?void 0:n[1])||""}}},{name:"HarmonyOS",parse(e=r){var n;let i=+(null===(n=e.match(/HMSCore (\d+.\d+)/))||void 0===n?void 0:n[1])||0,a="";return i>=6.1?a="4.0":i>=6?a="3.0":i>=5?a="2.0":i>=4&&(a="1.0"),{is:e.includes("HarmonyOS"),version:a}}},{name:"Ubuntu",parse:(e=r)=>({is:e.includes("Ubuntu"),version:""})},{name:"FreeBSD",parse:(e=r)=>({is:e.includes("FreeBSD"),version:""})},{name:"Debian",parse(e=r){var n;return{is:e.includes("Debian"),version:(null===(n=e.match(/Debian\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"iOS",parse(e=r){var n;return{is:e.includes("like Mac OS X"),version:(null===(n=e.match(/OS ([\d_]+) like/))||void 0===n?void 0:n[1].replace(/_/g,"."))||""}}},{name:"Windows Phone",parse(e=r){var n;return{is:e.includes("IEMobile")||e.includes("Windows Phone"),version:(null===(n=e.match(/Windows Phone( OS)? ([\d.]+);/))||void 0===n?void 0:n[2])||""}}},{name:"BlackBerry",parse:(e=r)=>({is:e.includes("BlackBerry")||e.includes("RIM"),version:""})},{name:"MeeGo",parse:(e=r)=>({is:e.includes("MeeGo"),version:""})},{name:"Symbian",parse(e=r){var n;return{is:e.includes("Symbian"),version:(null===(n=e.match(/Series60\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Chrome OS",parse(e=r){var n,i;return{is:e.includes("CrOS"),version:(null===(n=e.match(/MSIE ([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/rv:([\d.]+)/))||void 0===i?void 0:i[1])||""}}},{name:"WebOS",parse(e=r){var n;return{is:e.includes("hpwOS"),version:(null===(n=e.match(/hpwOS\/([\d.]+);/))||void 0===n?void 0:n[1])||""}}}];me.forEach((e=>{e.is||(e.is=async function(){return e.parse().is}),e.version||(e.version=async function(){return e.parse().version})}));var pe={name:"system",parse(e=r){let n="",i="";me.forEach((function(r){r.parse(e).is&&(n=r.name,i=r.parse(e).version)}));let a="";e.match(/(Win64|x64|WOW64|x86_64)/i)?a="Win64":e.match(/(Win32|x86|WOW32)/i)?a="Win32":e.match(/aarch64|arm64/)?a="ARM64":e.match(/arm32/)&&(a="ARM32");let s="",o=e+"|"+a;s=o.match(/armv?\d+/i)||o.match(/aarch64/)?"arm":o.match(/loongarch64/)?"loongarch":"x86";let l=e.match(/Win64|x64|WOW64|x86_64|aarch64|arm64|loongarch64/i)?64:32;return{system:n,systemVersion:i,platform:a,architecture:s,bitness:l}},async getInfo(){var e,n;let{system:r,systemVersion:a,platform:s,architecture:o,bitness:l}=this.parse();for(let e of me)await e.is()&&(r=e.name,a=await e.version());var t,d;(null!=i&&null!==(e=i.navigator)&&void 0!==e&&e.platform&&(s=i.navigator.platform),null!=i&&null!==(n=i.navigator)&&void 0!==n&&n.userAgentData)&&(o=await(null===(t=i.navigator.userAgentData)||void 0===t?void 0:t.getHighEntropyValues(["architecture"]).then((e=>e.architecture||o))),l=await(null===(d=i.navigator.userAgentData)||void 0===d?void 0:d.getHighEntropyValues(["bitness"]).then((e=>+e.bitness||l))));return{system:r,systemVersion:a,platform:s,architecture:o,bitness:l}}};let he=[{name:"Mobile",parse:(e=r)=>({is:e.includes("Mobi")||e.includes("iPh")||e.includes("480")})},{name:"Tablet",parse:(e=r)=>({is:e.includes("Tablet")||e.includes("Pad")||e.includes("Nexus 7")}),async is(){return this.parse().is||"MacIntel"===(null==i?void 0:i.navigator.platform)&&(null==i?void 0:i.navigator.maxTouchPoints)>1}}];he.forEach((e=>{e.is||(e.is=async function(){return e.parse().is})}));var ge={name:"device",parse(e=r){let n="Desktop";return he.forEach((function(i){i.parse(e).is&&(n=i.name)})),{device:n}},async getInfo(){return this.parse()}},fe={name:"gpu",parse:()=>({}),async getInfo(){let e="",n="";if(null!=i&&i.document){let s=i.document.createElement("canvas").getContext("experimental-webgl");if(s){var r,a;let i=s.getExtension("WEBGL_debug_renderer_info"),o=s.getParameter(i.UNMASKED_RENDERER_WEBGL);e=(null===(r=o.match(/ANGLE \((.+?),/))||void 0===r?void 0:r[1])||"",n=(null===(a=o.match(/, (.+?) (\(|vs_)/))||void 0===a?void 0:a[1])||""}}return{gpu:e,gpuModel:n}}};const we=/\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/,be=/\b(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}\b/i;let ye=globalThis.RTCPeerConnection||globalThis.mozRTCPeerConnection||globalThis.webkitRTCPeerConnection;var Be={name:"network",parse:()=>({}),async getInfo(){var e,n;let r="unknown",a=null==i||null===(e=i.navigator)||void 0===e?void 0:e.connection;return a&&(r=a.type||a.effectiveType,"2"!=r&&"unknown"!=r||(r="wifi")),{network:r,isOnline:(null==i||null===(n=i.navigator)||void 0===n?void 0:n.onLine)||!1,ip:await(async()=>{const e=new Set,n=n=>{var i;const r=null==n||null===(i=n.candidate)||void 0===i?void 0:i.candidate;if(r)for(const n of[we,be]){const i=r.match(n);i&&e.add(i[0])}};return new Promise((function(i,r){const a=new ye({iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun.services.mozilla.com"}]});a.addEventListener("icecandidate",n),a.createDataChannel(""),a.createOffer().then((e=>a.setLocalDescription(e)),r);let s=20,o=null,l=function(){try{a.removeEventListener("icecandidate",n),a.close()}catch{}o&&clearInterval(o)};o=setInterval((function(){let n=[...e];n.length?(l(),i(n[0])):s?s--:(l(),i(""))}),100)}))})()}}},Se={name:"battery",parse:()=>({}),async getInfo(){var e;let n=!0,r=1;return null!=i&&null!==(e=i.navigator)&&void 0!==e&&e.getBattery&&(n=await i.navigator.getBattery().then((e=>null==e?void 0:e.charging)),r=await i.navigator.getBattery().then((e=>+(null==e?void 0:e.level)||-1))),{isCharging:n,battery:r}}};var Ee={name:"screen",parse:()=>({}),async getInfo(){var e,n,r,a;return{screenWidth:(null==i||null===(e=i.screen)||void 0===e?void 0:e.width)||0,screenHeight:(null==i||null===(n=i.screen)||void 0===n?void 0:n.height)||0,clientWidth:(null==i||null===(r=i.document)||void 0===r||null===(r=r.documentElement)||void 0===r?void 0:r.clientWidth)||0,clientHeight:(null==i||null===(a=i.document)||void 0===a||null===(a=a.documentElement)||void 0===a?void 0:a.clientHeight)||0,screenFPS:await async function(){return new Promise((function(e){let n=0,i=1,r=[],a=function(s){if(n>0)if(i<12)r.push(s-n),n=s,i++,requestAnimationFrame(a);else{r.sort(),r=r.slice(1,11);let n=r.reduce(((e,n)=>e+n));const i=10*Math.round(1e4/n/10);e(i)}else n=s,requestAnimationFrame(a)};requestAnimationFrame(a)}))}()}}},Ae={name:"language",parse:()=>({}),async getInfo(){var e;let n=null==i||null===(e=i.navigator)||void 0===e?void 0:e.language;if("string"!=typeof n)return"Unknown language";let r=n.split("-");return r[1]&&(r[1]=r[1].toUpperCase()),{language:r.join("_")}}},Ie={name:"timezone",parse:()=>({}),async getInfo(){var e;return{timezone:null===(e=Intl)||void 0===e||null===(e=e.DateTimeFormat())||void 0===e||null===(e=e.resolvedOptions())||void 0===e?void 0:e.timeZone}}},Te={parse(e){let n={};return[de,ve,pe,ge].forEach((i=>{n=Object.assign(n,i.parse(e))})),n},async getInfo(e=["browser","engine","system","device","gpu","network","battery","screen","language","timezone"]){let n={},i=[de,ve,pe,ge,fe,Be,Se,Ee,Ae,Ie].filter((n=>e.includes(n.name)));for(let e of i)n=Object.assign(n,await e.getInfo());return n}};return Te})); diff --git a/dist/browser.min.mjs b/dist/browser.min.mjs index aecc52fb..38838a37 100644 --- a/dist/browser.min.mjs +++ b/dist/browser.min.mjs @@ -1,5 +1,5 @@ /*! - * browser-tool v1.2.8 + * browser-tool v1.3.0 * Useragent analysis tool. * https://passer-by.com/browser/ * @@ -8,6 +8,6 @@ * Released under the MIT License * https://github.com/mumuy/browser * - * Created on: 2024-07-21 + * Created on: 2024-08-01 */ -function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},n(e)}var e={name:"Safari",match:function(n){return n.includes("Safari")},version:function(n){var e;return(null===(e=n.match(/Version\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},r={name:"Chrome",match:function(n){return n.includes("Chrome")||n.includes("CriOS")},version:function(n){var e,r;return(null===(e=n.match(/Chrome\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/CriOS\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},i={name:"Edge",match:function(n){return n.includes("Edge")||n.includes("Edg/")||n.includes("EdgA")||n.includes("EdgiOS")},version:function(n){var e,r,i,o;return(null===(e=n.match(/Edge\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/Edg\/([\d.]+)/))||void 0===r?void 0:r[1])||(null===(i=n.match(/EdgA\/([\d.]+)/))||void 0===i?void 0:i[1])||(null===(o=n.match(/EdgiOS\/([\d.]+)/))||void 0===o?void 0:o[1])||""}},o={name:"IE",match:function(n){return n.includes("MSIE")||n.includes("Trident")},version:function(n){var e,r;return(null===(e=n.match(/MSIE ([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/rv:([\d.]+)/))||void 0===r?void 0:r[1])||""}},t={name:"Firefox",match:function(n){return n.includes("Firefox")||n.includes("FxiOS")},version:function(n){var e,r;return(null===(e=n.match(/Firefox\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/FxiOS\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},u={name:"Firefox Focus",match:function(n){return n.includes("Focus")},version:function(n){var e;return(null===(e=n.match(/Focus\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},a={name:"Chromium",match:function(n){return n.includes("Chromium")},version:function(n){var e;return(null===(e=n.match(/Chromium\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},c={name:"Opera",match:function(n){return n.includes("Opera")||n.includes("OPR")},version:function(n){var e,r;return(null===(e=n.match(/Opera\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/OPR\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},l={name:"Opera GX",match:function(n){var e=!1;return c.match(n)&&(e=n.includes("Edition GX")),e},version:function(n){var e,r;return(null===(e=n.match(/Opera\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/OPR\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},d={};"undefined"!=typeof globalThis?d=globalThis:"undefined"!=typeof self?d=self:"undefined"!=typeof window?d=window:"undefined"!=typeof global&&(d=global);var v=d,s={name:"Vivaldi",match:function(n){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!n.includes("Vivaldi")&&e)return new Promise((function(n){fetch("chrome-extension://jffbochibkahlbbmanpmndnhmeliecah/config.json").then((function(){n(!0)})).catch((function(){n(!1)}))}))},version:function(n){var e,r;return(null===(e=n.match(/Vivaldi\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/Chrome\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},m={name:"Yandex",match:function(n){return n.includes("YaBrowser")},version:function(n){var e;return(null===(e=n.match(/YaBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},h={name:"Brave",match:function(n){var e;return!(null==v||null===(e=v.navigator)||void 0===e||!e.brave)},version:function(n){var e;return(null===(e=n.match(/Chrome\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},f={name:"Arora",match:function(n){return n.includes("Arora")},version:function(n){var e;return(null===(e=n.match(/Arora\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},p={name:"Lunascape",match:function(n){return n.includes("Lunascape")},version:function(n){var e;return(null===(e=n.match(/Lunascape[\/\s]([\d.]+)/))||void 0===e?void 0:e[1])||""}},g={name:"QupZilla",match:function(n){return n.includes("QupZilla")},version:function(n){var e;return(null===(e=n.match(/QupZilla[\/\s]([\d.]+)/))||void 0===e?void 0:e[1])||""}},b={name:"Coc Coc",match:function(n){return n.includes("coc_coc_browser")},version:function(n){var e;return(null===(e=n.match(/coc_coc_browser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},w={name:"Kindle",match:function(n){return n.includes("Kindle")||n.includes("Silk/")},version:function(n){var e;return(null===(e=n.match(/Version\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},B={name:"Iceweasel",match:function(n){return n.includes("Iceweasel")},version:function(n){var e;return(null===(e=n.match(/Iceweasel\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},S={name:"Konqueror",match:function(n){return n.includes("Konqueror")},version:function(n){var e;return(null===(e=n.match(/Konqueror\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},y={name:"Iceape",match:function(n){return n.includes("Iceape")},version:function(n){var e;return(null===(e=n.match(/Iceape\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},E={name:"SeaMonkey",match:function(n){return n.includes("SeaMonkey")},version:function(n){var e;return(null===(e=n.match(/SeaMonkey\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},A={name:"Epiphany",match:function(n){return n.includes("Epiphany")},version:function(n){var e;return(null===(e=n.match(/Epiphany\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},M={name:"Huawei",match:function(n){return n.includes("HuaweiBrowser")||n.includes("HBPC/")},version:function(n){var e,r,i;return(null===(e=n.match(/HuaweiBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/HBPC\/([\d.]+)/))||void 0===r?void 0:r[1])||(null===(i=n.match(/Version\/([\d.]+)/))||void 0===i?void 0:i[1])||""}},P={name:"OPPO",match:function(n){return n.includes("HeyTapBrowser")||n.includes("OPPO")},version:function(n){var e;return(null===(e=n.match(/HeyTapBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},I={name:"Vivo",match:function(n){return n.includes("VivoBrowser")},version:function(n){var e;return(null===(e=n.match(/VivoBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},O={name:"Xiaomi",match:function(n){return n.includes("MiuiBrowser")},version:function(n){var e;return(null===(e=n.match(/MiuiBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},x={name:"Meizu",match:function(n){return n.includes("MZBrowser")},version:function(n){var e;return(null===(e=n.match(/MZBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},C={name:"OnePlus",match:function(n){return n.includes("ONEPLUS")},version:function(n){return""}},k={name:"Samsung",match:function(n){return n.includes("SamsungBrowser")},version:function(n){var e;return(null===(e=n.match(/SamsungBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}};function W(n,e){var r,i=null==v||null===(r=v.navigator)||void 0===r?void 0:r.mimeTypes;for(var o in i)if(i[o][n]&&i[o][n]==e)return i[o];return null}var T={name:"360",match:function(n){var e=!1;if(null!=v&&v.chrome){var r=n.replace(/^.*Chrome\/([\d]+).*$/,"$1");W("type","application/360softmgrplugin")||W("type","application/mozilla-npqihooquicklogin")||W("type","application/npjlgplayer3-chrome-jlp")||r>36&&null!=v&&v.showModalDialog?e=!0:r>45&&!(e=W("type","application/vnd.chromium.remoting-viewer"))&&r>=69&&(e=W("type","application/asx"))}return n.includes("QihooBrowser")||n.includes("QHBrowser")||n.includes(" 360 ")||e},version:function(n){var e,r;return(null===(e=n.match(/QihooBrowser(HD)?\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/Browser \(v([\d.]+)/))||void 0===r?void 0:r[1])||""}},D={name:"360SE",match:function(n){var e,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=!1;T.match(n)&&((W("type","application/gameplugin")||null!=v&&null!==(e=v.navigator)&&void 0!==e&&null!==(e=e.userAgentData)&&void 0!==e&&e.brands.filter((function(n){return"Not.A/Brand"==n.brand})).length)&&(i=!0));return!i&&r?new Promise((function(n){fetch("chrome-extension://fjbbmgamncjadhlpmffehlmmkdnkiadk/css/content.css").then((function(){n(!0)})).catch((function(){n(!1)}))})):n.includes("360SE")||i},version:function(n){return{122:"15.3",114:"15.0",108:"14.0",86:"13.0",78:"12.0",69:"11.0",63:"10.0",55:"9.1",45:"8.1",42:"8.0",31:"7.0",21:"6.3"}[parseInt(r.version(n))]||""}},V={name:"360EE",match:function(n){var e=!1;if(W("type","application/cenroll.cenroll.version.1")||W("type","application/hwepass2001.installepass2001"))e=!0;else if(T.match(n)){var r;null!=v&&null!==(r=v.navigator)&&void 0!==r&&null!==(r=r.userAgentData)&&void 0!==r&&r.brands.find((function(n){return"Not A(Brand"==n.brand||"Not?A_Brand"==n.brand}))&&(e=!0)}return n.includes("360EE")||e},version:function(n){var e,i=parseInt(r.version(n));return(null===(e=n.match(/Browser \(v([\d.]+)/))||void 0===e?void 0:e[1])||{122:"22.3",119:"22.0",108:"14.0",95:"21.0",86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[i]||""}},Q={name:"360AI",match:function(n){var e,r=!1;T.match(n)&&(null!=v&&null!==(e=v.navigator)&&void 0!==e&&null!==(e=e.userAgentData)&&void 0!==e&&e.brands.filter((function(n){return"Not.A/Brand"==n.brand})).length&&!W("type","application/gameplugin")&&(r=!0));return n.includes("360SEAI")||r},version:function(n){return{114:"1.0"}[parseInt(r.version(n))]||""}},L={name:"360AI",match:function(n){return n.includes("360EEAI")},version:function(n){var e;return(null===(e=n.match(/360EE\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},H=function(){return new Promise((function(n){var e,r="cv_".concat((new Date).getTime()%1e5).concat(100*Math.floor(Math.random())),i={key:"GetDeviceInfo",data:{},callback:r},o=JSON.stringify(i);if(null==v||null===(e=v.webkit)||void 0===e||!e.messageHandlers)return n({});v.webkit.messageHandlers.excuteCmd.postMessage(o),v[r]=function(e){delete v[r],n(JSON.parse(e||"{}"))}}))},_={name:"360EE",match:function(n){return!!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])&&H().then((function(n){return"360csexm"==(null==n?void 0:n.pid)||!1}))},version:function(n){return H().then((function(n){return(null==n?void 0:n.module_version)||""}))}},F={name:"360ENT",match:function(n){return n.includes("360ENT")},version:function(n){return{86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[parseInt(r.version(n))]||""}},N={name:"UC",match:function(n){return n.includes("UCBrowser")||n.includes(" UBrowser")||n.includes("UCWEB")},version:function(n){var e;return(null===(e=n.match(/UC?Browser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},Y={name:"QQBrowser",match:function(n){return n.includes("QQBrowser")},version:function(n){var e;return(null===(e=n.match(/QQBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},R={name:"QQ",match:function(n){return n.includes("QQ/")},version:function(n){var e;return(null===(e=n.match(/QQ\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},U={name:"Baidu",match:function(n){return n.includes("Baidu")||n.includes("BIDUBrowser")||n.includes("baidubrowser")||n.includes("baiduboxapp")||n.includes("BaiduD")},version:function(n){var e,r;return(null===(e=n.match(/BIDUBrowser[\s\/]([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/baiduboxapp\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},G={name:"Maxthon",match:function(n){return n.includes("Maxthon")||(null==v?void 0:v.maxthon)},version:function(n){var e,i,o=parseInt(r.version(n));return(null===(e=n.match(/Maxthon\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(i=n.match(/Version\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"7.0",78:"6.0"}[o]||""}},j={name:"Sogou",match:function(n){return n.includes("MetaSr")||n.includes("Sogou")},version:function(n){var e,r,i,o=(null===(e=n.match(/Chrome\/([\d]+)/))||void 0===e?void 0:e[1])||"";return(null===(r=n.match(/SogouMobileBrowser\/([\d.]+)/))||void 0===r?void 0:r[1])||(null===(i=n.match(/SogouMSE\/([\d.]+)/))||void 0===i?void 0:i[1])||{94:"12.0",80:"11.0"}[o]||""}},K={name:"Liebao",match:function(n){return n.includes("LBBROWSER")||n.includes("LieBaoFast")||(null==v?void 0:v.liebao)},version:function(n){var e,i=parseInt(r.version(n));return(null===(e=n.match(/LieBaoFast\/([\d.]+)/))||void 0===e?void 0:e[1])||{112:"9.0",79:"8.0",57:"6.5",49:"6.0",46:"5.9",42:"5.3",39:"5.2",34:"5.0",29:"4.5",21:"4.0"}[i]||""}},q={name:"2345Explorer",match:function(n){var e,r,i=(null==v?void 0:v.chrome)&&((null==v||null===(e=v.chrome)||void 0===e?void 0:e.adblock2345)||(null==v||null===(r=v.chrome)||void 0===r?void 0:r.common2345));return n.includes("2345Explorer")||n.includes("Mb2345Browser")||n.includes("2345chrome")||i},version:function(n){var e,i,o=parseInt(r.version(n));return(null===(e=n.match(/2345Explorer\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(i=n.match(/Mb2345Browser\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"13.0",69:"10.0",55:"9.9"}[o]||""}},X={name:"115Browser",match:function(n){return n.includes("115Browser")},version:function(n){var e;return(null===(e=n.match(/115Browser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},z={name:"TheWorld",match:function(n){return n.includes("TheWorld")},version:function(n){var e;return(null===(e=n.match(/TheWorld ([\d.]+)/))||void 0===e?void 0:e[1])||""}},Z={name:"Quark",match:function(n){return n.includes("Quark")},version:function(n){var e,r;return(null===(e=n.match(/Quark\/([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/QuarkPC\/([\d.]+)/))||void 0===r?void 0:r[1])||""}},$={name:"Qiyu",match:function(n){return n.includes("Qiyu")},version:function(n){var e;return(null===(e=n.match(/Qiyu\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},J={name:"Lenovo",match:function(n){return n.includes("SLBrowser")},version:function(n){var e;return(null===(e=n.match(/SLBrowser\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},nn={name:"Wechat",match:function(n){return n.includes("MicroMessenger")},version:function(n){var e;return(null===(e=n.match(/MicroMessenger\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},en={name:"WechatWork",match:function(n){return n.includes("wxwork/")},version:function(n){var e;return(null===(e=n.match(/wxwork\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},rn={name:"Taobao",match:function(n){return n.includes("AliApp(TB")},version:function(n){var e;return(null===(e=n.match(/AliApp\(TB\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},on={name:"Alipay",match:function(n){return n.includes("AliApp(AP")},version:function(n){var e;return(null===(e=n.match(/AliApp\(AP\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},tn={name:"Weibo",match:function(n){return n.includes("Weibo")},version:function(n){var e;return(null===(e=n.match(/weibo__([\d.]+)/))||void 0===e?void 0:e[1])||""}},un={name:"Douban",match:function(n){return n.includes("com.douban.frodo")},version:function(n){var e;return(null===(e=n.match(/com.douban.frodo\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},an={name:"Toutiao",match:function(n){return n.includes("NewsArticle")},version:function(n){var e;return(null===(e=n.match(/NewsArticle\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},cn={name:"Suning",match:function(n){return n.includes("SNEBUY-APP")},version:function(n){var e;return(null===(e=n.match(/SNEBUY-APP([\d.]+)/))||void 0===e?void 0:e[1])||""}},ln={name:"iQIYI",match:function(n){return n.includes("IqiyiApp")},version:function(n){var e;return(null===(e=n.match(/IqiyiVersion\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},dn={name:"DingTalk",match:function(n){return n.includes("DingTalk")},version:function(n){var e;return(null===(e=n.match(/DingTalk\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},vn={name:"Douyin",match:function(n){return n.includes("aweme")},version:function(n){var e;return(null===(e=n.match(/app_version\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},sn={name:"Googlebot",match:function(n){return n.includes("Googlebot")},version:function(n){var e;return(null===(e=n.match(/Googlebot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},mn={name:"Baiduspider",match:function(n){return n.includes("Baiduspider")},version:function(n){var e;return(null===(e=n.match(/Baiduspider(-render)?\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},hn={name:"Sogouspider",match:function(n){return n.match(/Sogou (\S+) Spider\/([\d.]+)/i)},version:function(n){var e;return(null===(e=n.match(/Sogou (\S+) Spider\/([\d.]+)/i))||void 0===e?void 0:e[1])||""}},fn={name:"Bingbot",match:function(n){return n.includes("bingbot")},version:function(n){var e;return(null===(e=n.match(/bingbot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},pn={name:"360Spider",match:function(n){return n.includes("360Spider")||n.includes("HaosouSpider")},version:function(n){return""}},gn={name:"Bytespider",match:function(n){return n.includes("Bytespider")},version:function(n){return""}},bn={name:"YisouSpider",match:function(n){return n.includes("YisouSpider")},version:function(n){var e;return(null===(e=n.match(/YisouSpider\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},wn={name:"YodaoBot",match:function(n){return n.includes("YodaoBot")},version:function(n){var e;return(null===(e=n.match(/YodaoBot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},Bn={name:"YandexBot",match:function(n){return n.includes("YandexBot")},version:function(n){var e;return(null===(e=n.match(/YandexBot\/([\d.]+)/))||void 0===e?void 0:e[1])||""}};function Sn(n){return n.map((function(n){return n instanceof Promise?n:Promise.resolve(n)}))}function yn(n){var d=arguments.length>1&&void 0!==arguments[1]&&arguments[1],v=n.userAgent,W=[e,r,i,o,t,u,a,c,l,s,m,h,f,p,g,b,w,B,S,y,E,A,M,P,I,O,x,C,k,T,V,D,_,Q,L,F,N,Y,R,U,G,j,K,q,X,z,Z,$,J,nn,en,rn,on,tn,un,cn,ln,dn,vn,an,sn,mn,hn,fn,pn,gn,bn,wn,Bn];if(n.browser="",n.browserVersion="",d){var H=Sn(W.map((function(n){return n.match(v,d)})));n.browser=Promise.all(H).then((function(n){var e="";return n.forEach((function(n,r){n&&(e=W[r].name)})),"Chrome"==e&&v.match(/\S+Browser/)&&(e=v.match(/\S+Browser/)[0]),e})),n.browserVersion=Promise.all(H).then((function(n){var e,r,i="",o="";(n.forEach((function(n,e){n&&(i=W[e].name,o=W[e].version(v))})),"Chrome"==i&&v.match(/\S+Browser/))&&(o=(null===(e=v.replace(/^.*Browser\/([\d.]+).*$/))||void 0===e?void 0:e[1])||"");o||(o=(null===(r=v.match(/Version\/([\d.]+)/))||void 0===r?void 0:r[1])||"");return o}))}else{var yn,En;if(W.forEach((function(e){e.match(v,d)&&(n.browser=e.name,n.browserVersion=e.version(v,d))})),"Chrome"==n.browser&&v.match(/\S+Browser/))n.browser=v.match(/\S+Browser/)[0],n.browserVersion=(null===(yn=v.replace(/^.*Browser\/([\d.]+).*$/))||void 0===yn?void 0:yn[1])||"";if(!n.browserVersion)n.browserVersion=(null===(En=v.match(/Version\/([\d.]+)/))||void 0===En?void 0:En[1])||""}}var En={name:"Mobile",match:function(n){return n.includes("Mobi")||n.includes("iPh")||n.includes("480")}},An={name:"Tablet",match:function(n){var e=(null==v?void 0:v.navigator)||{};return n.includes("Tablet")||n.includes("Pad")||n.includes("Nexus 7")||"MacIntel"===e.platform&&e.maxTouchPoints>1}};function Mn(n){n.device="Desktop",[En,An].forEach((function(e){e.match(n.userAgent)&&(n.device=e.name)}))}var Pn={name:"WebKit",match:function(n){return n.includes("AppleWebKit")}},In={name:"Trident",match:function(n){return n.includes("Trident")||n.includes("NET CLR")}},On={name:"Gecko",match:function(n){return n.includes("Gecko/")}},xn={name:"Servo",match:function(n){return n.includes("Servo/")}},Cn={name:"Presto",match:function(n){return n.includes("Presto")}},kn={name:"KHTML",match:function(n){return n.includes("KHTML/")}};function Wn(n){n.engine="",[Pn,In,On,xn,Cn,kn].forEach((function(e){e.match(n.userAgent)&&(n.engine=e.name)})),"Edge"==n.browser?n.engine=parseInt(n.browserVersion)>75?"Blink":"EdgeHTML":(r.match(n.userAgent)&&"WebKit"==n.engine&&parseInt(r.version(n.userAgent))>27||"Opera"==n.browser&&parseInt(n.browserVersion)>12||"Yandex"==n.browser)&&(n.engine="Blink")}var Tn={name:"Windows",match:function(n){return n.includes("Windows")},version:function(n){var e,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=(null===(e=n.match(/^Mozilla\/\d.0 \(Windows NT ([\d.]+)[;)].*$/))||void 0===e?void 0:e[1])||"",o={"10.0":"10",6.4:"10 Technical Preview",6.3:"8.1",6.2:"8",6.1:"7","6.0":"Vista",5.2:"XP 64-bit",5.1:"XP",5.01:"2000 SP1","5.0":"2000","4.0":"NT","4.90":"ME"};return r?new Promise((function(n){var e;null!=v&&null!==(e=v.navigator)&&void 0!==e&&e.userAgentData?v.navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then((function(e){var r="";"Windows"===navigator.userAgentData.platform&&(r=parseInt(e.platformVersion.split(".")[0])>=13?"11":"10");n(r)})):n(o[i]||i)})):o[i]||i}},Dn={name:"Linux",match:function(n){return n.includes("Linux")||n.includes("X11")},version:function(n){return""}},Vn={name:"macOS",match:function(n){return n.includes("Macintosh")},version:function(n){var e;return(null===(e=n.match(/Mac OS X -?([\d_]+)/))||void 0===e?void 0:e[1].replace(/_/g,"."))||""}},Qn={name:"Android",match:function(n){return n.includes("Android")||n.includes("Adr")},version:function(n){var e;return(null===(e=n.match(/Android ([\d.]+);/))||void 0===e?void 0:e[1])||""}},Ln={name:"HarmonyOS",match:function(n){return n.includes("HarmonyOS")},version:function(n){var e,r=+(null===(e=n.match(/HMSCore (\d+.\d+)/))||void 0===e?void 0:e[1])||0;return r>=6.1?"4.0":r>=6?"3.0":r>=5?"2.0":r>=4?"1.0":""}},Hn={name:"Ubuntu",match:function(n){return n.includes("Ubuntu")},version:function(n){return""}},_n={name:"FreeBSD",match:function(n){return n.includes("FreeBSD")},version:function(n){return""}},Fn={name:"Debian",match:function(n){return n.includes("Debian")},version:function(n){var e;return(null===(e=n.match(/Debian\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},Nn={name:"iOS",match:function(n){return n.includes("like Mac OS X")},version:function(n){var e;return(null===(e=n.match(/OS ([\d_]+) like/))||void 0===e?void 0:e[1].replace(/_/g,"."))||""}},Yn={name:"Windows Phone",match:function(n){return n.includes("IEMobile")||n.includes("Windows Phone")},version:function(n){var e;return(null===(e=n.match(/Windows Phone( OS)? ([\d.]+);/))||void 0===e?void 0:e[2])||""}},Rn={name:"BlackBerry",match:function(n){return n.includes("BlackBerry")||n.includes("RIM")},version:function(n){return""}},Un={name:"MeeGo",match:function(n){return n.includes("MeeGo")},version:function(n){return""}},Gn={name:"Symbian",match:function(n){return n.includes("Symbian")},version:function(n){var e;return(null===(e=n.match(/Series60\/([\d.]+)/))||void 0===e?void 0:e[1])||""}},jn={name:"Chrome OS",match:function(n){return n.includes("CrOS")},version:function(n){var e,r;return(null===(e=n.match(/MSIE ([\d.]+)/))||void 0===e?void 0:e[1])||(null===(r=n.match(/rv:([\d.]+)/))||void 0===r?void 0:r[1])||""}},Kn={name:"WebOS",match:function(n){return n.includes("hpwOS")},version:function(n){var e;return(null===(e=n.match(/hpwOS\/([\d.]+);/))||void 0===e?void 0:e[1])||""}};function qn(n,e){var r,i=n.userAgent;n.system="",n.systemVersion="",[Tn,Dn,Vn,Qn,Ln,Hn,_n,Fn,Nn,Yn,Rn,Un,Gn,jn,Kn].forEach((function(r){r.match(i)&&(n.system=r.name,n.systemVersion=r.version(i,e))})),n.platform="",i.match(/(Win64|x64|WOW64|x86_64)/i)?n.platform="Win64":i.match(/(Win32|x86|WOW32)/i)?n.platform="Win32":i.match(/aarch64|arm64/)?n.platform="ARM64":i.match(/arm32/)?n.platform="ARM32":null!=v&&null!==(r=v.navigator)&&void 0!==r&&r.platform&&(n.platform=v.navigator.platform),n.architecture="";var o=i+"|"+n.platform,t="";t=o.match(/armv?\d+/i)||o.match(/aarch64/)?"arm":o.match(/loongarch64/)?"loongarch":"x86",n.architecture=t;var u,a=i.match(/Win64|x64|WOW64|x86_64|aarch64|arm64|loongarch64/i)?64:32;(n.bitness=a,e)&&(null!=v&&null!==(u=v.navigator)&&void 0!==u&&u.userAgentData&&(n.architecture=v.navigator.userAgentData.getHighEntropyValues(["architecture"]).then((function(n){return n.architecture||t})),n.bitness=v.navigator.userAgentData.getHighEntropyValues(["bitness"]).then((function(n){return+n.bitness||a}))))}function Xn(n){if(n.gpu="",n.gpuModel="",null!=v&&v.document){var e=v.document.createElement("canvas").getContext("experimental-webgl");if(e){var r,i,o=e.getExtension("WEBGL_debug_renderer_info"),t=e.getParameter(o.UNMASKED_RENDERER_WEBGL);n.gpu=(null===(r=t.match(/ANGLE \((.+?),/))||void 0===r?void 0:r[1])||"",n.gpuModel=(null===(i=t.match(/, (.+?) (\(|vs_)/))||void 0===i?void 0:i[1])||""}}}function zn(n){n.language=function(n,e){var r=(null==v||null===(n=v.navigator)||void 0===n?void 0:n.browserLanguage)||(null==v||null===(e=v.navigator)||void 0===e?void 0:e.language);if("string"!=typeof r)return"Unknown language";var i=r.split("-");return i[1]&&(i[1]=i[1].toUpperCase()),i.join("_")}()}function Zn(n){var e,r,i,o;n.network=(i="unknown",(o=null==v||null===(r=v.navigator)||void 0===r?void 0:r.connection)&&("2"!=(i=o.type||o.effectiveType)&&"unknown"!=i||(i="wifi")),i),n.isOnline=(null==v||null===(e=v.navigator)||void 0===e?void 0:e.onLine)||!1}function $n(n){var e;null!=v&&null!==(e=v.navigator)&&void 0!==e&&e.getBattery?(n.isCharging=v.navigator.getBattery().then((function(n){return null==n?void 0:n.charging})),n.battery=v.navigator.getBattery().then((function(n){return+(null==n?void 0:n.level)||-1}))):(n.isCharging=!0,n.battery=1)}function Jn(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,i=Array(e);r0)if(r<12)i.push(t-e),e=t,r++,requestAnimationFrame(o);else{i.sort();var u=(i=i.slice(1,11)).reduce((function(n,e){return n+e})),a=10*Math.round(1e4/u/10);n(a)}else e=t,requestAnimationFrame(o)}))}))}var oe=function(n){var e,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i={};return i.userAgent=n||(null==v||null===(e=v.navigator)||void 0===e?void 0:e.userAgent)||"",[yn,Mn,Wn,qn,Xn,zn,Zn,$n,ie].forEach((function(n){return n(i,r)})),i};function te(e){var r=oe(e);for(var i in r)"object"==n(r[i])&&(r[i]="");return r}te.getInfo=function(n){var e=oe(n,!0),r=Object.keys(e),i=Sn(Object.values(e));return Promise.all(i).then((function(n){var e={};return n.forEach((function(n,i){e[r[i]]=n})),e}))};export{te as default}; +let e={};"undefined"!=typeof globalThis?e=globalThis:"undefined"!=typeof self?e=self:"undefined"!=typeof window?e=window:"undefined"!=typeof global&&(e=global);var n,i=e,r=null==i||null===(n=i.navigator)||void 0===n?void 0:n.userAgent,a={name:"Safari",parse(e=r){var n;return{is:e.includes("Safari"),version:(null===(n=e.match(/Version\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},s={name:"Chrome",parse(e=r){var n,i;return{is:e.includes("Chrome")||e.includes("CriOS"),version:(null===(n=e.match(/Chrome\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/CriOS\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},o={name:"Edge",parse(e=r){var n,i,a,s;return{is:e.includes("Edge")||e.includes("Edg/")||e.includes("EdgA")||e.includes("EdgiOS"),version:(null===(n=e.match(/Edge\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Edg\/([\d.]+)/))||void 0===i?void 0:i[1])||(null===(a=e.match(/EdgA\/([\d.]+)/))||void 0===a?void 0:a[1])||(null===(s=e.match(/EdgiOS\/([\d.]+)/))||void 0===s?void 0:s[1])||""}}},l={name:"IE",parse(e=r){var n,i;return{is:e.includes("MSIE")||e.includes("Trident"),version:(null===(n=e.match(/MSIE ([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/rv:([\d.]+)/))||void 0===i?void 0:i[1])||""}}},t={name:"Firefox",parse(e=r){var n,i;return{is:e.includes("Firefox")||e.includes("FxiOS"),version:(null===(n=e.match(/Firefox\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/FxiOS\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},d={name:"Firefox Focus",parse(e=r){var n;return{is:e.includes("Focus"),version:(null===(n=e.match(/Focus\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},u={name:"Chromium",parse(e=r){var n;return{is:e.includes("Chromium"),version:(null===(n=e.match(/Chromium\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},v={name:"Opera",parse(e=r){var n,i;return{is:e.includes("Opera")||e.includes("OPR"),version:(null===(n=e.match(/Opera\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/OPR\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},c={name:"Opera GX",parse(e=r){let n=!1;return v.parse(e).is&&(n=e.includes("Edition GX")),{is:n,version:v.parse(e).version}}},m={name:"Vivaldi",parse(e=r){var n,i;return{is:e.includes("Vivaldi"),version:(null===(n=e.match(/Vivaldi\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Chrome\/([\d.]+)/))||void 0===i?void 0:i[1])||""}},async is(){let e=this.parse().is;return new Promise((function(n){e?n(!1):fetch("chrome-extension://jffbochibkahlbbmanpmndnhmeliecah/config.json").then((function(){n(!0)})).catch((function(){n(!1)}))}))}},p={name:"Yandex",parse(e=r){var n;return{is:e.includes("YaBrowser"),version:(null===(n=e.match(/YaBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},h={name:"Brave",parse(e=r){var n;return{is:e.includes("Brave"),version:(null===(n=e.match(/Chrome\/([\d.]+)/))||void 0===n?void 0:n[1])||""}},is:async function(){var e;return!!(this.parse().is||null!=i&&null!==(e=i.navigator)&&void 0!==e&&e.brave)}},g={name:"Arora",parse(e=r){var n;return{is:e.includes("Arora"),version:(null===(n=e.match(/Arora\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},w={name:"Lunascape",parse(e=r){var n;return{is:e.includes("Lunascape"),version:(null===(n=e.match(/Lunascape[\/\s]([\d.]+)/))||void 0===n?void 0:n[1])||""}}},f={name:"QupZilla",parse(e=r){var n;return{is:e.includes("QupZilla"),version:(null===(n=e.match(/QupZilla[\/\s]([\d.]+)/))||void 0===n?void 0:n[1])||""}}},b={name:"Coc Coc",parse(e=r){var n;return{is:e.includes("coc_coc_browser"),version:(null===(n=e.match(/coc_coc_browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},B={name:"Kindle",parse(e=r){var n;return{is:e.includes("Kindle")||e.includes("Silk/"),version:(null===(n=e.match(/Version\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},y={name:"Iceweasel",parse(e=r){var n;return{is:e.includes("Iceweasel"),version:(null===(n=e.match(/Iceweasel\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},S={name:"Konqueror",parse(e=r){var n;return{is:e.includes("Konqueror"),version:(null===(n=e.match(/Konqueror\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},E={name:"Iceape",parse(e=r){var n;return{is:e.includes("Iceape"),version:(null===(n=e.match(/Iceape\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},A={name:"SeaMonkey",parse(e=r){var n;return{is:e.includes("SeaMonkey"),version:(null===(n=e.match(/SeaMonkey\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},I={name:"Epiphany",parse(e=r){var n;return{is:e.includes("Epiphany"),version:(null===(n=e.match(/Epiphany\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},T={name:"Huawei",parse(e=r){var n,i,a;return{is:e.includes("HuaweiBrowser")||e.includes("HBPC/"),version:(null===(n=e.match(/HuaweiBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/HBPC\/([\d.]+)/))||void 0===i?void 0:i[1])||(null===(a=e.match(/Version\/([\d.]+)/))||void 0===a?void 0:a[1])||""}}},M={name:"OPPO",parse(e=r){var n;return{is:e.includes("HeyTapBrowser")||e.includes("OPPO"),version:(null===(n=e.match(/HeyTapBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},O={name:"Vivo",parse(e=r){var n;return{is:e.includes("VivoBrowser"),version:(null===(n=e.match(/VivoBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},x={name:"Xiaomi",parse(e=r){var n;return{is:e.includes("MiuiBrowser"),version:(null===(n=e.match(/115Browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},k={name:"Meizu",parse(e=r){var n;return{is:e.includes("MZBrowser"),version:(null===(n=e.match(/MZBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},P={name:"OnePlus",parse:(e=r)=>({is:e.includes("ONEPLUS"),version:""})},W={name:"Samsung",parse(e=r){var n;return{is:e.includes("SamsungBrowser"),version:(null===(n=e.match(/SamsungBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}};function C(e,n){var i;let r=null===globalThis||void 0===globalThis||null===(i=globalThis.navigator)||void 0===i?void 0:i.mimeTypes;for(let i in r)if(r[i][e]&&r[i][e]==n)return r[i];return null}var D={name:"360",parse(e=r){var n,i;return{is:e.includes("QihooBrowser")||e.includes("QHBrowser")||e.includes(" 360 "),version:(null===(n=e.match(/QihooBrowser(HD)?\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Browser \(v([\d.]+)/))||void 0===i?void 0:i[1])||""}},async is(){let e=this.parse().is;if(null!=i&&i.chrome){let n=parseInt(s.parse().version);C("type","application/360softmgrplugin")||C("type","application/mozilla-npqihooquicklogin")||C("type","application/npjlgplayer3-chrome-jlp")||n>36&&null!=i&&i.showModalDialog?e=!0:n>45&&(e=C("type","application/vnd.chromium.remoting-viewer"),!e&&n>=69&&(e=C("type","application/asx")))}return e}},Q={name:"360SE",parse(e=r){let n=parseInt(s.parse(e).version);return{is:e.includes("360SE"),version:{122:"15.3",114:"15.0",108:"14.0",86:"13.0",78:"12.0",69:"11.0",63:"10.0",55:"9.1",45:"8.1",42:"8.0",31:"7.0",21:"6.3"}[n]||""}},async is(){let e=!1;var n;await D.is()&&((C("type","application/gameplugin")||null!=i&&null!==(n=i.navigator)&&void 0!==n&&null!==(n=n.userAgentData)&&void 0!==n&&n.brands.filter((e=>"Not.A/Brand"==e.brand)).length)&&(e=!0));return e||new Promise((function(e){fetch("chrome-extension://fjbbmgamncjadhlpmffehlmmkdnkiadk/css/content.css").then((function(){e(!0)})).catch((function(){e(!1)}))}))}},V={name:"360EE",parse(e=(e=>null===globalThis||void 0===globalThis||null===(e=globalThis.navigator)||void 0===e?void 0:e.userAgent)()){var n;let i=parseInt(s.parse(e).version);return{is:e.includes("360EE"),version:(null===(n=e.match(/Browser \(v([\d.]+)/))||void 0===n?void 0:n[1])||{122:"22.3",119:"22.0",108:"14.0",95:"21.0",86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[i]||""}},async is(){let e=this.parse().is;if(C("type","application/cenroll.cenroll.version.1")||C("type","application/hwepass2001.installepass2001"))e=!0;else if(await D.is()){var n;null!==globalThis&&void 0!==globalThis&&null!==(n=globalThis.navigator)&&void 0!==n&&null!==(n=n.userAgentData)&&void 0!==n&&n.brands.find((e=>"Not A(Brand"==e.brand||"Not?A_Brand"==e.brand))&&(e=!0)}return e}},H={name:"360AI",parse(e=r){let n=parseInt(s.parse(e).version);return{is:e.includes("360SEAI"),version:{114:"1.0"}[n]||""}},async is(){let e=this.parse().is;var n;await D.is()&&(null!=i&&null!==(n=i.navigator)&&void 0!==n&&null!==(n=n.userAgentData)&&void 0!==n&&n.brands.filter((e=>"Not.A/Brand"==e.brand)).length&&!C("type","application/gameplugin")&&(e=!0));return e}},L={name:"360AI",parse(e=r){var n;return{is:e.includes("360EEAI"),version:(null===(n=e.match(/360EE\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}};const _=()=>new Promise((e=>{var n;const r=`cv_${(new Date).getTime()%1e5}${100*Math.floor(Math.random())}`,a={key:"GetDeviceInfo",data:{},callback:r},s=JSON.stringify(a);if(null==i||null===(n=i.webkit)||void 0===n||!n.messageHandlers)return e({});i.webkit.messageHandlers.excuteCmd.postMessage(s),i[r]=function(n){delete i[r],e(JSON.parse(n||"{}"))}}));var F={name:"360EE",parse:()=>({is:!1,version:""}),is:async()=>_().then((function(e){return"360csexm"==(null==e?void 0:e.pid)||!1})),version:async()=>_().then((function(e){return(null==e?void 0:e.module_version)||""}))},N={name:"360ENT",parse(e=r){var n;let i=parseInt(s.parse(e).version);return{is:e.includes("360ENT"),version:(null===(n=e.match(/Browser \(v([\d.]+)/))||void 0===n?void 0:n[1])||{86:"13.0",78:"12.0",69:"11.0",63:"9.5",55:"9.0",50:"8.7",30:"7.5"}[i]||""}}},R={name:"UC",parse(e=r){var n;return{is:e.includes("UCBrowser")||e.includes(" UBrowser")||e.includes("UCWEB"),version:(null===(n=e.match(/UC?Browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},Y={name:"QQBrowser",parse(e=r){var n;return{is:e.includes("QQBrowser"),version:(null===(n=e.match(/QQBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},U={name:"QQ",parse(e=r){var n;return{is:e.includes("QQ"),version:(null===(n=e.match(/QQ\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},G={name:"Baidu",parse(e=r){var n,i;return{is:e.includes("Baidu")||e.includes("BIDUBrowser")||e.includes("baidubrowser")||e.includes("baiduboxapp")||e.includes("BaiduD"),version:(null===(n=e.match(/BIDUBrowser[\s\/]([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/baiduboxapp\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},q={name:"Maxthon",parse(e=r){var n,i;let a=parseInt(s.parse(e).version);return{is:e.includes("Maxthon"),version:(null===(n=e.match(/Maxthon\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Version\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"7.0",78:"6.0"}[a]||""}},is(){return this.parse().is||(null==i?void 0:i.maxthon)}},K={name:"Sogou",parse(e=r){var n,i,a=parseInt(s.parse(e).version);return{is:e.includes("MetaSr")||e.includes("Sogou"),version:(null===(n=e.match(/SogouMobileBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/SogouMSE\/([\d.]+)/))||void 0===i?void 0:i[1])||{94:"12.0",80:"11.0"}[a]||""}}},j={name:"Liebao",parse(e=r){var n;let i=parseInt(s.parse(e).version);return{is:e.includes("LBBROWSER")||e.includes("LieBaoFast"),version:(null===(n=e.match(/LieBaoFast\/([\d.]+)/))||void 0===n?void 0:n[1])||{112:"9.0",79:"8.0",57:"6.5",49:"6.0",46:"5.9",42:"5.3",39:"5.2",34:"5.0",29:"4.5",21:"4.0"}[i]||""}},is(){return this.parse().is||(null==i?void 0:i.liebao)}},z={name:"2345Explorer",parse(e=r){var n,i;let a=parseInt(s.parse(e).version);return{is:e.includes("2345Explorer")||e.includes("Mb2345Browser")||e.includes("2345chrome"),version:(null===(n=e.match(/2345Explorer\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/Mb2345Browser\/([\d.]+)/))||void 0===i?void 0:i[1])||{109:"13.0",69:"10.0",55:"9.9"}[a]||""}},async is(){let e=this.parse().is;var n,r;e||(e=(null==i?void 0:i.chrome)&&((null==i||null===(n=i.chrome)||void 0===n?void 0:n.adblock2345)||(null==i||null===(r=i.chrome)||void 0===r?void 0:r.common2345)));return e}},X={name:"115Browser",parse(e=r){var n;return{is:e.includes("115Browser"),version:(null===(n=e.match(/115Browser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},Z={name:"TheWorld",parse(e=r){var n;return{is:e.includes("TheWorld"),version:(null===(n=e.match(/TheWorld ([\d.]+)/))||void 0===n?void 0:n[1])||""}}},$={name:"Quark",parse(e=r){var n,i;return{is:e.includes("Quark"),version:(null===(n=e.match(/Quark\/([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/QuarkPC\/([\d.]+)/))||void 0===i?void 0:i[1])||""}}},J={name:"Qiyu",parse(e=r){var n;return{is:e.includes("Qiyu"),version:(null===(n=e.match(/Qiyu\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ee={name:"Lenovo",parse(e=r){var n;return{is:e.includes("SLBrowser"),version:(null===(n=e.match(/SLBrowser\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ne={name:"Wechat",parse(e=r){var n;return{is:e.includes("MicroMessenger"),version:(null===(n=e.match(/MicroMessenger\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ie={name:"WechatWork",parse(e=r){var n;return{is:e.includes("wxwork"),version:(null===(n=e.match(/wxwork\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},re={name:"Taobao",parse(e=r){var n;return{is:e.includes("AliApp(TB"),version:(null===(n=e.match(/AliApp\(TB\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},ae={name:"Alipay",parse(e=r){var n;return{is:e.includes("AliApp(AP"),version:(null===(n=e.match(/AliApp\(AP\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},se={name:"Weibo",parse(e=r){var n;return{is:e.includes("Weibo"),version:(null===(n=e.match(/weibo__([\d.]+)/))||void 0===n?void 0:n[1])||""}}},oe={name:"Douban",parse(e=r){var n;return{is:e.includes("com.douban.frodo"),version:(null===(n=e.match(/com.douban.frodo\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},le={name:"Toutiao",parse(e=r){var n;return{is:e.includes("NewsArticle"),version:(null===(n=e.match(/NewsArticle\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}};let te=[a,s,o,l,t,d,u,v,c,m,p,h,g,w,f,b,B,y,S,E,A,I,T,M,O,x,k,P,W,D,V,Q,F,H,L,N,R,Y,U,G,q,K,j,z,X,Z,$,J,ee,ne,ie,re,ae,se,oe,{name:"Suning",parse(e=r){var n;return{is:e.includes("SNEBUY-APP"),version:(null===(n=e.match(/SNEBUY-APP([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"iQIYI",parse(e=r){var n;return{is:e.includes("IqiyiApp"),version:(null===(n=e.match(/IqiyiVersion\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"DingTalk",parse(e=r){var n;return{is:e.includes("DingTalk"),version:(null===(n=e.match(/DingTalk\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Douyin",parse(e=r){var n;return{is:e.includes("aweme"),version:(null===(n=e.match(/app_version\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},le,{name:"Googlebot",parse(e=r){var n;return{is:e.includes("Googlebot"),version:(null===(n=e.match(/Googlebot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Baiduspider",parse(e=r){var n;return{is:e.includes("Baiduspider"),version:(null===(n=e.match(/Baiduspider(-render)?\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Sogouspider",parse(e=r){var n;return{is:e.match(/Sogou (\S+) Spider\/([\d.]+)/i),version:(null===(n=e.match(/Sogou (\S+) Spider\/([\d.]+)/i))||void 0===n?void 0:n[1])||""}}},{name:"Bingbot",parse(e=r){var n;return{is:e.includes("bingbot"),version:(null===(n=e.match(/bingbot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"360Spider",parse:(e=r)=>({is:e.includes("360Spider")||e.includes("HaosouSpider"),version:""})},{name:"Bytespider",parse:(e=r)=>({is:e.includes("Bytespider"),version:""})},{name:"YisouSpider",parse(e=r){var n;return{is:e.includes("YisouSpider"),version:(null===(n=e.match(/YisouSpider\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"YodaoBot",parse(e=r){var n;return{is:e.includes("YodaoBot"),version:(null===(n=e.match(/YodaoBot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"YandexBot",parse(e=r){var n;return{is:e.includes("YandexBot"),version:(null===(n=e.match(/YandexBot\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}}];te.forEach((e=>{e.is||(e.is=async function(){return e.parse().is}),e.version||(e.version=async function(){return e.parse().version})}));var de={name:"browser",parse(e=r){let n="",i="";var a,s;(te.forEach((function(r){r.parse(e).is&&(n=r.name,i=r.parse(e).version)})),"Chrome"==n&&e.match(/\S+Browser/)&&(n=e.match(/\S+Browser/)[0]),"Chrome"==n&&e.match(/\S+Browser/))&&(i=(null===(a=e.replace(/^.*Browser\/([\d.]+).*$/))||void 0===a?void 0:a[1])||"");i||(i=(null===(s=e.match(/Version\/([\d.]+)/))||void 0===s?void 0:s[1])||"");let o=e.includes("; wv)"),l=["Googlebot","Baiduspider","Sogouspider","Bingbot","360Spider","Bytespider","YandexBot"].includes(n);return{browser:n,browserVersion:i,isWebview:o,isRobot:l}},async getInfo(){let{browser:e,browserVersion:n,isWebview:i,isRobot:a}=this.parse();for(let i of te)await i.is()&&(e=i.name,n=await i.version());let s=r;var o,l;("Chrome"==e&&s.match(/\S+Browser/)&&(e=s.match(/\S+Browser/)[0]),"Chrome"==e&&s.match(/\S+Browser/))&&(n=(null===(o=s.replace(/^.*Browser\/([\d.]+).*$/))||void 0===o?void 0:o[1])||"");n||(n=(null===(l=s.match(/Version\/([\d.]+)/))||void 0===l?void 0:l[1])||"");return{browser:e,browserVersion:n,isWebview:i,isRobot:a,userAgent:s}}};let ue=[{name:"WebKit",parse:(e=r)=>({is:e.includes("AppleWebKit")})},{name:"Trident",parse:(e=r)=>({is:e.includes("Trident")||e.includes("NET CLR")})},{name:"Gecko",parse:(e=r)=>({is:e.includes("Gecko/")})},{name:"Servo",parse:(e=r)=>({is:e.includes("Servo/")})},{name:"Presto",parse:(e=r)=>({is:e.includes("Presto")})},{name:"KHTML",parse:(e=r)=>({is:e.includes("KHTML/")})}];ue.forEach((e=>{e.is||(e.is=async function(){return e.parse().is})}));var ve={name:"engine",parse(e=r){let n="";return ue.forEach((function(i){i.parse(e).is&&(n=i.name)})),o.parse(e).is?n=parseInt(o.parse(e).version)>75?"Blink":"EdgeHTML":s.parse(e).is&&parseInt(s.parse(e).version)>27&&(n="Blink"),{engine:n}},async getInfo(){return this.parse()}},ce={name:"Windows",parse(e=r){var n;let i=(null===(n=e.match(/^Mozilla\/\d.0 \(Windows NT ([\d.]+)[;)].*$/))||void 0===n?void 0:n[1])||"";return{is:e.includes("Windows"),version:{"10.0":"10",6.4:"10 Technical Preview",6.3:"8.1",6.2:"8",6.1:"7","6.0":"Vista",5.2:"XP 64-bit",5.1:"XP",5.01:"2000 SP1","5.0":"2000","4.0":"NT","4.90":"ME"}[i]||i}},async version(){let e=this.parse().version;return new Promise((function(n){var r;null!=i&&null!==(r=i.navigator)&&void 0!==r&&r.userAgentData?i.navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then((function(e){let r="";if("Windows"===i.navigator.userAgentData.platform){r=parseInt(e.platformVersion.split(".")[0])>=13?"11":"10"}n(r)})):n(e)}))}};let me=[ce,{name:"Linux",parse:(e=r)=>({is:e.includes("Linux")||e.includes("X11"),version:""})},{name:"macOS",parse(e=r){var n;return{is:e.includes("Macintosh"),version:(null===(n=e.match(/Mac OS X -?([\d_]+)/))||void 0===n?void 0:n[1].replace(/_/g,"."))||""}}},{name:"Android",parse(e=r){var n;return{is:e.includes("Android")||e.includes("Adr"),version:(null===(n=e.match(/Android ([\d.]+);/))||void 0===n?void 0:n[1])||""}}},{name:"HarmonyOS",parse(e=r){var n;let i=+(null===(n=e.match(/HMSCore (\d+.\d+)/))||void 0===n?void 0:n[1])||0,a="";return i>=6.1?a="4.0":i>=6?a="3.0":i>=5?a="2.0":i>=4&&(a="1.0"),{is:e.includes("HarmonyOS"),version:a}}},{name:"Ubuntu",parse:(e=r)=>({is:e.includes("Ubuntu"),version:""})},{name:"FreeBSD",parse:(e=r)=>({is:e.includes("FreeBSD"),version:""})},{name:"Debian",parse(e=r){var n;return{is:e.includes("Debian"),version:(null===(n=e.match(/Debian\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"iOS",parse(e=r){var n;return{is:e.includes("like Mac OS X"),version:(null===(n=e.match(/OS ([\d_]+) like/))||void 0===n?void 0:n[1].replace(/_/g,"."))||""}}},{name:"Windows Phone",parse(e=r){var n;return{is:e.includes("IEMobile")||e.includes("Windows Phone"),version:(null===(n=e.match(/Windows Phone( OS)? ([\d.]+);/))||void 0===n?void 0:n[2])||""}}},{name:"BlackBerry",parse:(e=r)=>({is:e.includes("BlackBerry")||e.includes("RIM"),version:""})},{name:"MeeGo",parse:(e=r)=>({is:e.includes("MeeGo"),version:""})},{name:"Symbian",parse(e=r){var n;return{is:e.includes("Symbian"),version:(null===(n=e.match(/Series60\/([\d.]+)/))||void 0===n?void 0:n[1])||""}}},{name:"Chrome OS",parse(e=r){var n,i;return{is:e.includes("CrOS"),version:(null===(n=e.match(/MSIE ([\d.]+)/))||void 0===n?void 0:n[1])||(null===(i=e.match(/rv:([\d.]+)/))||void 0===i?void 0:i[1])||""}}},{name:"WebOS",parse(e=r){var n;return{is:e.includes("hpwOS"),version:(null===(n=e.match(/hpwOS\/([\d.]+);/))||void 0===n?void 0:n[1])||""}}}];me.forEach((e=>{e.is||(e.is=async function(){return e.parse().is}),e.version||(e.version=async function(){return e.parse().version})}));var pe={name:"system",parse(e=r){let n="",i="";me.forEach((function(r){r.parse(e).is&&(n=r.name,i=r.parse(e).version)}));let a="";e.match(/(Win64|x64|WOW64|x86_64)/i)?a="Win64":e.match(/(Win32|x86|WOW32)/i)?a="Win32":e.match(/aarch64|arm64/)?a="ARM64":e.match(/arm32/)&&(a="ARM32");let s="",o=e+"|"+a;s=o.match(/armv?\d+/i)||o.match(/aarch64/)?"arm":o.match(/loongarch64/)?"loongarch":"x86";let l=e.match(/Win64|x64|WOW64|x86_64|aarch64|arm64|loongarch64/i)?64:32;return{system:n,systemVersion:i,platform:a,architecture:s,bitness:l}},async getInfo(){var e,n;let{system:r,systemVersion:a,platform:s,architecture:o,bitness:l}=this.parse();for(let e of me)await e.is()&&(r=e.name,a=await e.version());var t,d;(null!=i&&null!==(e=i.navigator)&&void 0!==e&&e.platform&&(s=i.navigator.platform),null!=i&&null!==(n=i.navigator)&&void 0!==n&&n.userAgentData)&&(o=await(null===(t=i.navigator.userAgentData)||void 0===t?void 0:t.getHighEntropyValues(["architecture"]).then((e=>e.architecture||o))),l=await(null===(d=i.navigator.userAgentData)||void 0===d?void 0:d.getHighEntropyValues(["bitness"]).then((e=>+e.bitness||l))));return{system:r,systemVersion:a,platform:s,architecture:o,bitness:l}}};let he=[{name:"Mobile",parse:(e=r)=>({is:e.includes("Mobi")||e.includes("iPh")||e.includes("480")})},{name:"Tablet",parse:(e=r)=>({is:e.includes("Tablet")||e.includes("Pad")||e.includes("Nexus 7")}),async is(){return this.parse().is||"MacIntel"===(null==i?void 0:i.navigator.platform)&&(null==i?void 0:i.navigator.maxTouchPoints)>1}}];he.forEach((e=>{e.is||(e.is=async function(){return e.parse().is})}));var ge={name:"device",parse(e=r){let n="Desktop";return he.forEach((function(i){i.parse(e).is&&(n=i.name)})),{device:n}},async getInfo(){return this.parse()}},we={name:"gpu",parse:()=>({}),async getInfo(){let e="",n="";if(null!=i&&i.document){let s=i.document.createElement("canvas").getContext("experimental-webgl");if(s){var r,a;let i=s.getExtension("WEBGL_debug_renderer_info"),o=s.getParameter(i.UNMASKED_RENDERER_WEBGL);e=(null===(r=o.match(/ANGLE \((.+?),/))||void 0===r?void 0:r[1])||"",n=(null===(a=o.match(/, (.+?) (\(|vs_)/))||void 0===a?void 0:a[1])||""}}return{gpu:e,gpuModel:n}}};const fe=/\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/,be=/\b(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}\b/i;let Be=globalThis.RTCPeerConnection||globalThis.mozRTCPeerConnection||globalThis.webkitRTCPeerConnection;var ye={name:"network",parse:()=>({}),async getInfo(){var e,n;let r="unknown",a=null==i||null===(e=i.navigator)||void 0===e?void 0:e.connection;return a&&(r=a.type||a.effectiveType,"2"!=r&&"unknown"!=r||(r="wifi")),{network:r,isOnline:(null==i||null===(n=i.navigator)||void 0===n?void 0:n.onLine)||!1,ip:await(async()=>{const e=new Set,n=n=>{var i;const r=null==n||null===(i=n.candidate)||void 0===i?void 0:i.candidate;if(r)for(const n of[fe,be]){const i=r.match(n);i&&e.add(i[0])}};return new Promise((function(i,r){const a=new Be({iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun.services.mozilla.com"}]});a.addEventListener("icecandidate",n),a.createDataChannel(""),a.createOffer().then((e=>a.setLocalDescription(e)),r);let s=20,o=null,l=function(){try{a.removeEventListener("icecandidate",n),a.close()}catch{}o&&clearInterval(o)};o=setInterval((function(){let n=[...e];n.length?(l(),i(n[0])):s?s--:(l(),i(""))}),100)}))})()}}},Se={name:"battery",parse:()=>({}),async getInfo(){var e;let n=!0,r=1;return null!=i&&null!==(e=i.navigator)&&void 0!==e&&e.getBattery&&(n=await i.navigator.getBattery().then((e=>null==e?void 0:e.charging)),r=await i.navigator.getBattery().then((e=>+(null==e?void 0:e.level)||-1))),{isCharging:n,battery:r}}};var Ee={name:"screen",parse:()=>({}),async getInfo(){var e,n,r,a;return{screenWidth:(null==i||null===(e=i.screen)||void 0===e?void 0:e.width)||0,screenHeight:(null==i||null===(n=i.screen)||void 0===n?void 0:n.height)||0,clientWidth:(null==i||null===(r=i.document)||void 0===r||null===(r=r.documentElement)||void 0===r?void 0:r.clientWidth)||0,clientHeight:(null==i||null===(a=i.document)||void 0===a||null===(a=a.documentElement)||void 0===a?void 0:a.clientHeight)||0,screenFPS:await async function(){return new Promise((function(e){let n=0,i=1,r=[],a=function(s){if(n>0)if(i<12)r.push(s-n),n=s,i++,requestAnimationFrame(a);else{r.sort(),r=r.slice(1,11);let n=r.reduce(((e,n)=>e+n));const i=10*Math.round(1e4/n/10);e(i)}else n=s,requestAnimationFrame(a)};requestAnimationFrame(a)}))}()}}},Ae={name:"language",parse:()=>({}),async getInfo(){var e;let n=null==i||null===(e=i.navigator)||void 0===e?void 0:e.language;if("string"!=typeof n)return"Unknown language";let r=n.split("-");return r[1]&&(r[1]=r[1].toUpperCase()),{language:r.join("_")}}},Ie={name:"timezone",parse:()=>({}),async getInfo(){var e;return{timezone:null===(e=Intl)||void 0===e||null===(e=e.DateTimeFormat())||void 0===e||null===(e=e.resolvedOptions())||void 0===e?void 0:e.timeZone}}},Te={parse(e){let n={};return[de,ve,pe,ge].forEach((i=>{n=Object.assign(n,i.parse(e))})),n},async getInfo(e=["browser","engine","system","device","gpu","network","battery","screen","language","timezone"]){let n={},i=[de,ve,pe,ge,we,ye,Se,Ee,Ae,Ie].filter((n=>e.includes(n.name)));for(let e of i)n=Object.assign(n,await e.getInfo());return n}};export{Te as default}; diff --git a/package-lock.json b/package-lock.json index 57756bfa..9a0957b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "browser-tool", - "version": "1.2.8", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "browser-tool", - "version": "1.2.8", + "version": "1.3.0", "license": "MIT", "devDependencies": { "@babel/core": "^7.24.7", @@ -24,6 +24,7 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -37,6 +38,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -46,30 +48,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -85,12 +89,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -104,6 +109,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -116,6 +122,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -125,14 +132,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -141,19 +149,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", - "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -164,10 +171,11 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", - "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", @@ -185,6 +193,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -196,51 +205,15 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", - "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -251,6 +224,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -260,16 +234,16 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -283,6 +257,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -291,23 +266,25 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", - "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-wrap-function": "^7.24.7" + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -317,14 +294,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.7", - "@babel/helper-optimise-call-expression": "^7.24.7" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -338,6 +316,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -351,6 +330,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -359,23 +339,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -385,42 +354,45 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", - "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.24.7", - "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -431,6 +403,7 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -442,10 +415,14 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -454,13 +431,30 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", - "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -470,12 +464,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", - "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -489,6 +484,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", @@ -502,13 +498,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", - "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -522,6 +519,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -534,6 +532,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -546,6 +545,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -558,6 +558,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -573,6 +574,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -585,6 +587,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -597,6 +600,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -612,6 +616,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -627,6 +632,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -639,6 +645,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -651,6 +658,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -663,6 +671,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -675,6 +684,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -687,6 +697,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -699,6 +710,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -711,6 +723,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -723,6 +736,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -738,6 +752,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -753,6 +768,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -769,6 +785,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -780,15 +797,16 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", - "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -802,6 +820,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -819,6 +838,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -830,12 +850,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", - "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -849,6 +870,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -865,6 +887,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -878,18 +901,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", - "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", "globals": "^11.1.0" }, "engines": { @@ -904,6 +926,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/template": "^7.24.7" @@ -916,12 +939,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", - "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -935,6 +959,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -951,6 +976,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -961,11 +987,29 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -982,6 +1026,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -998,6 +1043,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1014,6 +1060,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" @@ -1026,14 +1073,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", - "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1047,6 +1095,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1059,12 +1108,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", - "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1078,6 +1128,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1094,6 +1145,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1109,6 +1161,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1121,13 +1174,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", - "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-simple-access": "^7.24.7" }, "engines": { @@ -1138,15 +1192,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", - "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1160,6 +1215,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1176,6 +1232,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1192,6 +1249,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1207,6 +1265,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1223,6 +1282,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1239,6 +1299,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -1257,6 +1318,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-replace-supers": "^7.24.7" @@ -1273,6 +1335,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1285,12 +1348,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", - "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1306,6 +1370,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1321,6 +1386,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1337,6 +1403,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-create-class-features-plugin": "^7.24.7", @@ -1355,6 +1422,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1370,6 +1438,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" @@ -1386,6 +1455,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1401,6 +1471,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -1421,6 +1492,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1436,6 +1508,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" @@ -1452,6 +1525,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1467,6 +1541,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1478,12 +1553,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", - "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1497,6 +1573,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1512,6 +1589,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1528,6 +1606,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1544,6 +1623,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1556,19 +1636,21 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1589,29 +1671,30 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", "@babel/plugin-transform-async-to-generator": "^7.24.7", "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", "@babel/plugin-transform-class-properties": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", "@babel/plugin-transform-dynamic-import": "^7.24.7", "@babel/plugin-transform-exponentiation-operator": "^7.24.7", "@babel/plugin-transform-export-namespace-from": "^7.24.7", "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", - "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", "@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", "@babel/plugin-transform-new-target": "^7.24.7", @@ -1620,7 +1703,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-object-super": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", @@ -1631,7 +1714,7 @@ "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", @@ -1640,7 +1723,7 @@ "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -1655,6 +1738,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1668,13 +1752,15 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1683,33 +1769,32 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1718,12 +1803,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -1736,6 +1822,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1750,6 +1837,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1759,6 +1847,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1768,22 +1857,25 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1794,6 +1886,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz", "integrity": "sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@rollup/pluginutils": "^5.0.1" @@ -1820,6 +1913,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -1845,6 +1939,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, + "license": "MIT", "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", @@ -1867,6 +1962,7 @@ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1888,19 +1984,22 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1913,6 +2012,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -1925,6 +2025,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.2", @@ -1939,6 +2040,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.1", "core-js-compat": "^3.36.1" @@ -1952,6 +2054,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.2" }, @@ -1960,9 +2063,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -1978,11 +2081,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -1995,13 +2099,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2010,9 +2116,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001633", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001633.tgz", - "integrity": "sha512-6sT0yf/z5jqf8tISAgpJDrmwOpLsrpnyCdD/lOZKvKkkJK4Dn0X5i7KF7THEZhOq+30bmhwBlNEaqPUiHiKtZg==", + "version": "1.0.30001645", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001645.tgz", + "integrity": "sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==", "dev": true, "funding": [ { @@ -2027,13 +2133,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2048,6 +2156,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -2056,25 +2165,29 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.37.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.23.0" }, @@ -2084,10 +2197,11 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -2105,21 +2219,24 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.802", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.802.tgz", - "integrity": "sha512-TnTMUATbgNdPXVSHsxvNVSG0uEd6cSZsANjm8c9HbvflZVVn1yTRcmVXYT1Ma95/ssB/Dcd30AHweH2TE+dNpA==", - "dev": true + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true, + "license": "ISC" }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2129,6 +2246,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2137,13 +2255,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -2154,6 +2274,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2167,6 +2288,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2176,6 +2298,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2185,6 +2308,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2194,6 +2318,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2203,6 +2328,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2215,6 +2341,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -2226,12 +2353,16 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2241,19 +2372,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -2266,6 +2400,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -2277,13 +2412,15 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -2292,31 +2429,36 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -2329,6 +2471,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -2337,13 +2480,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -2355,13 +2500,15 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -2371,6 +2518,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -2388,6 +2536,7 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -2409,6 +2558,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -2426,6 +2576,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -2455,13 +2606,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2471,6 +2624,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -2479,13 +2633,15 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -2495,6 +2651,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -2505,6 +2662,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2517,6 +2675,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2525,10 +2684,11 @@ } }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -2547,6 +2707,7 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2556,6 +2717,7 @@ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2565,6 +2727,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -2578,6 +2741,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2587,14 +2751,15 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -2610,6 +2775,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" @@ -2625,7 +2791,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" } } } diff --git a/package.json b/package.json index 67c097eb..ce244979 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "browser-tool", - "version": "1.2.8", + "version": "1.3.0", "description": "Useragent analysis tool.", "author": "HaoLe Zheng", "license": "MIT", diff --git a/src/browser.js b/src/browser.js index 91431a5f..f723c241 100644 --- a/src/browser.js +++ b/src/browser.js @@ -1,56 +1,44 @@ import browserLoader from './module/browser-loader.js'; -import deviceLoader from './module/device-loader.js'; import engineLoader from './module/engine-loader.js'; import systemLoader from './module/system-loader.js'; +import deviceLoader from './module/device-loader.js'; import gpuLoader from './module/gpu-loader.js'; -import languageLoader from './module/language-loader.js'; import networkLoader from './module/network-loader.js'; -import batterykLoader from './module/battery-loader.js'; -import otherLoader from './module/other-loader.js'; -import globalObject from './module/runtime/globalThis.js'; - -import wrapperPromise from './module/method/wrapperPromise.js'; - -let getInfo = function(userAgent,isAsync = false){ - let info = {}; - info.userAgent = userAgent || globalObject?.navigator?.userAgent||''; - [ - browserLoader, - deviceLoader, - engineLoader, - systemLoader, - gpuLoader, - languageLoader, - networkLoader, - batterykLoader, - otherLoader - ].forEach(loader=>loader(info,isAsync)); - return info; -} +import batteryLoader from './module/battery-loader.js'; +import screenLoader from './module/screen-loader.js'; +import languageLoader from './module/language-loader.js'; +import timezoneLoader from './module/timezone-loader.js'; -// 旧版同步获取 -function browser(userAgent){ - let info = getInfo(userAgent); - for(let key in info){ - if(typeof info[key]=='object'){ - info[key] = ''; +export default { + parse(ua){ + let data = {}; + [ + browserLoader, + engineLoader, + systemLoader, + deviceLoader, + ].forEach(loader=>{ + data = Object.assign(data,loader.parse(ua)); + }); + return data; + }, + async getInfo(list = ['browser','engine','system','device','gpu','network','battery','screen','language','timezone']){ + let data = {}; + let loaderList = [ + browserLoader, + engineLoader, + systemLoader, + deviceLoader, + gpuLoader, + networkLoader, + batteryLoader, + screenLoader, + languageLoader, + timezoneLoader + ].filter(loader=>list.includes(loader.name)); + for(let loader of loaderList){ + data = Object.assign(data,await loader.getInfo()); } + return data; } - return info; -} - -// 新版异步获取 -browser.getInfo = function(userAgent){ - let info = getInfo(userAgent,true); - let keys = Object.keys(info); - let all_promise = wrapperPromise(Object.values(info)); - return Promise.all(all_promise).then(list=>{ - let result = {}; - list.forEach(function(value,index){ - result[keys[index]] = value; - }); - return result; - }); }; - -export default browser; diff --git a/src/module/battery-loader.js b/src/module/battery-loader.js index 1cacca87..b8428221 100644 --- a/src/module/battery-loader.js +++ b/src/module/battery-loader.js @@ -1,15 +1,25 @@ -import _globalThis from './runtime/globalThis.js'; +import globalThis from './runtime/globalThis.js'; -export default function(_){ - if(_globalThis?.navigator?.getBattery){ - _.isCharging = _globalThis.navigator.getBattery().then((battery) => { - return battery?.charging; - }); - _.battery = _globalThis.navigator.getBattery().then((battery) => { - return +battery?.level||-1; - }); - }else{ - _.isCharging = true; - _.battery = 1; +export default { + name:'battery', + parse(){ + return {}; + }, + async getInfo(){ + let isCharging = true; + let battery = 1; + if(globalThis?.navigator?.getBattery){ + isCharging = await globalThis.navigator.getBattery().then((battery) => { + return battery?.charging; + }); + battery = await globalThis.navigator.getBattery().then((battery) => { + return +battery?.level||-1; + }); + } + + return { + isCharging, + battery + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser-loader.js b/src/module/browser-loader.js index 2087f739..2c96a7df 100644 --- a/src/module/browser-loader.js +++ b/src/module/browser-loader.js @@ -69,62 +69,87 @@ import _YisouSpider from './browser/YisouSpider.js'; import _YodaoBot from './browser/YodaoBot.js'; import _YandexBot from './browser/YandexBot.js'; -import wrapperPromise from './method/wrapperPromise.js'; +import userAgent from './runtime/userAgent.js'; -export default function(_,isAsync = false){ - let ua = _.userAgent; - let browserList = [_Safari, _Chrome, _Edge, _IE, _Firefox, _Firefox_Focus, _Chromium, _Opera, _Opera_GX, _Vivaldi, _Yandex, _Brave, _Arora, _Lunascape, _QupZilla, _Coc_Coc, _Kindle, _Iceweasel, _Konqueror, _Iceape, _SeaMonkey, _Epiphany, _Huawei, _OPPO, _Vivo, _Xiaomi, _Meizu, _OnePlus, _Samsung, _360, _360EE, _360SE, _360EE_macOS, _360AI, _360AI_macOS, _360ENT, _UC, _QQBrowser, _QQ, _Baidu, _Maxthon, _Sogou, _Liebao, _2345Explorer, _115Browser, _TheWorld, _Quark, _Qiyu, _Lenovo, _Wechat, _WechatWork, _Taobao, _Alipay, _Weibo, _Douban, _Suning, _iQIYI, _DingTalk, _Douyin, _Toutiao, _Googlebot, _Baiduspider, _Sogouspider, _Bingbot, _360Spider, _Bytespider, _YisouSpider, _YodaoBot, _YandexBot]; - - _.browser = ''; - _.browserVersion = ''; +let loaderList = [_Safari, _Chrome, _Edge, _IE, _Firefox, _Firefox_Focus, _Chromium, _Opera, _Opera_GX, _Vivaldi, _Yandex, _Brave, _Arora, _Lunascape, _QupZilla, _Coc_Coc, _Kindle, _Iceweasel, _Konqueror, _Iceape, _SeaMonkey, _Epiphany, _Huawei, _OPPO, _Vivo, _Xiaomi, _Meizu, _OnePlus, _Samsung, _360, _360EE, _360SE, _360EE_macOS, _360AI, _360AI_macOS, _360ENT, _UC, _QQBrowser, _QQ, _Baidu, _Maxthon, _Sogou, _Liebao, _2345Explorer, _115Browser, _TheWorld, _Quark, _Qiyu, _Lenovo, _Wechat, _WechatWork, _Taobao, _Alipay, _Weibo, _Douban, _Suning, _iQIYI, _DingTalk, _Douyin, _Toutiao, _Googlebot, _Baiduspider, _Sogouspider, _Bingbot, _360Spider, _Bytespider, _YisouSpider, _YodaoBot, _YandexBot]; +loaderList.forEach(item=>{ + if(!item.is){ + item.is = async function(){ + return item.parse().is; + }; + } + if(!item.version){ + item.version = async function(){ + return item.parse().version; + }; + } +}); - if(isAsync){ - let all_promise = wrapperPromise(browserList.map(item=>item.match(ua,isAsync))); - _.browser = Promise.all(all_promise).then(function(list){ - let browser = ''; - list.forEach(function(isMatch,index){ - if(isMatch){ - browser = browserList[index].name; - } - }); - // 修正 - if(browser == 'Chrome'&&ua.match(/\S+Browser/)){ - browser = ua.match(/\S+Browser/)[0]; +export default { + name:'browser', + parse(ua = userAgent){ + let browser = ''; + let browserVersion = ''; + loaderList.forEach(function(item){ + if(item.parse(ua).is){ + browser = item.name; + browserVersion = item.parse(ua).version; } - return browser; }); - _.browserVersion = Promise.all(all_promise).then(function(list){ - let browser = ''; - let version = ''; - list.forEach(function(isMatch,index){ - if(isMatch){ - browser = browserList[index].name; - version = browserList[index].version(ua); - } - }); - // 修正 - if(browser == 'Chrome'&&ua.match(/\S+Browser/)){ - version = ua.replace(/^.*Browser\/([\d.]+).*$/)?.[1]||''; - } - if(!version){ - version = ua.match(/Version\/([\d.]+)/)?.[1]||''; - } - return version; - }); - }else{ - browserList.forEach(function(item){ - if(item.match(ua,isAsync)){ - _.browser = item.name; - _.browserVersion = item.version(ua,isAsync); + + // 修正 + if(browser == 'Chrome'&&ua.match(/\S+Browser/)){ + browser = ua.match(/\S+Browser/)[0]; + } + if(browser == 'Chrome'&&ua.match(/\S+Browser/)){ + browserVersion = ua.replace(/^.*Browser\/([\d.]+).*$/)?.[1]||''; + } + if(!browserVersion){ + browserVersion = ua.match(/Version\/([\d.]+)/)?.[1]||''; + } + + let isWebview = ua.includes('; wv)'); + let isRobot = ['Googlebot', 'Baiduspider', 'Sogouspider', 'Bingbot', '360Spider', 'Bytespider', 'YandexBot'].includes(browser); + + return { + browser, + browserVersion, + isWebview, + isRobot + }; + }, + async getInfo(){ + let { + browser, + browserVersion, + isWebview, + isRobot + } = this.parse(); + for(let loader of loaderList){ + if(await loader.is()){ + browser = loader.name; + browserVersion = await loader.version(); } - }); + } + // 修正 - if(_.browser == 'Chrome'&&ua.match(/\S+Browser/)){ - _.browser = ua.match(/\S+Browser/)[0]; - _.browserVersion = ua.replace(/^.*Browser\/([\d.]+).*$/)?.[1]||''; + let ua = userAgent; + if(browser == 'Chrome'&&ua.match(/\S+Browser/)){ + browser = ua.match(/\S+Browser/)[0]; + } + if(browser == 'Chrome'&&ua.match(/\S+Browser/)){ + browserVersion = ua.replace(/^.*Browser\/([\d.]+).*$/)?.[1]||''; } - if(!_.browserVersion){ - _.browserVersion = ua.match(/Version\/([\d.]+)/)?.[1]||''; + if(!browserVersion){ + browserVersion = ua.match(/Version\/([\d.]+)/)?.[1]||''; } + + return { + browser, + browserVersion, + isWebview, + isRobot, + userAgent:ua + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/115Browser.js b/src/module/browser/115Browser.js index 0535e66e..9a6f2259 100644 --- a/src/module/browser/115Browser.js +++ b/src/module/browser/115Browser.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'115Browser', - match(ua){ - return ua.includes('115Browser'); - }, - version(ua){ - return ua.match(/115Browser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('115Browser'), + version:ua.match(/115Browser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/2345Explorer.js b/src/module/browser/2345Explorer.js index f5691d2f..f191306f 100644 --- a/src/module/browser/2345Explorer.js +++ b/src/module/browser/2345Explorer.js @@ -1,25 +1,31 @@ import _Chrome from './Chrome.js'; -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'2345Explorer', - match(ua){ - let isMatch = _globalThis?.chrome&&(_globalThis?.chrome?.adblock2345||_globalThis?.chrome?.common2345); - return ua.includes('2345Explorer') - ||ua.includes('Mb2345Browser') - ||ua.includes('2345chrome') - ||isMatch; - }, - version(ua){ + parse(ua = userAgent){ let hash = { '109':'13.0', '69':'10.0', '55':'9.9' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return ua.match(/2345Explorer\/([\d.]+)/)?.[1] - ||ua.match(/Mb2345Browser\/([\d.]+)/)?.[1] - ||hash[chrome_version] - ||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('2345Explorer') + ||ua.includes('Mb2345Browser') + ||ua.includes('2345chrome'), + version:ua.match(/2345Explorer\/([\d.]+)/)?.[1] + ||ua.match(/Mb2345Browser\/([\d.]+)/)?.[1] + ||hash[chrome_version] + ||'' + }; + }, + async is(){ + let isMatch = this.parse().is; + if(!isMatch){ + isMatch = globalThis?.chrome&&(globalThis?.chrome?.adblock2345||globalThis?.chrome?.common2345); + } + return isMatch; } -}; +} \ No newline at end of file diff --git a/src/module/browser/360.js b/src/module/browser/360.js index 1553a4ac..d60e5d3b 100644 --- a/src/module/browser/360.js +++ b/src/module/browser/360.js @@ -1,15 +1,27 @@ +import _Chrome from './Chrome.js'; import getMime from '../method/getMime.js'; -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name: '360', - match(ua) { - let isMatch = false; - if (_globalThis?.chrome) { - let chrome_version = ua.replace(/^.*Chrome\/([\d]+).*$/, '$1'); + parse(ua = userAgent){ + return { + is:ua.includes('QihooBrowser') + ||ua.includes('QHBrowser') + ||ua.includes(' 360 '), + version:ua.match(/QihooBrowser(HD)?\/([\d.]+)/)?.[1] + ||ua.match(/Browser \(v([\d.]+)/)?.[1] + ||'' + }; + }, + async is() { + let isMatch = this.parse().is; + if (globalThis?.chrome) { + let chrome_version = parseInt(_Chrome.parse().version); if (getMime("type", "application/360softmgrplugin") || getMime("type", "application/mozilla-npqihooquicklogin") || getMime("type", "application/npjlgplayer3-chrome-jlp")) { isMatch = true; - } else if (chrome_version > 36 && _globalThis?.showModalDialog) { + } else if (chrome_version > 36 && globalThis?.showModalDialog) { isMatch = true; } else if (chrome_version > 45) { isMatch = getMime("type", "application/vnd.chromium.remoting-viewer"); @@ -18,14 +30,6 @@ export default { } } } - return ua.includes('QihooBrowser') - ||ua.includes('QHBrowser') - ||ua.includes(' 360 ') - ||isMatch; - }, - version(ua) { - return ua.match(/QihooBrowser(HD)?\/([\d.]+)/)?.[1] - ||ua.match(/Browser \(v([\d.]+)/)?.[1] - ||''; + return isMatch; } -}; +} \ No newline at end of file diff --git a/src/module/browser/360AI.js b/src/module/browser/360AI.js index 05074e2b..6f22ffdb 100644 --- a/src/module/browser/360AI.js +++ b/src/module/browser/360AI.js @@ -1,24 +1,28 @@ -import getMime from '../method/getMime.js'; import _Chrome from './Chrome.js'; import _360 from './360.js'; -import _globalThis from '../runtime/globalThis.js'; +import getMime from '../method/getMime.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'360AI', - match(ua){ - let isMatch = false; - if(_360.match(ua)){ - if(_globalThis?.navigator?.userAgentData?.brands.filter(item=>item.brand=='Not.A/Brand').length&&!getMime("type", "application/gameplugin")){ - isMatch = true; - } - } - return ua.includes('360SEAI')||isMatch; - }, - version(ua){ + parse(ua = userAgent){ let hash = { '114':'1.0' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return hash[chrome_version]||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('360SEAI'), + version:hash[chrome_version]||'' + }; + }, + async is(){ + let isMatch = this.parse().is; + if(await _360.is()){ + if(globalThis?.navigator?.userAgentData?.brands.filter(item=>item.brand=='Not.A/Brand').length&&!getMime("type", "application/gameplugin")){ + isMatch = true; + } + } + return isMatch; } -}; +} \ No newline at end of file diff --git a/src/module/browser/360AI_macOS.js b/src/module/browser/360AI_macOS.js index d8c32744..9a217252 100644 --- a/src/module/browser/360AI_macOS.js +++ b/src/module/browser/360AI_macOS.js @@ -1,11 +1,11 @@ -import _Chrome from './Chrome.js'; +import userAgent from '../runtime/userAgent.js'; export default { name:'360AI', - match(ua){ - return ua.includes('360EEAI'); - }, - version(ua){ - return ua.match(/360EE\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('360EEAI'), + version:ua.match(/360EE\/([\d.]+)/)?.[1]||'' + }; } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/browser/360EE.js b/src/module/browser/360EE.js index b48ff566..a5c35849 100644 --- a/src/module/browser/360EE.js +++ b/src/module/browser/360EE.js @@ -1,22 +1,10 @@ -import getMime from '../method/getMime.js'; import _Chrome from './Chrome.js'; import _360 from './360.js'; -import _globalThis from '../runtime/globalThis.js'; +import getMime from '../method/getMime.js'; export default { name:'360EE', - match(ua){ - let isMatch = false; - if(getMime('type','application/cenroll.cenroll.version.1')||getMime('type','application/hwepass2001.installepass2001')){ - isMatch = true; - }else if(_360.match(ua)){ - if(_globalThis?.navigator?.userAgentData?.brands.find(item=>item.brand=='Not A(Brand'||item.brand=='Not?A_Brand')){ - isMatch = true; - } - } - return ua.includes('360EE')||isMatch; - }, - version(ua){ + parse(ua = globalThis?.navigator?.userAgent){ let hash = { '122':'22.3', // 360极速X '119':'22.0', // 360极速X @@ -30,9 +18,23 @@ export default { '50':'8.7', '30':'7.5' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return ua.match(/Browser \(v([\d.]+)/)?.[1] - ||hash[chrome_version] - ||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('360EE'), + version:ua.match(/Browser \(v([\d.]+)/)?.[1] + ||hash[chrome_version] + ||'' + }; + }, + async is(){ + let isMatch = this.parse().is; + if(getMime('type','application/cenroll.cenroll.version.1')||getMime('type','application/hwepass2001.installepass2001')){ + isMatch = true; + }else if(await _360.is()){ + if(globalThis?.navigator?.userAgentData?.brands.find(item=>item.brand=='Not A(Brand'||item.brand=='Not?A_Brand')){ + isMatch = true; + } + } + return isMatch; } -}; +} \ No newline at end of file diff --git a/src/module/browser/360EE_macOS.js b/src/module/browser/360EE_macOS.js index 9190424b..329020b1 100644 --- a/src/module/browser/360EE_macOS.js +++ b/src/module/browser/360EE_macOS.js @@ -1,14 +1,14 @@ -import _globalThis from '../runtime/globalThis.js'; +import globalThis from '../runtime/globalThis.js'; const GetDeviceInfo = () => { return new Promise((resolve) => { const randomCv = `cv_${new Date().getTime() % 100000}${Math.floor(Math.random()) * 100}` const params = { key: 'GetDeviceInfo', data: {}, callback: randomCv } const Data = JSON.stringify(params) - if(_globalThis?.webkit?.messageHandlers){ - _globalThis.webkit.messageHandlers['excuteCmd'].postMessage(Data) - _globalThis[randomCv] = function (response) { - delete _globalThis[randomCv]; + if(globalThis?.webkit?.messageHandlers){ + globalThis.webkit.messageHandlers['excuteCmd'].postMessage(Data) + globalThis[randomCv] = function (response) { + delete globalThis[randomCv]; resolve(JSON.parse(response||'{}')); } }else{ @@ -19,17 +19,20 @@ const GetDeviceInfo = () => { export default { name: '360EE', - match(ua,isAsync=false) { - if(isAsync){ - return GetDeviceInfo().then(function(response){ - return response?.pid=='360csexm'||false; - }); - } - return false; + parse(){ + return { + is:false, + version:'' + }; + }, + async is() { + return GetDeviceInfo().then(function(response){ + return response?.pid=='360csexm'||false; + }); }, - version(ua) { + async version() { return GetDeviceInfo().then(function(response){ return response?.module_version||''; }); } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/browser/360ENT.js b/src/module/browser/360ENT.js index e5e8bfa3..f328ad89 100644 --- a/src/module/browser/360ENT.js +++ b/src/module/browser/360ENT.js @@ -1,11 +1,9 @@ import _Chrome from './Chrome.js'; +import userAgent from '../runtime/userAgent.js'; export default { name:'360ENT', - match(ua){ - return ua.includes('360ENT'); - }, - version(ua){ + parse(ua = userAgent){ let hash = { '86':'13.0', '78':'12.0', @@ -15,7 +13,12 @@ export default { '50':'8.7', '30':'7.5' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return hash[chrome_version]||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('360ENT'), + version:ua.match(/Browser \(v([\d.]+)/)?.[1] + ||hash[chrome_version] + ||'' + }; } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/browser/360SE.js b/src/module/browser/360SE.js index a78b91ab..306982d0 100644 --- a/src/module/browser/360SE.js +++ b/src/module/browser/360SE.js @@ -1,53 +1,12 @@ -import getMime from '../method/getMime.js'; import _Chrome from './Chrome.js'; import _360 from './360.js'; -import _globalThis from '../runtime/globalThis.js'; +import getMime from '../method/getMime.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'360SE', - match(ua,isAsync=false){ - let isMatch = false; - if(_360.match(ua)){ - if(getMime("type", "application/gameplugin")){ - isMatch = true; - }else if(_globalThis?.navigator?.userAgentData?.brands.filter(item=>item.brand=='Not.A/Brand').length){ - isMatch = true; - } - } - if(!isMatch&&isAsync){ - return new Promise(function(resolve){ - fetch('chrome-extension://fjbbmgamncjadhlpmffehlmmkdnkiadk/css/content.css').then(function(){ - resolve(true); - }).catch(function(){ - resolve(false); - }); - }); - // if(!document?.querySelector('#ai-assist-root')){ - // return new Promise(function(resolve){ - // let hander = setTimeout(function(){ - // resolve(false); - // },1500); - // const observer = new MutationObserver(mutations => { - // mutations.forEach(mutation => { - // if (mutation.type === 'childList') { - // mutation.addedNodes.forEach(function($item){ - // if($item.id=='ai-assist-root'){ - // hander&&clearTimeout(hander); - // resolve(true); - // } - // }); - // } - // }); - // }); - // observer.observe(document,{childList: true, subtree: true}); - // }); - // }else{ - // isMatch = true; - // } - } - return ua.includes('360SE')||isMatch; - }, - version(ua){ + parse(ua = userAgent){ let hash = { '122':'15.3', '114':'15.0', @@ -62,7 +21,30 @@ export default { '31':'7.0', '21':'6.3' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return hash[chrome_version]||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('360SE'), + version:hash[chrome_version]||'' + }; + }, + async is(){ + let isMatch = false; + if(await _360.is()){ + if(getMime("type", "application/gameplugin")){ + isMatch = true; + }else if(globalThis?.navigator?.userAgentData?.brands.filter(item=>item.brand=='Not.A/Brand').length){ + isMatch = true; + } + } + if(!isMatch){ + return new Promise(function(resolve){ + fetch('chrome-extension://fjbbmgamncjadhlpmffehlmmkdnkiadk/css/content.css').then(function(){ + resolve(true); + }).catch(function(){ + resolve(false); + }); + }); + } + return isMatch; } -}; +} \ No newline at end of file diff --git a/src/module/browser/360Spider.js b/src/module/browser/360Spider.js index 950af0ab..9f3068ff 100644 --- a/src/module/browser/360Spider.js +++ b/src/module/browser/360Spider.js @@ -1,9 +1,12 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'360Spider', - match(ua){ - return ua.includes('360Spider')||ua.includes('HaosouSpider'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('360Spider') + ||ua.includes('HaosouSpider'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Alipay.js b/src/module/browser/Alipay.js index 5a18c7e9..6bcbed95 100644 --- a/src/module/browser/Alipay.js +++ b/src/module/browser/Alipay.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Alipay', - match(ua){ - return ua.includes('AliApp(AP'); - }, - version(ua){ - return ua.match(/AliApp\(AP\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('AliApp(AP'), + version:ua.match(/AliApp\(AP\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Arora.js b/src/module/browser/Arora.js index 4e29c77e..22ff00b2 100644 --- a/src/module/browser/Arora.js +++ b/src/module/browser/Arora.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Arora', - match(ua){ - return ua.includes('Arora'); - }, - version(ua){ - return ua.match(/Arora\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Arora'), + version:ua.match(/Arora\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Baidu.js b/src/module/browser/Baidu.js index 1c30689d..71c5cd50 100644 --- a/src/module/browser/Baidu.js +++ b/src/module/browser/Baidu.js @@ -1,15 +1,16 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Baidu', - match(ua){ - return ua.includes('Baidu') - ||ua.includes('BIDUBrowser') - ||ua.includes('baidubrowser') - ||ua.includes('baiduboxapp') - ||ua.includes('BaiduD'); - }, - version(ua){ - return ua.match(/BIDUBrowser[\s\/]([\d.]+)/)?.[1] - ||ua.match(/baiduboxapp\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('Baidu')||ua.includes('BIDUBrowser') + ||ua.includes('baidubrowser') + ||ua.includes('baiduboxapp') + ||ua.includes('BaiduD'), + version:ua.match(/BIDUBrowser[\s\/]([\d.]+)/)?.[1] + ||ua.match(/baiduboxapp\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Baiduspider.js b/src/module/browser/Baiduspider.js index d35600cb..f3ebc012 100644 --- a/src/module/browser/Baiduspider.js +++ b/src/module/browser/Baiduspider.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Baiduspider', - match(ua){ - return ua.includes('Baiduspider'); - }, - version(ua){ - return ua.match(/Baiduspider(-render)?\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Baiduspider'), + version:ua.match(/Baiduspider(-render)?\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Bingbot.js b/src/module/browser/Bingbot.js index a281003b..24e6c084 100644 --- a/src/module/browser/Bingbot.js +++ b/src/module/browser/Bingbot.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Bingbot', - match(ua){ - return ua.includes('bingbot'); - }, - version(ua){ - return ua.match(/bingbot\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('bingbot'), + version:ua.match(/bingbot\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Brave.js b/src/module/browser/Brave.js index 531da961..f9c937df 100644 --- a/src/module/browser/Brave.js +++ b/src/module/browser/Brave.js @@ -1,11 +1,15 @@ -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'Brave', - match(ua){ - return _globalThis?.navigator?.brave?true:false; + parse(ua = userAgent){ + return { + is:ua.includes('Brave'), + version:ua.match(/Chrome\/([\d.]+)/)?.[1]||'' + }; }, - version(ua){ - return ua.match(/Chrome\/([\d.]+)/)?.[1]||''; + is: async function(){ + return this.parse().is||globalThis?.navigator?.brave?true:false } -}; +} \ No newline at end of file diff --git a/src/module/browser/Bytespider.js b/src/module/browser/Bytespider.js index e38f9ac1..126a8094 100644 --- a/src/module/browser/Bytespider.js +++ b/src/module/browser/Bytespider.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Bytespider', - match(ua){ - return ua.includes('Bytespider'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('Bytespider'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Chrome.js b/src/module/browser/Chrome.js index de101bf2..2be18fa3 100644 --- a/src/module/browser/Chrome.js +++ b/src/module/browser/Chrome.js @@ -1,11 +1,14 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Chrome', - match(ua){ - return ua.includes('Chrome')||ua.includes('CriOS'); - }, - version(ua){ - return ua.match(/Chrome\/([\d.]+)/)?.[1] - ||ua.match(/CriOS\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('Chrome') + ||ua.includes('CriOS'), + version:ua.match(/Chrome\/([\d.]+)/)?.[1] + ||ua.match(/CriOS\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Chromium.js b/src/module/browser/Chromium.js index 51197195..d404a051 100644 --- a/src/module/browser/Chromium.js +++ b/src/module/browser/Chromium.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Chromium', - match(ua){ - return ua.includes('Chromium'); - }, - version(ua){ - return ua.match(/Chromium\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Chromium'), + version:ua.match(/Chromium\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Coc Coc.js b/src/module/browser/Coc Coc.js index 31dc4d39..1d2a7559 100644 --- a/src/module/browser/Coc Coc.js +++ b/src/module/browser/Coc Coc.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Coc Coc', - match(ua){ - return ua.includes('coc_coc_browser'); - }, - version(ua){ - return ua.match(/coc_coc_browser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('coc_coc_browser'), + version:ua.match(/coc_coc_browser\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/DingTalk.js b/src/module/browser/DingTalk.js index 6c616495..ababdd00 100644 --- a/src/module/browser/DingTalk.js +++ b/src/module/browser/DingTalk.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'DingTalk', - match(ua){ - return ua.includes('DingTalk'); - }, - version(ua){ - return ua.match(/DingTalk\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('DingTalk'), + version:ua.match(/DingTalk\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Douban.js b/src/module/browser/Douban.js index 2d746961..ff5ccba9 100644 --- a/src/module/browser/Douban.js +++ b/src/module/browser/Douban.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Douban', - match(ua){ - return ua.includes('com.douban.frodo'); - }, - version(ua){ - return ua.match(/com.douban.frodo\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('com.douban.frodo'), + version:ua.match(/com.douban.frodo\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Douyin.js b/src/module/browser/Douyin.js index 85b754b0..b30280a2 100644 --- a/src/module/browser/Douyin.js +++ b/src/module/browser/Douyin.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Douyin', - match(ua){ - return ua.includes('aweme'); - }, - version(ua){ - return ua.match(/app_version\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('aweme'), + version:ua.match(/app_version\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Edge.js b/src/module/browser/Edge.js index d930a41f..66cda7cc 100644 --- a/src/module/browser/Edge.js +++ b/src/module/browser/Edge.js @@ -1,16 +1,18 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Edge', - match(ua){ - return ua.includes('Edge') - ||ua.includes('Edg/') - ||ua.includes('EdgA') - ||ua.includes('EdgiOS'); - }, - version(ua){ - return ua.match(/Edge\/([\d.]+)/)?.[1] - ||ua.match(/Edg\/([\d.]+)/)?.[1] - ||ua.match(/EdgA\/([\d.]+)/)?.[1] - ||ua.match(/EdgiOS\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is: ua.includes('Edge') + ||ua.includes('Edg/') + ||ua.includes('EdgA') + ||ua.includes('EdgiOS'), + version:ua.match(/Edge\/([\d.]+)/)?.[1] + ||ua.match(/Edg\/([\d.]+)/)?.[1] + ||ua.match(/EdgA\/([\d.]+)/)?.[1] + ||ua.match(/EdgiOS\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Epiphany.js b/src/module/browser/Epiphany.js index 3165e944..8f1c36af 100644 --- a/src/module/browser/Epiphany.js +++ b/src/module/browser/Epiphany.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Epiphany', - match(ua){ - return ua.includes('Epiphany'); - }, - version(ua){ - return ua.match(/Epiphany\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Epiphany'), + version:ua.match(/Epiphany\/([\d.]+)/)?.[1]||'', + }; } -}; +} diff --git a/src/module/browser/Firefox Focus.js b/src/module/browser/Firefox Focus.js index 25457a89..497effe9 100644 --- a/src/module/browser/Firefox Focus.js +++ b/src/module/browser/Firefox Focus.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Firefox Focus', - match(ua){ - return ua.includes('Focus'); - }, - version(ua){ - return ua.match(/Focus\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Focus'), + version:ua.match(/Focus\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Firefox.js b/src/module/browser/Firefox.js index 9b234ef1..8529cb20 100644 --- a/src/module/browser/Firefox.js +++ b/src/module/browser/Firefox.js @@ -1,12 +1,14 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Firefox', - match(ua){ - return ua.includes('Firefox') - ||ua.includes('FxiOS'); - }, - version(ua){ - return ua.match(/Firefox\/([\d.]+)/)?.[1] - ||ua.match(/FxiOS\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('Firefox') + ||ua.includes('FxiOS'), + version:ua.match(/Firefox\/([\d.]+)/)?.[1] + ||ua.match(/FxiOS\/([\d.]+)/)?.[1] + ||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Googlebot.js b/src/module/browser/Googlebot.js index 2f3bd97f..935f740e 100644 --- a/src/module/browser/Googlebot.js +++ b/src/module/browser/Googlebot.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Googlebot', - match(ua){ - return ua.includes('Googlebot'); - }, - version(ua){ - return ua.match(/Googlebot\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Googlebot'), + version:ua.match(/Googlebot\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/HONOR.js b/src/module/browser/HONOR.js index 1c418967..8f1bf082 100644 --- a/src/module/browser/HONOR.js +++ b/src/module/browser/HONOR.js @@ -1,12 +1,14 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'HONOR', - match(ua){ - return ua.includes('HONOR') - ||ua.includes('bdhonorbrowser/'); - }, - version(ua){ - return ua.match(/bdhonorbrowser\/([\d.]+)/)?.[1] - ||ua.match(/Version\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('HONOR') + ||ua.includes('bdhonorbrowser/'), + version:ua.match(/bdhonorbrowser\/([\d.]+)/)?.[1] + ||ua.match(/Version\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Huawei.js b/src/module/browser/Huawei.js index 09f506fc..58d2357a 100644 --- a/src/module/browser/Huawei.js +++ b/src/module/browser/Huawei.js @@ -1,13 +1,15 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Huawei', - match(ua){ - return ua.includes('HuaweiBrowser') - ||ua.includes('HBPC/'); - }, - version(ua){ - return ua.match(/HuaweiBrowser\/([\d.]+)/)?.[1] - ||ua.match(/HBPC\/([\d.]+)/)?.[1] - ||ua.match(/Version\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('HuaweiBrowser') + ||ua.includes('HBPC/'), + version:ua.match(/HuaweiBrowser\/([\d.]+)/)?.[1] + ||ua.match(/HBPC\/([\d.]+)/)?.[1] + ||ua.match(/Version\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/IE.js b/src/module/browser/IE.js index 391257fc..4884d595 100644 --- a/src/module/browser/IE.js +++ b/src/module/browser/IE.js @@ -1,12 +1,14 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'IE', - match(ua){ - return ua.includes('MSIE') - ||ua.includes('Trident'); - }, - version(ua){ - return ua.match(/MSIE ([\d.]+)/)?.[1] - ||ua.match(/rv:([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('MSIE') + ||ua.includes('Trident'), + version:ua.match(/MSIE ([\d.]+)/)?.[1] + ||ua.match(/rv:([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Iceape.js b/src/module/browser/Iceape.js index 255f8b40..ab49d80d 100644 --- a/src/module/browser/Iceape.js +++ b/src/module/browser/Iceape.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Iceape', - match(ua){ - return ua.includes('Iceape'); - }, - version(ua){ - return ua.match(/Iceape\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Iceape'), + version:ua.match(/Iceape\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Iceweasel.js b/src/module/browser/Iceweasel.js index 6e6776d5..cc3c627f 100644 --- a/src/module/browser/Iceweasel.js +++ b/src/module/browser/Iceweasel.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Iceweasel', - match(ua){ - return ua.includes('Iceweasel'); - }, - version(ua){ - return ua.match(/Iceweasel\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Iceweasel'), + version:ua.match(/Iceweasel\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Kindle.js b/src/module/browser/Kindle.js index 2cfeaed0..e516d164 100644 --- a/src/module/browser/Kindle.js +++ b/src/module/browser/Kindle.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Kindle', - match(ua){ - return ua.includes('Kindle')|| ua.includes('Silk/'); - }, - version(ua){ - return ua.match(/Version\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Kindle')|| ua.includes('Silk/'), + version:ua.match(/Version\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Konqueror.js b/src/module/browser/Konqueror.js index 9f69c324..da466bb1 100644 --- a/src/module/browser/Konqueror.js +++ b/src/module/browser/Konqueror.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Konqueror', - match(ua){ - return ua.includes('Konqueror'); - }, - version(ua){ - return ua.match(/Konqueror\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Konqueror'), + version:ua.match(/Konqueror\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Lenovo.js b/src/module/browser/Lenovo.js index 2fc7978c..91b60c1d 100644 --- a/src/module/browser/Lenovo.js +++ b/src/module/browser/Lenovo.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Lenovo', - match(ua){ - return ua.includes('SLBrowser'); - }, - version(ua){ - return ua.match(/SLBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('SLBrowser'), + version:ua.match(/SLBrowser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Liebao.js b/src/module/browser/Liebao.js index 86ad1f6d..dd21f81a 100644 --- a/src/module/browser/Liebao.js +++ b/src/module/browser/Liebao.js @@ -1,14 +1,10 @@ import _Chrome from './Chrome.js'; -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'Liebao', - match(ua){ - return ua.includes('LBBROWSER') - ||ua.includes('LieBaoFast') - ||_globalThis?.liebao; - }, - version(ua){ + parse(ua = userAgent){ let hash = { '112':'9.0', '79':'8.0', @@ -21,9 +17,16 @@ export default { '29':'4.5', '21':'4.0' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return ua.match(/LieBaoFast\/([\d.]+)/)?.[1] - ||hash[chrome_version] - ||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('LBBROWSER') + ||ua.includes('LieBaoFast'), + version:ua.match(/LieBaoFast\/([\d.]+)/)?.[1] + ||hash[chrome_version] + ||'' + }; + }, + is(){ + return this.parse().is||globalThis?.liebao; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Lunascape.js b/src/module/browser/Lunascape.js index 5f213462..bab2c4e1 100644 --- a/src/module/browser/Lunascape.js +++ b/src/module/browser/Lunascape.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Lunascape', - match(ua){ - return ua.includes('Lunascape'); - }, - version(ua){ - return ua.match(/Lunascape[\/\s]([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Lunascape'), + version:ua.match(/Lunascape[\/\s]([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Maxthon.js b/src/module/browser/Maxthon.js index a73efcfc..b6a2b46c 100644 --- a/src/module/browser/Maxthon.js +++ b/src/module/browser/Maxthon.js @@ -1,20 +1,24 @@ import _Chrome from './Chrome.js'; -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'Maxthon', - match(ua){ - return ua.includes('Maxthon')||_globalThis?.maxthon; - }, - version(ua){ + parse(ua = userAgent){ let hash = { '109':'7.0', '78':'6.0' }; - let chrome_version = parseInt(_Chrome.version(ua)); - return ua.match(/Maxthon\/([\d.]+)/)?.[1] - ||ua.match(/Version\/([\d.]+)/)?.[1] - ||hash[chrome_version] - ||''; + let chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('Maxthon'), + version:ua.match(/Maxthon\/([\d.]+)/)?.[1] + ||ua.match(/Version\/([\d.]+)/)?.[1] + ||hash[chrome_version] + ||'' + }; + }, + is(){ + return this.parse().is||globalThis?.maxthon; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Meizu.js b/src/module/browser/Meizu.js index ddde1444..1edea161 100644 --- a/src/module/browser/Meizu.js +++ b/src/module/browser/Meizu.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Meizu', - match(ua){ - return ua.includes('MZBrowser'); - }, - version(ua){ - return ua.match(/MZBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('MZBrowser'), + version:ua.match(/MZBrowser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/OPPO.js b/src/module/browser/OPPO.js index d757f234..db1a6e89 100644 --- a/src/module/browser/OPPO.js +++ b/src/module/browser/OPPO.js @@ -1,10 +1,12 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'OPPO', - match(ua){ - return ua.includes('HeyTapBrowser') - ||ua.includes('OPPO'); - }, - version(ua){ - return ua.match(/HeyTapBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('HeyTapBrowser') + ||ua.includes('OPPO'), + version:ua.match(/HeyTapBrowser\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/OnePlus.js b/src/module/browser/OnePlus.js index b2e62a82..a68aba2a 100644 --- a/src/module/browser/OnePlus.js +++ b/src/module/browser/OnePlus.js @@ -1,10 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; export default { name:'OnePlus', - match(ua){ - return ua.includes('ONEPLUS'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('ONEPLUS'), + version:'' + }; } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/browser/Opera GX.js b/src/module/browser/Opera GX.js index 5d5d04e7..b4acd619 100644 --- a/src/module/browser/Opera GX.js +++ b/src/module/browser/Opera GX.js @@ -1,17 +1,16 @@ import _Opera from './Opera.js'; +import userAgent from '../runtime/userAgent.js'; export default { name:'Opera GX', - match(ua){ + parse(ua = userAgent){ let isMatch = false; - if(_Opera.match(ua)){ + if(_Opera.parse(ua).is){ isMatch = ua.includes('Edition GX'); } - return isMatch; - }, - version(ua){ - return ua.match(/Opera\/([\d.]+)/)?.[1] - ||ua.match(/OPR\/([\d.]+)/)?.[1] - ||''; + return { + is:isMatch, + version:_Opera.parse(ua).version + }; } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/browser/Opera.js b/src/module/browser/Opera.js index bc016a9c..0386a4d2 100644 --- a/src/module/browser/Opera.js +++ b/src/module/browser/Opera.js @@ -1,12 +1,14 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Opera', - match(ua){ - return ua.includes('Opera') - ||ua.includes('OPR'); - }, - version(ua){ - return ua.match(/Opera\/([\d.]+)/)?.[1] - ||ua.match(/OPR\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('Opera') + ||ua.includes('OPR'), + version:ua.match(/Opera\/([\d.]+)/)?.[1] + ||ua.match(/OPR\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/QQ.js b/src/module/browser/QQ.js index 15cc33ea..b9e600fe 100644 --- a/src/module/browser/QQ.js +++ b/src/module/browser/QQ.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'QQ', - match(ua){ - return ua.includes('QQ/'); - }, - version(ua){ - return ua.match(/QQ\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('QQ'), + version:ua.match(/QQ\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/QQBrowser.js b/src/module/browser/QQBrowser.js index 56c9e9d8..9701bc33 100644 --- a/src/module/browser/QQBrowser.js +++ b/src/module/browser/QQBrowser.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'QQBrowser', - match(ua){ - return ua.includes('QQBrowser'); - }, - version(ua){ - return ua.match(/QQBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('QQBrowser'), + version:ua.match(/QQBrowser\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Qiyu.js b/src/module/browser/Qiyu.js index 46644868..5d3b7d30 100644 --- a/src/module/browser/Qiyu.js +++ b/src/module/browser/Qiyu.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Qiyu', - match(ua){ - return ua.includes('Qiyu'); - }, - version(ua){ - return ua.match(/Qiyu\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Qiyu'), + version:ua.match(/Qiyu\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Quark.js b/src/module/browser/Quark.js index 86a78321..c3d8688b 100644 --- a/src/module/browser/Quark.js +++ b/src/module/browser/Quark.js @@ -1,11 +1,13 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Quark', - match(ua){ - return ua.includes('Quark'); - }, - version(ua){ - return ua.match(/Quark\/([\d.]+)/)?.[1] - ||ua.match(/QuarkPC\/([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('Quark'), + version:ua.match(/Quark\/([\d.]+)/)?.[1] + ||ua.match(/QuarkPC\/([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/QupZilla.js b/src/module/browser/QupZilla.js index 22749bf6..d2b04542 100644 --- a/src/module/browser/QupZilla.js +++ b/src/module/browser/QupZilla.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'QupZilla', - match(ua){ - return ua.includes('QupZilla'); - }, - version(ua){ - return ua.match(/QupZilla[\/\s]([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('QupZilla'), + version:ua.match(/QupZilla[\/\s]([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Safari.js b/src/module/browser/Safari.js index 3db61a25..a6831b7d 100644 --- a/src/module/browser/Safari.js +++ b/src/module/browser/Safari.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Safari', - match(ua){ - return ua.includes('Safari'); - }, - version(ua){ - return ua.match(/Version\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Safari'), + version:ua.match(/Version\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Samsung.js b/src/module/browser/Samsung.js index 3ff6f88d..a32a7a0e 100644 --- a/src/module/browser/Samsung.js +++ b/src/module/browser/Samsung.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Samsung', - match(ua){ - return ua.includes('SamsungBrowser'); - }, - version(ua){ - return ua.match(/SamsungBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('SamsungBrowser'), + version:ua.match(/SamsungBrowser\/([\d.]+)/)?.[1]||'' + }; } -}; +} diff --git a/src/module/browser/SeaMonkey.js b/src/module/browser/SeaMonkey.js index 51a06e84..ffaa3f2d 100644 --- a/src/module/browser/SeaMonkey.js +++ b/src/module/browser/SeaMonkey.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'SeaMonkey', - match(ua){ - return ua.includes('SeaMonkey'); - }, - version(ua){ - return ua.match(/SeaMonkey\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('SeaMonkey'), + version:ua.match(/SeaMonkey\/([\d.]+)/)?.[1]||'' + }; } -}; +} diff --git a/src/module/browser/Sogou.js b/src/module/browser/Sogou.js index 7e043d73..73bde27e 100644 --- a/src/module/browser/Sogou.js +++ b/src/module/browser/Sogou.js @@ -1,17 +1,20 @@ +import _Chrome from './Chrome.js'; +import userAgent from '../runtime/userAgent.js'; + export default { name:'Sogou', - match(ua){ - return ua.includes('MetaSr')|| ua.includes('Sogou'); - }, - version(ua){ + parse(ua = userAgent){ var hash = { '94':'12.0', '80':'11.0' }; - var chrome_version = ua.match(/Chrome\/([\d]+)/)?.[1]||''; - return ua.match(/SogouMobileBrowser\/([\d.]+)/)?.[1] - ||ua.match(/SogouMSE\/([\d.]+)/)?.[1] - ||hash[chrome_version] - ||''; + var chrome_version = parseInt(_Chrome.parse(ua).version); + return { + is:ua.includes('MetaSr')|| ua.includes('Sogou'), + version:ua.match(/SogouMobileBrowser\/([\d.]+)/)?.[1] + ||ua.match(/SogouMSE\/([\d.]+)/)?.[1] + ||hash[chrome_version] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Sogouspider.js b/src/module/browser/Sogouspider.js index 06abc10a..a190f8f0 100644 --- a/src/module/browser/Sogouspider.js +++ b/src/module/browser/Sogouspider.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Sogouspider', - match(ua){ - return ua.match(/Sogou (\S+) Spider\/([\d.]+)/i); - }, - version(ua){ - return ua.match(/Sogou (\S+) Spider\/([\d.]+)/i)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.match(/Sogou (\S+) Spider\/([\d.]+)/i), + version:ua.match(/Sogou (\S+) Spider\/([\d.]+)/i)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Suning.js b/src/module/browser/Suning.js index 7db6c946..823804a4 100644 --- a/src/module/browser/Suning.js +++ b/src/module/browser/Suning.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Suning', - match(ua){ - return ua.includes('SNEBUY-APP'); - }, - version(ua){ - return ua.match(/SNEBUY-APP([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('SNEBUY-APP'), + version:ua.match(/SNEBUY-APP([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Taobao.js b/src/module/browser/Taobao.js index 8a394124..2e2b87b5 100644 --- a/src/module/browser/Taobao.js +++ b/src/module/browser/Taobao.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Taobao', - match(ua){ - return ua.includes('AliApp(TB'); - }, - version(ua){ - return ua.match(/AliApp\(TB\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('AliApp(TB'), + version:ua.match(/AliApp\(TB\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/TheWorld.js b/src/module/browser/TheWorld.js index 16f1789d..44556ba0 100644 --- a/src/module/browser/TheWorld.js +++ b/src/module/browser/TheWorld.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'TheWorld', - match(ua){ - return ua.includes('TheWorld'); - }, - version(ua){ - return ua.match(/TheWorld ([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('TheWorld'), + version:ua.match(/TheWorld ([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Toutiao.js b/src/module/browser/Toutiao.js index 53e9c27d..c5fa333d 100644 --- a/src/module/browser/Toutiao.js +++ b/src/module/browser/Toutiao.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Toutiao', - match(ua){ - return ua.includes('NewsArticle'); - }, - version(ua){ - return ua.match(/NewsArticle\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('NewsArticle'), + version:ua.match(/NewsArticle\/([\d.]+)/)?.[1]||'' + }; } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/browser/UC.js b/src/module/browser/UC.js index 63b73389..e2593987 100644 --- a/src/module/browser/UC.js +++ b/src/module/browser/UC.js @@ -1,11 +1,13 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'UC', - match(ua){ - return ua.includes('UCBrowser') - ||ua.includes(' UBrowser') - ||ua.includes('UCWEB'); - }, - version(ua){ - return ua.match(/UC?Browser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('UCBrowser') + ||ua.includes(' UBrowser') + ||ua.includes('UCWEB'), + version:ua.match(/UC?Browser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Vivaldi.js b/src/module/browser/Vivaldi.js index fd56f7e6..c9dfd213 100644 --- a/src/module/browser/Vivaldi.js +++ b/src/module/browser/Vivaldi.js @@ -1,20 +1,27 @@ -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; export default { name:'Vivaldi', - match(ua,isAsync=false){ - let isMatch = ua.includes('Vivaldi'); - if(!isMatch&&isAsync){ - return new Promise(function(resolve){ + parse(ua = userAgent){ + return { + is:ua.includes('Vivaldi'), + version:ua.match(/Vivaldi\/([\d.]+)/)?.[1] + ||ua.match(/Chrome\/([\d.]+)/)?.[1] + ||'' + }; + }, + async is(){ + let isMatch = this.parse().is; + return new Promise(function(resolve){ + if(!isMatch){ fetch('chrome-extension://jffbochibkahlbbmanpmndnhmeliecah/config.json').then(function(){ resolve(true); }).catch(function(){ resolve(false); }); - }); - } - }, - version(ua){ - return ua.match(/Vivaldi\/([\d.]+)/)?.[1]||ua.match(/Chrome\/([\d.]+)/)?.[1]||''; + }else{ + resolve(false); + } + }); } -}; +} \ No newline at end of file diff --git a/src/module/browser/Vivo.js b/src/module/browser/Vivo.js index 2b041bb0..80295920 100644 --- a/src/module/browser/Vivo.js +++ b/src/module/browser/Vivo.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Vivo', - match(ua){ - return ua.includes('VivoBrowser'); - }, - version(ua){ - return ua.match(/VivoBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('VivoBrowser'), + version:ua.match(/VivoBrowser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Wechat.js b/src/module/browser/Wechat.js index cd856361..c573d302 100644 --- a/src/module/browser/Wechat.js +++ b/src/module/browser/Wechat.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Wechat', - match(ua){ - return ua.includes('MicroMessenger'); - }, - version(ua){ - return ua.match(/MicroMessenger\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('MicroMessenger'), + version:ua.match(/MicroMessenger\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/WechatWork.js b/src/module/browser/WechatWork.js index 1d5878ba..08a733f3 100644 --- a/src/module/browser/WechatWork.js +++ b/src/module/browser/WechatWork.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'WechatWork', - match(ua){ - return ua.includes('wxwork/'); - }, - version(ua){ - return ua.match(/wxwork\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('wxwork'), + version:ua.match(/wxwork\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Weibo.js b/src/module/browser/Weibo.js index ce8c0b8e..cf5b738f 100644 --- a/src/module/browser/Weibo.js +++ b/src/module/browser/Weibo.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Weibo', - match(ua){ - return ua.includes('Weibo'); - }, - version(ua){ - return ua.match(/weibo__([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Weibo'), + version:ua.match(/weibo__([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Xiaomi.js b/src/module/browser/Xiaomi.js index 27afad81..276ccde8 100644 --- a/src/module/browser/Xiaomi.js +++ b/src/module/browser/Xiaomi.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Xiaomi', - match(ua){ - return ua.includes('MiuiBrowser'); - }, - version(ua){ - return ua.match(/MiuiBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('MiuiBrowser'), + version:ua.match(/115Browser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/Yandex.js b/src/module/browser/Yandex.js index 5b0dac38..570226a5 100644 --- a/src/module/browser/Yandex.js +++ b/src/module/browser/Yandex.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Yandex', - match(ua){ - return ua.includes('YaBrowser'); - }, - version(ua){ - return ua.match(/YaBrowser\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('YaBrowser'), + version:ua.match(/YaBrowser\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/YandexBot.js b/src/module/browser/YandexBot.js index e177e9b5..6c59ace9 100644 --- a/src/module/browser/YandexBot.js +++ b/src/module/browser/YandexBot.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'YandexBot', - match(ua){ - return ua.includes('YandexBot'); - }, - version(ua){ - return ua.match(/YandexBot\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('YandexBot'), + version:ua.match(/YandexBot\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/YisouSpider.js b/src/module/browser/YisouSpider.js index 02cacc68..32e2958e 100644 --- a/src/module/browser/YisouSpider.js +++ b/src/module/browser/YisouSpider.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'YisouSpider', - match(ua){ - return ua.includes('YisouSpider'); - }, - version(ua){ - return ua.match(/YisouSpider\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('YisouSpider'), + version:ua.match(/YisouSpider\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/YodaoBot.js b/src/module/browser/YodaoBot.js index 85aeeecf..ae263589 100644 --- a/src/module/browser/YodaoBot.js +++ b/src/module/browser/YodaoBot.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'YodaoBot', - match(ua){ - return ua.includes('YodaoBot'); - }, - version(ua){ - return ua.match(/YodaoBot\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('YodaoBot'), + version:ua.match(/YodaoBot\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/browser/iQIYI.js b/src/module/browser/iQIYI.js index 64e4576c..498d79c9 100644 --- a/src/module/browser/iQIYI.js +++ b/src/module/browser/iQIYI.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'iQIYI', - match(ua){ - return ua.includes('IqiyiApp'); - }, - version(ua){ - return ua.match(/IqiyiVersion\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('IqiyiApp'), + version:ua.match(/IqiyiVersion\/([\d.]+)/)?.[1]||'', + }; } -}; +} \ No newline at end of file diff --git a/src/module/device-loader.js b/src/module/device-loader.js index 1d5aa111..4a8133c7 100644 --- a/src/module/device-loader.js +++ b/src/module/device-loader.js @@ -1,11 +1,32 @@ import _Mobile from './device/Mobile.js'; import _Tablet from './device/Tablet.js'; -export default function(_){ - _.device = 'Desktop'; - [_Mobile,_Tablet].forEach(function(item){ - if(item.match(_.userAgent)){ - _.device = item.name; - } - }); -}; +import userAgent from './runtime/userAgent.js'; + +let loaderList = [_Mobile,_Tablet]; +loaderList.forEach(item=>{ + if(!item.is){ + item.is = async function(){ + return item.parse().is; + }; + } +}); + +export default { + name:'device', + parse(ua = userAgent){ + let device = 'Desktop'; + loaderList.forEach(function(item){ + if(item.parse(ua).is){ + device = item.name; + } + }); + + return { + device + }; + }, + async getInfo(){ + return this.parse(); + } +} \ No newline at end of file diff --git a/src/module/device/Mobile.js b/src/module/device/Mobile.js index eca12b54..08e62e6e 100644 --- a/src/module/device/Mobile.js +++ b/src/module/device/Mobile.js @@ -1,8 +1,12 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Mobile', - match(ua){ - return ua.includes('Mobi') - ||ua.includes('iPh') - ||ua.includes('480'); + parse(ua = userAgent){ + return { + is:ua.includes('Mobi') + ||ua.includes('iPh') + ||ua.includes('480') + }; } -}; +} \ No newline at end of file diff --git a/src/module/device/Tablet.js b/src/module/device/Tablet.js index 314cb0f4..95522223 100644 --- a/src/module/device/Tablet.js +++ b/src/module/device/Tablet.js @@ -1,12 +1,17 @@ -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'Tablet', - match(ua){ - let navigator = _globalThis?.navigator||{}; - return ua.includes('Tablet') - ||ua.includes('Pad') - ||ua.includes('Nexus 7') - ||(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); + parse(ua = userAgent){ + return { + is:ua.includes('Tablet') + ||ua.includes('Pad') + ||ua.includes('Nexus 7') + }; + }, + async is(){ + return this.parse().is + ||(globalThis?.navigator.platform === 'MacIntel' && globalThis?.navigator.maxTouchPoints > 1); } -}; +} \ No newline at end of file diff --git a/src/module/engine-loader.js b/src/module/engine-loader.js index 68386db3..e2f28f81 100644 --- a/src/module/engine-loader.js +++ b/src/module/engine-loader.js @@ -5,24 +5,41 @@ import _Servo from './engine/Servo.js'; import _Presto from './engine/Presto.js'; import _KHTML from './engine/KHTML.js'; +import _Edge from './browser/Edge.js'; import _Chrome from './browser/Chrome.js'; -export default function(_){ - _.engine = ''; - [_WebKit, _Trident, _Gecko, _Servo, _Presto, _KHTML].forEach(function(item){ - if(item.match(_.userAgent)){ - _.engine = item.name; - } - }); +import userAgent from './runtime/userAgent.js'; + +let loaderList = [_WebKit, _Trident, _Gecko, _Servo, _Presto, _KHTML]; +loaderList.forEach(item=>{ + if(!item.is){ + item.is = async function(){ + return item.parse().is; + }; + } +}); - //修正 - if (_.browser == 'Edge') { - _.engine = parseInt(_.browserVersion)>75?'Blink':'EdgeHTML'; - } else if (_Chrome.match(_.userAgent)&& _.engine=='WebKit' && parseInt(_Chrome.version(_.userAgent)) > 27) { - _.engine = 'Blink'; - } else if (_.browser == 'Opera' && parseInt(_.browserVersion) > 12) { - _.engine = 'Blink'; - } else if (_.browser == 'Yandex') { - _.engine = 'Blink'; +export default { + name:'engine', + parse(ua = userAgent){ + let engine = ''; + loaderList.forEach(function(item){ + if(item.parse(ua).is){ + engine = item.name; + } + }); + + //修正 + if (_Edge.parse(ua).is) { + engine = parseInt(_Edge.parse(ua).version)>75?'Blink':'EdgeHTML'; + } else if (_Chrome.parse(ua).is&&parseInt(_Chrome.parse(ua).version) > 27) { + engine = 'Blink'; + } + return { + engine + }; + }, + async getInfo(){ + return this.parse(); } -}; +} \ No newline at end of file diff --git a/src/module/engine/Gecko.js b/src/module/engine/Gecko.js index 7a772d88..b4d44d31 100644 --- a/src/module/engine/Gecko.js +++ b/src/module/engine/Gecko.js @@ -1,6 +1,10 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Gecko', - match(ua){ - return ua.includes('Gecko/'); + parse(ua = userAgent){ + return { + is:ua.includes('Gecko/') + }; } -}; +} diff --git a/src/module/engine/KHTML.js b/src/module/engine/KHTML.js index 6d535a81..64200084 100644 --- a/src/module/engine/KHTML.js +++ b/src/module/engine/KHTML.js @@ -1,6 +1,10 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'KHTML', - match(ua){ - return ua.includes('KHTML/'); + parse(ua = userAgent){ + return { + is:ua.includes('KHTML/') + }; } -}; +} \ No newline at end of file diff --git a/src/module/engine/Presto.js b/src/module/engine/Presto.js index d91161b2..32f8261d 100644 --- a/src/module/engine/Presto.js +++ b/src/module/engine/Presto.js @@ -1,6 +1,10 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Presto', - match(ua){ - return ua.includes('Presto'); + parse(ua = userAgent){ + return { + is:ua.includes('Presto') + }; } -}; +} \ No newline at end of file diff --git a/src/module/engine/Servo.js b/src/module/engine/Servo.js index ea7c1839..0de5211d 100644 --- a/src/module/engine/Servo.js +++ b/src/module/engine/Servo.js @@ -1,6 +1,10 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Servo', - match(ua){ - return ua.includes('Servo/'); + parse(ua = userAgent){ + return { + is:ua.includes('Servo/') + }; } -}; +} \ No newline at end of file diff --git a/src/module/engine/Trident.js b/src/module/engine/Trident.js index 3927efac..6ecd71c4 100644 --- a/src/module/engine/Trident.js +++ b/src/module/engine/Trident.js @@ -1,6 +1,10 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Trident', - match(ua){ - return ua.includes('Trident')||ua.includes('NET CLR'); + parse(ua = userAgent){ + return { + is:ua.includes('Trident')||ua.includes('NET CLR') + }; } -}; +} \ No newline at end of file diff --git a/src/module/engine/WebKit.js b/src/module/engine/WebKit.js index 80893002..8c11badc 100644 --- a/src/module/engine/WebKit.js +++ b/src/module/engine/WebKit.js @@ -1,6 +1,10 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'WebKit', - match(ua){ - return ua.includes('AppleWebKit'); + parse(ua = userAgent){ + return { + is:ua.includes('AppleWebKit') + }; } -}; +} \ No newline at end of file diff --git a/src/module/gpu-loader.js b/src/module/gpu-loader.js index fd6e53c3..d614deda 100644 --- a/src/module/gpu-loader.js +++ b/src/module/gpu-loader.js @@ -1,16 +1,27 @@ -import _globalThis from './runtime/globalThis.js'; +import globalThis from './runtime/globalThis.js'; -export default function(_){ - _.gpu = ''; - _.gpuModel = ''; - if(_globalThis?.document){ - let $canvas = _globalThis.document.createElement('canvas'); - let webgl = $canvas.getContext('experimental-webgl'); - if(webgl){ - let debugInfo = webgl.getExtension('WEBGL_debug_renderer_info'); - let gpu_str = webgl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL); - _.gpu = gpu_str.match(/ANGLE \((.+?),/)?.[1]||''; - _.gpuModel = gpu_str.match(/, (.+?) (\(|vs_)/)?.[1]||''; +export default { + name:'gpu', + parse(){ + return {}; + }, + async getInfo(){ + let gpu = ''; + let gpuModel = ''; + if(globalThis?.document){ + let $canvas = globalThis.document.createElement('canvas'); + let webgl = $canvas.getContext('experimental-webgl'); + if(webgl){ + let debugInfo = webgl.getExtension('WEBGL_debug_renderer_info'); + let gpu_str = webgl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL); + gpu = gpu_str.match(/ANGLE \((.+?),/)?.[1]||''; + gpuModel = gpu_str.match(/, (.+?) (\(|vs_)/)?.[1]||''; + } } + + return { + gpu, + gpuModel + }; } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/module/language-loader.js b/src/module/language-loader.js index 9096143b..53fa8a30 100644 --- a/src/module/language-loader.js +++ b/src/module/language-loader.js @@ -1,13 +1,21 @@ -import _globalThis from './runtime/globalThis.js'; +import globalThis from './runtime/globalThis.js'; -export default function(_){ - _.language = (function () { - let g = _globalThis?.navigator?.browserLanguage || _globalThis?.navigator?.language; +export default { + name:'language', + parse(){ + return {}; + }, + async getInfo(){ + let g = globalThis?.navigator?.language; if (typeof g !== 'string') return 'Unknown language' let arr = g.split('-'); if (arr[1]) { arr[1] = arr[1].toUpperCase(); } - return arr.join('_'); - })(); -}; + let language = arr.join('_'); + + return { + language + }; + } +} \ No newline at end of file diff --git a/src/module/method/getMime.js b/src/module/method/getMime.js index 59eeab13..ec7e9792 100644 --- a/src/module/method/getMime.js +++ b/src/module/method/getMime.js @@ -1,11 +1,9 @@ -import _globalThis from '../runtime/globalThis.js'; - export default function (option, value) { - let mimeTypes = _globalThis?.navigator?.mimeTypes; + let mimeTypes = globalThis?.navigator?.mimeTypes; for (let mt in mimeTypes) { if (mimeTypes[mt][option]&&mimeTypes[mt][option] == value) { return mimeTypes[mt]; } } return null; -}; +} \ No newline at end of file diff --git a/src/module/method/getPublicIP.js b/src/module/method/getPublicIP.js index cae84fde..1baed1e8 100644 --- a/src/module/method/getPublicIP.js +++ b/src/module/method/getPublicIP.js @@ -1,11 +1,9 @@ -import _globalThis from '../runtime/globalThis.js'; - const reg = { 'IPv4':/\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/, 'IPv6':/\b(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}\b/i }; -let RTCPeerConnection = _globalThis.RTCPeerConnection || _globalThis.mozRTCPeerConnection || _globalThis.webkitRTCPeerConnection; -const getPublicIP = () => { +let RTCPeerConnection = globalThis.RTCPeerConnection || globalThis.mozRTCPeerConnection || globalThis.webkitRTCPeerConnection; +const getPublicIP = async () => { const ipSet = new Set(); const onicecandidate = (ice) => { const candidate = ice?.candidate?.candidate; diff --git a/src/module/method/wrapperPromise.js b/src/module/method/wrapperPromise.js deleted file mode 100644 index dc824e7d..00000000 --- a/src/module/method/wrapperPromise.js +++ /dev/null @@ -1,9 +0,0 @@ -export default function(list){ - return list.map(function(value){ - if(value instanceof Promise){ - return value; - }else{ - return Promise.resolve(value); - } - }); -}; \ No newline at end of file diff --git a/src/module/network-loader.js b/src/module/network-loader.js index bf0cf0e0..db1347c2 100644 --- a/src/module/network-loader.js +++ b/src/module/network-loader.js @@ -1,16 +1,26 @@ -import _globalThis from './runtime/globalThis.js'; +import globalThis from './runtime/globalThis.js'; +import getPublicIP from './method/getPublicIP.js'; -export default function(_){ - _.network = (function () { +export default { + name:'network', + parse(){ + return {}; + }, + async getInfo(){ let network = 'unknown'; - let connection = _globalThis?.navigator?.connection; + let connection = globalThis?.navigator?.connection; if(connection){ network = connection.type || connection.effectiveType; if(network == '2' || network == 'unknown'){ network = 'wifi'; } } - return network; - })(); - _.isOnline = _globalThis?.navigator?.onLine||false; -}; + let isOnline = globalThis?.navigator?.onLine||false; + let ip = await getPublicIP(); + return { + network, + isOnline, + ip + }; + } +} \ No newline at end of file diff --git a/src/module/runtime/userAgent.js b/src/module/runtime/userAgent.js new file mode 100644 index 00000000..4207845d --- /dev/null +++ b/src/module/runtime/userAgent.js @@ -0,0 +1,3 @@ +import globalThis from './globalThis.js'; + +export default globalThis?.navigator?.userAgent; \ No newline at end of file diff --git a/src/module/other-loader.js b/src/module/screen-loader.js similarity index 51% rename from src/module/other-loader.js rename to src/module/screen-loader.js index cf3d1ac3..089d222f 100644 --- a/src/module/other-loader.js +++ b/src/module/screen-loader.js @@ -1,21 +1,7 @@ -import _globalThis from './runtime/globalThis.js'; +import globalThis from './runtime/globalThis.js'; -import getPublicIP from './method/getPublicIP.js'; - -export default function(_){ - // 类型判断 - _.isWebview = _.userAgent.includes('; wv)'); - _.isRobot = ['Googlebot', 'Baiduspider', 'Sogouspider', 'Bingbot', '360Spider', 'Bytespider', 'YandexBot'].includes(_.browser); - // IP地址 - _.ip = getPublicIP(); - _.timezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone; - // 屏幕尺寸 - _.screenWidth = _globalThis?.screen?.width||0; - _.screenHeight = _globalThis?.screen?.height||0; - _.clientWidth = _globalThis?.document?.documentElement?.clientWidth||0; - _.clientHeighth = _globalThis?.document?.documentElement?.clientHeight||0; - // 屏幕刷新率 - _.screenFPS = new Promise(function(resolve){ +async function getScreenFPS(){ + return new Promise(function(resolve){ let lastTime = 0; let count = 1; let list = []; @@ -40,4 +26,28 @@ export default function(_){ }; requestAnimationFrame(tick); }); -}; +} + +export default { + name:'screen', + parse(){ + return {}; + }, + async getInfo(){ + // 屏幕尺寸 + let screenWidth = globalThis?.screen?.width||0; + let screenHeight = globalThis?.screen?.height||0; + let clientWidth = globalThis?.document?.documentElement?.clientWidth||0; + let clientHeight = globalThis?.document?.documentElement?.clientHeight||0; + // 屏幕刷新率 + let screenFPS = await getScreenFPS(); + + return { + screenWidth, + screenHeight, + clientWidth, + clientHeight, + screenFPS + }; + } +} \ No newline at end of file diff --git a/src/module/system-loader.js b/src/module/system-loader.js index 8c572185..a2ec6260 100644 --- a/src/module/system-loader.js +++ b/src/module/system-loader.js @@ -13,54 +13,96 @@ import _MeeGo from './system/MeeGo.js'; import _Symbian from './system/Symbian.js'; import _Chrome_OS from './system/Chrome OS.js'; import _WebOS from './system/WebOS.js'; -import _globalThis from './runtime/globalThis.js'; -export default function(_,isAsync){ - let ua = _.userAgent; +import userAgent from './runtime/userAgent.js'; +import globalThis from './runtime/globalThis.js'; - _.system = ''; - _.systemVersion = ''; - [_Windows, _Linux, _macOS, _Android, _HarmonyOS, _Ubuntu, _FreeBSD, _Debian, _iOS, _Windows_Phone, _BlackBerry, _MeeGo, _Symbian, _Chrome_OS, _WebOS].forEach(function(item){ - if(item.match(ua)){ - _.system = item.name; - _.systemVersion = item.version(ua,isAsync); - } - }); - - _.platform = ''; - if(ua.match(/(Win64|x64|WOW64|x86_64)/i)){ - _.platform = 'Win64'; - }else if(ua.match(/(Win32|x86|WOW32)/i)){ - _.platform = 'Win32'; - }else if(ua.match(/aarch64|arm64/)){ - _.platform = 'ARM64'; - }else if(ua.match(/arm32/)){ - _.platform = 'ARM32'; - }else if(_globalThis?.navigator?.platform){ - _.platform = _globalThis.navigator.platform; +let loaderList = [_Windows, _Linux, _macOS, _Android, _HarmonyOS, _Ubuntu, _FreeBSD, _Debian, _iOS, _Windows_Phone, _BlackBerry, _MeeGo, _Symbian, _Chrome_OS, _WebOS]; +loaderList.forEach(item=>{ + if(!item.is){ + item.is = async function(){ + return item.parse().is; + }; } - - _.architecture = ''; - let keyStr = ua+'|'+_.platform; - let architecture = ''; - if(keyStr.match(/armv?\d+/i)){ - architecture = 'arm'; - }else if(keyStr.match(/aarch64/)){ - architecture = 'arm'; - }else if(keyStr.match(/loongarch64/)){ - architecture = 'loongarch'; - }else{ - architecture = 'x86'; + if(!item.version){ + item.version = async function(){ + return item.parse().version; + }; } - _.architecture = architecture; +}); - let bitness = ua.match(/Win64|x64|WOW64|x86_64|aarch64|arm64|loongarch64/i)?64:32; - _.bitness = bitness; +export default { + name:'system', + parse(ua = userAgent){ + let system = ''; + let systemVersion = ''; + loaderList.forEach(function(item){ + if(item.parse(ua).is){ + system = item.name; + systemVersion = item.parse(ua).version; + } + }); - if(isAsync){ - if(_globalThis?.navigator?.userAgentData){ - _.architecture = _globalThis.navigator.userAgentData.getHighEntropyValues(['architecture']).then(item => item.architecture||architecture); - _.bitness = _globalThis.navigator.userAgentData.getHighEntropyValues(['bitness']).then(item => +item.bitness||bitness); + let platform = ''; + if(ua.match(/(Win64|x64|WOW64|x86_64)/i)){ + platform = 'Win64'; + }else if(ua.match(/(Win32|x86|WOW32)/i)){ + platform = 'Win32'; + }else if(ua.match(/aarch64|arm64/)){ + platform = 'ARM64'; + }else if(ua.match(/arm32/)){ + platform = 'ARM32'; + } + + let architecture = ''; + let keyStr = ua+'|'+platform; + if(keyStr.match(/armv?\d+/i)){ + architecture = 'arm'; + }else if(keyStr.match(/aarch64/)){ + architecture = 'arm'; + }else if(keyStr.match(/loongarch64/)){ + architecture = 'loongarch'; + }else{ + architecture = 'x86'; + } + let bitness = ua.match(/Win64|x64|WOW64|x86_64|aarch64|arm64|loongarch64/i)?64:32; + + return { + system, + systemVersion, + platform, + architecture, + bitness + }; + }, + async getInfo(){ + let { + system, + systemVersion, + platform, + architecture, + bitness + } = this.parse(); + for(let loader of loaderList){ + if(await loader.is()){ + system = loader.name; + systemVersion = await loader.version(); + } + } + + if(globalThis?.navigator?.platform){ + platform = globalThis.navigator.platform; + } + if(globalThis?.navigator?.userAgentData){ + architecture = await globalThis.navigator.userAgentData?.getHighEntropyValues(['architecture']).then(item => item.architecture||architecture); + bitness = await globalThis.navigator.userAgentData?.getHighEntropyValues(['bitness']).then(item => +item.bitness||bitness); } + return { + system, + systemVersion, + platform, + architecture, + bitness + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Android.js b/src/module/system/Android.js index de065681..ce067162 100644 --- a/src/module/system/Android.js +++ b/src/module/system/Android.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Android', - match(ua){ - return ua.includes('Android')||ua.includes('Adr'); - }, - version(ua){ - return ua.match(/Android ([\d.]+);/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Android')||ua.includes('Adr'), + version:ua.match(/Android ([\d.]+);/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/BlackBerry.js b/src/module/system/BlackBerry.js index e8860d8b..348b9e3c 100644 --- a/src/module/system/BlackBerry.js +++ b/src/module/system/BlackBerry.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'BlackBerry', - match(ua){ - return ua.includes('BlackBerry')||ua.includes('RIM'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('BlackBerry')||ua.includes('RIM'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Chrome OS.js b/src/module/system/Chrome OS.js index b05c5e12..38e49a6d 100644 --- a/src/module/system/Chrome OS.js +++ b/src/module/system/Chrome OS.js @@ -1,11 +1,13 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Chrome OS', - match(ua){ - return ua.includes('CrOS'); - }, - version(ua){ - return ua.match(/MSIE ([\d.]+)/)?.[1] - ||ua.match(/rv:([\d.]+)/)?.[1] - ||''; + parse(ua = userAgent){ + return { + is:ua.includes('CrOS'), + version:ua.match(/MSIE ([\d.]+)/)?.[1] + ||ua.match(/rv:([\d.]+)/)?.[1] + ||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Debian.js b/src/module/system/Debian.js index d79c0157..c85780a2 100644 --- a/src/module/system/Debian.js +++ b/src/module/system/Debian.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Debian', - match(ua){ - return ua.includes('Debian'); - }, - version(ua){ - return ua.match(/Debian\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Debian'), + version:ua.match(/Debian\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/FreeBSD.js b/src/module/system/FreeBSD.js index 13b91705..0260affe 100644 --- a/src/module/system/FreeBSD.js +++ b/src/module/system/FreeBSD.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'FreeBSD', - match(ua){ - return ua.includes('FreeBSD'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('FreeBSD'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/HarmonyOS.js b/src/module/system/HarmonyOS.js index a22a3a45..6185bd88 100644 --- a/src/module/system/HarmonyOS.js +++ b/src/module/system/HarmonyOS.js @@ -1,20 +1,22 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'HarmonyOS', - match(ua){ - return ua.includes('HarmonyOS'); - }, - version(ua){ + parse(ua = userAgent){ let v = +ua.match(/HMSCore (\d+.\d+)/)?.[1]||0; + let version = ''; if(v>=6.1){ - return '4.0'; + version = '4.0'; }else if(v>=6.0){ - return '3.0'; + version = '3.0'; }else if(v>=5.0){ - return '2.0'; + version = '2.0'; }else if(v>=4.0){ - return '1.0'; - }else{ - return ''; + version = '1.0'; } + return { + is:ua.includes('HarmonyOS'), + version + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Linux.js b/src/module/system/Linux.js index 53ddae95..37a86f5e 100644 --- a/src/module/system/Linux.js +++ b/src/module/system/Linux.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Linux', - match(ua){ - return ua.includes('Linux')||ua.includes('X11'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('Linux')||ua.includes('X11'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/MeeGo.js b/src/module/system/MeeGo.js index 68753c22..18e621c0 100644 --- a/src/module/system/MeeGo.js +++ b/src/module/system/MeeGo.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'MeeGo', - match(ua){ - return ua.includes('MeeGo'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('MeeGo'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Symbian.js b/src/module/system/Symbian.js index 9bb6b153..8302ff40 100644 --- a/src/module/system/Symbian.js +++ b/src/module/system/Symbian.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Symbian', - match(ua){ - return ua.includes('Symbian'); - }, - version(ua){ - return ua.match(/Series60\/([\d.]+)/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('Symbian'), + version:ua.match(/Series60\/([\d.]+)/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Ubuntu.js b/src/module/system/Ubuntu.js index 3a6baa5f..aba2a5a8 100644 --- a/src/module/system/Ubuntu.js +++ b/src/module/system/Ubuntu.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Ubuntu', - match(ua){ - return ua.includes('Ubuntu'); - }, - version(ua){ - return ''; + parse(ua = userAgent){ + return { + is:ua.includes('Ubuntu'), + version:'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/WebOS.js b/src/module/system/WebOS.js index eaa67e0f..9aa87ecb 100644 --- a/src/module/system/WebOS.js +++ b/src/module/system/WebOS.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'WebOS', - match(ua){ - return ua.includes('hpwOS'); - }, - version(ua){ - return ua.match(/hpwOS\/([\d.]+);/)?.[1]||''; + parse(ua = userAgent){ + return { + is:ua.includes('hpwOS'), + version:ua.match(/hpwOS\/([\d.]+);/)?.[1]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Windows Phone.js b/src/module/system/Windows Phone.js index 60be70b6..f9db02cb 100644 --- a/src/module/system/Windows Phone.js +++ b/src/module/system/Windows Phone.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'Windows Phone', - match(ua){ - return ua.includes('IEMobile')||ua.includes('Windows Phone'); - }, - version(ua){ - return ua.match(/Windows Phone( OS)? ([\d.]+);/)?.[2]||''; + parse(ua = userAgent){ + return { + is:ua.includes('IEMobile')||ua.includes('Windows Phone'), + version:ua.match(/Windows Phone( OS)? ([\d.]+);/)?.[2]||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/Windows.js b/src/module/system/Windows.js index 4dd6a2af..d681f100 100644 --- a/src/module/system/Windows.js +++ b/src/module/system/Windows.js @@ -1,11 +1,9 @@ -import _globalThis from '../runtime/globalThis.js'; +import userAgent from '../runtime/userAgent.js'; +import globalThis from '../runtime/globalThis.js'; export default { name:'Windows', - match(ua){ - return ua.includes('Windows'); - }, - version(ua,isAsync = false){ + parse(ua = userAgent){ let v = ua.match(/^Mozilla\/\d.0 \(Windows NT ([\d.]+)[;)].*$/)?.[1]||''; let hash = { '10.0':'10', @@ -21,27 +19,30 @@ export default { '4.0':'NT', '4.90':'ME' }; - if(isAsync){ - return new Promise(function(resolve){ - if(_globalThis?.navigator?.userAgentData){ - _globalThis.navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(function(ua){ - let windowsVersion = ''; - if (navigator.userAgentData.platform === "Windows") { - const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]); - if(majorPlatformVersion>=13){ - windowsVersion = '11'; - }else{ - windowsVersion = '10'; - } + return { + is:ua.includes('Windows'), + version:hash[v] || v + }; + }, + async version(){ + let version = this.parse().version; + return new Promise(function(resolve){ + if(globalThis?.navigator?.userAgentData){ + globalThis.navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(function(ua){ + let windowsVersion = ''; + if (globalThis.navigator.userAgentData.platform === "Windows") { + const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]); + if(majorPlatformVersion>=13){ + windowsVersion = '11'; + }else{ + windowsVersion = '10'; } - resolve(windowsVersion); - }); - }else{ - resolve(hash[v] || v); - } - }); - }else{ - return hash[v] || v; - } + } + resolve(windowsVersion); + }); + }else{ + resolve(version); + } + }); } -}; +} \ No newline at end of file diff --git a/src/module/system/iOS.js b/src/module/system/iOS.js index 180390fe..b1c73ee9 100644 --- a/src/module/system/iOS.js +++ b/src/module/system/iOS.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'iOS', - match(ua){ - return ua.includes('like Mac OS X'); - }, - version(ua){ - return ua.match(/OS ([\d_]+) like/)?.[1].replace(/_/g, '.')||''; + parse(ua = userAgent){ + return { + is:ua.includes('like Mac OS X'), + version:ua.match(/OS ([\d_]+) like/)?.[1].replace(/_/g, '.')||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/system/macOS.js b/src/module/system/macOS.js index b6e7dbca..96c7ad5c 100644 --- a/src/module/system/macOS.js +++ b/src/module/system/macOS.js @@ -1,9 +1,11 @@ +import userAgent from '../runtime/userAgent.js'; + export default { name:'macOS', - match(ua){ - return ua.includes('Macintosh'); - }, - version(ua){ - return ua.match(/Mac OS X -?([\d_]+)/)?.[1].replace(/_/g, '.')||''; + parse(ua = userAgent){ + return { + is:ua.includes('Macintosh'), + version:ua.match(/Mac OS X -?([\d_]+)/)?.[1].replace(/_/g, '.')||'' + }; } -}; +} \ No newline at end of file diff --git a/src/module/timezone-loader.js b/src/module/timezone-loader.js new file mode 100644 index 00000000..66e0e71f --- /dev/null +++ b/src/module/timezone-loader.js @@ -0,0 +1,13 @@ +export default { + name:'timezone', + parse(){ + return {}; + }, + async getInfo(){ + let timezone = Intl?.DateTimeFormat()?.resolvedOptions()?.timeZone; + + return { + timezone + }; + } +} \ No newline at end of file