mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-27 07:58:45 +03:00
Bump version 2.0.1
This commit is contained in:
parent
3ca23193dd
commit
51dce55e65
40
CHANGELOG.md
40
CHANGELOG.md
@ -65,6 +65,37 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Version 2.0.1
|
||||||
|
|
||||||
|
- Add new browser: Ladybird, Daum
|
||||||
|
- Add new device: Apple HomePod
|
||||||
|
- Add new device vendor: HMD
|
||||||
|
- Add new OS: Ubuntu Touch, Windows IoT
|
||||||
|
- Improve CPU detection: ARM, x86
|
||||||
|
- Improve device detection: Lenovo, Nokia, Nvidia, Xiaomi
|
||||||
|
- Tablet: Google, Honor, Huawei, Infinix, Nokia, OnePlus, Xiaomi
|
||||||
|
- Wearable: Asus, Google, LG, Motorola, OnePlus, Oppo, Samsung, Sony
|
||||||
|
- Smart-TV: Xiaomi, unidentified vendors
|
||||||
|
- Improve detection for unknown VR devices
|
||||||
|
- Improve device model detection for Generic devices
|
||||||
|
- Improve OS detection: Linux, Symbian
|
||||||
|
- Improve TypeScript definitions for Headers
|
||||||
|
- Improve `withClientHints()`:
|
||||||
|
- `engine.version` also get updated
|
||||||
|
- Infer `device.vendor` & `device.type` by guessing from `device.model`
|
||||||
|
- Browser naming adjustments:
|
||||||
|
- `Google Chrome` => `Chrome`
|
||||||
|
- `Microsoft Edge` => `Edge`
|
||||||
|
- `Android WebView` => `Chrome WebView`
|
||||||
|
- `HeadlessChrome` => `Chrome Headless`
|
||||||
|
- `enums` submodule:
|
||||||
|
- Add TypeScript definitions
|
||||||
|
- `extensions` submodule:
|
||||||
|
- Add new list:
|
||||||
|
- `Vehicles`: BYD, Rivian, Volvo
|
||||||
|
- Add new Fetcher: Bluesky
|
||||||
|
- Add new Library: Apache-HttpClient, go-http-client, got, GuzzleHttp, Java-http-client, libwww-perl, lua-resty-http, Needle, OkHttp, node-fetch, PHP-SOAP, PostmanRuntime, superagent
|
||||||
|
|
||||||
## Version 2.0.0
|
## Version 2.0.0
|
||||||
|
|
||||||
- `ua-parser-js/extensions` submodule:
|
- `ua-parser-js/extensions` submodule:
|
||||||
@ -166,6 +197,15 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Version 0.7.40 / 1.0.40
|
||||||
|
- Add new browser: 115, LibreWolf, Slimboat, Slimjet
|
||||||
|
- Add new device: Advan, Cat, Energizer, IMO, Micromax, Smartfren
|
||||||
|
- Add new engine: ArkWeb, Servo
|
||||||
|
- Add new os: OpenHarmony
|
||||||
|
- Improve browser detection: 2345, 360, Dragon, Iron, Maxthon
|
||||||
|
- Recognize Honor as a separate device vendor from Huawei
|
||||||
|
- Fix Python Request mistakenly identified as Meta Quest
|
||||||
|
|
||||||
## Version 0.7.39 / 1.0.39
|
## Version 0.7.39 / 1.0.39
|
||||||
- Add new feature: executable command using `npx ua-parser-js "[INSERT-UA-HERE]"`
|
- Add new feature: executable command using `npx ua-parser-js "[INSERT-UA-HERE]"`
|
||||||
- Add new browser: Helio, Pico Browser, Wolvic
|
- Add new browser: Helio, Pico Browser, Wolvic
|
||||||
|
4
dist/ua-parser.min.js
vendored
4
dist/ua-parser.min.js
vendored
File diff suppressed because one or more lines are too long
4
dist/ua-parser.min.mjs
vendored
4
dist/ua-parser.min.mjs
vendored
File diff suppressed because one or more lines are too long
4
dist/ua-parser.pack.js
vendored
4
dist/ua-parser.pack.js
vendored
File diff suppressed because one or more lines are too long
4
dist/ua-parser.pack.mjs
vendored
4
dist/ua-parser.pack.mjs
vendored
File diff suppressed because one or more lines are too long
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"title": "UAParser.js",
|
"title": "UAParser.js",
|
||||||
"name": "ua-parser-js",
|
"name": "ua-parser-js",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
|
"author": "Faisal Salman <f@faisalman.com> (http://faisalman.com)",
|
||||||
"description": "Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent & Client Hints data. Supports browser & node.js environment",
|
"description": "Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent & Client Hints data. Supports browser & node.js environment",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
2
src/enums/ua-parser-enums.d.ts
vendored
2
src/enums/ua-parser-enums.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
// Type definitions for Enums submodule of UAParser.js v2.0.0
|
// Type definitions for Enums submodule of UAParser.js v2.0.1
|
||||||
// Project: https://github.com/faisalman/ua-parser-js
|
// Project: https://github.com/faisalman/ua-parser-js
|
||||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
/* Enums for UAParser.js v2.0.0
|
/* Enums for UAParser.js v2.0.1
|
||||||
https://github.com/faisalman/ua-parser-js
|
https://github.com/faisalman/ua-parser-js
|
||||||
Author: Faisal Salman <f@faisalman.com>
|
Author: Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License */
|
AGPLv3 License */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Source: /src/enums/ua-parser-enums.js
|
// Source: /src/enums/ua-parser-enums.js
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
/* Enums for UAParser.js v2.0.0
|
/* Enums for UAParser.js v2.0.1
|
||||||
https://github.com/faisalman/ua-parser-js
|
https://github.com/faisalman/ua-parser-js
|
||||||
Author: Faisal Salman <f@faisalman.com>
|
Author: Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License */
|
AGPLv3 License */
|
||||||
@ -38,6 +38,7 @@ const Browser = Object.freeze({
|
|||||||
COBALT: 'Cobalt',
|
COBALT: 'Cobalt',
|
||||||
COC_COC: 'Coc Coc',
|
COC_COC: 'Coc Coc',
|
||||||
CONKEROR: 'Conkeror',
|
CONKEROR: 'Conkeror',
|
||||||
|
DAUM: 'Daum',
|
||||||
DILLO: 'Dillo',
|
DILLO: 'Dillo',
|
||||||
DOLPHIN: 'Dolphin',
|
DOLPHIN: 'Dolphin',
|
||||||
DORIS: 'Doris',
|
DORIS: 'Doris',
|
||||||
@ -370,11 +371,13 @@ const OS = Object.freeze({
|
|||||||
SYMBIAN: 'Symbian',
|
SYMBIAN: 'Symbian',
|
||||||
TIZEN: 'Tizen',
|
TIZEN: 'Tizen',
|
||||||
UBUNTU: 'Ubuntu',
|
UBUNTU: 'Ubuntu',
|
||||||
|
UBUNTU_TOUCH: 'Ubuntu Touch',
|
||||||
UNIX: 'Unix',
|
UNIX: 'Unix',
|
||||||
VECTORLINUX: 'VectorLinux',
|
VECTORLINUX: 'VectorLinux',
|
||||||
WATCHOS: 'watchOS',
|
WATCHOS: 'watchOS',
|
||||||
WEBOS: 'WebOS',
|
WEBOS: 'WebOS',
|
||||||
WINDOWS: 'Windows',
|
WINDOWS: 'Windows',
|
||||||
|
WINDOWS_IOT: 'Windows IoT',
|
||||||
WINDOWS_MOBILE: 'Windows Mobile',
|
WINDOWS_MOBILE: 'Windows Mobile',
|
||||||
WINDOWS_PHONE: 'Windows Phone',
|
WINDOWS_PHONE: 'Windows Phone',
|
||||||
XBOX: 'Xbox',
|
XBOX: 'Xbox',
|
||||||
|
2
src/extensions/ua-parser-extensions.d.ts
vendored
2
src/extensions/ua-parser-extensions.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
// Type definitions for Helpers submodule of UAParser.js v2.0.0
|
// Type definitions for Helpers submodule of UAParser.js v2.0.1
|
||||||
// Project: https://github.com/faisalman/ua-parser-js
|
// Project: https://github.com/faisalman/ua-parser-js
|
||||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
/* Extensions for UAParser.js v2.0.0
|
/* Extensions for UAParser.js v2.0.1
|
||||||
https://github.com/faisalman/ua-parser-js
|
https://github.com/faisalman/ua-parser-js
|
||||||
Author: Faisal Salman <f@faisalman.com>
|
Author: Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License */
|
AGPLv3 License */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Source: /src/extensions/ua-parser-extensions.js
|
// Source: /src/extensions/ua-parser-extensions.js
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
/* Extensions for UAParser.js v2.0.0
|
/* Extensions for UAParser.js v2.0.1
|
||||||
https://github.com/faisalman/ua-parser-js
|
https://github.com/faisalman/ua-parser-js
|
||||||
Author: Faisal Salman <f@faisalman.com>
|
Author: Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License */
|
AGPLv3 License */
|
||||||
@ -165,7 +165,7 @@ const ExtraDevices = Object.freeze({
|
|||||||
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
/\b(zur\d{3}) b/i // Swiss ZUR Tablet
|
||||||
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/\b((zeki)?tb.*\b) b/i // Zeki Tablets
|
/^((zeki)?tb.*\b) b/i // Zeki Tablets
|
||||||
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/\b([yr]\d{2}) b/i,
|
/\b([yr]\d{2}) b/i,
|
||||||
@ -222,31 +222,25 @@ const Fetchers = Object.freeze({
|
|||||||
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
// ChatGPT-User - https://platform.openai.com/docs/plugins/bot
|
||||||
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
// DuckAssistBot - https://duckduckgo.com/duckassistbot/
|
||||||
// BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
|
// BingPreview / Mastodon / Pinterestbot / Redditbot / Rogerbot / Telegrambot / Twitterbot / UptimeRobot
|
||||||
/(ahrefssiteaudit|bingpreview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|telegram|twitter|uptimero)bot)\/([\w\.]+)/i,
|
// Google Site Verifier / Meta / Yahoo! Japan
|
||||||
|
// Yandex Bots - https://yandex.com/bots
|
||||||
|
/(ahrefssiteaudit|bingpreview|chatgpt-user|mastodon|(?:discord|duckassist|linkedin|pinterest|reddit|roger|telegram|twitter|uptimero)bot|google-site-verification|meta-externalfetcher|y!?j-dlc|yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
|
||||||
|
|
||||||
// Google Site Verifier
|
// Bluesky
|
||||||
/(google-site-verification)\/([\w\.]+)/i,
|
/(bluesky) cardyb\/([\w\.]+)/i,
|
||||||
|
|
||||||
// Meta
|
|
||||||
/(meta-externalfetcher)\/([\w\.]+)/i,
|
|
||||||
|
|
||||||
// Slackbot - https://api.slack.com/robots
|
// Slackbot - https://api.slack.com/robots
|
||||||
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
|
/(slack(?:bot)?(?:-imgproxy|-linkexpanding)?) ([\w\.]+)/i,
|
||||||
|
|
||||||
// WhatsApp
|
// WhatsApp
|
||||||
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i,
|
/(whatsapp)\/([\w\.]+)[\/ ][ianw]/i
|
||||||
|
|
||||||
// Yahoo! Japan
|
|
||||||
/(y!?j-dlc)\/([\w\.]+)/i,
|
|
||||||
|
|
||||||
// Yandex Bots - https://yandex.com/bots
|
|
||||||
/(yandex(?:calendar|direct(?:dyn)?|searchshop)|yadirectfetcher)\/([\w\.]+)/i,
|
|
||||||
/(yandex(?:sitelinks|userproxy))/i
|
|
||||||
],
|
],
|
||||||
[NAME, VERSION, [TYPE, FETCHER]],
|
[NAME, VERSION, [TYPE, FETCHER]],
|
||||||
|
|
||||||
// Google Bots / Cohere / Snapchat / Vercelbot
|
[
|
||||||
[/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat)/i],
|
// Google Bots / Cohere / Snapchat / Vercelbot / Yandex Bots
|
||||||
|
/(cohere-ai|vercelbot|feedfetcher-google|google(?:-read-aloud|producer)|(?=bot; )snapchat|yandex(?:sitelinks|userproxy))/i
|
||||||
|
],
|
||||||
[NAME, [TYPE, FETCHER]],
|
[NAME, [TYPE, FETCHER]],
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@ -271,104 +265,48 @@ const InApps = Object.freeze({
|
|||||||
|
|
||||||
const MediaPlayers = Object.freeze({
|
const MediaPlayers = Object.freeze({
|
||||||
browser : [[
|
browser : [[
|
||||||
|
/(apple(?:coremedia|tv))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
||||||
/(apple(?:coremedia|))\/([\w\._]+)/i, // Generic Apple CoreMedia
|
/(coremedia) v([\w\._]+)/i,
|
||||||
/(coremedia) v([\w\._]+)/i
|
// Ares/Nexplayer/OSSProxy
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
/(ares|clementine|music player daemon|nexplayer|ossproxy) ([\w\.-]+)/i,
|
||||||
|
// Aqualung/Lyssna/BSPlayer/Clementine/MPD
|
||||||
/(aqualung|lyssna|bsplayer)\/([\w\.-]+)/i // Aqualung/Lyssna/BSPlayer
|
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/GnomeMplayer/MoC
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(ares|ossproxy)\s([\w\.-]+)/i // Ares/OSSProxy
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\/([\w\.-]+)/i,
|
|
||||||
// Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC
|
|
||||||
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
// NSPlayer/PSP-InternetRadioPlayer/Videos
|
||||||
/(clementine|music player daemon)\s([\w\.-]+)/i, // Clementine/MPD
|
// Nero Home/Nero Scout/Nokia
|
||||||
/(lg player|nexplayer)\s([\d\.]+)/i,
|
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
||||||
/player\/(nexplayer|lg player)\s([\w\.-]+)/i // NexPlayer/LG Player
|
// SoundTap/Totem/Stagefright/Streamium
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
// XBMC/gvfs/Xine/XMMS/irapp
|
||||||
/(nexplayer)\s([\w\.-]+)/i // Nexplayer
|
/^(aqualung|audacious|audimusicstream|amarok|bass|bsplayer|core|gnomemplayer|gvfs|irapp|lyssna|music on console|nero (?:home|scout)|nokia\d+|nsplayer|psp-internetradioplayer|quicktime|rma|radioapp|radioclientapplication|soundtap|stagefright|streamium|totem|videos|xbmc|xine|xmms)\/([\w\.-]+)/i,
|
||||||
|
/(lg player|nexplayer) ([\d\.]+)/i,
|
||||||
|
/player\/(nexplayer|lg player) ([\w\.-]+)/i, // NexPlayer/LG Player
|
||||||
|
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i, // Gstreamer
|
||||||
|
/(htc streaming player) [\w_]+ \/ ([\d\.]+)/i, // HTC Streaming Player
|
||||||
|
/(lavf)([\d\.]+)/i, // Lavf (FFMPEG)
|
||||||
|
// MPlayer SVN
|
||||||
|
/(mplayer)(?: |\/)(?:(?:sherpya-){0,1}svn)(?:-| )(r\d+(?:-\d+[\w\.-]+))/i,
|
||||||
|
/ (songbird)\/([\w\.-]+)/i, // Songbird/Philips-Songbird
|
||||||
|
/(winamp)(?:3 version|mpeg| ) ([\w\.-]+)/i, // Winamp
|
||||||
|
/(vlc)(?:\/| media player - version )([\w\.-]+)/i, // VLC Videolan
|
||||||
|
/^(foobar2000|itunes|smp)\/([\d\.]+)/i, // Foobar2000/iTunes/SMP
|
||||||
|
/com\.(riseupradioalarm)\/([\d\.]*)/i, // RiseUP Radio Alarm
|
||||||
|
/(mplayer)(?:\s|\/| unknown-)([\w\.\-]+)/i, // MPlayer
|
||||||
|
// Windows Media Server
|
||||||
|
/(windows)\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ home media server/i
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
||||||
|
|
||||||
/(flrp)\/([\w\.-]+)/i // Flip Player
|
/(flrp)\/([\w\.-]+)/i // Flip Player
|
||||||
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
], [[NAME, 'Flip Player'], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||||
|
|
||||||
/(fstream|nativehost|queryseekspider)/i
|
|
||||||
// FStream/NativeHost/QuerySeekSpider
|
// FStream/NativeHost/QuerySeekSpider
|
||||||
|
// MPlayer (no other info)/Media Player Classic/Nero ShowTime
|
||||||
|
// OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
||||||
|
// inlight radio / YourMuze
|
||||||
|
/(fstream|media player classic|inlight radio|mplayer|nativehost|nero showtime|ocms-bot|queryseekspider|tapinradio|tunein radio|winamp|yourmuze)/i
|
||||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
], [NAME, [TYPE, MEDIAPLAYER]], [
|
||||||
|
|
||||||
/(gstreamer) souphttpsrc.+libsoup\/([\w\.-]+)/i
|
/(htc_one_s|windows-media-player|wmplayer)\/([\w\.-]+)/i, // HTC One S / Windows Media Player
|
||||||
// Gstreamer
|
], [[NAME, /[_-]/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(htc streaming player)\s[\w_]+\s\/\s([\d\.]+)/i, // HTC Streaming Player
|
/(rad.io|radio.(?:de|at|fr)) ([\d\.]+)/i // Rad.io
|
||||||
/(lavf)([\d\.]+)/i // Lavf (FFMPEG)
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(htc_one_s)\/([\d\.]+)/i, // HTC One S
|
|
||||||
], [[NAME, /_/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(mplayer)(?:\s|\/)(?:(?:sherpya-){0,1}svn)(?:-|\s)(r\d+(?:-\d+[\w\.-]+))/i,
|
|
||||||
// MPlayer SVN
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(mplayer)(?:\s|\/)([\w\.-]+)/i, // MPlayer
|
|
||||||
/(mplayer) unknown-([\w\.\-]+)/i // MPlayer UNKNOWN
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(mplayer)/i, // MPlayer (no other info)
|
|
||||||
/(yourmuze)/i, // YourMuze
|
|
||||||
/(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime
|
|
||||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(nero (?:home|scout))\/([\w\.-]+)/i // Nero Home/Nero Scout
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(nokia\d+)\/([\w\.-]+)/i // Nokia
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/\s(songbird)\/([\w\.-]+)/i // Songbird/Philips-Songbird
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(winamp)3 version ([\w\.-]+)/i, // Winamp
|
|
||||||
/(winamp)\s([\w\.-]+)/i,
|
|
||||||
/(winamp)mpeg\/([\w\.-]+)/i
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)
|
|
||||||
// inlight radio
|
|
||||||
], [NAME, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\/([\w\.-]+)/i
|
|
||||||
// QuickTime/RealMedia/RadioApp/RadioClientApplication/
|
|
||||||
// SoundTap/Totem/Stagefright/Streamium
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(smp)([\d\.]+)/i // SMP
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(vlc) media player - version ([\w\.]+)/i, // VLC Videolan
|
|
||||||
/(vlc)\/([\w\.-]+)/i,
|
|
||||||
/(xbmc|gvfs|xine|xmms|irapp)\/([\w\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp
|
|
||||||
/(foobar2000)\/([\d\.]+)/i, // Foobar2000
|
|
||||||
/(itunes)\/([\d\.]+)/i // iTunes
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(wmplayer)\/([\w\.-]+)/i, // Windows Media Player
|
|
||||||
/(windows-media-player)\/([\w\.-]+)/i
|
|
||||||
], [[NAME, /-/g, ' '], VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/windows\/([\w\.-]+) upnp\/[\d\.]+ dlnadoc\/[\d\.]+ (home media server)/i,
|
|
||||||
// Windows Media Server
|
|
||||||
], [VERSION, [NAME, 'Windows'], [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(com\.riseupradioalarm)\/([\d\.]*)/i // RiseUP Radio Alarm
|
|
||||||
], [NAME, VERSION, [TYPE, MEDIAPLAYER]], [
|
|
||||||
|
|
||||||
/(rad.io)\s([\d\.]+)/i, // Rad.io
|
|
||||||
/(radio.(?:de|at|fr))\s([\d\.]+)/i
|
|
||||||
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
], [[NAME, 'rad.io'], VERSION, [TYPE, MEDIAPLAYER]]
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@ -387,6 +325,24 @@ const Libraries = Object.freeze({
|
|||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/////////////
|
||||||
|
// VEHICLES
|
||||||
|
////////////
|
||||||
|
|
||||||
|
const Vehicles = Object.freeze({
|
||||||
|
device : [
|
||||||
|
[
|
||||||
|
/dilink.+(byd) auto/i, // BYD
|
||||||
|
], [VENDOR], [
|
||||||
|
|
||||||
|
/(rivian) (r1t)/i, // Rivian
|
||||||
|
], [VENDOR, MODEL], [
|
||||||
|
|
||||||
|
/vcc.+netfront/i, // Volvo
|
||||||
|
], [[VENDOR, 'Volvo']]
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// BOTS
|
// BOTS
|
||||||
/////////
|
/////////
|
||||||
@ -409,5 +365,6 @@ export {
|
|||||||
Fetchers,
|
Fetchers,
|
||||||
InApps,
|
InApps,
|
||||||
Libraries,
|
Libraries,
|
||||||
MediaPlayers
|
MediaPlayers,
|
||||||
|
Vehicles
|
||||||
};
|
};
|
2
src/helpers/ua-parser-helpers.d.ts
vendored
2
src/helpers/ua-parser-helpers.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
// Type definitions for Helpers submodule of UAParser.js v2.0.0
|
// Type definitions for Helpers submodule of UAParser.js v2.0.1
|
||||||
// Project: https://github.com/faisalman/ua-parser-js
|
// Project: https://github.com/faisalman/ua-parser-js
|
||||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
/* Helpers for UAParser.js v2.0.0
|
/* Helpers for UAParser.js v2.0.1
|
||||||
https://github.com/faisalman/ua-parser-js
|
https://github.com/faisalman/ua-parser-js
|
||||||
Author: Faisal Salman <f@faisalman.com>
|
Author: Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License */
|
AGPLv3 License */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Source: /src/helpers/ua-parser-helpers.js
|
// Source: /src/helpers/ua-parser-helpers.js
|
||||||
|
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
/* Helpers for UAParser.js v2.0.0
|
/* Helpers for UAParser.js v2.0.1
|
||||||
https://github.com/faisalman/ua-parser-js
|
https://github.com/faisalman/ua-parser-js
|
||||||
Author: Faisal Salman <f@faisalman.com>
|
Author: Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License */
|
AGPLv3 License */
|
||||||
|
2
src/main/ua-parser.d.ts
vendored
2
src/main/ua-parser.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
// Type definitions for UAParser.js v2.0.0
|
// Type definitions for UAParser.js v2.0.1
|
||||||
// Project: https://github.com/faisalman/ua-parser-js
|
// Project: https://github.com/faisalman/ua-parser-js
|
||||||
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
// Definitions by: Faisal Salman <https://github.com/faisalman>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
/* UAParser.js v2.0.0
|
/* UAParser.js v2.0.1
|
||||||
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
|
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License *//*
|
AGPLv3 License *//*
|
||||||
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
||||||
@ -19,7 +19,7 @@
|
|||||||
// Constants
|
// Constants
|
||||||
/////////////
|
/////////////
|
||||||
|
|
||||||
var LIBVERSION = '2.0.0',
|
var LIBVERSION = '2.0.1',
|
||||||
UA_MAX_LENGTH = 500,
|
UA_MAX_LENGTH = 500,
|
||||||
USER_AGENT = 'user-agent',
|
USER_AGENT = 'user-agent',
|
||||||
EMPTY = '',
|
EMPTY = '',
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Source: /src/main/ua-parser.js
|
// Source: /src/main/ua-parser.js
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
/* UAParser.js v2.0.0
|
/* UAParser.js v2.0.1
|
||||||
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
|
Copyright © 2012-2024 Faisal Salman <f@faisalman.com>
|
||||||
AGPLv3 License *//*
|
AGPLv3 License *//*
|
||||||
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.
|
||||||
@ -21,20 +21,35 @@
|
|||||||
// Constants
|
// Constants
|
||||||
/////////////
|
/////////////
|
||||||
|
|
||||||
var LIBVERSION = '2.0.0',
|
var LIBVERSION = '2.0.1',
|
||||||
|
UA_MAX_LENGTH = 500,
|
||||||
|
USER_AGENT = 'user-agent',
|
||||||
EMPTY = '',
|
EMPTY = '',
|
||||||
UNKNOWN = '?',
|
UNKNOWN = '?',
|
||||||
|
|
||||||
|
// typeof
|
||||||
FUNC_TYPE = 'function',
|
FUNC_TYPE = 'function',
|
||||||
UNDEF_TYPE = 'undefined',
|
UNDEF_TYPE = 'undefined',
|
||||||
OBJ_TYPE = 'object',
|
OBJ_TYPE = 'object',
|
||||||
STR_TYPE = 'string',
|
STR_TYPE = 'string',
|
||||||
MAJOR = 'major',
|
|
||||||
MODEL = 'model',
|
// properties
|
||||||
|
UA_BROWSER = 'browser',
|
||||||
|
UA_CPU = 'cpu',
|
||||||
|
UA_DEVICE = 'device',
|
||||||
|
UA_ENGINE = 'engine',
|
||||||
|
UA_OS = 'os',
|
||||||
|
UA_RESULT = 'result',
|
||||||
|
|
||||||
NAME = 'name',
|
NAME = 'name',
|
||||||
TYPE = 'type',
|
TYPE = 'type',
|
||||||
VENDOR = 'vendor',
|
VENDOR = 'vendor',
|
||||||
VERSION = 'version',
|
VERSION = 'version',
|
||||||
ARCHITECTURE= 'architecture',
|
ARCHITECTURE= 'architecture',
|
||||||
|
MAJOR = 'major',
|
||||||
|
MODEL = 'model',
|
||||||
|
|
||||||
|
// device types
|
||||||
CONSOLE = 'console',
|
CONSOLE = 'console',
|
||||||
MOBILE = 'mobile',
|
MOBILE = 'mobile',
|
||||||
TABLET = 'tablet',
|
TABLET = 'tablet',
|
||||||
@ -42,9 +57,11 @@
|
|||||||
WEARABLE = 'wearable',
|
WEARABLE = 'wearable',
|
||||||
XR = 'xr',
|
XR = 'xr',
|
||||||
EMBEDDED = 'embedded',
|
EMBEDDED = 'embedded',
|
||||||
|
|
||||||
|
// browser types
|
||||||
INAPP = 'inapp',
|
INAPP = 'inapp',
|
||||||
USER_AGENT = 'user-agent',
|
|
||||||
UA_MAX_LENGTH = 500,
|
// client hints
|
||||||
BRANDS = 'brands',
|
BRANDS = 'brands',
|
||||||
FORMFACTORS = 'formFactors',
|
FORMFACTORS = 'formFactors',
|
||||||
FULLVERLIST = 'fullVersionList',
|
FULLVERLIST = 'fullVersionList',
|
||||||
@ -61,12 +78,8 @@
|
|||||||
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
CH_HEADER_PLATFORM = CH_HEADER + '-' + PLATFORM,
|
||||||
CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
|
CH_HEADER_PLATFORM_VER = CH_HEADER_PLATFORM + '-version',
|
||||||
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS],
|
||||||
UA_BROWSER = 'browser',
|
|
||||||
UA_CPU = 'cpu',
|
// device vendors
|
||||||
UA_DEVICE = 'device',
|
|
||||||
UA_ENGINE = 'engine',
|
|
||||||
UA_OS = 'os',
|
|
||||||
UA_RESULT = 'result',
|
|
||||||
AMAZON = 'Amazon',
|
AMAZON = 'Amazon',
|
||||||
APPLE = 'Apple',
|
APPLE = 'Apple',
|
||||||
ASUS = 'ASUS',
|
ASUS = 'ASUS',
|
||||||
@ -78,20 +91,29 @@
|
|||||||
LG = 'LG',
|
LG = 'LG',
|
||||||
MICROSOFT = 'Microsoft',
|
MICROSOFT = 'Microsoft',
|
||||||
MOTOROLA = 'Motorola',
|
MOTOROLA = 'Motorola',
|
||||||
|
NVIDIA = 'Nvidia',
|
||||||
|
ONEPLUS = 'OnePlus',
|
||||||
|
OPPO = 'OPPO',
|
||||||
SAMSUNG = 'Samsung',
|
SAMSUNG = 'Samsung',
|
||||||
SHARP = 'Sharp',
|
SHARP = 'Sharp',
|
||||||
SONY = 'Sony',
|
SONY = 'Sony',
|
||||||
XIAOMI = 'Xiaomi',
|
XIAOMI = 'Xiaomi',
|
||||||
ZEBRA = 'Zebra',
|
ZEBRA = 'Zebra',
|
||||||
PREFIX_MOBILE = 'Mobile ',
|
|
||||||
SUFFIX_BROWSER = ' Browser',
|
// browsers
|
||||||
CHROME = 'Chrome',
|
CHROME = 'Chrome',
|
||||||
|
CHROMIUM = 'Chromium',
|
||||||
CHROMECAST = 'Chromecast',
|
CHROMECAST = 'Chromecast',
|
||||||
EDGE = 'Edge',
|
EDGE = 'Edge',
|
||||||
FIREFOX = 'Firefox',
|
FIREFOX = 'Firefox',
|
||||||
OPERA = 'Opera',
|
OPERA = 'Opera',
|
||||||
FACEBOOK = 'Facebook',
|
FACEBOOK = 'Facebook',
|
||||||
SOGOU = 'Sogou',
|
SOGOU = 'Sogou',
|
||||||
|
|
||||||
|
PREFIX_MOBILE = 'Mobile ',
|
||||||
|
SUFFIX_BROWSER = ' Browser',
|
||||||
|
|
||||||
|
// os
|
||||||
WINDOWS = 'Windows';
|
WINDOWS = 'Windows';
|
||||||
|
|
||||||
var isWindow = typeof window !== UNDEF_TYPE,
|
var isWindow = typeof window !== UNDEF_TYPE,
|
||||||
@ -401,6 +423,7 @@
|
|||||||
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
/(Klarna)\/([\w\.]+)/i, // Klarna Shopping Browser for iOS & Android
|
||||||
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i, // Kakao App
|
||||||
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i, // Naver InApp
|
||||||
|
/(daum)apps[\/ ]([\w\.]+)/i, // Daum App
|
||||||
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
/safari (line)\/([\w\.]+)/i, // Line App for iOS
|
||||||
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
/\b(line)\/([\w\.]+)\/iab/i, // Line App for Android
|
||||||
/(alipay)client\/([\w\.]+)/i, // Alipay
|
/(alipay)client\/([\w\.]+)/i, // Alipay
|
||||||
@ -463,8 +486,8 @@
|
|||||||
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
|
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, // Mozilla
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
||||||
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser
|
// Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
|
||||||
/\b(links) \(([\w\.]+)/i // Links
|
/\b(links) \(([\w\.]+)/i // Links
|
||||||
], [NAME, [VERSION, /_/g, '.']], [
|
], [NAME, [VERSION, /_/g, '.']], [
|
||||||
|
|
||||||
@ -474,30 +497,30 @@
|
|||||||
|
|
||||||
cpu : [[
|
cpu : [[
|
||||||
|
|
||||||
/\b(?:(amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
/\b((amd|x|x86[-_]?|wow|win)64)\b/i // AMD64 (x64)
|
||||||
], [[ARCHITECTURE, 'amd64']], [
|
], [[ARCHITECTURE, 'amd64']], [
|
||||||
|
|
||||||
/(ia32(?=;))/i, // IA32 (quicktime)
|
/(ia32(?=;))/i, // IA32 (quicktime)
|
||||||
/((?:i[346]|x)86)[;\)]/i // IA32 (x86)
|
/\b((i[346]|x)86)(pc)?\b/i // IA32 (x86)
|
||||||
], [[ARCHITECTURE, 'ia32']], [
|
], [[ARCHITECTURE, 'ia32']], [
|
||||||
|
|
||||||
/\b(aarch64|arm(v?8e?l?|_?64))\b/i // ARM64
|
/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i // ARM64
|
||||||
], [[ARCHITECTURE, 'arm64']], [
|
], [[ARCHITECTURE, 'arm64']], [
|
||||||
|
|
||||||
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
/\b(arm(v[67])?ht?n?[fl]p?)\b/i // ARMHF
|
||||||
], [[ARCHITECTURE, 'armhf']], [
|
], [[ARCHITECTURE, 'armhf']], [
|
||||||
|
|
||||||
// PocketPC mistakenly identified as PowerPC
|
// PocketPC mistakenly identified as PowerPC
|
||||||
/windows (ce|mobile); ppc;/i
|
/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
|
||||||
], [[ARCHITECTURE, 'arm']], [
|
], [[ARCHITECTURE, 'arm']], [
|
||||||
|
|
||||||
/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i // PowerPC
|
/((ppc|powerpc)(64)?)( mac|;|\))/i // PowerPC
|
||||||
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [
|
||||||
|
|
||||||
/(sun4\w)[;\)]/i // SPARC
|
/ sun4\w[;\)]/i // SPARC
|
||||||
], [[ARCHITECTURE, 'sparc']], [
|
], [[ARCHITECTURE, 'sparc']], [
|
||||||
|
|
||||||
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i
|
||||||
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
// IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
|
||||||
], [[ARCHITECTURE, lowerize]]
|
], [[ARCHITECTURE, lowerize]]
|
||||||
],
|
],
|
||||||
@ -531,34 +554,38 @@
|
|||||||
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
// Honor
|
// Honor
|
||||||
/(?:honor)([-\w ]+)[;\)]/i
|
/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
|
||||||
|
], [MODEL, [VENDOR, HONOR], [TYPE, TABLET]], [
|
||||||
|
/honor([-\w ]+)[;\)]/i
|
||||||
], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
// Huawei
|
// Huawei
|
||||||
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
|
||||||
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [
|
||||||
/(?:huawei)([-\w ]+)[;\)]/i,
|
/(?:huawei)([-\w ]+)[;\)]/i,
|
||||||
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
||||||
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
// Xiaomi
|
// Xiaomi
|
||||||
|
/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
|
||||||
|
/\b((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i // Mi Pad tablets
|
||||||
|
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
||||||
|
|
||||||
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i, // Xiaomi POCO
|
||||||
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
/\b; (\w+) build\/hm\1/i, // Xiaomi Hongmi 'numeric' models
|
||||||
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, // Xiaomi Hongmi
|
||||||
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, // Xiaomi Redmi
|
||||||
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i, // Xiaomi Redmi 'numeric' models
|
||||||
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i // Xiaomi Mi
|
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite|pro)?)(?: bui|\))/i, // Xiaomi Mi
|
||||||
|
/ ([\w ]+) miui\/v?\d/i
|
||||||
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [
|
||||||
/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i, // Redmi Pad
|
|
||||||
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i // Mi Pad tablets
|
|
||||||
],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [
|
|
||||||
|
|
||||||
// OPPO
|
// OPPO
|
||||||
/; (\w+) bui.+ oppo/i,
|
/; (\w+) bui.+ oppo/i,
|
||||||
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
||||||
], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]], [
|
||||||
/\b(opd2\d{3}a?) bui/i
|
/\b(opd2(\d{3}a?))(?: bui|\))/i
|
||||||
], [MODEL, [VENDOR, 'OPPO'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [
|
||||||
|
|
||||||
// Vivo
|
// Vivo
|
||||||
/vivo (\w+)(?: bui|\))/i,
|
/vivo (\w+)(?: bui|\))/i,
|
||||||
@ -572,7 +599,7 @@
|
|||||||
// Motorola
|
// Motorola
|
||||||
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
||||||
/\bmot(?:orola)?[- ](\w*)/i,
|
/\bmot(?:orola)?[- ](\w*)/i,
|
||||||
/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
/((?:moto(?! 360)[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
||||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [
|
||||||
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
||||||
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [
|
||||||
@ -581,22 +608,24 @@
|
|||||||
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
||||||
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [
|
||||||
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
||||||
/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
|
/\blg[-e;\/ ]+((?!browser|netcast|android tv|watch)\w+)/i,
|
||||||
/\blg-?([\d\w]+) bui/i
|
/\blg-?([\d\w]+) bui/i
|
||||||
], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
// Lenovo
|
// Lenovo
|
||||||
/(ideatab[-\w ]+)/i,
|
/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
|
||||||
/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
|
/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
|
||||||
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]], [
|
||||||
|
|
||||||
// Nokia
|
// Nokia
|
||||||
/(?:maemo|nokia).*(n900|lumia \d+)/i,
|
/(nokia) (t[12][01])/i
|
||||||
/nokia[-_ ]?([-\w\.]*)/i
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [
|
/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
|
||||||
|
/nokia[-_ ]?(([-\w\. ]*))/i
|
||||||
|
], [[MODEL, /_/g, ' '], [TYPE, MOBILE], [VENDOR, 'Nokia']], [
|
||||||
|
|
||||||
// Google
|
// Google
|
||||||
/(pixel c)\b/i // Google Pixel C
|
/(pixel (c|tablet))\b/i // Google Pixel C/Tablet
|
||||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [
|
||||||
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i // Google Pixel
|
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i // Google Pixel
|
||||||
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [
|
||||||
@ -611,7 +640,7 @@
|
|||||||
// OnePlus
|
// OnePlus
|
||||||
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
||||||
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
||||||
], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
// Amazon
|
// Amazon
|
||||||
/(alexa)webm/i,
|
/(alexa)webm/i,
|
||||||
@ -687,18 +716,19 @@
|
|||||||
], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Nothing'], [TYPE, MOBILE]], [
|
||||||
|
|
||||||
// MIXED
|
// MIXED
|
||||||
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
/(imo) (tab \w+)/i, // IMO
|
||||||
|
/(infinix) (x1101b?)/i // Infinix XPad
|
||||||
|
], [VENDOR, MODEL, [TYPE, TABLET]], [
|
||||||
|
|
||||||
|
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|infinix|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
|
||||||
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
|
// BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Infinix/Tecno/Micromax/Advan
|
||||||
/; (imo) ((?!tab)[\w ]+?)(?: bui|\))/i, // IMO
|
/; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO
|
||||||
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
/(hp) ([\w ]+\w)/i, // HP iPAQ
|
||||||
/(asus)-?(\w+)/i, // Asus
|
|
||||||
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
/(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia
|
||||||
/(lenovo)[-_ ]?([-\w]+)/i, // Lenovo
|
/(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo
|
||||||
/(jolla)/i, // Jolla
|
|
||||||
/(oppo) ?([\w ]+) bui/i // OPPO
|
/(oppo) ?([\w ]+) bui/i // OPPO
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||||
|
|
||||||
/(imo) (tab \w+)/i, // IMO
|
|
||||||
/(kobo)\s(ereader|touch)/i, // Kobo
|
/(kobo)\s(ereader|touch)/i, // Kobo
|
||||||
/(archos) (gamepad2?)/i, // Archos
|
/(archos) (gamepad2?)/i, // Archos
|
||||||
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
/(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad
|
||||||
@ -709,8 +739,8 @@
|
|||||||
], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [
|
||||||
/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
|
/droid [\d\.]+; (fp\du?)(?: b|\))/i // Fairphone
|
||||||
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [
|
||||||
/(shield[\w ]+) b/i // Nvidia Shield Tablets
|
/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i // Nvidia Tablets
|
||||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [
|
], [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]], [
|
||||||
/(sprint) (\w+)/i // Sprint Phones
|
/(sprint) (\w+)/i // Sprint Phones
|
||||||
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
], [VENDOR, MODEL, [TYPE, MOBILE]], [
|
||||||
/(kin\.[onetw]{3})/i // Microsoft Kin
|
/(kin\.[onetw]{3})/i // Microsoft Kin
|
||||||
@ -742,19 +772,24 @@
|
|||||||
], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
], [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [
|
||||||
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
/droid.+aft(\w+)( bui|\))/i // Fire TV
|
||||||
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [
|
||||||
|
/(shield \w+ tv)/i // Nvidia Shield TV
|
||||||
|
], [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]], [
|
||||||
/\(dtv[\);].+(aquos)/i,
|
/\(dtv[\);].+(aquos)/i,
|
||||||
/(aquos-tv[\w ]+)\)/i // Sharp
|
/(aquos-tv[\w ]+)\)/i // Sharp
|
||||||
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[
|
||||||
/(bravia[\w ]+)( bui|\))/i // Sony
|
/(bravia[\w ]+)( bui|\))/i // Sony
|
||||||
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [
|
||||||
/(mitv-\w{5}) bui/i // Xiaomi
|
/(mi(tv|box)-?\w+) bui/i // Xiaomi
|
||||||
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [
|
||||||
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
/Hbbtv.*(technisat) (.*);/i // TechniSAT
|
||||||
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
], [VENDOR, MODEL, [TYPE, SMARTTV]], [
|
||||||
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, // Roku
|
||||||
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i // HbbTV devices
|
||||||
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [
|
||||||
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i // SmartTV from Unidentified Vendors
|
// SmartTV from Unidentified Vendors
|
||||||
|
/droid.+; ([\w- ]+) (?:android tv|smart[- ]?tv)/i
|
||||||
|
], [MODEL, [TYPE, SMARTTV]], [
|
||||||
|
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
|
||||||
], [[TYPE, SMARTTV]], [
|
], [[TYPE, SMARTTV]], [
|
||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
@ -764,8 +799,8 @@
|
|||||||
/(ouya)/i, // Ouya
|
/(ouya)/i, // Ouya
|
||||||
/(nintendo) (\w+)/i // Nintendo
|
/(nintendo) (\w+)/i // Nintendo
|
||||||
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
], [VENDOR, MODEL, [TYPE, CONSOLE]], [
|
||||||
/droid.+; (shield) bui/i // Nvidia
|
/droid.+; (shield)( bui|\))/i // Nvidia Portable
|
||||||
], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [
|
], [MODEL, [VENDOR, NVIDIA], [TYPE, CONSOLE]], [
|
||||||
/(playstation \w+)/i // Playstation
|
/(playstation \w+)/i // Playstation
|
||||||
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [
|
||||||
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
/\b(xbox(?: one)?(?!; xbox))[\); ]/i // Microsoft Xbox
|
||||||
@ -775,12 +810,23 @@
|
|||||||
// WEARABLES
|
// WEARABLES
|
||||||
///////////////////
|
///////////////////
|
||||||
|
|
||||||
/\b(sm-[lr]\d\d[05][fnuw]?s?)\b/i // Samsung Galaxy Watch
|
/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i // Samsung Galaxy Watch
|
||||||
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
], [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]], [
|
||||||
/((pebble))app/i // Pebble
|
/((pebble))app/i, // Pebble
|
||||||
|
/(asus|google|lg|oppo) ((pixel |zen)?watch[\w ]*)( bui|\))/i // Asus ZenWatch / LG Watch / Pixel Watch
|
||||||
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
], [VENDOR, MODEL, [TYPE, WEARABLE]], [
|
||||||
|
/(ow(?:19|20)?we?[1-3]{1,3})/i // Oppo Watch
|
||||||
|
], [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]], [
|
||||||
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i // Apple Watch
|
||||||
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
], [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]], [
|
||||||
|
/(opwwe\d{3})/i // OnePlus Watch
|
||||||
|
], [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]], [
|
||||||
|
/(moto 360)/i // Motorola 360
|
||||||
|
], [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]], [
|
||||||
|
/(smartwatch 3)/i // Sony SmartWatch
|
||||||
|
], [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]], [
|
||||||
|
/(g watch r)/i // LG G Watch R
|
||||||
|
], [MODEL, [VENDOR, LG], [TYPE, WEARABLE]], [
|
||||||
/droid.+; (wt63?0{2,3})\)/i
|
/droid.+; (wt63?0{2,3})\)/i
|
||||||
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [
|
||||||
|
|
||||||
@ -803,20 +849,22 @@
|
|||||||
], [VENDOR, [TYPE, EMBEDDED]], [
|
], [VENDOR, [TYPE, EMBEDDED]], [
|
||||||
/(aeobc)\b/i // Echo Dot
|
/(aeobc)\b/i // Echo Dot
|
||||||
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
], [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]], [
|
||||||
|
/(homepod).+mac os/i // Apple HomePod
|
||||||
|
], [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]], [
|
||||||
|
/windows iot/i
|
||||||
|
], [[TYPE, EMBEDDED]], [
|
||||||
|
|
||||||
////////////////////
|
////////////////////
|
||||||
// MIXED (GENERIC)
|
// MIXED (GENERIC)
|
||||||
///////////////////
|
///////////////////
|
||||||
|
|
||||||
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors
|
/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+?(mobile|vr|\d) safari/i
|
||||||
], [MODEL, [TYPE, MOBILE]], [
|
], [MODEL, [TYPE, strMapper, { 'mobile' : 'Mobile', 'xr' : 'VR', '*' : TABLET }]], [
|
||||||
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors
|
|
||||||
], [MODEL, [TYPE, TABLET]], [
|
|
||||||
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i // Unidentifiable Tablet
|
||||||
], [[TYPE, TABLET]], [
|
], [[TYPE, TABLET]], [
|
||||||
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile
|
||||||
], [[TYPE, MOBILE]], [
|
], [[TYPE, MOBILE]], [
|
||||||
/(android[-\w\. ]{0,9});.+buil/i // Generic Android Device
|
/droid .+?; ([\w\. -]+)( bui|\))/i // Generic Android Device
|
||||||
], [MODEL, [VENDOR, 'Generic']]
|
], [MODEL, [VENDOR, 'Generic']]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -836,8 +884,11 @@
|
|||||||
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
/ekioh(flow)\/([\w\.]+)/i, // Flow
|
||||||
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, // KHTML/Tasman/Links
|
||||||
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
/(icab)[\/ ]([23]\.[\d\.]+)/i, // iCab
|
||||||
/\b(libweb)/i
|
|
||||||
|
/\b(libweb)/i // LibWeb
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
|
/ladybird\//i
|
||||||
|
], [[NAME, 'LibWeb']], [
|
||||||
|
|
||||||
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
/rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko
|
||||||
], [VERSION, NAME]
|
], [VERSION, NAME]
|
||||||
@ -848,15 +899,15 @@
|
|||||||
// Windows
|
// Windows
|
||||||
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
/microsoft (windows) (vista|xp)/i // Windows (iTunes)
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
/(windows (?:phone(?: os)?|mobile|iot))[\/ ]?([\d\.\w ]*)/i // Windows Phone
|
||||||
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
], [NAME, [VERSION, strMapper, windowsVersionMap]], [
|
||||||
/windows nt 6\.2; (arm)/i, // Windows RT
|
/windows nt 6\.2; (arm)/i, // Windows RT
|
||||||
/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,
|
/windows[\/ ]([ntce\d\. ]+\w)(?!.+xbox)/i,
|
||||||
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
||||||
], [[VERSION, strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
], [[VERSION, strMapper, windowsVersionMap], [NAME, WINDOWS]], [
|
||||||
|
|
||||||
// iOS/macOS
|
// iOS/macOS
|
||||||
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
|
||||||
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,
|
||||||
/cfnetwork\/.+darwin/i
|
/cfnetwork\/.+darwin/i
|
||||||
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [
|
||||||
@ -878,15 +929,15 @@
|
|||||||
|
|
||||||
// Mobile OSes
|
// Mobile OSes
|
||||||
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS
|
||||||
], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS/OpenHarmony
|
], [VERSION, NAME], [
|
||||||
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish|openharmony)[-\/ ]?([\w\.]*)/i,
|
/(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch
|
||||||
/(blackberry)\w*\/([\w\.]*)/i, // Blackberry
|
], [[NAME, /(.+)/, '$1 Touch'], VERSION], [
|
||||||
/(tizen|kaios)[\/ ]([\w\.]+)/i, // Tizen/KaiOS
|
// Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
|
||||||
/\((series40);/i // Series 40
|
/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/; ]?([\d\.]*)/i
|
||||||
], [NAME, VERSION], [
|
], [NAME, VERSION], [
|
||||||
/\(bb(10);/i // BlackBerry 10
|
/\(bb(10);/i // BlackBerry 10
|
||||||
], [VERSION, [NAME, BLACKBERRY]], [
|
], [VERSION, [NAME, BLACKBERRY]], [
|
||||||
/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i // Symbian
|
/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i // Symbian
|
||||||
], [VERSION, [NAME, 'Symbian']], [
|
], [VERSION, [NAME, 'Symbian']], [
|
||||||
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
|
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i // Firefox OS
|
||||||
], [VERSION, [NAME, FIREFOX+' OS']], [
|
], [VERSION, [NAME, FIREFOX+' OS']], [
|
||||||
@ -916,7 +967,7 @@
|
|||||||
/(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux
|
/(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux
|
||||||
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
||||||
// Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
|
// Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire
|
||||||
/(hurd|linux) ?([\w\.]*)/i, // Hurd/Linux
|
/(hurd|linux)(?: arm\w*| x86\w*| ?)([\w\.]*)/i, // Hurd/Linux
|
||||||
/(gnu) ?([\w\.]*)/i, // GNU
|
/(gnu) ?([\w\.]*)/i, // GNU
|
||||||
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
|
||||||
/(haiku) (\w+)/i // Haiku
|
/(haiku) (\w+)/i // Haiku
|
||||||
@ -1153,17 +1204,27 @@
|
|||||||
|
|
||||||
switch (this.itemType) {
|
switch (this.itemType) {
|
||||||
case UA_BROWSER:
|
case UA_BROWSER:
|
||||||
|
case UA_ENGINE:
|
||||||
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
|
||||||
if (brands) {
|
if (brands) {
|
||||||
for (var i in brands) {
|
for (var i in brands) {
|
||||||
var brandName = strip(/(Google|Microsoft) /, brands[i].brand || brands[i]),
|
var brandName = brands[i].brand || brands[i],
|
||||||
brandVersion = brands[i].version;
|
brandVersion = brands[i].version;
|
||||||
if (!/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && !/chromi/i.test(brandName)))) {
|
if (this.itemType == UA_BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || (/chrom/i.test(prevName) && brandName != CHROMIUM))) {
|
||||||
|
brandName = strMapper(brandName, {
|
||||||
|
'Chrome' : 'Google Chrome',
|
||||||
|
'Edge' : 'Microsoft Edge',
|
||||||
|
'Chrome WebView' : 'Android WebView',
|
||||||
|
'Chrome Headless' : 'HeadlessChrome'
|
||||||
|
});
|
||||||
this.set(NAME, brandName)
|
this.set(NAME, brandName)
|
||||||
.set(VERSION, brandVersion)
|
.set(VERSION, brandVersion)
|
||||||
.set(MAJOR, majorize(brandVersion));
|
.set(MAJOR, majorize(brandVersion));
|
||||||
prevName = brandName;
|
prevName = brandName;
|
||||||
}
|
}
|
||||||
|
if (this.itemType == UA_ENGINE && brandName == CHROMIUM) {
|
||||||
|
this.set(VERSION, brandVersion);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1180,11 +1241,16 @@
|
|||||||
}
|
}
|
||||||
if (uaCH[MODEL]) {
|
if (uaCH[MODEL]) {
|
||||||
this.set(MODEL, uaCH[MODEL]);
|
this.set(MODEL, uaCH[MODEL]);
|
||||||
}
|
if (!this.get(TYPE) || !this.get(VENDOR)) {
|
||||||
// Xbox-Specific Detection
|
var reParse = {};
|
||||||
if (uaCH[MODEL] == 'Xbox') {
|
rgxMapper.call(reParse, 'droid 9; ' + uaCH[MODEL] + ')', rgxMap);
|
||||||
this.set(TYPE, CONSOLE)
|
if (!this.get(TYPE) && !!reParse.type) {
|
||||||
.set(VENDOR, MICROSOFT);
|
this.set(TYPE, reParse.type);
|
||||||
|
}
|
||||||
|
if (!this.get(VENDOR) && !!reParse.vendor) {
|
||||||
|
this.set(VENDOR, reParse.vendor);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (uaCH[FORMFACTORS]) {
|
if (uaCH[FORMFACTORS]) {
|
||||||
var ff;
|
var ff;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user