ua-parser-js 2.0.8 → 2.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -10
- package/dist/icons/color/LICENSE.md +3 -0
- package/dist/icons/color/browser/android-browser.svg +1 -0
- package/dist/icons/color/browser/avant.png +0 -0
- package/dist/icons/color/browser/basilisk.png +0 -0
- package/dist/icons/color/browser/basilisk.svg +1 -0
- package/dist/icons/color/browser/brave.png +0 -0
- package/dist/icons/color/browser/brave.svg +1 -0
- package/dist/icons/color/browser/chrome.png +0 -0
- package/dist/icons/color/browser/chrome.svg +1 -0
- package/dist/icons/color/browser/chromium.png +0 -0
- package/dist/icons/color/browser/chromium.svg +1 -0
- package/dist/icons/color/browser/coc-coc.png +0 -0
- package/dist/icons/color/browser/default.png +0 -0
- package/dist/icons/color/browser/default.svg +1 -0
- package/dist/icons/color/browser/dolphin.png +0 -0
- package/dist/icons/color/browser/edge.png +0 -0
- package/dist/icons/color/browser/edge.svg +1 -0
- package/dist/icons/color/browser/electron.png +0 -0
- package/dist/icons/color/browser/electron.svg +1 -0
- package/dist/icons/color/browser/falkon.png +0 -0
- package/dist/icons/color/browser/falkon.svg +1 -0
- package/dist/icons/color/browser/firefox-reality.png +0 -0
- package/dist/icons/color/browser/firefox-reality.svg +1 -0
- package/dist/icons/color/browser/firefox.png +0 -0
- package/dist/icons/color/browser/firefox.svg +1 -0
- package/dist/icons/color/browser/gsa.svg +9 -0
- package/dist/icons/color/browser/icecat.png +0 -0
- package/dist/icons/color/browser/ie.svg +6 -0
- package/dist/icons/color/browser/konqueror.png +0 -0
- package/dist/icons/color/browser/konqueror.svg +1 -0
- package/dist/icons/color/browser/maxthon.png +0 -0
- package/dist/icons/color/browser/midori.png +0 -0
- package/dist/icons/color/browser/midori.svg +1 -0
- package/dist/icons/color/browser/netsurf.png +0 -0
- package/dist/icons/color/browser/netsurf.svg +1 -0
- package/dist/icons/color/browser/opera-gx.png +0 -0
- package/dist/icons/color/browser/opera-gx.svg +1 -0
- package/dist/icons/color/browser/opera-mini.png +0 -0
- package/dist/icons/color/browser/opera-touch.png +0 -0
- package/dist/icons/color/browser/opera.png +0 -0
- package/dist/icons/color/browser/opera.svg +1 -0
- package/dist/icons/color/browser/palemoon.png +0 -0
- package/dist/icons/color/browser/puffin.png +0 -0
- package/dist/icons/color/browser/safari.png +0 -0
- package/dist/icons/color/browser/safari.svg +1 -0
- package/dist/icons/color/browser/samsung-internet.png +0 -0
- package/dist/icons/color/browser/samsung-internet.svg +1 -0
- package/dist/icons/color/browser/seamonkey.png +0 -0
- package/dist/icons/color/browser/silk.png +0 -0
- package/dist/icons/color/browser/sogou-mobile.png +0 -0
- package/dist/icons/color/browser/ucbrowser.png +0 -0
- package/dist/icons/color/browser/ucbrowser.svg +1 -0
- package/dist/icons/color/browser/vivaldi.png +0 -0
- package/dist/icons/color/browser/vivaldi.svg +1 -0
- package/dist/icons/color/browser/webkit.png +0 -0
- package/dist/icons/color/browser/webkit.svg +1 -0
- package/dist/icons/color/browser/yandex.png +0 -0
- package/dist/icons/color/os/centos.svg +1 -0
- package/dist/icons/mono/LICENSE.md +3 -0
- package/dist/icons/mono/browser/alipay.svg +1 -0
- package/dist/icons/mono/browser/android-browser.svg +1 -0
- package/dist/icons/mono/browser/avast-secure-browser.svg +1 -0
- package/dist/icons/mono/browser/baidu-browser.svg +1 -0
- package/dist/icons/mono/browser/brave.svg +1 -0
- package/dist/icons/mono/browser/chrome-headless.svg +1 -0
- package/dist/icons/mono/browser/chrome-webview.svg +1 -0
- package/dist/icons/mono/browser/chrome.svg +1 -0
- package/dist/icons/mono/browser/chromium.svg +1 -0
- package/dist/icons/mono/browser/duckduckgo.svg +1 -0
- package/dist/icons/mono/browser/edge.svg +1 -0
- package/dist/icons/mono/browser/electron.svg +1 -0
- package/dist/icons/mono/browser/facebook.svg +1 -0
- package/dist/icons/mono/browser/firefox-focus.svg +1 -0
- package/dist/icons/mono/browser/firefox-reality.svg +1 -0
- package/dist/icons/mono/browser/firefox.svg +1 -0
- package/dist/icons/mono/browser/gsa.svg +1 -0
- package/dist/icons/mono/browser/huawei-browser.svg +1 -0
- package/dist/icons/mono/browser/icecat.svg +1 -0
- package/dist/icons/mono/browser/ie.svg +1 -0
- package/dist/icons/mono/browser/instagram.svg +1 -0
- package/dist/icons/mono/browser/jasmine.svg +1 -0
- package/dist/icons/mono/browser/kakaotalk.svg +1 -0
- package/dist/icons/mono/browser/klarna.svg +1 -0
- package/dist/icons/mono/browser/line.svg +1 -0
- package/dist/icons/mono/browser/linkedin.svg +1 -0
- package/dist/icons/mono/browser/miui-browser.svg +1 -0
- package/dist/icons/mono/browser/mobile-chrome.svg +1 -0
- package/dist/icons/mono/browser/mobile-firefox.svg +1 -0
- package/dist/icons/mono/browser/mobile-safari.svg +1 -0
- package/dist/icons/mono/browser/mozilla.svg +1 -0
- package/dist/icons/mono/browser/naver.svg +1 -0
- package/dist/icons/mono/browser/nokia-browser.svg +1 -0
- package/dist/icons/mono/browser/oculus-browser.svg +1 -0
- package/dist/icons/mono/browser/opera-coast.svg +1 -0
- package/dist/icons/mono/browser/opera-gx.svg +1 -0
- package/dist/icons/mono/browser/opera-mini.svg +1 -0
- package/dist/icons/mono/browser/opera-mobi.svg +1 -0
- package/dist/icons/mono/browser/opera-tablet.svg +1 -0
- package/dist/icons/mono/browser/opera-touch.svg +1 -0
- package/dist/icons/mono/browser/opera.svg +1 -0
- package/dist/icons/mono/browser/qqbrowser.svg +1 -0
- package/dist/icons/mono/browser/qqbrowserlite.svg +1 -0
- package/dist/icons/mono/browser/safari.svg +1 -0
- package/dist/icons/mono/browser/sailfish-browser.svg +1 -0
- package/dist/icons/mono/browser/samsung-internet.svg +1 -0
- package/dist/icons/mono/browser/smart-lenovo-browser.svg +1 -0
- package/dist/icons/mono/browser/snapchat.svg +1 -0
- package/dist/icons/mono/browser/sogou-explorer.svg +1 -0
- package/dist/icons/mono/browser/sogou-mobile.svg +1 -0
- package/dist/icons/mono/browser/tesla.svg +1 -0
- package/dist/icons/mono/browser/tiktok.svg +1 -0
- package/dist/icons/mono/browser/twitter.svg +1 -0
- package/dist/icons/mono/browser/vivaldi.svg +1 -0
- package/dist/icons/mono/browser/vivo-browser.svg +1 -0
- package/dist/icons/mono/browser/wechat.svg +1 -0
- package/dist/icons/mono/browser/weibo.svg +1 -0
- package/dist/icons/mono/browser/yandex.svg +1 -0
- package/dist/icons/mono/device/acer.svg +1 -0
- package/dist/icons/mono/device/amazon.svg +1 -0
- package/dist/icons/mono/device/apple.svg +1 -0
- package/dist/icons/mono/device/asus.svg +1 -0
- package/dist/icons/mono/device/att.svg +1 -0
- package/dist/icons/mono/device/blackberry.svg +1 -0
- package/dist/icons/mono/device/dell.svg +1 -0
- package/dist/icons/mono/device/facebook.svg +1 -0
- package/dist/icons/mono/device/fairphone.svg +1 -0
- package/dist/icons/mono/device/google.svg +1 -0
- package/dist/icons/mono/device/hp.svg +1 -0
- package/dist/icons/mono/device/huawei.svg +1 -0
- package/dist/icons/mono/device/lenovo.svg +1 -0
- package/dist/icons/mono/device/lg.svg +1 -0
- package/dist/icons/mono/device/meizu.svg +1 -0
- package/dist/icons/mono/device/microsoft.svg +1 -0
- package/dist/icons/mono/device/motorola.svg +1 -0
- package/dist/icons/mono/device/nintendo.svg +1 -0
- package/dist/icons/mono/device/nokia.svg +1 -0
- package/dist/icons/mono/device/nvidia.svg +1 -0
- package/dist/icons/mono/device/oneplus.svg +1 -0
- package/dist/icons/mono/device/oppo.svg +1 -0
- package/dist/icons/mono/device/panasonic.svg +1 -0
- package/dist/icons/mono/device/roku.svg +1 -0
- package/dist/icons/mono/device/samsung.svg +1 -0
- package/dist/icons/mono/device/siemens.svg +1 -0
- package/dist/icons/mono/device/sony.svg +1 -0
- package/dist/icons/mono/device/tesla.svg +1 -0
- package/dist/icons/mono/device/vivo.svg +1 -0
- package/dist/icons/mono/device/vodafone.svg +1 -0
- package/dist/icons/mono/device/xiaomi.svg +1 -0
- package/dist/icons/mono/device/zebra.svg +1 -0
- package/dist/icons/mono/os/android.svg +1 -0
- package/dist/icons/mono/os/arch.svg +1 -0
- package/dist/icons/mono/os/blackberry.svg +1 -0
- package/dist/icons/mono/os/centos.svg +1 -0
- package/dist/icons/mono/os/chrome-os.svg +1 -0
- package/dist/icons/mono/os/chromecast.svg +1 -0
- package/dist/icons/mono/os/debian.svg +1 -0
- package/dist/icons/mono/os/deepin.svg +1 -0
- package/dist/icons/mono/os/elementary-os.svg +1 -0
- package/dist/icons/mono/os/fedora.svg +1 -0
- package/dist/icons/mono/os/firefox.svg +1 -0
- package/dist/icons/mono/os/freebsd.svg +1 -0
- package/dist/icons/mono/os/gentoo.svg +1 -0
- package/dist/icons/mono/os/gnu.svg +1 -0
- package/dist/icons/mono/os/harmonyos.svg +1 -0
- package/dist/icons/mono/os/ios.svg +1 -0
- package/dist/icons/mono/os/kaios.svg +1 -0
- package/dist/icons/mono/os/linux.svg +1 -0
- package/dist/icons/mono/os/macos.svg +1 -0
- package/dist/icons/mono/os/manjaro.svg +1 -0
- package/dist/icons/mono/os/mint.svg +1 -0
- package/dist/icons/mono/os/netbsd.svg +1 -0
- package/dist/icons/mono/os/nintendo.svg +1 -0
- package/dist/icons/mono/os/openbsd.svg +1 -0
- package/dist/icons/mono/os/playstation.svg +1 -0
- package/dist/icons/mono/os/raspbian.svg +1 -0
- package/dist/icons/mono/os/redhat.svg +1 -0
- package/dist/icons/mono/os/sailfish.svg +1 -0
- package/dist/icons/mono/os/slackware.svg +1 -0
- package/dist/icons/mono/os/suse.svg +1 -0
- package/dist/icons/mono/os/ubuntu.svg +1 -0
- package/dist/icons/mono/os/windows.svg +1 -0
- package/dist/icons/mono/os/xbox.svg +1 -0
- package/dist/ua-parser.min.js +3 -3
- package/dist/ua-parser.min.mjs +3 -3
- package/dist/ua-parser.pack.js +3 -3
- package/dist/ua-parser.pack.mjs +3 -3
- package/package.json +20 -2
- package/src/bot-detection/bot-detection.d.ts +6 -4
- package/src/bot-detection/bot-detection.js +10 -1
- package/src/bot-detection/bot-detection.mjs +10 -1
- package/src/browser-detection/browser-detection.d.ts +1 -1
- package/src/browser-detection/browser-detection.js +6 -3
- package/src/browser-detection/browser-detection.mjs +6 -3
- package/src/device-detection/device-detection.d.ts +1 -1
- package/src/device-detection/device-detection.js +1 -1
- package/src/device-detection/device-detection.mjs +1 -1
- package/src/enums/ua-parser-enums.d.ts +40 -4
- package/src/enums/ua-parser-enums.js +40 -4
- package/src/enums/ua-parser-enums.mjs +40 -4
- package/src/extensions/ua-parser-extensions.d.ts +1 -1
- package/src/extensions/ua-parser-extensions.js +24 -12
- package/src/extensions/ua-parser-extensions.mjs +24 -12
- package/src/helpers/ua-parser-helpers.d.ts +1 -1
- package/src/helpers/ua-parser-helpers.js +2 -2
- package/src/helpers/ua-parser-helpers.mjs +2 -2
- package/src/main/ua-parser.d.ts +11 -5
- package/src/main/ua-parser.js +69 -38
- package/src/main/ua-parser.mjs +69 -38
package/src/main/ua-parser.mjs
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// Source: /src/main/ua-parser.js
|
|
4
4
|
|
|
5
5
|
/////////////////////////////////////////////////////////////////////////////////
|
|
6
|
-
/* UAParser.js v2.0.
|
|
7
|
-
Copyright © 2012-
|
|
6
|
+
/* UAParser.js v2.0.10
|
|
7
|
+
Copyright © 2012-2026 Faisal Salman <f@faisalman.com>
|
|
8
8
|
AGPLv3 License *//*
|
|
9
9
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
|
10
10
|
Supports browser & node.js environment.
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
// Constants
|
|
22
22
|
/////////////
|
|
23
23
|
|
|
24
|
-
var LIBVERSION = '2.0.
|
|
24
|
+
var LIBVERSION = '2.0.10',
|
|
25
25
|
UA_MAX_LENGTH = 500,
|
|
26
26
|
USER_AGENT = 'user-agent',
|
|
27
27
|
EMPTY = '',
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
EMBEDDED = 'embedded',
|
|
60
60
|
|
|
61
61
|
// browser types
|
|
62
|
+
FETCHER = 'fetcher',
|
|
62
63
|
INAPP = 'inapp',
|
|
63
64
|
|
|
64
65
|
// client hints
|
|
@@ -171,7 +172,7 @@
|
|
|
171
172
|
itemListToArray = function (header) {
|
|
172
173
|
if (!header) return undefined;
|
|
173
174
|
var arr = [];
|
|
174
|
-
var tokens =
|
|
175
|
+
var tokens = normalizeHeaderValue(header).split(',');
|
|
175
176
|
for (var i = 0; i < tokens.length; i++) {
|
|
176
177
|
if (tokens[i].indexOf(';') > -1) {
|
|
177
178
|
var token = trim(tokens[i]).split(';v=');
|
|
@@ -188,6 +189,9 @@
|
|
|
188
189
|
majorize = function (version) {
|
|
189
190
|
return isString(version) ? strip(/[^\d\.]/g, version).split('.')[0] : undefined;
|
|
190
191
|
},
|
|
192
|
+
normalizeHeaderValue = function (str) {
|
|
193
|
+
return isString(str) ? trim(strip(/\\?\"/g, str), UA_MAX_LENGTH) : undefined;
|
|
194
|
+
},
|
|
191
195
|
setProps = function (arr) {
|
|
192
196
|
for (var i in arr) {
|
|
193
197
|
if (!arr.hasOwnProperty(i)) continue;
|
|
@@ -204,9 +208,6 @@
|
|
|
204
208
|
strip = function (pattern, str) {
|
|
205
209
|
return isString(str) ? str.replace(pattern, EMPTY) : str;
|
|
206
210
|
},
|
|
207
|
-
stripQuotes = function (str) {
|
|
208
|
-
return strip(/\\?\"/g, str);
|
|
209
|
-
},
|
|
210
211
|
trim = function (str, len) {
|
|
211
212
|
str = strip(/^\s\s*/, String(str));
|
|
212
213
|
return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
|
|
@@ -279,6 +280,10 @@
|
|
|
279
280
|
}
|
|
280
281
|
},
|
|
281
282
|
|
|
283
|
+
strTest = function (str, map) {
|
|
284
|
+
return map.test.test(str) ? map.ifTrue : map.ifFalse;
|
|
285
|
+
},
|
|
286
|
+
|
|
282
287
|
strMapper = function (str, map) {
|
|
283
288
|
|
|
284
289
|
for (var i in map) {
|
|
@@ -349,7 +354,7 @@
|
|
|
349
354
|
/\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS
|
|
350
355
|
], [VERSION, [NAME, PREFIX_MOBILE + 'Chrome']], [
|
|
351
356
|
/webview.+edge\/([\w\.]+)/i // Microsoft Edge
|
|
352
|
-
], [VERSION, [NAME, EDGE+' WebView']], [
|
|
357
|
+
], [VERSION, [NAME, EDGE+' WebView'], [TYPE, INAPP]], [
|
|
353
358
|
/edg(?:e|ios|a)?\/([\w\.]+)/i
|
|
354
359
|
], [VERSION, [NAME, 'Edge']], [
|
|
355
360
|
|
|
@@ -381,7 +386,7 @@
|
|
|
381
386
|
/(atlas|flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:hi|lg |ovi|qute)browser|palemoon)\/v?([-\w\.]+)/i,
|
|
382
387
|
// Atlas/Rekonq/Puffin/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
|
|
383
388
|
/(brave)(?: chrome)?\/([\d\.]+)/i, // Brave
|
|
384
|
-
/(heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,
|
|
389
|
+
/(aloha|heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i, // Aloha/HeyTap/Ovi/115/Surf
|
|
385
390
|
/(qwant)(?:ios|mobile)\/([\d\.]+)/i, // Qwant
|
|
386
391
|
/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i // Ecosia/Weibo
|
|
387
392
|
], [NAME, VERSION], [
|
|
@@ -389,7 +394,7 @@
|
|
|
389
394
|
], [VERSION, [NAME, 'Quark']], [
|
|
390
395
|
/\bddg\/([\w\.]+)/i // DuckDuckGo
|
|
391
396
|
], [VERSION, [NAME, 'DuckDuckGo']], [
|
|
392
|
-
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
|
|
397
|
+
/(?:\buc? ?browser|(?:juc.+)ucweb| ucpc)[\/ ]?([\w\.]+)/i // UCBrowser
|
|
393
398
|
], [VERSION, [NAME, 'UCBrowser']], [
|
|
394
399
|
/microm.+\bqbcore\/([\w\.]+)/i, // WeChat Desktop for Windows Built-in Browser
|
|
395
400
|
/\bqbcore\/([\w\.]+).+microm/i,
|
|
@@ -403,8 +408,10 @@
|
|
|
403
408
|
], [VERSION, [NAME, 'Yandex']], [
|
|
404
409
|
/slbrowser\/([\w\.]+)/i // Smart Lenovo Browser
|
|
405
410
|
], [VERSION, [NAME, 'Smart ' + LENOVO + SUFFIX_BROWSER]], [
|
|
406
|
-
/(
|
|
411
|
+
/(av(?:ast|g|ira))\/([\w\.]+)/i // Avast/AVG/Avira Secure Browser
|
|
407
412
|
], [[NAME, /(.+)/, '$1 Secure' + SUFFIX_BROWSER], VERSION], [
|
|
413
|
+
/norton\/([\w\.]+)/i // Norton Private Browser
|
|
414
|
+
], [VERSION, [NAME, 'Norton Private' + SUFFIX_BROWSER]], [
|
|
408
415
|
/\bfocus\/([\w\.]+)/i // Firefox Focus
|
|
409
416
|
], [VERSION, [NAME, FIREFOX+' Focus']], [
|
|
410
417
|
/ mms\/([\w\.]+)$/i // Opera Neon
|
|
@@ -426,7 +433,9 @@
|
|
|
426
433
|
/\b(qq)\/([\w\.]+)/i // QQ
|
|
427
434
|
], [[NAME, /(.+)/, '$1Browser'], VERSION], [
|
|
428
435
|
/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
|
|
429
|
-
], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/
|
|
436
|
+
], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/VivoBrowser/PicoBrowser
|
|
437
|
+
/ HBPC\/([\w\.]+)/ // Huawei Browser
|
|
438
|
+
], [VERSION, [NAME, HUAWEI + SUFFIX_BROWSER]], [
|
|
430
439
|
/samsungbrowser\/([\w\.]+)/i // Samsung Internet
|
|
431
440
|
], [VERSION, [NAME, SAMSUNG + ' Internet']], [
|
|
432
441
|
/metasr[\/ ]?([\d\.]+)/i // Sogou Explorer
|
|
@@ -437,10 +446,9 @@
|
|
|
437
446
|
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
|
|
438
447
|
/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i // QQ/2345
|
|
439
448
|
], [NAME, VERSION], [
|
|
440
|
-
/(lbbrowser|rekonq|steam(?= (clie|tenf|gameo)))/i
|
|
449
|
+
/(lbbrowser|luakit|rekonq|steam(?= (clie|tenf|gameo)))/i // LieBao Browser/Luakit/Rekonq/Steam
|
|
441
450
|
], [NAME], [
|
|
442
|
-
/ome\/([\w\.]+)
|
|
443
|
-
/ome\/([\w\.]+).+qihu (360)[es]e/i // 360
|
|
451
|
+
/ome\/([\w\.]+).+(iron(?= saf)|360(?=[es]e$))/i // Iron / 360
|
|
444
452
|
], [VERSION, NAME], [
|
|
445
453
|
|
|
446
454
|
// WebView
|
|
@@ -468,14 +476,17 @@
|
|
|
468
476
|
/(chromium)[\/ ]([-\w\.]+)/i // Chromium
|
|
469
477
|
], [NAME, VERSION], [
|
|
470
478
|
|
|
479
|
+
/ome-(lighthouse)$/i // Chrome Lighthouse
|
|
480
|
+
], [NAME, [TYPE, FETCHER]], [
|
|
481
|
+
|
|
471
482
|
/headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
|
|
472
483
|
], [VERSION, [NAME, CHROME+' Headless']], [
|
|
473
484
|
|
|
474
485
|
/wv\).+chrome\/([\w\.]+).+edgw\//i // Edge WebView2
|
|
475
|
-
], [VERSION, [NAME, EDGE+' WebView2']], [
|
|
486
|
+
], [VERSION, [NAME, EDGE+' WebView2'], [TYPE, INAPP]], [
|
|
476
487
|
|
|
477
|
-
|
|
478
|
-
], [[NAME, CHROME+' WebView'], VERSION], [
|
|
488
|
+
/; wv\).+(chrome)\/([\w\.]+)/i // Chrome WebView
|
|
489
|
+
], [[NAME, CHROME+' WebView'], VERSION, [TYPE, INAPP]], [
|
|
479
490
|
|
|
480
491
|
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i // Android Browser
|
|
481
492
|
], [VERSION, [NAME, 'Android' + SUFFIX_BROWSER]], [
|
|
@@ -609,7 +620,7 @@
|
|
|
609
620
|
/oid[^\)]+; (redmi[\-_ ]?(?:note|k)?[\w_ ]+|m?[12]\d[01]\d\w{3,6}|poco[\w ]+|(shark )?\w{3}-[ah]0|qin ?[1-3](s\+|ultra| pro)?)( bui|; wv|\))/i,
|
|
610
621
|
// Xiaomi Mi
|
|
611
622
|
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,
|
|
612
|
-
|
|
623
|
+
/; ([\w ]+) miui\/v?\d/i
|
|
613
624
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
|
614
625
|
|
|
615
626
|
// OnePlus
|
|
@@ -764,10 +775,19 @@
|
|
|
764
775
|
/; (ac[3-6]\d\w{2,8})( b|\))/i
|
|
765
776
|
], [MODEL, [VENDOR, 'Archos'], [TYPE, MOBILE]], [
|
|
766
777
|
|
|
778
|
+
// Blackview
|
|
779
|
+
/blackview ([-\w ]+)( b|\))/i,
|
|
780
|
+
/; (bv\d{4}[-\w ]*)( b|\))/i
|
|
781
|
+
], [MODEL, [VENDOR, 'Blackview'], [TYPE, MOBILE]], [
|
|
782
|
+
|
|
767
783
|
// HMD
|
|
768
784
|
/; (n159v)/i
|
|
769
785
|
], [MODEL, [VENDOR, 'HMD'], [TYPE, MOBILE]], [
|
|
770
786
|
|
|
787
|
+
// T-Mobile
|
|
788
|
+
/((revvl[ \w\+]+|tm(?:rv|af)\w*[45]g(?:tb)?))( b|\))/i
|
|
789
|
+
], [MODEL, [TYPE, strTest, { 'test': /ta?b/i, 'ifTrue': TABLET, 'ifFalse': MOBILE }], [VENDOR, 'T-Mobile']], [
|
|
790
|
+
|
|
771
791
|
// MIXED
|
|
772
792
|
/(imo) (tab \w+)/i, // IMO
|
|
773
793
|
/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i // Infinix XPad / Tecno
|
|
@@ -775,8 +795,8 @@
|
|
|
775
795
|
|
|
776
796
|
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
|
777
797
|
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
|
|
778
|
-
// BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
|
|
779
|
-
/; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([
|
|
798
|
+
// BLU/Coolpad/CUBOT/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
|
|
799
|
+
/; (blu|coolpad|cubot|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([-\w\+ ]+?)(?: bui|\)|; r)/i,
|
|
780
800
|
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
|
781
801
|
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
|
782
802
|
/(oppo) ?([\w ]+) bui/i, // OPPO
|
|
@@ -1014,14 +1034,16 @@
|
|
|
1014
1034
|
/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
|
|
1015
1035
|
// https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
|
|
1016
1036
|
], [[VERSION, strMapper, {'25':'120','24':'108','23':'94','22':'87','6':'79','5':'68','4':'53','3':'38','2':'538','1':'537','*':'TV'}], [NAME, 'webOS']], [
|
|
1017
|
-
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
1037
|
+
/watch(?: ?os[,\/ ]|\d,\d\/)([\d\.]+)/i // watchOS
|
|
1018
1038
|
], [VERSION, [NAME, 'watchOS']], [
|
|
1019
1039
|
|
|
1020
1040
|
// Google ChromeOS
|
|
1021
|
-
/
|
|
1022
|
-
], [[NAME,
|
|
1041
|
+
/cros [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
|
|
1042
|
+
], [VERSION, [NAME, 'Chrome OS']],[
|
|
1023
1043
|
|
|
1024
1044
|
// Smart TVs
|
|
1045
|
+
/kepler ([\w\.]+); (aft|aeo)/i // Vega OS
|
|
1046
|
+
], [VERSION, [NAME, 'Vega OS']],[
|
|
1025
1047
|
/(netrange)mmh/i, // Netrange
|
|
1026
1048
|
/(nettv)\/(\d+\.[\w\.]+)/i, // NetTV
|
|
1027
1049
|
|
|
@@ -1182,12 +1204,12 @@
|
|
|
1182
1204
|
[BRANDS, itemListToArray(uach[CH])],
|
|
1183
1205
|
[FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
|
|
1184
1206
|
[MOBILE, /\?1/.test(uach[CH_MOBILE])],
|
|
1185
|
-
[MODEL,
|
|
1186
|
-
[PLATFORM,
|
|
1187
|
-
[PLATFORMVER,
|
|
1188
|
-
[ARCHITECTURE,
|
|
1207
|
+
[MODEL, normalizeHeaderValue(uach[CH_MODEL])],
|
|
1208
|
+
[PLATFORM, normalizeHeaderValue(uach[CH_PLATFORM])],
|
|
1209
|
+
[PLATFORMVER, normalizeHeaderValue(uach[CH_PLATFORM_VER])],
|
|
1210
|
+
[ARCHITECTURE, normalizeHeaderValue(uach[CH_ARCH])],
|
|
1189
1211
|
[FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
|
|
1190
|
-
[BITNESS,
|
|
1212
|
+
[BITNESS, normalizeHeaderValue(uach[CH_BITNESS])]
|
|
1191
1213
|
]);
|
|
1192
1214
|
} else {
|
|
1193
1215
|
for (var prop in uach) {
|
|
@@ -1275,11 +1297,17 @@
|
|
|
1275
1297
|
this.set(MAJOR, majorize(this.get(VERSION)));
|
|
1276
1298
|
break;
|
|
1277
1299
|
case OS:
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1300
|
+
// Since iOS 26, Safari's UA reports the OS version as frozen at 18:
|
|
1301
|
+
// https://webkit.org/blog/17333/webkit-features-in-safari-26-0/#update-to-ua-string
|
|
1302
|
+
if (this.get(NAME) == 'iOS' && this.get(VERSION)) {
|
|
1303
|
+
// Only perform this if iOS version is 18/19
|
|
1304
|
+
if (/^1[89][^\d]/.exec(this.get(VERSION))) {
|
|
1305
|
+
// Based on the assumption that "iOS" version is tightly coupled with "Safari" version
|
|
1306
|
+
var realVersion = /\) Version\/((\d+)[\d\.]*)/.exec(this.ua);
|
|
1307
|
+
if (realVersion && parseInt(realVersion[2], 10) >= 26) {
|
|
1308
|
+
// iOS version = Safari version
|
|
1309
|
+
this.set(VERSION, realVersion[1]);
|
|
1310
|
+
}
|
|
1283
1311
|
}
|
|
1284
1312
|
}
|
|
1285
1313
|
break;
|
|
@@ -1435,9 +1463,7 @@
|
|
|
1435
1463
|
EMPTY)), // empty string
|
|
1436
1464
|
|
|
1437
1465
|
httpUACH = new UACHData(headers, true),
|
|
1438
|
-
regexMap =
|
|
1439
|
-
extend(defaultRegexes, extensions) :
|
|
1440
|
-
defaultRegexes,
|
|
1466
|
+
regexMap = defaultRegexes,
|
|
1441
1467
|
|
|
1442
1468
|
createItemFunc = function (itemType) {
|
|
1443
1469
|
if (itemType == RESULT) {
|
|
@@ -1472,9 +1498,14 @@
|
|
|
1472
1498
|
['setUA', function (ua) {
|
|
1473
1499
|
if (isString(ua)) userAgent = trim(ua, UA_MAX_LENGTH);
|
|
1474
1500
|
return this;
|
|
1501
|
+
}],
|
|
1502
|
+
['useExtension', function (exts) {
|
|
1503
|
+
if (exts) regexMap = extend(regexMap, exts);
|
|
1504
|
+
return this;
|
|
1475
1505
|
}]
|
|
1476
1506
|
])
|
|
1477
|
-
.setUA(userAgent)
|
|
1507
|
+
.setUA(userAgent)
|
|
1508
|
+
.useExtension(extensions);
|
|
1478
1509
|
|
|
1479
1510
|
return this;
|
|
1480
1511
|
}
|