ua-parser-js 2.0.0-beta.3 → 2.0.0-rc.2

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.
Files changed (197) hide show
  1. package/README.md +22 -17
  2. package/dist/icons/color/LICENSE.md +3 -0
  3. package/dist/icons/color/browser/android-browser.svg +1 -0
  4. package/dist/icons/color/browser/avant.png +0 -0
  5. package/dist/icons/color/browser/basilisk.png +0 -0
  6. package/dist/icons/color/browser/basilisk.svg +1 -0
  7. package/dist/icons/color/browser/brave.png +0 -0
  8. package/dist/icons/color/browser/brave.svg +1 -0
  9. package/dist/icons/color/browser/chrome.png +0 -0
  10. package/dist/icons/color/browser/chrome.svg +1 -0
  11. package/dist/icons/color/browser/chromium.png +0 -0
  12. package/dist/icons/color/browser/chromium.svg +1 -0
  13. package/dist/icons/color/browser/coc-coc.png +0 -0
  14. package/dist/icons/color/browser/default.png +0 -0
  15. package/dist/icons/color/browser/default.svg +1 -0
  16. package/dist/icons/color/browser/dolphin.png +0 -0
  17. package/dist/icons/color/browser/edge.png +0 -0
  18. package/dist/icons/color/browser/edge.svg +1 -0
  19. package/dist/icons/color/browser/electron.png +0 -0
  20. package/dist/icons/color/browser/electron.svg +1 -0
  21. package/dist/icons/color/browser/falkon.png +0 -0
  22. package/dist/icons/color/browser/falkon.svg +1 -0
  23. package/dist/icons/color/browser/firefox-reality.png +0 -0
  24. package/dist/icons/color/browser/firefox-reality.svg +1 -0
  25. package/dist/icons/color/browser/firefox.png +0 -0
  26. package/dist/icons/color/browser/firefox.svg +1 -0
  27. package/dist/icons/color/browser/gsa.svg +9 -0
  28. package/dist/icons/color/browser/icecat.png +0 -0
  29. package/dist/icons/color/browser/ie.svg +6 -0
  30. package/dist/icons/color/browser/konqueror.png +0 -0
  31. package/dist/icons/color/browser/konqueror.svg +1 -0
  32. package/dist/icons/color/browser/maxthon.png +0 -0
  33. package/dist/icons/color/browser/midori.png +0 -0
  34. package/dist/icons/color/browser/midori.svg +1 -0
  35. package/dist/icons/color/browser/netsurf.png +0 -0
  36. package/dist/icons/color/browser/netsurf.svg +1 -0
  37. package/dist/icons/color/browser/opera-gx.png +0 -0
  38. package/dist/icons/color/browser/opera-gx.svg +1 -0
  39. package/dist/icons/color/browser/opera-mini.png +0 -0
  40. package/dist/icons/color/browser/opera-touch.png +0 -0
  41. package/dist/icons/color/browser/opera.png +0 -0
  42. package/dist/icons/color/browser/opera.svg +1 -0
  43. package/dist/icons/color/browser/palemoon.png +0 -0
  44. package/dist/icons/color/browser/puffin.png +0 -0
  45. package/dist/icons/color/browser/safari.png +0 -0
  46. package/dist/icons/color/browser/safari.svg +1 -0
  47. package/dist/icons/color/browser/samsung-internet.png +0 -0
  48. package/dist/icons/color/browser/samsung-internet.svg +1 -0
  49. package/dist/icons/color/browser/seamonkey.png +0 -0
  50. package/dist/icons/color/browser/silk.png +0 -0
  51. package/dist/icons/color/browser/sogou-mobile.png +0 -0
  52. package/dist/icons/color/browser/ucbrowser.png +0 -0
  53. package/dist/icons/color/browser/ucbrowser.svg +1 -0
  54. package/dist/icons/color/browser/vivaldi.png +0 -0
  55. package/dist/icons/color/browser/vivaldi.svg +1 -0
  56. package/dist/icons/color/browser/webkit.png +0 -0
  57. package/dist/icons/color/browser/webkit.svg +1 -0
  58. package/dist/icons/color/browser/yandex.png +0 -0
  59. package/dist/icons/color/os/centos.svg +1 -0
  60. package/dist/icons/mono/LICENSE.md +3 -0
  61. package/dist/icons/mono/browser/alipay.svg +1 -0
  62. package/dist/icons/mono/browser/android-browser.svg +1 -0
  63. package/dist/icons/mono/browser/avast-secure-browser.svg +1 -0
  64. package/dist/icons/mono/browser/baidu-browser.svg +1 -0
  65. package/dist/icons/mono/browser/brave.svg +1 -0
  66. package/dist/icons/mono/browser/chrome-headless.svg +1 -0
  67. package/dist/icons/mono/browser/chrome-webview.svg +1 -0
  68. package/dist/icons/mono/browser/chrome.svg +1 -0
  69. package/dist/icons/mono/browser/chromium.svg +1 -0
  70. package/dist/icons/mono/browser/duckduckgo.svg +1 -0
  71. package/dist/icons/mono/browser/edge.svg +1 -0
  72. package/dist/icons/mono/browser/electron.svg +1 -0
  73. package/dist/icons/mono/browser/facebook.svg +1 -0
  74. package/dist/icons/mono/browser/firefox-focus.svg +1 -0
  75. package/dist/icons/mono/browser/firefox-reality.svg +1 -0
  76. package/dist/icons/mono/browser/firefox.svg +1 -0
  77. package/dist/icons/mono/browser/gsa.svg +1 -0
  78. package/dist/icons/mono/browser/huawei-browser.svg +1 -0
  79. package/dist/icons/mono/browser/icecat.svg +1 -0
  80. package/dist/icons/mono/browser/ie.svg +1 -0
  81. package/dist/icons/mono/browser/instagram.svg +1 -0
  82. package/dist/icons/mono/browser/jasmine.svg +1 -0
  83. package/dist/icons/mono/browser/kakaotalk.svg +1 -0
  84. package/dist/icons/mono/browser/klarna.svg +1 -0
  85. package/dist/icons/mono/browser/line.svg +1 -0
  86. package/dist/icons/mono/browser/linkedin.svg +1 -0
  87. package/dist/icons/mono/browser/miui-browser.svg +1 -0
  88. package/dist/icons/mono/browser/mobile-chrome.svg +1 -0
  89. package/dist/icons/mono/browser/mobile-firefox.svg +1 -0
  90. package/dist/icons/mono/browser/mobile-safari.svg +1 -0
  91. package/dist/icons/mono/browser/mozilla.svg +1 -0
  92. package/dist/icons/mono/browser/naver.svg +1 -0
  93. package/dist/icons/mono/browser/nokia-browser.svg +1 -0
  94. package/dist/icons/mono/browser/oculus-browser.svg +1 -0
  95. package/dist/icons/mono/browser/opera-coast.svg +1 -0
  96. package/dist/icons/mono/browser/opera-gx.svg +1 -0
  97. package/dist/icons/mono/browser/opera-mini.svg +1 -0
  98. package/dist/icons/mono/browser/opera-mobi.svg +1 -0
  99. package/dist/icons/mono/browser/opera-tablet.svg +1 -0
  100. package/dist/icons/mono/browser/opera-touch.svg +1 -0
  101. package/dist/icons/mono/browser/opera.svg +1 -0
  102. package/dist/icons/mono/browser/qqbrowser.svg +1 -0
  103. package/dist/icons/mono/browser/qqbrowserlite.svg +1 -0
  104. package/dist/icons/mono/browser/safari.svg +1 -0
  105. package/dist/icons/mono/browser/sailfish-browser.svg +1 -0
  106. package/dist/icons/mono/browser/samsung-internet.svg +1 -0
  107. package/dist/icons/mono/browser/smart-lenovo-browser.svg +1 -0
  108. package/dist/icons/mono/browser/snapchat.svg +1 -0
  109. package/dist/icons/mono/browser/sogou-explorer.svg +1 -0
  110. package/dist/icons/mono/browser/sogou-mobile.svg +1 -0
  111. package/dist/icons/mono/browser/tesla.svg +1 -0
  112. package/dist/icons/mono/browser/tiktok.svg +1 -0
  113. package/dist/icons/mono/browser/twitter.svg +1 -0
  114. package/dist/icons/mono/browser/vivaldi.svg +1 -0
  115. package/dist/icons/mono/browser/vivo-browser.svg +1 -0
  116. package/dist/icons/mono/browser/wechat.svg +1 -0
  117. package/dist/icons/mono/browser/weibo.svg +1 -0
  118. package/dist/icons/mono/browser/yandex.svg +1 -0
  119. package/dist/icons/mono/device/acer.svg +1 -0
  120. package/dist/icons/mono/device/amazon.svg +1 -0
  121. package/dist/icons/mono/device/apple.svg +1 -0
  122. package/dist/icons/mono/device/asus.svg +1 -0
  123. package/dist/icons/mono/device/att.svg +1 -0
  124. package/dist/icons/mono/device/blackberry.svg +1 -0
  125. package/dist/icons/mono/device/dell.svg +1 -0
  126. package/dist/icons/mono/device/facebook.svg +1 -0
  127. package/dist/icons/mono/device/fairphone.svg +1 -0
  128. package/dist/icons/mono/device/google.svg +1 -0
  129. package/dist/icons/mono/device/hp.svg +1 -0
  130. package/dist/icons/mono/device/huawei.svg +1 -0
  131. package/dist/icons/mono/device/lenovo.svg +1 -0
  132. package/dist/icons/mono/device/lg.svg +1 -0
  133. package/dist/icons/mono/device/meizu.svg +1 -0
  134. package/dist/icons/mono/device/microsoft.svg +1 -0
  135. package/dist/icons/mono/device/motorola.svg +1 -0
  136. package/dist/icons/mono/device/nintendo.svg +1 -0
  137. package/dist/icons/mono/device/nokia.svg +1 -0
  138. package/dist/icons/mono/device/nvidia.svg +1 -0
  139. package/dist/icons/mono/device/oneplus.svg +1 -0
  140. package/dist/icons/mono/device/oppo.svg +1 -0
  141. package/dist/icons/mono/device/panasonic.svg +1 -0
  142. package/dist/icons/mono/device/roku.svg +1 -0
  143. package/dist/icons/mono/device/samsung.svg +1 -0
  144. package/dist/icons/mono/device/siemens.svg +1 -0
  145. package/dist/icons/mono/device/sony.svg +1 -0
  146. package/dist/icons/mono/device/tesla.svg +1 -0
  147. package/dist/icons/mono/device/vivo.svg +1 -0
  148. package/dist/icons/mono/device/vodafone.svg +1 -0
  149. package/dist/icons/mono/device/xiaomi.svg +1 -0
  150. package/dist/icons/mono/device/zebra.svg +1 -0
  151. package/dist/icons/mono/os/android.svg +1 -0
  152. package/dist/icons/mono/os/arch.svg +1 -0
  153. package/dist/icons/mono/os/blackberry.svg +1 -0
  154. package/dist/icons/mono/os/centos.svg +1 -0
  155. package/dist/icons/mono/os/chrome-os.svg +1 -0
  156. package/dist/icons/mono/os/chromecast.svg +1 -0
  157. package/dist/icons/mono/os/debian.svg +1 -0
  158. package/dist/icons/mono/os/deepin.svg +1 -0
  159. package/dist/icons/mono/os/elementary-os.svg +1 -0
  160. package/dist/icons/mono/os/fedora.svg +1 -0
  161. package/dist/icons/mono/os/firefox.svg +1 -0
  162. package/dist/icons/mono/os/freebsd.svg +1 -0
  163. package/dist/icons/mono/os/gentoo.svg +1 -0
  164. package/dist/icons/mono/os/gnu.svg +1 -0
  165. package/dist/icons/mono/os/harmonyos.svg +1 -0
  166. package/dist/icons/mono/os/ios.svg +1 -0
  167. package/dist/icons/mono/os/kaios.svg +1 -0
  168. package/dist/icons/mono/os/linux.svg +1 -0
  169. package/dist/icons/mono/os/macos.svg +1 -0
  170. package/dist/icons/mono/os/manjaro.svg +1 -0
  171. package/dist/icons/mono/os/mint.svg +1 -0
  172. package/dist/icons/mono/os/netbsd.svg +1 -0
  173. package/dist/icons/mono/os/nintendo.svg +1 -0
  174. package/dist/icons/mono/os/openbsd.svg +1 -0
  175. package/dist/icons/mono/os/playstation.svg +1 -0
  176. package/dist/icons/mono/os/raspbian.svg +1 -0
  177. package/dist/icons/mono/os/redhat.svg +1 -0
  178. package/dist/icons/mono/os/sailfish.svg +1 -0
  179. package/dist/icons/mono/os/slackware.svg +1 -0
  180. package/dist/icons/mono/os/suse.svg +1 -0
  181. package/dist/icons/mono/os/ubuntu.svg +1 -0
  182. package/dist/icons/mono/os/windows.svg +1 -0
  183. package/dist/icons/mono/os/xbox.svg +1 -0
  184. package/dist/ua-parser.min.js +2 -2
  185. package/dist/ua-parser.pack.js +2 -2
  186. package/package.json +9 -4
  187. package/src/enums/ua-parser-enums.js +22 -6
  188. package/src/enums/ua-parser-enums.mjs +22 -6
  189. package/src/extensions/ua-parser-extensions.d.ts +2 -1
  190. package/src/extensions/ua-parser-extensions.js +100 -75
  191. package/src/extensions/ua-parser-extensions.mjs +100 -75
  192. package/src/helpers/ua-parser-helpers.d.ts +14 -4
  193. package/src/helpers/ua-parser-helpers.js +38 -6
  194. package/src/helpers/ua-parser-helpers.mjs +39 -7
  195. package/src/main/ua-parser.d.ts +3 -3
  196. package/src/main/ua-parser.js +83 -33
  197. package/src/main/ua-parser.mjs +83 -33
@@ -3,12 +3,12 @@
3
3
  // Source: /src/main/ua-parser.js
4
4
 
5
5
  /////////////////////////////////////////////////////////////////////////////////
6
- /* UAParser.js v2.0.0-beta.3
6
+ /* UAParser.js v2.0.0-rc.2
7
7
  Copyright © 2012-2024 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.
11
- Demo : https://faisalman.github.io/ua-parser-js
11
+ Demo : https://uaparser.dev
12
12
  Source : https://github.com/faisalman/ua-parser-js */
13
13
  /////////////////////////////////////////////////////////////////////////////////
14
14
 
@@ -21,7 +21,7 @@
21
21
  // Constants
22
22
  /////////////
23
23
 
24
- var LIBVERSION = '2.0.0-beta.3',
24
+ var LIBVERSION = '2.0.0-rc.2',
25
25
  EMPTY = '',
26
26
  UNKNOWN = '?',
27
27
  FUNC_TYPE = 'function',
@@ -42,6 +42,7 @@
42
42
  WEARABLE = 'wearable',
43
43
  XR = 'xr',
44
44
  EMBEDDED = 'embedded',
45
+ INAPP = 'inapp',
45
46
  USER_AGENT = 'user-agent',
46
47
  UA_MAX_LENGTH = 500,
47
48
  BRANDS = 'brands',
@@ -84,6 +85,7 @@
84
85
  PREFIX_MOBILE = 'Mobile ',
85
86
  SUFFIX_BROWSER = ' Browser',
86
87
  CHROME = 'Chrome',
88
+ CHROMECAST = 'Chromecast',
87
89
  EDGE = 'Edge',
88
90
  FIREFOX = 'Firefox',
89
91
  OPERA = 'Opera',
@@ -321,19 +323,23 @@
321
323
  // Mixed
322
324
  /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i // Baidu
323
325
  ], [VERSION, [NAME, 'Baidu']], [
326
+ /\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i // Maxthon
327
+ ], [VERSION, [NAME, 'Maxthon']], [
324
328
  /(kindle)\/([\w\.]+)/i, // Kindle
325
329
  /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
326
330
  // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
327
331
  // Trident based
328
- /(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser
332
+ /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i, // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
329
333
  /(?:ms|\()(ie) ([\w\.]+)/i, // Internet Explorer
330
334
 
331
- // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
332
- /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar)\/([-\w\.]+)/i,
333
- // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar
334
- /(heytap|ovi)browser\/([\d\.]+)/i, // HeyTap/Ovi
335
+ // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon
336
+ /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon)\/([-\w\.]+)/i,
337
+ // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
338
+ /(heytap|ovi|115)browser\/([\d\.]+)/i, // HeyTap/Ovi/115
335
339
  /(weibo)__([\d\.]+)/i // Weibo
336
340
  ], [NAME, VERSION], [
341
+ /quark(?:pc)?\/([-\w\.]+)/i // Quark
342
+ ], [VERSION, [NAME, 'Quark']], [
337
343
  /\bddg\/([\w\.]+)/i // DuckDuckGo
338
344
  ], [VERSION, [NAME, 'DuckDuckGo']], [
339
345
  /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i // UCBrowser
@@ -366,31 +372,31 @@
366
372
  ], [VERSION, [NAME, 'MIUI' + SUFFIX_BROWSER]], [
367
373
  /fxios\/([\w\.-]+)/i // Firefox for iOS
368
374
  ], [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]], [
369
- /\bqihu|(qi?ho?o?|360)browser/i // 360
370
- ], [[NAME, '360' + SUFFIX_BROWSER]], [
375
+ /\bqihoobrowser\/?([\w\.]*)/i // 360
376
+ ], [VERSION, [NAME, '360']], [
371
377
  /\b(qq)\/([\w\.]+)/i // QQ
372
378
  ], [[NAME, /(.+)/, '$1Browser'], VERSION], [
373
379
  /(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
374
380
  ], [[NAME, /(.+)/, '$1' + SUFFIX_BROWSER], VERSION], [ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
375
381
  /samsungbrowser\/([\w\.]+)/i // Samsung Internet
376
382
  ], [VERSION, [NAME, SAMSUNG + ' Internet']], [
377
- /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon
378
- ], [[NAME, /_/g, ' '], VERSION], [
379
383
  /metasr[\/ ]?([\d\.]+)/i // Sogou Explorer
380
384
  ], [VERSION, [NAME, SOGOU + ' Explorer']], [
381
385
  /(sogou)mo\w+\/([\d\.]+)/i // Sogou Mobile
382
386
  ], [[NAME, SOGOU + ' Mobile'], VERSION], [
383
387
  /(electron)\/([\w\.]+) safari/i, // Electron-based App
384
388
  /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, // Tesla
385
- /m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i // QQBrowser/2345 Browser
389
+ /m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i // QQ/2345
386
390
  ], [NAME, VERSION], [
387
- /(lbbrowser|rekonq)/i, // LieBao Browser/Rekonq
388
- /\[(linkedin)app\]/i // LinkedIn App for iOS & Android
391
+ /(lbbrowser|rekonq)/i // LieBao Browser/Rekonq
389
392
  ], [NAME], [
393
+ /ome\/([\w\.]+) \w* ?(iron) saf/i, // Iron
394
+ /ome\/([\w\.]+).+qihu (360)[es]e/i // 360
395
+ ], [VERSION, NAME], [
390
396
 
391
397
  // WebView
392
398
  /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i // Facebook App for iOS & Android
393
- ], [[NAME, FACEBOOK], VERSION], [
399
+ ], [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]], [
394
400
  /(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
395
401
  /(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
396
402
  /(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
@@ -398,12 +404,17 @@
398
404
  /\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
399
405
  /(alipay)client\/([\w\.]+)/i, // Alipay
400
406
  /(twitter)(?:and| f.+e\/([\w\.]+))/i, // Twitter
401
- /(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i // Chromium/Instagram/Snapchat
402
- ], [NAME, VERSION], [
407
+ /(instagram|snapchat)[\/ ]([-\w\.]+)/i // Instagram/Snapchat
408
+ ], [NAME, VERSION, [TYPE, INAPP]], [
403
409
  /\bgsa\/([\w\.]+) .*safari\//i // Google Search Appliance on iOS
404
- ], [VERSION, [NAME, 'GSA']], [
410
+ ], [VERSION, [NAME, 'GSA'], [TYPE, INAPP]], [
405
411
  /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i // TikTok
406
- ], [VERSION, [NAME, 'TikTok']], [
412
+ ], [VERSION, [NAME, 'TikTok'], [TYPE, INAPP]], [
413
+ /\[(linkedin)app\]/i // LinkedIn App for iOS & Android
414
+ ], [NAME, [TYPE, INAPP]], [
415
+
416
+ /(chromium)[\/ ]([-\w\.]+)/i // Chromium
417
+ ], [NAME, VERSION], [
407
418
 
408
419
  /headlesschrome(?:\/([\w\.]+)| )/i // Chrome Headless
409
420
  ], [VERSION, [NAME, CHROME+' Headless']], [
@@ -437,7 +448,7 @@
437
448
  ], [[NAME, PREFIX_MOBILE + FIREFOX], VERSION], [
438
449
  /(navigator|netscape\d?)\/([-\w\.]+)/i // Netscape
439
450
  ], [[NAME, 'Netscape'], VERSION], [
440
- /(wolvic)\/([\w\.]+)/i // Wolvic
451
+ /(wolvic|librewolf)\/([\w\.]+)/i // Wolvic/LibreWolf
441
452
  ], [NAME, VERSION], [
442
453
  /mobile vr; rv:([\w\.]+)\).+firefox/i // Firefox Reality
443
454
  ], [VERSION, [NAME, FIREFOX+' Reality']], [
@@ -499,8 +510,8 @@
499
510
  // Samsung
500
511
  /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
501
512
  ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [
502
- /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
503
- /samsung[- ]([-\w]+)/i,
513
+ /\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
514
+ /samsung[- ]((?!sm-[lr])[-\w]+)/i,
504
515
  /sec-(sgh\w+)/i
505
516
  ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [
506
517
 
@@ -531,7 +542,7 @@
531
542
  /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
532
543
  /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
533
544
  /oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
534
- /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i // Xiaomi Mi
545
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i // Xiaomi Mi
535
546
  ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
536
547
  /oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
537
548
  /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
@@ -599,7 +610,7 @@
599
610
 
600
611
  // Amazon
601
612
  /(alexa)webm/i,
602
- /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, // Kindle Fire without Silk / Echo Show
613
+ /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i, // Kindle Fire without Silk / Echo Show
603
614
  /(kf[a-z]+)( bui|\)).+silk\//i // Kindle Fire HD
604
615
  ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [
605
616
  /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i // Fire Phone
@@ -628,6 +639,17 @@
628
639
  /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
629
640
  ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
630
641
 
642
+ // TCL
643
+ /tcl (xess p17aa)/i,
644
+ /droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i
645
+ ], [MODEL, [VENDOR, 'TCL'], [TYPE, TABLET]], [
646
+ /droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i
647
+ ], [MODEL, [VENDOR, 'TCL'], [TYPE, MOBILE]], [
648
+
649
+ // itel
650
+ /(itel) ((\w+))/i
651
+ ], [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { 'tablet' : ['p10001l', 'w7001'], '*' : 'mobile' }]], [
652
+
631
653
  // Acer
632
654
  /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
633
655
  ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [
@@ -641,6 +663,10 @@
641
663
  /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
642
664
  ], [MODEL, [VENDOR, 'Ulefone'], [TYPE, MOBILE]], [
643
665
 
666
+ // Nothing
667
+ /droid.+; (a(?:015|06[35]|142p?))/i
668
+ ], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
669
+
644
670
  // MIXED
645
671
  /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,
646
672
  // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron
@@ -685,8 +711,14 @@
685
711
  ], [[VENDOR, LG], [TYPE, SMARTTV]], [
686
712
  /(apple) ?tv/i // Apple TV
687
713
  ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [
688
- /crkey/i // Google Chromecast
689
- ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
714
+ /crkey.*devicetype\/chromecast/i // Google Chromecast Third Generation
715
+ ], [[MODEL, CHROMECAST+' Third Generation'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
716
+ /crkey.*devicetype\/([^/]*)/i // Google Chromecast with specific device type
717
+ ], [[MODEL, /^/, 'Chromecast '], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
718
+ /fuchsia.*crkey/i // Google Chromecast Nest Hub
719
+ ], [[MODEL, CHROMECAST+' Nest Hub'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
720
+ /crkey/i // Google Chromecast, Linux-based or unknown
721
+ ], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
690
722
  /droid.+aft(\w+)( bui|\))/i // Fire TV
691
723
  ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
692
724
  /\(dtv[\);].+(aquos)/i,
@@ -722,6 +754,8 @@
722
754
  // WEARABLES
723
755
  ///////////////////
724
756
 
757
+ /\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i // Samsung Galaxy Watch
758
+ ], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
725
759
  /((pebble))app/i // Pebble
726
760
  ], [VENDOR, MODEL, [TYPE, WEARABLE]], [
727
761
  /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
@@ -735,7 +769,9 @@
735
769
 
736
770
  /droid.+; (glass) \d/i // Google Glass
737
771
  ], [MODEL, [VENDOR, GOOGLE], [TYPE, XR]], [
738
- /(quest( \d| pro)?)/i // Oculus Quest
772
+ /(pico) (4|neo3(?: link|pro)?)/i // Pico
773
+ ], [VENDOR, MODEL, [TYPE, XR]], [
774
+ /; (quest( \d| pro)?)/i // Oculus Quest
739
775
  ], [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]], [
740
776
 
741
777
  ///////////////////
@@ -768,6 +804,9 @@
768
804
  /windows.+ edge\/([\w\.]+)/i // EdgeHTML
769
805
  ], [VERSION, [NAME, EDGE+'HTML']], [
770
806
 
807
+ /(arkweb)\/([\w\.]+)/i // ArkWeb
808
+ ], [NAME, VERSION], [
809
+
771
810
  /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink
772
811
  ], [VERSION, [NAME, 'Blink']], [
773
812
 
@@ -804,10 +843,22 @@
804
843
  /(macintosh|mac_powerpc\b)(?!.+haiku)/i // Mac OS
805
844
  ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [
806
845
 
846
+ // Google Chromecast
847
+ /android ([\d\.]+).*crkey/i // Google Chromecast, Android-based
848
+ ], [VERSION, [NAME, CHROMECAST + ' Android']], [
849
+ /fuchsia.*crkey\/([\d\.]+)/i // Google Chromecast, Fuchsia-based
850
+ ], [VERSION, [NAME, CHROMECAST + ' Fuchsia']], [
851
+ /crkey\/([\d\.]+).*devicetype\/smartspeaker/i // Google Chromecast, Linux-based Smart Speaker
852
+ ], [VERSION, [NAME, CHROMECAST + ' SmartSpeaker']], [
853
+ /linux.*crkey\/([\d\.]+)/i // Google Chromecast, Legacy Linux-based
854
+ ], [VERSION, [NAME, CHROMECAST + ' Linux']], [
855
+ /crkey\/([\d\.]+)/i // Google Chromecast, unknown
856
+ ], [VERSION, [NAME, CHROMECAST]], [
857
+
807
858
  // Mobile OSes
808
859
  /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
809
- ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS
810
- /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
860
+ ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS/OpenHarmony
861
+ /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish|openharmony)[-\/ ]?([\w\.]*)/i,
811
862
  /(blackberry)\w*\/([\w\.]*)/i, // Blackberry
812
863
  /(tizen|kaios)[\/ ]([\w\.]+)/i, // Tizen/KaiOS
813
864
  /\((series40);/i // Series 40
@@ -824,9 +875,7 @@
824
875
  /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i // watchOS
825
876
  ], [VERSION, [NAME, 'watchOS']], [
826
877
 
827
- // Google Chromecast
828
- /crkey\/([\d\.]+)/i // Google Chromecast
829
- ], [VERSION, [NAME, CHROME+'cast']], [
878
+ // Google ChromeOS
830
879
  /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i // Chromium OS
831
880
  ], [[NAME, "Chrome OS"], VERSION],[
832
881
 
@@ -838,6 +887,7 @@
838
887
  // Console
839
888
  /(nintendo|playstation) (\w+)/i, // Nintendo/Playstation
840
889
  /(xbox); +xbox ([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)
890
+ /(pico) .+os([\w\.]+)/i, // Pico
841
891
 
842
892
  // Other
843
893
  /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, // Joli/Palm