From cd3bef74058d6428033606b286a45c59480c6356 Mon Sep 17 00:00:00 2001 From: Faisal Salman Date: Thu, 27 Mar 2025 10:25:44 +0700 Subject: [PATCH] Improve OS detection: HarmonyOS, MorphOS --- src/main/ua-parser.js | 9 ++++--- test/data/ua/os/harmonyos.json | 47 +++++++++++++++++++++++++++++++++- test/data/ua/os/morphos.json | 27 +++++++++++++++++++ 3 files changed, 78 insertions(+), 5 deletions(-) diff --git a/src/main/ua-parser.js b/src/main/ua-parser.js index a6f1091..5c4cc78 100755 --- a/src/main/ua-parser.js +++ b/src/main/ua-parser.js @@ -924,7 +924,7 @@ /cfnetwork\/.+darwin/i ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [ /(mac os x) ?([\w\. ]*)/i, - /(macintosh|mac_powerpc\b)(?!.+haiku)/i // Mac OS + /(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i // Mac OS ], [[NAME, 'macOS'], [VERSION, /_/g, '.']], [ // Google Chromecast @@ -940,10 +940,11 @@ ], [VERSION, [NAME, CHROMECAST]], [ // Mobile OSes - /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS + /droid ([\w\.]+)\b.+(android[- ]x86)/i // Android-x86 ], [VERSION, NAME], [ /(ubuntu) ([\w\.]+) like android/i // Ubuntu Touch ], [[NAME, /(.+)/, '$1 Touch'], VERSION], [ + /(harmonyos)[\/ ]?([\d\.]*)/i, // HarmonyOS // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen|webos)\w*[-\/\.; ]?([\d\.]*)/i ], [NAME, VERSION], [ @@ -979,7 +980,7 @@ /(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, // 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)(?: arm\w*| x86\w*| ?)([\w\.]*)/i, // Hurd/Linux + /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i, // Hurd/Linux/MorphOS /(gnu) ?([\w\.]*)/i, // GNU /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly /(haiku) (\w+)/i // Haiku @@ -988,7 +989,7 @@ ], [[NAME, 'Solaris'], VERSION], [ /((?:open)?solaris)[-\/ ]?([\w\.]*)/i, // Solaris /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, // AIX - /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX/SerenityOS + /\b(beos|os\/2|amigaos|openvms|fuchsia|hp-ux|serenityos)/i, // BeOS/OS2/AmigaOS/OpenVMS/Fuchsia/HP-UX/SerenityOS /(unix) ?([\w\.]*)/i // UNIX ], [NAME, VERSION] ] diff --git a/test/data/ua/os/harmonyos.json b/test/data/ua/os/harmonyos.json index 1fa13ef..c201654 100644 --- a/test/data/ua/os/harmonyos.json +++ b/test/data/ua/os/harmonyos.json @@ -5,7 +5,52 @@ "expect" : { "name" : "HarmonyOS", - "version" : "10" + "version" : "undefined" + } + }, + { + "desc" : "HarmonyOS 2", + "ua" : "Mozilla/5.0 (Linux; Android 10; STK-AL00 Build/HUAWEISTK-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.93 Mobile Safari/537.36 BDOS/1.0 (HarmonyOS 2.2.0) SP-engine/2.72.0 baiduboxapp/13.34.5.10 (Baidu; P1 10) NABar/1.0", + "expect" : + { + "name" : "HarmonyOS", + "version" : "2.2.0" + } + }, + { + "desc" : "HarmonyOS 3", + "ua" : "Mozilla/5.0 (Linux; Android 12; Huawei P60 Pro Build/HarmonyOS 3.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.1.6136.139 Mobile Safari/537.36 OPR/111.11", + "expect" : + { + "name" : "HarmonyOS", + "version" : "3.1.0" + } + }, + { + "desc" : "HarmonyOS 4", + "ua" : "Mozilla/5.0 (Android 12; HarmonyOS 4.0.0.118; OXF-AN00 Build/HUAWEIOXF-AN00; HMSCore 6.13.0.302; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36 EdgA/125.0.0.0 Language/zh_TW ABI/arm64-v8a", + "expect" : + { + "name" : "HarmonyOS", + "version" : "4.0.0.118" + } + }, + { + "desc" : "HarmonyOS 4", + "ua" : "Mozilla/5.0 (Linux; Android 12; HarmonyOS/4.0.3.601; JAD-AL50; HMSCore/6.13.0.320 Build/AP31.240223.016.A3; x64; ARM64) AppleWebKit/537.36 (KHTML, like Gecko) HuaweiBrowser/14.0.7.302 Mobile Safari/537.36", + "expect" : + { + "name" : "HarmonyOS", + "version" : "4.0.3.601" + } + }, + { + "desc" : "HarmonyOS 5", + "ua" : "Mozilla/5.0 (PC; OpenHarmony 5.0; HarmonyOS 5.0) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Browser/harmony360Browser/1.0.0", + "expect" : + { + "name" : "HarmonyOS", + "version" : "5.0" } } ] \ No newline at end of file diff --git a/test/data/ua/os/morphos.json b/test/data/ua/os/morphos.json index f255eeb..e540858 100644 --- a/test/data/ua/os/morphos.json +++ b/test/data/ua/os/morphos.json @@ -7,5 +7,32 @@ "name" : "MorphOS", "version" : "undefined" } + }, + { + "desc" : "MorphOS", + "ua" : "Mozilla/5.0 (Macintosh; PowerPC MorphOS 3.7; Odyssey Web Browser; rv:1.23) AppleWebKit/538.1 (KHTML, like Gecko) OWB/1.23 Safari/538.1", + "expect" : + { + "name" : "MorphOS", + "version" : "3.7" + } + }, + { + "desc" : "MorphOS", + "ua" : "Mozilla/5.0 (X11; MorphOS ppc64; rv:88.0) Gecko/20100101 Firefox/88.0", + "expect" : + { + "name" : "MorphOS", + "version" : "undefined" + } + }, + { + "desc" : "MorphOS", + "ua" : "Mozilla/5.0 (compatible; Origyn Web Browser; MorphOS; PPC; U) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+)", + "expect" : + { + "name" : "MorphOS", + "version" : "undefined" + } } ] \ No newline at end of file