{"version":3,"sources":["../lib/browser-dtector.ts","../lib/constants.ts","../lib/utils.ts","../package.json"],"sourcesContent":["import { KnownBrowsers, KnownPlatforms } from './constants';\nimport utils from './utils';\n\nimport { version as pkgVersion } from '../package.json';\n\nimport {\n  BrowserMatches,\n  KnownBrowsersKeys,\n  KnownPlatformsKeys,\n  NavigatorExtended,\n} from './types';\n\nconst getNavigator = (): NavigatorExtended | null => {\n  if (typeof window !== 'undefined') {\n    return window.navigator as NavigatorExtended;\n  }\n\n  return null;\n};\n\nclass BrowserDetector {\n  userAgent: string | null;\n\n  constructor(inputUA?: string) {\n    this.userAgent = inputUA || getNavigator()?.userAgent || null;\n  }\n\n  static get VERSION(): string {\n    return pkgVersion;\n  }\n\n  parseUserAgent(userAgent?: string) {\n    const browserMatches: BrowserMatches = {} as BrowserMatches;\n\n    const uaFresh = userAgent || this.userAgent || '';\n\n    // convert to lower case and treat tabs and multiple sapces as single space\n    const ua = uaFresh.toLowerCase().replace(/\\s\\s+/g, ' ');\n\n    const browserMatch = (/(edge)\\/([\\w.]+)/).exec(ua)\n      || (/(edg)[/]([\\w.]+)/).exec(ua)\n      || (/(opr)[/]([\\w.]+)/).exec(ua)\n      || (/(opt)[/]([\\w.]+)/).exec(ua)\n      || (/(fxios)[/]([\\w.]+)/).exec(ua)\n      || (/(edgios)[/]([\\w.]+)/).exec(ua)\n      || (/(jsdom)[/]([\\w.]+)/).exec(ua)\n      || (/(samsungbrowser)[/]([\\w.]+)/).exec(ua)\n      || (/(electron)[/]([\\w.]+)/).exec(ua)\n      || (/(chrome)[/]([\\w.]+)/).exec(ua)\n      || (/(crios)[/]([\\w.]+)/).exec(ua)\n      || (/(opios)[/]([\\w.]+)/).exec(ua)\n      || (/(version)(applewebkit)[/]([\\w.]+).*(safari)[/]([\\w.]+)/).exec(ua)\n      || (/(webkit)[/]([\\w.]+).*(version)[/]([\\w.]+).*(safari)[/]([\\w.]+)/).exec(ua)\n      || (/(applewebkit)[/]([\\w.]+).*(safari)[/]([\\w.]+)/).exec(ua)\n      || (/(webkit)[/]([\\w.]+)/).exec(ua)\n      || (/(opera)(?:.*version|)[/]([\\w.]+)/).exec(ua)\n      || (/(msie) ([\\w.]+)/).exec(ua)\n      || (/(fennec)[/]([\\w.]+)/).exec(ua)\n      || (ua.indexOf('trident') >= 0 && (/(rv)(?::| )([\\w.]+)/).exec(ua))\n      || (ua.indexOf('compatible') < 0 && (/(mozilla)(?:.*? rv:([\\w.]+)|)/).exec(ua))\n      || [];\n\n    const platformMatch = (/(ipad)/).exec(ua)\n      || (/(ipod)/).exec(ua)\n      || (/(iphone)/).exec(ua)\n      || (/(jsdom)/).exec(ua)\n      || (/(windows phone)/).exec(ua)\n      || (/(xbox)/).exec(ua)\n      || (/(win)/).exec(ua)\n      || (/(tablet)/).exec(ua)\n      || (((/(android)/).test(ua) && (/(mobile)/).test(ua) === false) && ['androidTablet'])\n      || (/(android)/).exec(ua)\n      || (/(mac)/).exec(ua)\n      || (/(linux)/).exec(ua)\n      || (/(cros)/).exec(ua)\n      || [];\n\n    let name = browserMatch[5] || browserMatch[3] || browserMatch[1] || null;\n    const platform = platformMatch[0] || null;\n    const version = browserMatch[4] || browserMatch[2] || null;\n\n    // brave browser doesn't expose itslef via useragent\n    // but as chrome browser\n    const navigator = getNavigator();\n    if (\n      name === 'chrome'\n      && typeof navigator?.brave?.isBrave === 'function'\n    ) {\n      name = 'brave';\n    }\n\n    if (name) {\n      browserMatches[name as KnownBrowsersKeys] = true;\n    }\n    if (platform) {\n      browserMatches[platform as KnownPlatformsKeys] = true;\n    }\n\n    const isAndroid = Boolean(browserMatches.tablet\n      || browserMatches.android\n      || browserMatches.androidTablet);\n\n    const isTablet = Boolean(browserMatches.ipad\n      || browserMatches.tablet\n      || browserMatches.androidTablet);\n\n    const isMobile = Boolean(browserMatches.android\n      || browserMatches.androidTablet\n      || browserMatches.tablet\n      || browserMatches.ipad\n      || browserMatches.ipod\n      || browserMatches.iphone\n      || browserMatches['windows phone']);\n\n    const isDesktop = Boolean(browserMatches.cros\n      || browserMatches.mac\n      || browserMatches.linux\n      || browserMatches.win);\n\n    const isWebkit = Boolean(browserMatches.brave\n      || browserMatches.chrome\n      || browserMatches.crios\n      || browserMatches.opr\n      || browserMatches.safari\n      || browserMatches.edg\n      || browserMatches.electron);\n\n    const isIE = Boolean(browserMatches.msie\n      || browserMatches.rv);\n\n    const isChrome = Boolean(browserMatches.chrome\n      || browserMatches.crios);\n\n    const isFireFox = Boolean(browserMatches.fxios\n      || browserMatches.fennec\n      || browserMatches.mozilla);\n\n    const isSafari = Boolean(browserMatches.safari);\n\n    const isOpera = Boolean(browserMatches.opera\n      || browserMatches.opios\n      || browserMatches.opr\n      || browserMatches.opt);\n\n    const isEdge = Boolean(browserMatches.edg\n      || browserMatches.edge\n      || browserMatches.edgios);\n\n    const browserInfo = {\n      name: KnownBrowsers[name as KnownBrowsersKeys] ?? null,\n      platform: KnownPlatforms[platform as KnownPlatformsKeys] ?? null,\n      userAgent: uaFresh,\n      version,\n      shortVersion: version ? utils.toFixed(parseFloat(version), 2) : null,\n      isAndroid,\n      isTablet,\n      isMobile,\n      isDesktop,\n      isWebkit,\n      isIE,\n      isChrome,\n      isFireFox,\n      isSafari,\n      isOpera,\n      isEdge,\n    };\n\n    return browserInfo;\n  }\n\n  getBrowserInfo() {\n    const browserInfo = this.parseUserAgent();\n\n    return {\n      name: browserInfo.name,\n      platform: browserInfo.platform,\n      userAgent: browserInfo.userAgent,\n      version: browserInfo.version,\n      shortVersion: browserInfo.shortVersion,\n    };\n  }\n}\n\nexport { KnownBrowsers, KnownPlatforms, BrowserDetector };\nexport default BrowserDetector;\n","export const KnownBrowsers = {\n  chrome: 'Google Chrome',\n  brave: 'Brave',\n  crios: 'Google Chrome',\n  edge: 'Microsoft Edge',\n  edg: 'Microsoft Edge',\n  edgios: 'Microsoft Edge',\n  fennec: 'Mozilla Firefox',\n  jsdom: 'JsDOM',\n  mozilla: 'Mozilla Firefox',\n  fxios: 'Mozilla Firefox',\n  msie: 'Microsoft Internet Explorer',\n  opera: 'Opera',\n  opios: 'Opera',\n  opr: 'Opera',\n  opt: 'Opera',\n  rv: 'Microsoft Internet Explorer',\n  safari: 'Safari',\n  samsungbrowser: 'Samsung Browser',\n  electron: 'Electron',\n};\n\nexport const KnownPlatforms = {\n  'android': 'Android',\n  'androidTablet': 'Android Tablet',\n  'cros': 'Chrome OS',\n  'fennec': 'Android Tablet',\n  'ipad': 'IPad',\n  'ipod': 'IPod',\n  'iphone': 'IPhone',\n  'jsdom': 'JsDOM',\n  'linux': 'Linux',\n  'mac': 'Macintosh',\n  'tablet': 'Android Tablet',\n  'win': 'Windows',\n  'windows phone': 'Windows Phone',\n  'xbox': 'Microsoft Xbox',\n};\n","const toFixed = (val: string | number, fixed = -1): string | null => {\n  const REG_EXP = new RegExp(`^-?\\\\d+(?:.\\\\d{0,${fixed}})?`);\n  const match = Number(val).toString().match(REG_EXP);\n  return match ? match[0] : null;\n};\n\nexport default {\n  toFixed,\n};\n","{\n  \"name\": \"browser-dtector\",\n  \"version\": \"4.1.0\",\n  \"description\": \"A Javascript library to detect browser, version and platform\",\n  \"author\": \"sibiraj-s\",\n  \"license\": \"MIT\",\n  \"type\": \"module\",\n  \"repository\": \"https://github.com/sibiraj-s/browser-dtector.git\",\n  \"homepage\": \"https://github.com/sibiraj-s/browser-dtector#readme\",\n  \"bugs\": \"https://github.com/sibiraj-s/browser-dtector/issues\",\n  \"funding\": [\n    {\n      \"type\": \"github\",\n      \"url\": \"https://github.com/sponsors/sibiraj-s\"\n    }\n  ],\n  \"engines\": {\n    \"node\": \">=16\"\n  },\n  \"sideEffects\": false,\n  \"files\": [\n    \"dist\"\n  ],\n  \"main\": \"./dist/browser-dtector.cjs\",\n  \"module\": \"./dist/browser-dtector.js\",\n  \"types\": \"./dist/browser-dtector.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"require\": {\n        \"types\": \"./dist/browser-dtector.d.cts\",\n        \"default\": \"./dist/browser-dtector.cjs\"\n      },\n      \"import\": \"./dist/browser-dtector.js\",\n      \"types\": \"./dist/browser-dtector.d.ts\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"build:docs\": \"vite build --base /browser-dtector/\",\n    \"serve\": \"vite\",\n    \"test\": \"vitest\",\n    \"lint\": \"eslint . --ext .js,.ts --ignore-path .gitignore\",\n    \"prepare\": \"is-ci || husky install\"\n  },\n  \"keywords\": [\n    \"browser-detector\",\n    \"detect-browser\",\n    \"useragent-parser\",\n    \"ua-parser\"\n  ],\n  \"devDependencies\": {\n    \"@commitlint/cli\": \"^18.2.0\",\n    \"@commitlint/config-conventional\": \"^18.1.0\",\n    \"@types/react\": \"^18.2.34\",\n    \"@types/react-dom\": \"^18.2.14\",\n    \"eslint\": \"^8.52.0\",\n    \"eslint-config-pegasus\": \"^5.0.0\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"happy-dom\": \"^12.10.3\",\n    \"husky\": \"^8.0.3\",\n    \"is-ci\": \"^3.0.1\",\n    \"lint-staged\": \"^15.0.2\",\n    \"publint\": \"^0.2.5\",\n    \"react\": \"^18.2.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-router-dom\": \"^6.18.0\",\n    \"sass\": \"^1.69.5\",\n    \"tsup\": \"^7.2.0\",\n    \"typescript\": \"^5.2.2\",\n    \"vite\": \"^4.5.0\",\n    \"vitest\": \"^0.34.6\"\n  }\n}\n"],"mappings":"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","names":["browser_dtector_exports","__export","BrowserDetector","KnownBrowsers","KnownPlatforms","browser_dtector_default","__toCommonJS","KnownBrowsers","KnownPlatforms","toFixed","val","fixed","REG_EXP","match","utils_default","version","getNavigator","BrowserDetector","inputUA","version","userAgent","browserMatches","uaFresh","ua","browserMatch","platformMatch","name","platform","navigator","isAndroid","isTablet","isMobile","isDesktop","isWebkit","isIE","isChrome","isFireFox","isSafari","isOpera","isEdge","KnownBrowsers","KnownPlatforms","utils_default","browserInfo","browser_dtector_default","BrowserDetector"]}