From 6a41513df4f92359a2917b1349372c372da6d1c7 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Tue, 11 Mar 2025 22:39:21 +0700 Subject: [PATCH] Add new device vendor: BLU --- src/enums/ua-parser-enums.d.ts | 1 + src/enums/ua-parser-enums.js | 1 + src/main/ua-parser.js | 7 ++- test/data/ua/device/alcatel.json | 11 +++- test/data/ua/device/blu.json | 101 +++++++++++++++++++++++++++++++ test/data/ua/device/hmd.json | 9 +++ test/data/ua/device/tcl.json | 9 +++ 7 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 test/data/ua/device/blu.json diff --git a/src/enums/ua-parser-enums.d.ts b/src/enums/ua-parser-enums.d.ts index 9ea1ffe..907f469 100644 --- a/src/enums/ua-parser-enums.d.ts +++ b/src/enums/ua-parser-enums.d.ts @@ -16,6 +16,7 @@ export const Browser: Readonly<{ BAIDU: "Baidu Browser"; BASILISK: "Basilisk"; BLAZER: "Blazer"; + BLU: "BLU"; BOLT: "Bolt"; BOWSER: "Bowser"; BRAVE: "Brave"; diff --git a/src/enums/ua-parser-enums.js b/src/enums/ua-parser-enums.js index 0900357..d28596d 100644 --- a/src/enums/ua-parser-enums.js +++ b/src/enums/ua-parser-enums.js @@ -21,6 +21,7 @@ const Browser = Object.freeze({ BAIDU: 'Baidu Browser', BASILISK: 'Basilisk', BLAZER: 'Blazer', + BLU: 'BLU', BOLT: 'Bolt', BOWSER: 'Bowser', BRAVE: 'Brave', diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index 5172007..f950c5d 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -585,8 +585,11 @@ /\b(opd2(\d{3}a?))(?: bui|\))/i ], [MODEL, [VENDOR, strMapper, { 'OnePlus' : ['304', '403', '203'], '*' : OPPO }], [TYPE, TABLET]], [ + // BLU Vivo Series + /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i + ], [MODEL, [VENDOR, 'BLU'], [TYPE, MOBILE]], [ // Vivo - /vivo (\w+)(?: bui|\))/i, + /; vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [ @@ -728,7 +731,7 @@ /(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 - /; (hmd|imo) ([\w ]+?)(?: bui|\))/i, // HMD/IMO + /; (blu|hmd|imo|tcl)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i, // BLU/HMD/IMO/TCL /(hp) ([\w ]+\w)/i, // HP iPAQ /(microsoft); (lumia[\w ]+)/i, // Microsoft Lumia /(lenovo)[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i, // Lenovo diff --git a/test/data/ua/device/alcatel.json b/test/data/ua/device/alcatel.json index edfdfcd..3cd613e 100644 --- a/test/data/ua/device/alcatel.json +++ b/test/data/ua/device/alcatel.json @@ -1,6 +1,15 @@ [ { - "desc": "Alcatel", + "desc": "Alcatel 4056W", + "ua": "Mozilla/5.0 (Mobile; ALCATEL 4056W; rv:84.0) Gecko/84.0 Firefox/84.0 KAIOS/3.0", + "expect": { + "vendor": "ALCATEL", + "model": "4056W", + "type": "mobile" + } + }, + { + "desc": "Alcatel A564C", "ua": "Mozilla/5.0 (Linux; Android 4.4.2; ALCATEL A564C Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36", "expect": { "vendor": "ALCATEL", diff --git a/test/data/ua/device/blu.json b/test/data/ua/device/blu.json new file mode 100644 index 0000000..969d086 --- /dev/null +++ b/test/data/ua/device/blu.json @@ -0,0 +1,101 @@ +[ + { + "desc": "BLU Grand X LTE", + "ua": "Mozilla/5.0 (Linux; Android 7.0; BLU Grand X LTE Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36", + "expect": { + "vendor": "BLU", + "model": "Grand X LTE", + "type": "mobile" + } + }, + { + "desc": "BLU Neo Energy Mini", + "ua": "Mozilla/5.0 (Linux; Android 10; BLU_NEO_ENERGY_MINI Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.54 Mobile Safari/537.36", + "expect": { + "vendor": "BLU", + "model": "NEO_ENERGY_MINI", + "type": "mobile" + } + }, + { + "desc": "BLU NEO X PLUS", + "ua": "Mozilla/5.0 (Linux; Android 5.1; BLU NEO X PLUS Build/N090U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36", + "expect": { + "vendor": "BLU", + "model": "NEO X PLUS", + "type": "mobile" + } + }, + { + "desc": "BLU STUDIO X MINI", + "ua": "Mozilla/5.0 (Linux; Android 5.1; BLU STUDIO X MINI Build/S0150UU) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36", + "expect": { + "vendor": "BLU", + "model": "STUDIO X MINI", + "type": "mobile" + } + }, + { + "desc": "BLU Tank Mega", + "ua": "Mozilla/5.0 (Mobile; BLU_TankMega_3G; rv:48.0; CAEN) Gecko/48.0 Firefox/48.0 KAIOS/2.5.1.1", + "expect": { + "vendor": "BLU", + "model": "TankMega_3G", + "type": "mobile" + } + }, + { + "desc": "BLU TOUCHBOOK G7", + "ua": "Mozilla/5.0 (Linux; Android 5.0; BLU TOUCHBOOK G7 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Safari/537.36 OPR/29.0.1809.91837", + "expect": { + "vendor": "BLU", + "model": "TOUCHBOOK G7", + "type": "mobile" + } + }, + { + "desc": "BLU Vivo 5 Mini", + "ua": "Mozilla/5.0 (Linux; Android 7.0; Vivo 5 Mini Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36", + "expect": { + "vendor": "BLU", + "model": "Vivo 5 Mini", + "type": "mobile" + } + }, + { + "desc": "BLU VIVO AIR LTE", + "ua": "Mozilla/5.0 (Linux; Android 5.0.2; BLU VIVO AIR LTE Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Mobile Safari/537.36 OPR/29.0.1809.91837", + "expect": { + "vendor": "BLU", + "model": "VIVO AIR LTE", + "type": "mobile" + } + }, + { + "desc": "BLU VIVO GO", + "ua": "Mozilla/5.0 (Linux; U; Android 9; VIVO GO Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/72.0.3626.121 Mobile Safari/537.36 OPR/50.0.2254.149182", + "expect": { + "vendor": "BLU", + "model": "VIVO GO", + "type": "mobile" + } + }, + { + "desc": "BLU Vivo One Plus 2019", + "ua": "Mozilla/5.0 (Linux; Android 8.1.0; Vivo One Plus 2019 Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/277.0.0.41.126;]", + "expect": { + "vendor": "BLU", + "model": "Vivo One Plus 2019", + "type": "mobile" + } + }, + { + "desc": "BLU VIVO SELFIE", + "ua": "Mozilla/5.0 (Linux; U; Android 5.0; es-LA; BLU VIVO SELFIE Build/LRX21M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.3.5.972 U3/0.8.0 Mobile Safari/534.30", + "expect": { + "vendor": "BLU", + "model": "VIVO SELFIE", + "type": "mobile" + } + } +] \ No newline at end of file diff --git a/test/data/ua/device/hmd.json b/test/data/ua/device/hmd.json index 2ca10a1..a7d38e2 100644 --- a/test/data/ua/device/hmd.json +++ b/test/data/ua/device/hmd.json @@ -1,4 +1,13 @@ [ + { + "desc": "HMD Barbie Phone", + "ua": "Mozilla/5.0 (Mobile; HMD Barbie Phone; rv:84.0) Gecko/84.0 Firefox/84.0 KAIOS/3.1", + "expect": { + "vendor": "HMD", + "model": "Barbie Phone", + "type": "mobile" + } + }, { "desc": "HMD Pulse", "ua": "Mozilla/5.0 (Linux; Android 14; HMD Pulse) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Mobile Safari/537.36", diff --git a/test/data/ua/device/tcl.json b/test/data/ua/device/tcl.json index 1ea07a3..8c80537 100644 --- a/test/data/ua/device/tcl.json +++ b/test/data/ua/device/tcl.json @@ -296,6 +296,15 @@ "type": "mobile" } }, + { + "desc": "TCL 4056S", + "ua": "Mozilla/5.0 (Mobile; TCL 4056S; rv:84.0) Gecko/84.0 Firefox/84.0 KAIOS/3.0", + "expect": { + "vendor": "TCL", + "model": "4056S", + "type": "mobile" + } + }, { "desc": "TCL A3", "ua": "Mozilla/5.0 (Linux; Android 11; A509DL Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36 GSA/13.18.7.23.arm64",