UNPKG

sniffr

Version:

Browser, os and device detection

183 lines (182 loc) 6.61 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecognizedBrowser = exports.Device = exports.OS = exports.Browser = void 0; var Browser; (function (Browser) { Browser["Firefox"] = "firefox"; Browser["Chrome"] = "chrome"; Browser["InternetExplorer"] = "ie"; Browser["Safari"] = "safari"; Browser["Edge"] = "edge"; Browser["Android"] = "com.android.browser"; Browser["Opera"] = "opera"; Browser["OperaMini"] = "opera.mini"; Browser["Blackberry"] = "blackberry"; Browser["Iceweasel"] = "iceweasel"; Browser["Yandex"] = "yandex"; Browser["SeaMonkey"] = "seamonkey"; })(Browser || (exports.Browser = Browser = {})); var OS; (function (OS) { OS["Linux"] = "linux"; OS["MacOS"] = "macos"; OS["Windows"] = "windows"; OS["iOS"] = "ios"; OS["OpenBSD"] = "openbsd"; OS["ChromeOS"] = "chromeos"; OS["Android"] = "android"; OS["FirefoxOS"] = "firefoxos"; OS["WindowsPhone"] = "windows.phone"; OS["WindowsMobile"] = "windows.mobile"; OS["BlackberryOS"] = "blackberryos"; })(OS || (exports.OS = OS = {})); var Device; (function (Device) { Device["iPad"] = "ipad"; Device["iPhone"] = "iphone"; Device["Lumia"] = "lumia"; Device["HTC"] = "htc"; Device["Nexus"] = "nexus"; Device["GalaxyNexus"] = "galaxy.nexus"; Device["Nokia"] = "nokia"; Device["Galaxy"] = "galaxy"; Device["XBox"] = "xbox"; Device["Blackberry"] = "blackberry"; })(Device || (exports.Device = Device = {})); var browserMatchers = [ [/msie ([\.\_\d]+)/, Browser.InternetExplorer], [/trident\/.*?rv:([\.\_\d]+)/, Browser.InternetExplorer], [/firefox\/([\.\_\d]+)/, Browser.Firefox], [/fxios\/([\.\_\d]+)/, Browser.Firefox], [/chrome\/([\.\_\d]+)/, Browser.Chrome], [/version\/([\.\_\d]+).*?safari/, Browser.Safari], [/mobile safari ([\.\_\d]+)/, Browser.Safari], [/android.*?version\/([\.\_\d]+).*?safari/, Browser.Android], [/crios\/([\.\_\d]+).*?safari/, Browser.Chrome], [/opera/, Browser.Opera], [/opera\/([\.\_\d]+)/, Browser.Opera], [/opera ([\.\_\d]+)/, Browser.Opera], [/opera mini.*?version\/([\.\_\d]+)/, Browser.OperaMini], [/opr\/([\.\_\d]+)/, Browser.Opera], [/opios\/([a-z\.\_\d]+)/, Browser.Opera], [/blackberry/, Browser.Blackberry], [/blackberry.*?version\/([\.\_\d]+)/, Browser.Blackberry], [/bb\d+.*?version\/([\.\_\d]+)/, Browser.Blackberry], [/rim.*?version\/([\.\_\d]+)/, Browser.Blackberry], [/iceweasel\/([\.\_\d]+)/, Browser.Iceweasel], [/edge\/([\.\d]+)/, Browser.Edge], [/edg\/([\.\d]+)/, Browser.Edge], [/yabrowser\/([\.\d]+)/, Browser.Yandex], [/seamonkey\/([\.\d]+)/, Browser.SeaMonkey], ]; var osMatchers = [ [/cros\s*\S+\s*([\.\_\d]+)/, OS.ChromeOS], [/linux ()([a-z\.\_\d]+)/, OS.Linux], [/mac os x/, OS.MacOS], [/mac os x.*?([\.\_\d]+)/, OS.MacOS], [/os ([\.\_\d]+) like mac os/, OS.iOS], [/openbsd ()([a-z\.\_\d]+)/, OS.OpenBSD], [/android/, OS.Android], [/android ([a-z\.\_\d]+);/, OS.Android], [/mozilla\/[a-z\.\_\d]+ \((?:mobile)|(?:tablet)/, OS.FirefoxOS], [/windows\s*(?:nt)?\s*([\.\_\d]+)/, OS.Windows], [/windows phone.*?([\.\_\d]+)/, OS.WindowsPhone], [/windows mobile/, OS.WindowsMobile], [/blackberry/, OS.BlackberryOS], [/bb\d+/, OS.BlackberryOS], [/rim.*?os\s*([\.\_\d]+)/, OS.BlackberryOS] ]; var deviceMatchers = [ [/ipad/, Device.iPad], [/iphone/, Device.iPhone], [/lumia/, Device.Lumia], [/htc/, Device.HTC], [/nexus/, Device.Nexus], [/galaxy nexus/, Device.GalaxyNexus], [/nokia/, Device.Nokia], [/ gt\-/, Device.Galaxy], [/ sm\-/, Device.Galaxy], [/xbox/, Device.XBox], [/(?:bb\d+)|(?:blackberry)|(?: rim )/, Device.Blackberry] ]; var Unknown = 'Unknown'; var UnknownProperty = { name: Unknown, version: [], versionString: Unknown }; function parseVersion(versionString) { return versionString.split(/[\._]/).map(function (versionPart) { return parseInt(versionPart); }).filter(function (versionPart) { return !isNaN(versionPart); }); } function determineProperty(matchers, userAgent) { var recognizedProperty = __assign({}, UnknownProperty); matchers.forEach(function (matcher) { var regex = matcher[0]; var matchedValue = matcher[1]; var match = userAgent.match(regex); if (match) { recognizedProperty.name = matchedValue; if (match[2]) { recognizedProperty.versionString = match[2]; recognizedProperty.version = []; } else if (match[1]) { recognizedProperty.versionString = match[1].replace(/_/g, '.'); recognizedProperty.version = parseVersion(match[1]); } else { recognizedProperty.versionString = Unknown; recognizedProperty.version = []; } } }); return recognizedProperty; } var isBrowser = typeof window !== 'undefined'; var Sniffr = /** @class */ (function () { function Sniffr() { this.os = UnknownProperty; this.device = UnknownProperty; this.browser = UnknownProperty; } Sniffr.prototype.sniff = function (userAgentString) { var fallbackUserAgent = isBrowser ? navigator.userAgent : ''; var userAgent = (userAgentString || fallbackUserAgent).toLowerCase(); this.os = determineProperty(osMatchers, userAgent); this.device = determineProperty(deviceMatchers, userAgent); this.browser = determineProperty(browserMatchers, userAgent); return this; }; return Sniffr; }()); exports.default = Sniffr; exports.RecognizedBrowser = { os: UnknownProperty, browser: UnknownProperty, device: UnknownProperty }; if (isBrowser) { var result = new Sniffr().sniff(navigator.userAgent); exports.RecognizedBrowser.os = result.os; exports.RecognizedBrowser.device = result.device; exports.RecognizedBrowser.browser = result.browser; } if (isBrowser && typeof module == 'undefined') { window.Sniffr = new Sniffr(); window.Sniffr.sniff(navigator.userAgent); }