1
0
mirror of https://github.com/lancedikson/bowser synced 2026-03-02 03:40:27 +00:00

feat: add Vivaldi client hints support

This commit is contained in:
naorpeled
2026-02-13 23:09:48 +02:00
parent 587196f211
commit cf397a4b50
3 changed files with 65 additions and 2 deletions

View File

@@ -761,11 +761,29 @@ const browsersList = [
},
},
{
test: [/vivaldi/i],
describe(ua) {
test(parser) {
// Check Client Hints brands for Vivaldi
if (parser.hasBrand('Vivaldi')) {
return true;
}
// Fall back to UA string detection
return parser.test(/vivaldi/i);
},
describe(ua, parser) {
const browser = {
name: 'Vivaldi',
};
// Try Client Hints brand version first
if (parser) {
const hintsVersion = parser.getBrandVersion('Vivaldi');
if (hintsVersion) {
browser.version = hintsVersion;
return browser;
}
}
// Fall back to UA string version
const version = Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {

View File

@@ -2595,6 +2595,21 @@
type: "desktop"
engine:
name: "Blink"
-
ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Vivaldi/7.8.3925.66"
spec:
browser:
name: "Vivaldi"
version: "7.8.3925.66"
os:
name: "macOS"
version: "10.15.7"
versionName: "Catalina"
platform:
type: "desktop"
vendor: "Apple"
engine:
name: "Blink"
Generic:
-
ua: "Generic/2.15 libww"

View File

@@ -419,3 +419,33 @@ test('Parser.getBrandVersion returns version for Brave', (t) => {
const p = new Parser(BRAVE_UA, false, BRAVE_HINTS);
t.is(p.getBrandVersion('Brave'), '144');
});
const VIVALDI_HINTS = {
brands: [
{ brand: 'Vivaldi', version: '7.1' },
{ brand: 'Chromium', version: '134' },
{ brand: 'Not_A Brand', version: '24' },
],
mobile: false,
platform: 'Windows',
platformVersion: '15.0.0',
};
const VIVALDI_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36';
test('Parser detects Vivaldi from client hints brands', (t) => {
const p = new Parser(VIVALDI_UA, false, VIVALDI_HINTS);
t.is(p.getBrowserName(), 'Vivaldi');
t.is(p.getBrowserVersion(), '7.1');
});
test('Parser.hasBrand detects Vivaldi', (t) => {
const p = new Parser(VIVALDI_UA, false, VIVALDI_HINTS);
t.true(p.hasBrand('Vivaldi'));
t.true(p.hasBrand('vivaldi'));
});
test('Parser.getBrandVersion returns version for Vivaldi', (t) => {
const p = new Parser(VIVALDI_UA, false, VIVALDI_HINTS);
t.is(p.getBrandVersion('Vivaldi'), '7.1');
});