Skip to content

Commit

Permalink
refactor!: rename browserIsDeprecated to isBrowserDeprecated (#507)
Browse files Browse the repository at this point in the history
* refactor!: rename browserIsDeprecated to isBrowserDeprecated

* chore: remove greenkeeper badge

* build: change output directory
  • Loading branch information
pure-js committed Aug 22, 2023
1 parent 211255f commit fa475a1
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 35 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ node_modules/

# Distribution folder
dist/
lib/

# Istanbul Test Coverage
.nyc_output
# Test Coverage
coverage/

# Documentation
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
![Build Status](https://github.com/pure-js/browser-detection/actions/workflows/build.yml/badge.svg)
![Test Coverage](https://github.com/pure-js/browser-detection/actions/workflows/test.yml/badge.svg)
[![codecov](https://codecov.io/gh/pure-js/browser-detection/branch/master/graph/badge.svg)](https://codecov.io/gh/pure-js/browser-detection)
[![Greenkeeper badge](https://badges.greenkeeper.io/pure-js/browser-detection.svg)](https://greenkeeper.io/)

Browser detection using the user agent.
Tested on most popular browser in the World on October 2017, statistic gets from StatCounter.
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"name": "browser-version-detection",
"version": "2.2.1",
"description": "Browser detection using the user agent, returns the name and version of the browser",
"main": "dist/browser-detection.js",
"main": "lib/browser-detection.js",
"types": "lib/browser-detection.d.ts",
"type": "module",
"scripts": {
"start": "vite",
Expand Down
36 changes: 25 additions & 11 deletions src/browser-detection.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ describe('Should correctly detect name & version of', () => {
});
});

test('Safari 17', () => {
const safari = {
userAgent: `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15`,
};

expect(detectBrowserNameAndVersion(safari)).toEqual({
name: 'Safari',
version: 17,
});
});

test('Safari', () => {
const safari = {
userAgent: `Mozilla/5.0 (Macintosh;
Expand Down Expand Up @@ -94,16 +106,18 @@ describe('Should correctly detect name & version of', () => {
});
});

test('Opera', () => {
const opera = {
userAgent: `Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39`,
};

expect(detectBrowserNameAndVersion(opera)).toEqual({
name: 'Opera',
version: 49,
describe('Opera', () => {
test('Blink-based', () => {
const opera = {
userAgent: `Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39`,
};

expect(detectBrowserNameAndVersion(opera)).toEqual({
name: 'Opera',
version: 49,
});
});
});

Expand Down Expand Up @@ -148,7 +162,7 @@ describe('Should correctly detect name & version of', () => {
});
});

describe('Should work correctly', () => {
describe('Should not fail', () => {
test('If can not find a version', () => {
const ieWithoutVersion = {
userAgent: `Mozilla/5.0 (Windows NT 10.0; WOW64;
Expand Down
14 changes: 9 additions & 5 deletions src/browser-detection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ function isAndroidBrowser(userAgent: string): boolean {
&& userAgent.includes('AppleWebKit');
}

export type BrowserName = 'Chrome' | 'Safari' | 'UC Browser' | 'Firefox' | 'IE' | 'Opera' | 'Samsung Internet' | 'Android Browser' | 'Edge';

/**
* Detects Edge browser
*/
Expand All @@ -75,7 +77,7 @@ function isEdge(userAgent: string): boolean {
* @param {string} userAgent - window.navigator
* @return {string} browser name
*/
function detectBrowserName(userAgent: string): string | undefined {
function detectBrowserName(userAgent: string): BrowserName | undefined {
if (isChrome(userAgent)) {
return 'Chrome';
}
Expand Down Expand Up @@ -142,7 +144,7 @@ function retrieveVersion(name: string, str: string): number {
/**
* Returns Association
*/
function getBeautifulName(name: string | undefined): string | undefined {
function getBeautifulName(name: BrowserName | undefined): string | undefined {
let browserName;

if (name) {
Expand All @@ -167,11 +169,13 @@ function getBeautifulName(name: string | undefined): string | undefined {
/**
* Detects browser version
*/
function detectBrowserVersion(nav: {userAgent: string; appName?: string; appVersion?: string}, name: string | undefined): number | undefined {
function detectBrowserVersion(nav: {
userAgent: string; appName?: string; appVersion?: string;
}, name: BrowserName | undefined): number | undefined {
const {userAgent} = nav;

if (name) {
// eslint-disable-next-line default-case
// eslint-disable-next-line default-case, @typescript-eslint/switch-exhaustiveness-check
switch (name) {
case 'IE': {
const temp = /\brv[ :]+(\d+)/g.exec(userAgent) ?? [];
Expand Down Expand Up @@ -210,7 +214,7 @@ function detectBrowserVersion(nav: {userAgent: string; appName?: string; appVers
/**
* Detects browser name & version
*/
function detectBrowserNameAndVersion(nav: {userAgent: string}): {name: string | undefined; version: number | undefined} {
function detectBrowserNameAndVersion(nav: {userAgent: string}): {name: BrowserName | undefined; version: number | undefined} {
const name = detectBrowserName(nav.userAgent);

return {
Expand Down
25 changes: 17 additions & 8 deletions src/is-deprecated.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {describe, expect, test} from 'vitest';

import {browserIsDeprecated} from './is-deprecated';
import {isBrowserDeprecated} from './is-deprecated';

describe('Should be able to detect deprecated browser from object', () => {
const supportedBrowsers = {
Expand All @@ -15,38 +15,47 @@ describe('Should be able to detect deprecated browser from object', () => {
firefox: 25,
};

expect(browserIsDeprecated(browser, supportedBrowsers)).toEqual(true);
expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(true);
});

test('Chrome', () => {
let browser = {
chrome: 12,
};

expect(browserIsDeprecated(browser, supportedBrowsers)).toEqual(true);
expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(true);

browser = {
chrome: 63,
};

expect(browserIsDeprecated(browser, supportedBrowsers)).toEqual(false);
expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(false);
});

test('IE', () => {
const browser = {
ie: 9,
};

expect(browserIsDeprecated(browser, supportedBrowsers)).toEqual(true);
expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(true);
});

test('Opera', () => {
const browser = {
opera: 49,
};

expect(browserIsDeprecated(browser, supportedBrowsers)).toEqual(false);
expect(browserIsDeprecated(browser)).toEqual(false);
expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(false);
expect(isBrowserDeprecated(browser)).toEqual(false);
});

test('UC Browser', () => {
const browser = {
ucbrowser: 13.4,
};

expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(false);
expect(isBrowserDeprecated(browser)).toEqual(false);
});

test('Non-existing browser - Bear', () => {
Expand All @@ -56,6 +65,6 @@ describe('Should be able to detect deprecated browser from object', () => {

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
expect(browserIsDeprecated(browser, supportedBrowsers)).toEqual(false);
expect(isBrowserDeprecated(browser, supportedBrowsers)).toEqual(false);
});
});
21 changes: 14 additions & 7 deletions src/is-deprecated.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,25 @@ const browsers = {
ie: 11,
};

type BrowserType = {firefox: number} | {chrome: number} | {opera: number} | {ie: number};
export type BrowserType = {
firefox: number;
} | {
chrome: number;
} | {
opera: number;
} | {
ie: number;
} | {
ucbrowser: number;
};

/**
* Compare current browser version & version from passed array
* @param {Object} currentBrowser
* @param {Object} supportedBrowsers - list of supported browsers
* @return {Object} The new Circle object.
*/
function browserIsDeprecated(
function isBrowserDeprecated(
currentBrowser: BrowserType,
supportedBrowsers = browsers,
) {
): boolean {
const browserName = Object.keys(currentBrowser)[0];

if (Object.prototype.hasOwnProperty.call(supportedBrowsers, browserName)) {
Expand All @@ -27,5 +34,5 @@ function browserIsDeprecated(
}

export {
browserIsDeprecated,
isBrowserDeprecated,
};
1 change: 1 addition & 0 deletions vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ export default defineConfig({
// the proper extensions will be added
fileName: 'browser-detection',
},
outDir: 'lib'
},
})

0 comments on commit fa475a1

Please sign in to comment.