From 7c65d0f3293ad4370f9264056c08696e3e2a3d38 Mon Sep 17 00:00:00 2001 From: naorpeled Date: Sat, 22 Nov 2025 23:48:44 +0200 Subject: [PATCH] feat: add support for latest MacOS --- docs/global.html | 7 ++- docs/utils.js.html | 44 ++++++++++----- src/utils.js | 44 ++++++++++----- test/acceptance/useragentstrings.yml | 80 ++++++++++++++++++++++++++++ test/unit/utils.js | 5 ++ 5 files changed, 153 insertions(+), 27 deletions(-) diff --git a/docs/global.html b/docs/global.html index 5d7a1c7..3f2948f 100644 --- a/docs/global.html +++ b/docs/global.html @@ -1226,7 +1226,12 @@ 10.12 - Sierra 10.13 - High Sierra 10.14 - Mojave -10.15 - Catalina

+10.15 - Catalina +11 - Big Sur +12 - Monterey +13 - Ventura +14 - Sonoma +15 - Sequoia

diff --git a/docs/utils.js.html b/docs/utils.js.html index b20a008..31a90df 100644 --- a/docs/utils.js.html +++ b/docs/utils.js.html @@ -110,6 +110,11 @@ export default class Utils { * 10.13 - High Sierra * 10.14 - Mojave * 10.15 - Catalina + * 11 - Big Sur + * 12 - Monterey + * 13 - Ventura + * 14 - Sonoma + * 15 - Sequoia * * @example * getMacOSVersionName("10.14") // 'Mojave' @@ -120,19 +125,32 @@ export default class Utils { static getMacOSVersionName(version) { const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0); v.push(0); - if (v[0] !== 10) return undefined; - switch (v[1]) { - case 5: return 'Leopard'; - case 6: return 'Snow Leopard'; - case 7: return 'Lion'; - case 8: return 'Mountain Lion'; - case 9: return 'Mavericks'; - case 10: return 'Yosemite'; - case 11: return 'El Capitan'; - case 12: return 'Sierra'; - case 13: return 'High Sierra'; - case 14: return 'Mojave'; - case 15: return 'Catalina'; + const major = v[0]; + const minor = v[1]; + + if (major === 10) { + switch (minor) { + case 5: return 'Leopard'; + case 6: return 'Snow Leopard'; + case 7: return 'Lion'; + case 8: return 'Mountain Lion'; + case 9: return 'Mavericks'; + case 10: return 'Yosemite'; + case 11: return 'El Capitan'; + case 12: return 'Sierra'; + case 13: return 'High Sierra'; + case 14: return 'Mojave'; + case 15: return 'Catalina'; + default: return undefined; + } + } + + switch (major) { + case 11: return 'Big Sur'; + case 12: return 'Monterey'; + case 13: return 'Ventura'; + case 14: return 'Sonoma'; + case 15: return 'Sequoia'; default: return undefined; } } diff --git a/src/utils.js b/src/utils.js index 1ff03e9..4f89597 100644 --- a/src/utils.js +++ b/src/utils.js @@ -66,6 +66,11 @@ export default class Utils { * 10.13 - High Sierra * 10.14 - Mojave * 10.15 - Catalina + * 11 - Big Sur + * 12 - Monterey + * 13 - Ventura + * 14 - Sonoma + * 15 - Sequoia * * @example * getMacOSVersionName("10.14") // 'Mojave' @@ -76,19 +81,32 @@ export default class Utils { static getMacOSVersionName(version) { const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0); v.push(0); - if (v[0] !== 10) return undefined; - switch (v[1]) { - case 5: return 'Leopard'; - case 6: return 'Snow Leopard'; - case 7: return 'Lion'; - case 8: return 'Mountain Lion'; - case 9: return 'Mavericks'; - case 10: return 'Yosemite'; - case 11: return 'El Capitan'; - case 12: return 'Sierra'; - case 13: return 'High Sierra'; - case 14: return 'Mojave'; - case 15: return 'Catalina'; + const major = v[0]; + const minor = v[1]; + + if (major === 10) { + switch (minor) { + case 5: return 'Leopard'; + case 6: return 'Snow Leopard'; + case 7: return 'Lion'; + case 8: return 'Mountain Lion'; + case 9: return 'Mavericks'; + case 10: return 'Yosemite'; + case 11: return 'El Capitan'; + case 12: return 'Sierra'; + case 13: return 'High Sierra'; + case 14: return 'Mojave'; + case 15: return 'Catalina'; + default: return undefined; + } + } + + switch (major) { + case 11: return 'Big Sur'; + case 12: return 'Monterey'; + case 13: return 'Ventura'; + case 14: return 'Sonoma'; + case 15: return 'Sequoia'; default: return undefined; } } diff --git a/test/acceptance/useragentstrings.yml b/test/acceptance/useragentstrings.yml index de3ae8b..8f99243 100644 --- a/test/acceptance/useragentstrings.yml +++ b/test/acceptance/useragentstrings.yml @@ -919,6 +919,86 @@ engine: name: "WebKit" version: "525.28.3" + - + ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15" + spec: + browser: + name: "Safari" + version: "14.0" + os: + name: "macOS" + version: "11.0" + versionName: "Big Sur" + platform: + type: "desktop" + vendor: "Apple" + engine: + name: "WebKit" + version: "605.1.15" + - + ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15" + spec: + browser: + name: "Safari" + version: "15.4" + os: + name: "macOS" + version: "12.3" + versionName: "Monterey" + platform: + type: "desktop" + vendor: "Apple" + engine: + name: "WebKit" + version: "605.1.15" + - + ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_2_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15" + spec: + browser: + name: "Safari" + version: "16.3" + os: + name: "macOS" + version: "13.2.1" + versionName: "Ventura" + platform: + type: "desktop" + vendor: "Apple" + engine: + name: "WebKit" + version: "605.1.15" + - + ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" + spec: + browser: + name: "Safari" + version: "17.0" + os: + name: "macOS" + version: "14.0" + versionName: "Sonoma" + platform: + type: "desktop" + vendor: "Apple" + engine: + name: "WebKit" + version: "605.1.15" + - + ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_0) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15" + spec: + browser: + name: "Safari" + version: "18.0" + os: + name: "macOS" + version: "15.0" + versionName: "Sequoia" + platform: + type: "desktop" + vendor: "Apple" + engine: + name: "WebKit" + version: "605.1.15" - ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11B554a" spec: diff --git a/test/unit/utils.js b/test/unit/utils.js index 1c2a9d5..086c58e 100644 --- a/test/unit/utils.js +++ b/test/unit/utils.js @@ -38,6 +38,11 @@ test('getWindowsVersionName', (t) => { test('getMacOSVersionName', (t) => { t.is(getMacOSVersionName('10.14.5'), 'Mojave'); t.is(getMacOSVersionName('10.15'), 'Catalina'); + t.is(getMacOSVersionName('11.0'), 'Big Sur'); + t.is(getMacOSVersionName('12.3.1'), 'Monterey'); + t.is(getMacOSVersionName('13.2.1'), 'Ventura'); + t.is(getMacOSVersionName('14.0'), 'Sonoma'); + t.is(getMacOSVersionName('15.1'), 'Sequoia'); t.is(getMacOSVersionName('10.999999'), void 0); t.is(getMacOSVersionName('XXX'), void 0); });