Skip to content

Commit cbe90a4

Browse files
authored
Merge pull request #1 from fastmonkeys/ua-parser-js
ua-parser-js
2 parents 30a5ea5 + 08996ce commit cbe90a4

7 files changed

+87
-23
lines changed

.eslintignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dist/

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
dist/
12
node_modules/

caniuse-db-loader.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module.exports = function loader(source) {
2+
var data;
3+
if (this.cacheable) {
4+
this.cacheable();
5+
}
6+
data = JSON.parse(source);
7+
return JSON.stringify({ agents: data.agents });
8+
};

index.js

+23-16
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,31 @@
11
var browserslist = require('browserslist');
2-
var useragent = require('useragent');
2+
var parser = require('ua-parser-js');
33

4-
function getBrowserName(family) {
5-
var browserNames = {
6-
'BlackBerry WebKit': 'bb',
7-
'Chrome Mobile': 'and_chr',
8-
'Firefox Mobile': 'and_ff',
9-
'IE Mobile': 'ie_mob',
10-
'Mobile Safari': 'ios_saf',
11-
'Opera Mobile': 'op_mob',
12-
'Samsung Internet': 'samsung',
13-
'UC Browser': 'and_uc'
14-
};
15-
return browserNames[family] || family;
4+
function getBrowserName(agent) {
5+
if (agent.browser.name === 'Android Browser') {
6+
return 'android';
7+
} else if (agent.os.name === 'BlackBerry') {
8+
return 'bb';
9+
} else if (agent.browser.name === 'Chrome' && agent.os.name === 'Android') {
10+
return 'and_chr';
11+
} else if (agent.browser.name === 'Firefox' && agent.os.name === 'Android') {
12+
return 'and_ff';
13+
} else if (agent.browser.name === 'IEMobile') {
14+
return 'ie_mob';
15+
} else if (agent.browser.name === 'Opera Mobi') {
16+
return 'op_mob';
17+
} else if (agent.browser.name === 'Safari' && agent.os.name === 'iOS') {
18+
return 'ios_saf';
19+
} else if (agent.browser.name === 'UCBrowser') {
20+
return 'and_uc';
21+
}
22+
return agent.browser.name;
1623
}
1724

1825
function getBrowserVersionFromUserAgent(userAgent) {
19-
var agent = useragent.parse(userAgent);
20-
var version = [agent.major, agent.minor, agent.patch];
21-
var browserName = getBrowserName(agent.family);
26+
var agent = parser(userAgent);
27+
var version = (agent.browser.version || agent.os.version || '').split('.');
28+
var browserName = getBrowserName(agent);
2229
while (version.length > 0) {
2330
try {
2431
return browserslist(browserName + ' ' + version.join('.'))[0];

package.json

+8-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
"engines": {
1212
"node": ">=4"
1313
},
14+
"browser": "./dist/is-browser-supported.js",
1415
"scripts": {
16+
"build": "webpack",
17+
"prepublish": "npm run build",
1518
"test": "eslint . && mocha test.js"
1619
},
1720
"keywords": [
@@ -25,12 +28,15 @@
2528
],
2629
"dependencies": {
2730
"browserslist": "^1.4.0",
28-
"useragent": "^2.1.9"
31+
"ua-parser-js": "github:faisalman/ua-parser-js#51b8089958ea0bf53a7433c9439233b13bcbae5e"
2932
},
3033
"devDependencies": {
34+
"clean-webpack-plugin": "^0.1.13",
3135
"eslint": "^3.8.1",
3236
"eslint-config-airbnb-base": "^9.0.0",
3337
"eslint-plugin-import": "^2.0.1",
34-
"mocha": "^3.1.2"
38+
"json-loader": "^0.5.4",
39+
"mocha": "^3.1.2",
40+
"webpack": "^1.13.2"
3541
}
3642
}

test.js

-5
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,6 @@ describe('isBrowserSupported()', function () {
8484
selections: 'safari >= 7',
8585
expected: true
8686
},
87-
{
88-
userAgent: 'Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G920F Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36',
89-
selections: 'samsung >= 4',
90-
expected: true
91-
},
9287
{
9388
userAgent: 'Googlebot/2.1 (+http://www.google.com/bot.html)',
9489
expected: false

webpack.config.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
var path = require('path');
2+
var webpack = require('webpack');
3+
var CleanWebpackPlugin = require('clean-webpack-plugin');
4+
5+
module.exports = {
6+
entry: {
7+
'is-browser-supported': './index',
8+
'is-browser-supported.min': './index'
9+
},
10+
output: {
11+
library: 'isBrowserSupported',
12+
libraryTarget: 'umd',
13+
filename: '[name].js',
14+
path: './dist'
15+
},
16+
module: {
17+
preLoaders: [
18+
{
19+
test: /\/caniuse-db\/data\.json$/,
20+
loader: path.resolve('./caniuse-db-loader')
21+
}
22+
],
23+
loaders: [
24+
{
25+
test: /\.json$/,
26+
loader: 'json'
27+
}
28+
]
29+
},
30+
node: {
31+
fs: 'empty',
32+
path: 'empty'
33+
},
34+
plugins: [
35+
new webpack.optimize.UglifyJsPlugin({
36+
compress: {
37+
warnings: false
38+
},
39+
include: /\.min\.js$/,
40+
minimize: true
41+
}),
42+
new webpack.IgnorePlugin(/caniuse-db\/region-usage-json/),
43+
new CleanWebpackPlugin(['dist'])
44+
],
45+
devtool: '#source-map'
46+
};

0 commit comments

Comments
 (0)