JavaScript 56.7%
TypeScript 42.6%
1export interface ParsedUA {2 device: "Desktop" | "Mobile" | "Tablet";3 browser: string;4 os: string;5}67export function parseUserAgent(ua: string): ParsedUA {8 if (!ua) return { device: "Desktop", browser: "Inconnu", os: "Inconnu" };910 // Device type11 const isTablet = /iPad|Tablet|PlayBook/i.test(ua) || (/Android/i.test(ua) && !/Mobile/i.test(ua));12 const isMobile = !isTablet && /Mobile|Android|iPhone|iPod|BlackBerry|IEMobile|Opera Mini|Windows Phone/i.test(ua);13 const device: ParsedUA["device"] = isTablet ? "Tablet" : isMobile ? "Mobile" : "Desktop";1415 // Browser16 let browser = "Inconnu";17 if (/Edg\//i.test(ua)) browser = "Edge";18 else if (/OPR\//i.test(ua) || /Opera/i.test(ua)) browser = "Opera";19 else if (/SamsungBrowser/i.test(ua)) browser = "Samsung Browser";20 else if (/Firefox/i.test(ua)) browser = "Firefox";21 else if (/Chrome/i.test(ua)) browser = "Chrome";22 else if (/Safari/i.test(ua)) browser = "Safari";23 else if (/MSIE|Trident/i.test(ua)) browser = "Internet Explorer";24 else if (/curl/i.test(ua)) browser = "cURL";2526 // OS27 let os = "Inconnu";28 if (/Windows NT 10/i.test(ua)) os = "Windows 10/11";29 else if (/Windows NT 6\.3/i.test(ua)) os = "Windows 8.1";30 else if (/Windows NT 6\.1/i.test(ua)) os = "Windows 7";31 else if (/Windows/i.test(ua)) os = "Windows";32 else if (/iPhone OS ([\d_]+)/i.test(ua)) {33 const m = ua.match(/iPhone OS ([\d_]+)/i);34 os = `iOS ${m ? m[1].replace(/_/g, ".") : ""}`;35 } else if (/iPad.*OS ([\d_]+)/i.test(ua)) {36 const m = ua.match(/OS ([\d_]+)/i);37 os = `iPadOS ${m ? m[1].replace(/_/g, ".") : ""}`;38 } else if (/Android ([\d.]+)/i.test(ua)) {39 const m = ua.match(/Android ([\d.]+)/i);40 os = `Android ${m ? m[1] : ""}`;41 } else if (/Mac OS X ([\d_]+)/i.test(ua)) {42 const m = ua.match(/Mac OS X ([\d_]+)/i);43 os = `macOS ${m ? m[1].replace(/_/g, ".") : ""}`;44 } else if (/Linux/i.test(ua)) os = "Linux";4546 return { device, browser, os };47}48