SPB Git forge

spb/spb-cloud

Public
10commits 1branches 0releases
3.2 MBsize
maindefault branch
1 h agolast push
JavaScript 56.7% TypeScript 42.6%
1.9 KB · 48 lines typescript
Raw Blame History
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