Skip to main content

browsers

A frozen, lowercase enum of every value detect() can return. Use it instead of typing string literals.

Shape

export const browsers: {
readonly ANDROID: 'android';
readonly CHROME: 'chrome';
readonly EDGE: 'edge';
readonly FIREFOX: 'firefox';
readonly IE: 'ie';
readonly OPERA: 'opera';
readonly SAFARI: 'safari';
readonly UNKNOWN: 'unknown';
};

Object.freeze'd at build time — attempting to mutate it is a TypeError in strict mode.

Why use it

Three reasons:

  1. Refactor-safe. Renaming 'chrome' to 'chromium' in a future major would be a one-line type change — every call site updates automatically.
  2. No typos. browsers.SAFRAI is a compile error; 'safrai' is silently wrong.
  3. Exhaustive switches. case browsers.CHROME: is type-narrowed to the literal 'chrome', so the compiler enforces exhaustiveness.

Example

import { detect, browsers } from 'get-browser';

const browser = detect();

if (browser === browsers.SAFARI) {
patchSafariScrollBug();
}

// Or as a switch
switch (browser) {
case browsers.CHROME: return 'chromium';
case browsers.EDGE: return 'chromium';
case browsers.FIREFOX: return 'gecko';
case browsers.SAFARI: return 'webkit';
case browsers.OPERA: return 'chromium';
case browsers.IE: return 'trident';
case browsers.ANDROID: return 'legacy-webkit';
case browsers.UNKNOWN: return 'unknown';
}

See also