mirror of
https://github.com/lancedikson/bowser
synced 2024-10-27 20:34:22 +00:00
fist commit
This commit is contained in:
parent
f93b3f1f1b
commit
575ba8076e
89
src/new-bowser.js
Normal file
89
src/new-bowser.js
Normal file
@ -0,0 +1,89 @@
|
||||
var Parser = require('./parser');
|
||||
/*!
|
||||
* Bowser - a browser detector
|
||||
* https://github.com/ded/bowser
|
||||
* MIT License | (c) Dustin Diaz 2012-2015
|
||||
* MIT License | (c) Denis Demchenko 2015-2017
|
||||
*/
|
||||
|
||||
/*
|
||||
* Ideas
|
||||
* - Cacheable response
|
||||
* */
|
||||
|
||||
/**
|
||||
* Bowser class
|
||||
*/
|
||||
class Bowser {
|
||||
/**
|
||||
* Creates an object that parse UA
|
||||
* @param UA
|
||||
*
|
||||
* @example
|
||||
* const bowser = new Bowser(window.navigator.userAgent);
|
||||
* bowser.getBrowser()
|
||||
*/
|
||||
constructor(UA) {
|
||||
if (!UA) {
|
||||
throw new Error('UserAgent is not defined');
|
||||
}
|
||||
this._ua = UA;
|
||||
this._parser = new Parser(UA);
|
||||
}
|
||||
|
||||
// static filter(UACollection, range) {}
|
||||
// static inRange(range, UACollection) {}
|
||||
|
||||
/**
|
||||
* Get browser's version
|
||||
* @returns {String}
|
||||
*/
|
||||
getBrowserVersion() {}
|
||||
|
||||
/**
|
||||
* Get a browser's name
|
||||
* @returns {String}
|
||||
*/
|
||||
getBrowserName() {}
|
||||
|
||||
/**
|
||||
* Get an object with a name and version of the browser
|
||||
* @returns {Object}
|
||||
*/
|
||||
getBrowser() {}
|
||||
|
||||
/**
|
||||
* Get an object with a name and version of the OS if it's defined
|
||||
* @returns {Object}
|
||||
*/
|
||||
getOS() {}
|
||||
|
||||
/**
|
||||
* Get name of OS
|
||||
* @returns {String}
|
||||
*/
|
||||
getOSName() {}
|
||||
|
||||
/**
|
||||
* Get OS version
|
||||
*/
|
||||
getOSVersion() {}
|
||||
|
||||
/**
|
||||
* Check if the browser is in range or not
|
||||
* @param {Object} range
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
inRange(range) {
|
||||
if (!range) {
|
||||
throw new Error('Range can not be empty');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the browser is NOT in range or not
|
||||
* @param {Object} range
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
notInRange(range) {}
|
||||
}
|
257
src/parser-browsers.js
Normal file
257
src/parser-browsers.js
Normal file
@ -0,0 +1,257 @@
|
||||
const getFirstMatch = require('./utils').getFirstMatch;
|
||||
|
||||
const commonVersionIdentifier = /version\/(\d+(\.\d+)?)/i;
|
||||
|
||||
const browsersList = [
|
||||
{
|
||||
test: [/opera/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:opera)[\s\/](\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Opera',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/opr|opios/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i, ua) || getFirstMatch(commonVersionIdentifier, ua);
|
||||
|
||||
return {
|
||||
name: 'Opera',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/SamsungBrowser/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Samsung Internet for Android',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/coast/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Opera Coast',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/yabrowser/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Yandex Browser',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/ucbrowser/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'UC Browser',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/mxios/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Maxthon',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/epiphany/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Epiphany',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/puffin/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Puffin',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/sleipnir/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Sleipnir',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/k-meleon/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(commonVersionIdentifier, ua) || getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'K-Meleon',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/msie|trident/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Internet Explorer',
|
||||
version
|
||||
};
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/chrome.+? edge/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/edge\/(\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Microsoft Edge',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/vivaldi/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i, ua);
|
||||
|
||||
return {
|
||||
name: 'Vivaldi',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/seamonkey/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i, ua);
|
||||
return {
|
||||
name: 'SeaMonkey',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/firefox|iceweasel|fxios/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i, ua);
|
||||
return {
|
||||
name: 'Firefox'
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/silk/i],
|
||||
detect(ua) {
|
||||
const version = getFirstMatch(/silk\/(\d+(\.\d+)?)/i);
|
||||
return {
|
||||
name: 'Amazon Silk',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/phantom/i],
|
||||
detect(ua) {
|
||||
const version = /phantomjs\/(\d+(\.\d+)?)/i;
|
||||
|
||||
return {
|
||||
name: 'PhantomJS',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/slimerjs/i],
|
||||
detect(ua) {
|
||||
const version = /slimerjs\/(\d+(\.\d+)?)/i;
|
||||
|
||||
return {
|
||||
name: 'SlimerJS',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
|
||||
detect(ua) {
|
||||
const version = /phantomjs\/(\d+(\.\d+)?)/i;
|
||||
|
||||
return {
|
||||
name: 'PhantomJS',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/phantom/i],
|
||||
detect(ua) {
|
||||
const version = /phantomjs\/(\d+(\.\d+)?)/i;
|
||||
|
||||
return {
|
||||
name: 'PhantomJS',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/phantom/i],
|
||||
detect(ua) {
|
||||
const version = /phantomjs\/(\d+(\.\d+)?)/i;
|
||||
|
||||
return {
|
||||
name: 'PhantomJS',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: [/phantom/i],
|
||||
detect(ua) {
|
||||
const version = /phantomjs\/(\d+(\.\d+)?)/i;
|
||||
|
||||
return {
|
||||
name: 'PhantomJS',
|
||||
version
|
||||
}
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
module.exports = browsersList;
|
28
src/parser.js
Normal file
28
src/parser.js
Normal file
@ -0,0 +1,28 @@
|
||||
var browsers = require('./parser-browsers');
|
||||
|
||||
class Parser {
|
||||
constructor(UA) {
|
||||
this._ua = UA;
|
||||
this.result = {};
|
||||
}
|
||||
|
||||
parseBrowser() {
|
||||
if (this.result.browser) {
|
||||
return this.result.browser;
|
||||
}
|
||||
|
||||
const browser = browsers.find((browser) => {
|
||||
return browser.test.some((result, item) => { item.test(this._ua)});
|
||||
});
|
||||
}
|
||||
|
||||
parseBrowserName() {}
|
||||
parseBrowserVersion() {}
|
||||
parsePlatform(){}
|
||||
parseOS(){}
|
||||
parseOSName(){}
|
||||
parseOSVersion(){}
|
||||
parseFullInfo(){}
|
||||
}
|
||||
|
||||
module.exports = Parser;
|
24
src/utils.js
Normal file
24
src/utils.js
Normal file
@ -0,0 +1,24 @@
|
||||
class Utils {
|
||||
/**
|
||||
* Get first matched item for a string
|
||||
* @param {RegExp} regexp
|
||||
* @param {String} ua
|
||||
* @return {Array|{index: number, input: string}|*|boolean|string}
|
||||
*/
|
||||
static getFirstMatch(regexp, ua) {
|
||||
const match = ua.match(regexp);
|
||||
return (match && match.length > 0 && match[1]) || '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get second matched item for a string
|
||||
* @param regexp
|
||||
* @return {Array|{index: number, input: string}|*|boolean|string}
|
||||
*/
|
||||
static getSecondMatch(regexp, ua) {
|
||||
const match = ua.match(regexp);
|
||||
return (match && match.length > 1 && match[2]) || '';
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Utils;
|
Loading…
Reference in New Issue
Block a user