From 18ef4472cd67087d1e707c0c68eef6bee2a50390 Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Sat, 3 Dec 2016 23:49:50 -0800 Subject: [PATCH] refactor environment detection, remove unused deps --- package.json | 4 +- src/constants/environment.js | 92 ++++++++++++++++++++++++++---------- 2 files changed, 69 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index bb8fa21ac..8cb709d1d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "dependencies": { "cheerio": "^0.22.0", "debug": "^2.3.2", - "detect-browser": "^1.3.3", "direction": "^0.1.5", "es6-map": "^0.1.4", "esrever": "^0.2.0", @@ -16,8 +15,7 @@ "immutable": "^3.8.1", "is-empty": "^1.0.0", "keycode": "^2.1.2", - "type-of": "^2.0.1", - "ua-parser-js": "^0.7.10" + "type-of": "^2.0.1" }, "peerDependencies": { "react": "^0.14.0 || ^15.0.0", diff --git a/src/constants/environment.js b/src/constants/environment.js index d0d7551f1..86d88f28f 100644 --- a/src/constants/environment.js +++ b/src/constants/environment.js @@ -1,6 +1,67 @@ -import Parser from 'ua-parser-js' -import browser from 'detect-browser' +/** + * Browser matching rules. + * + * @type {Array} + */ + +const BROWSER_RULES = [ + ['edge', /Edge\/([0-9\._]+)/], + ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/], + ['firefox', /Firefox\/([0-9\.]+)(?:\s|$)/], + ['opera', /Opera\/([0-9\.]+)(?:\s|$)/], + ['opera', /OPR\/([0-9\.]+)(:?\s|$)$/], + ['ie', /Trident\/7\.0.*rv\:([0-9\.]+)\).*Gecko$/], + ['ie', /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/], + ['ie', /MSIE\s(7\.0)/], + ['android', /Android\s([0-9\.]+)/], + ['safari', /Version\/([0-9\._]+).*Safari/], +] + +/** + * Operating system matching rules. + * + * @type {Array} + */ + +const OS_RULES = [ + ['macos', /mac os x/i], + ['ios', /os ([\.\_\d]+) like mac os/i], + ['android', /android/i], + ['firefoxos', /mozilla\/[a-z\.\_\d]+ \((?:mobile)|(?:tablet)/i], + ['windows', /windows\s*(?:nt)?\s*([\.\_\d]+)/i], +] + +/** + * Define variables to store the result. + */ + +let BROWSER +let OS + +/** + * Run the matchers when in browser. + */ + +if (process.browser) { + const { userAgent } = window.navigator + + for (const rule of BROWSER_RULES) { + const [ name, regexp ] = rule + if (regexp.test(userAgent)) { + BROWSER = name + break + } + } + + for (const rule of OS_RULES) { + const [ name, regexp ] = rule + if (regexp.test(userAgent)) { + OS = name + break + } + } +} /** * Export. @@ -8,26 +69,9 @@ import browser from 'detect-browser' * @type {Object} */ -export const IS_ANDROID = process.browser && browser.name == 'android' -export const IS_CHROME = process.browser && browser.name == 'chrome' -export const IS_EDGE = process.browser && browser.name == 'edge' -export const IS_FIREFOX = process.browser && browser.name == 'firefox' -export const IS_IE = process.browser && browser.name == 'ie' -export const IS_IOS = process.browser && browser.name == 'ios' -export const IS_MAC = process.browser && new Parser().getOS().name == 'Mac OS' -export const IS_SAFARI = process.browser && browser.name == 'safari' -export const IS_UBUNTU = process.browser && new Parser().getOS().name == 'Ubuntu' -export const IS_WINDOWS = process.browser && /Windows/.test(new Parser().getOS().name) +export const IS_CHROME = BROWSER === 'chrome' +export const IS_FIREFOX = BROWSER === 'firefox' +export const IS_SAFARI = BROWSER === 'safari' -export default { - IS_ANDROID, - IS_CHROME, - IS_EDGE, - IS_FIREFOX, - IS_IE, - IS_IOS, - IS_MAC, - IS_SAFARI, - IS_UBUNTU, - IS_WINDOWS -} +export const IS_MAC = OS === 'macos' +export const IS_WINDOWS = OS === 'windows'