useragent
Advanced tools
Comparing version 1.0.3 to 1.0.4
@@ -1,1 +0,1 @@ | ||
exports.browser = [{r:new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"), family:"Wii"},{r:new RegExp("(SeaMonkey|Fennec|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"), family:"Firefox ($1)"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), family:"Firefox ($1)"},{r:new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"), family:"MicroB"},{r:new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?")},{r:new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)")},{r:new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)")},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"), family:"Netscape"},{r:new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"), family:"My Internet Browser"},{r:new RegExp("(Opera Tablet).*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"), family:"Opera Mobile"},{r:new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)")},{r:new RegExp("(Opera)/9.80.*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(webOS)/(\\d+)\\.(\\d+)"), family:"Palm webOS"},{r:new RegExp("(luakit)"), family:"LuaKit"},{r:new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("rekonq"), family:"Rekonq"},{r:new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), family:"Conkeror"},{r:new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Konqueror"},{r:new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(WeTab)-Browser")},{r:new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"), family:"webOS TouchPad"},{r:new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Comodo Dragon"},{r:new RegExp("(YottaaMonitor)")},{r:new RegExp("(Kindle)/(\\d+)\\.(\\d+)")},{r:new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Bolt|Jasmine|IEMobile|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT)/(\\d+)\\.(\\d+)")},{r:new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iCab|Lunascape|Opera|Android) (\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(IEMobile) (\\d+)\\.(\\d+)"), family:"IE Mobile"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?")},{r:new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"), family:"Obigo"},{r:new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"), family:"Maxthon"},{r:new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"), major: "0"},{r:new RegExp("(PLAYSTATION) (\\d+)"), family:"PlayStation"},{r:new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)")},{r:new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"), family:"Polaris"},{r:new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Bon Echo"},{r:new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iPhone) OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(iPad).+ OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(Avant)"), major: "1"},{r:new RegExp("(Nokia)[EN]?(\\d+)")},{r:new RegExp("(Black[bB]erry).+Version\\/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Blackberry"},{r:new RegExp("(Black[bB]erry)\\s?(\\d+)"), family:"Blackberry"},{r:new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)")},{r:new RegExp("(Blazer)/(\\d+)\\.(\\d+)"), family:"Palm Blazer"},{r:new RegExp("(Pre)/(\\d+)\\.(\\d+)"), family:"Palm Pre"},{r:new RegExp("(Links) \\((\\d+)\\.(\\d+)")},{r:new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)")},{r:new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"), family:"Safari"},{r:new RegExp("(Safari)/\\d+")},{r:new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)")},{r:new RegExp("(OLPC)/Update()\\.(\\d+)"), major: "0"},{r:new RegExp("(SamsungSGHi560)"), family:"Samsung SGHi560"},{r:new RegExp("^(SonyEricssonK800i)"), family:"Sony Ericsson K800i"},{r:new RegExp("(Teleca Q7)")},{r:new RegExp("(MSIE) (\\d+)\\.(\\d+)"), family:"IE"},{r:new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"cURL"}];exports.os = [{r:new RegExp("(Android)")},{r:new RegExp("(Windows)")},{r:new RegExp("(iPad)")},{r:new RegExp("(iPhone OS) ([\\d_]+)"), os:"iOS"},{r:new RegExp("(Mac OS X)")},{r:new RegExp("(FreeBSD)")},{r:new RegExp("(iPod)")},{r:new RegExp("(iPhone Simulator)")},{r:new RegExp("(Linux)")},{r:new RegExp("(Red Hat)")}]; | ||
exports.browser = [{r:new RegExp("^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii"), family:"Wii"},{r:new RegExp("(SeaMonkey|Fennec|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)"), family:"Firefox ($1)"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)"), family:"Firefox Beta"},{r:new RegExp("(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"), family:"Firefox ($1)"},{r:new RegExp("(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)"), family:"MicroB"},{r:new RegExp("(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?")},{r:new RegExp("(Flock)/(\\d+)\\.(\\d+)(b\\d+?)")},{r:new RegExp("(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Fennec)/(\\d+)\\.(\\d+)(pre)")},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)"), family:"Netscape"},{r:new RegExp("(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Netscape"},{r:new RegExp("(MyIBrow)/(\\d+)\\.(\\d+)"), family:"My Internet Browser"},{r:new RegExp("(Opera Tablet).*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)"), family:"Opera Mobile"},{r:new RegExp("(Opera Mini)/(\\d+)\\.(\\d+)")},{r:new RegExp("(Opera)/9.80.*Version\\/(\\d+)\\.(\\d+)(?:\\.(\\d+))?")},{r:new RegExp("(webOS)/(\\d+)\\.(\\d+)"), family:"Palm webOS"},{r:new RegExp("(luakit)"), family:"LuaKit"},{r:new RegExp("(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)"), family:"Swiftfox"},{r:new RegExp("rekonq"), family:"Rekonq"},{r:new RegExp("(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?"), family:"Conkeror"},{r:new RegExp("(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Konqueror"},{r:new RegExp("(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(WeTab)-Browser")},{r:new RegExp("(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)"), family:"webOS TouchPad"},{r:new RegExp("(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Comodo Dragon"},{r:new RegExp("(YottaaMonitor)")},{r:new RegExp("(Kindle)/(\\d+)\\.(\\d+)")},{r:new RegExp("(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Vodafone|NetFront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Bolt|Jasmine|IEMobile|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT)/(\\d+)\\.(\\d+)")},{r:new RegExp("(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iCab|Lunascape|Opera|Android) (\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(IEMobile) (\\d+)\\.(\\d+)"), family:"IE Mobile"},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?")},{r:new RegExp("(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?"), family:"Obigo"},{r:new RegExp("(MAXTHON|Maxthon) (\\d+)\\.(\\d+)"), family:"Maxthon"},{r:new RegExp("(Maxthon|MyIE2|Uzbl|Shiira)"), major: "0"},{r:new RegExp("(PLAYSTATION) (\\d+)"), family:"PlayStation"},{r:new RegExp("(PlayStation Portable)[^\\d]+(\\d+).(\\d+)")},{r:new RegExp("(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(POLARIS)/(\\d+)\\.(\\d+)"), family:"Polaris"},{r:new RegExp("(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Bon Echo"},{r:new RegExp("(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)")},{r:new RegExp("(iPhone) OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(iPad).+ OS (\\d+)_(\\d+)(?:_(\\d+))?")},{r:new RegExp("(Avant)")},{r:new RegExp("(Nokia)[EN]?(\\d+)")},{r:new RegExp("(Black[bB]erry).+Version\\/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"Blackberry"},{r:new RegExp("(Black[bB]erry)\\s?(\\d+)"), family:"Blackberry"},{r:new RegExp("(OmniWeb)/v(\\d+)\\.(\\d+)")},{r:new RegExp("(Blazer)/(\\d+)\\.(\\d+)"), family:"Palm Blazer"},{r:new RegExp("(Pre)/(\\d+)\\.(\\d+)"), family:"Palm Pre"},{r:new RegExp("(Links) \\((\\d+)\\.(\\d+)")},{r:new RegExp("(QtWeb) Internet Browser/(\\d+)\\.(\\d+)")},{r:new RegExp("(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?")},{r:new RegExp("(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/"), family:"Safari"},{r:new RegExp("(Safari)/\\d+")},{r:new RegExp("(OLPC)/Update(\\d+)\\.(\\d+)")},{r:new RegExp("(OLPC)/Update()\\.(\\d+)")},{r:new RegExp("(SamsungSGHi560)"), family:"Samsung SGHi560"},{r:new RegExp("^(SonyEricssonK800i)"), family:"Sony Ericsson K800i"},{r:new RegExp("(Teleca Q7)")},{r:new RegExp("(MSIE) (\\d+)\\.(\\d+)"), family:"IE"},{r:new RegExp("(Thunderbird)/(\\d+)\\.(\\d+)\\.?(\\d+)?")},{r:new RegExp("(Wget)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)")},{r:new RegExp("(curl)/(\\d+)\\.(\\d+)\\.(\\d+)"), family:"cURL"}];exports.os = [{r:new RegExp("(Android)")},{r:new RegExp("(Windows)")},{r:new RegExp("(iPad)")},{r:new RegExp("(iPhone OS) ([\\d_]+)"), os:"iOS"},{r:new RegExp("(Mac OS X)")},{r:new RegExp("(FreeBSD)")},{r:new RegExp("(iPod)")},{r:new RegExp("(iPhone Simulator)")},{r:new RegExp("(Linux)")},{r:new RegExp("(Red Hat)")}]; |
@@ -141,3 +141,3 @@ /** | ||
// the Chrome/ so we know that it's actually using Chrome under the hood | ||
if (jsagent && | ||
if (jsagent && | ||
(jsagent.indexOf('Chrome/') !== -1 && useragent.indexOf('chromeframe') !== -1) | ||
@@ -207,18 +207,37 @@ ) { | ||
function is (useragent) { | ||
var ua = useragent.toLowerCase() | ||
var ua = (useragent || '').toLowerCase() | ||
, details = { | ||
version: (ua.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, "0"])[1] | ||
, webkit: ua.indexOf('webkit') !== -1 | ||
, opera: ua.indexOf('opera') !== -1 | ||
webkit: false | ||
, mozilla: false | ||
, chrome: false | ||
, safari: false | ||
, mobile_safari: false | ||
, opera: false | ||
, ie: false | ||
, firefox: false | ||
, version: (ua.match(is.versionRE) || [0, "0"])[1] | ||
}; | ||
// the following checks depend on our findings from above | ||
details.ie = ua.indexOf('msie') && !details.opera; | ||
details.chrome = ua.indexOf('chrome') !== -1 && details.webkit; | ||
details.safari = ua.indexOf('safari') !== -1 && !details.chrome; | ||
details.mobile_safari = ua.indexOf('apple') !== -1 | ||
&& ua.indexOf('mobile') !== -1 && details.safari; | ||
details.firefox = ua.indexOf('mozilla') !== -1 | ||
&& !(details.webkit || ua.indexOf('compatible') !== -1); | ||
if (~ua.indexOf('webkit')) { | ||
details.webkit = true; | ||
if (~ua.indexOf('chrome')) { | ||
details.chrome = true; | ||
} else if (~ua.indexOf('safari')) { | ||
details.safari = true; | ||
if (~ua.indexOf('mobile') && ~ua.indexOf('apple')) { | ||
details.mobile_safari = true; | ||
} | ||
} | ||
} else if (~ua.indexOf('opera')) { | ||
details.opera = true; | ||
} else if (~ua.indexOf('mozilla') && ua.indexOf('compatible') < 0) { | ||
details.mozilla = true; | ||
if (~ua.indexOf('firefox')) details.firefox = true; | ||
} else if (~ua.indexOf('msie')) { | ||
details.ie = true; | ||
} | ||
return details; | ||
@@ -228,2 +247,11 @@ } | ||
/** | ||
* Parses out the version numbers. | ||
* | ||
* @type {RegExp} | ||
* @api private | ||
*/ | ||
is.versionRE = /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/; | ||
/** | ||
* Converts the result of Agent.toString() back to a new Agent. | ||
@@ -291,3 +319,3 @@ * | ||
updater.version = '1.0.3'; | ||
updater.version = '1.0.4'; | ||
@@ -294,0 +322,0 @@ /** |
{ | ||
"name": "useragent" | ||
, "version": "1.0.3" | ||
, "version": "1.0.4" | ||
, "description": "User-Agent string parser based on Browserscope.org algorithms for more browser reporting" | ||
@@ -29,8 +29,8 @@ , "author": "Arnout Kazemier" | ||
"yamlparser": "0.0.2" | ||
, "request": "2.1.1" | ||
, "semver": "1.0.11" | ||
, "request": "2.2.9" | ||
, "semver": "1.0.12" | ||
} | ||
, "devDependencies": { | ||
"should": "0.3.1" | ||
, "expresso": "0.8.1" | ||
"should": "*" | ||
, "mocha": "*" | ||
, "long-stack-traces": "0.1.2" | ||
@@ -41,3 +41,4 @@ } | ||
, "update": "./bin/update.js" | ||
, "test": "make test" | ||
} | ||
} |
@@ -1,3 +0,5 @@ | ||
# useragent | ||
# useragent | ||
Current build status:[![BuildStatus](https://secure.travis-ci.org/3rd-Eden/useragent.png)](http://travis-ci.org/3rd-Eden/useragent) | ||
Useragent is a port of browserscope.org's user agent parser project which | ||
@@ -4,0 +6,0 @@ allows you to parse user agent strings with high accuracy by using hand tuned |
var useragent = require('../') | ||
, should = require('should') | ||
, features = require('../features'); | ||
, features = require('../features') | ||
, ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2" | ||
// use a fixed user agent to ensure proper test results each time | ||
var ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2"; | ||
describe('useragent/features', function () { | ||
describe('#satisfies', function () { | ||
it('should satisfy that range selector', function () { | ||
var agent = useragent.parse(ua) | ||
// make sure we have proper stack traces for when things fail | ||
require('long-stack-traces'); | ||
// the actual tests | ||
module.exports = { | ||
'satisfy that range selector': function () { | ||
var agent = useragent.parse(ua); | ||
agent.satisfies('15.x || >=19.5.0 || 25.0.0 - 17.2.3').should.be_true; | ||
agent.satisfies('>16.12.0').should.be_false; | ||
} | ||
}; | ||
agent.satisfies('15.x || >=19.5.0 || 25.0.0 - 17.2.3').should.be_true; | ||
agent.satisfies('>16.12.0').should.be_false; | ||
}) | ||
}) | ||
}) |
var useragent = require('../') | ||
, should = require('should'); | ||
, ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2" | ||
// use a fixed user agent to ensure proper test results each time | ||
var ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.24 Safari/535.2"; | ||
// the actual tests | ||
describe('useragent', function () { | ||
it('should expose the current version number', function () { | ||
useragent.version.should.match(/^\d+\.\d+\.\d+$/) | ||
}) | ||
// make sure we have proper stack traces for when things fail | ||
require('long-stack-traces'); | ||
it('should expose the Agent interface', function () { | ||
useragent.Agent.should.be.a('function') | ||
}) | ||
// the actual tests | ||
module.exports = { | ||
'semver compatible version number': function () { | ||
useragent.version.should.match(/^\d+\.\d+\.\d+$/); | ||
}, | ||
it('should expose the JSON parser', function () { | ||
useragent.fromJSON.should.be.a('function') | ||
}) | ||
'parser should not throw errors when no useragent has been given': function () { | ||
var agent = useragent.parse(); | ||
it('should expose the Agent string parser', function () { | ||
useragent.fromString.should.be.a('function') | ||
}) | ||
agent.family.should.equal('Other'); | ||
agent.major.should.equal('0'); | ||
agent.minor.should.equal('0'); | ||
agent.patch.should.equal('0'); | ||
it('should expose the dictionary lookup', function () { | ||
useragent.lookup.should.be.a('function') | ||
}) | ||
agent.os.should.equal('Other'); | ||
agent.toVersion().should.equal('0.0.0'); | ||
agent.toString().should.equal('Other 0.0.0'); | ||
agent.toAgent().should.equal('Other 0.0.0'); | ||
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}'); | ||
}, | ||
it('should expose the parser', function () { | ||
useragent.parse.should.be.a('function') | ||
}) | ||
'parser should not throw errors and default to unkown': function () { | ||
var agent = useragent.parse(''); | ||
it('should expose the useragent tester', function () { | ||
useragent.is.should.be.a('function') | ||
}) | ||
agent.family.should.equal('Other'); | ||
agent.major.should.equal('0'); | ||
agent.minor.should.equal('0'); | ||
agent.patch.should.equal('0'); | ||
describe('#parse', function () { | ||
it('should not throw errors when no useragent is given', function () { | ||
var agent = useragent.parse() | ||
agent.os.should.equal('Other'); | ||
agent.toVersion().should.equal('0.0.0'); | ||
agent.toString().should.equal('Other 0.0.0'); | ||
agent.toAgent().should.equal('Other 0.0.0'); | ||
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}'); | ||
}, | ||
agent.family.should.equal('Other') | ||
agent.major.should.equal('0') | ||
agent.minor.should.equal('0') | ||
agent.patch.should.equal('0') | ||
'correctly parse chromes user agent': function () { | ||
var agent = useragent.parse(ua); | ||
agent.os.should.equal('Other') | ||
agent.toVersion().should.equal('0.0.0') | ||
agent.toString().should.equal('Other 0.0.0') | ||
agent.toAgent().should.equal('Other 0.0.0') | ||
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}') | ||
}) | ||
agent.family.should.equal('Chrome'); | ||
agent.major.should.equal('15'); | ||
agent.minor.should.equal('0'); | ||
agent.patch.should.equal('874'); | ||
it('should not throw errors on empty strings and default to unkown', function () { | ||
var agent = useragent.parse('') | ||
agent.os.should.equal('Mac OS X'); | ||
agent.toVersion().should.equal('15.0.874'); | ||
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X'); | ||
agent.toAgent().should.equal('Chrome 15.0.874'); | ||
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}'); | ||
}, | ||
agent.family.should.equal('Other') | ||
agent.major.should.equal('0') | ||
agent.minor.should.equal('0') | ||
agent.patch.should.equal('0') | ||
'simple detections': function () { | ||
useragent.is(ua).chrome.should.be_true; | ||
useragent.is(ua).webkit.should.be_true; | ||
useragent.is(ua).firefox.should.be_false; | ||
}, | ||
agent.os.should.equal('Other') | ||
agent.toVersion().should.equal('0.0.0') | ||
agent.toString().should.equal('Other 0.0.0') | ||
agent.toAgent().should.equal('Other 0.0.0') | ||
agent.toJSON().should.equal('{"family":"Other","major":"0","minor":"0","patch":"0","os":"Other"}') | ||
}) | ||
'reparse from agent string': function () { | ||
var agent = useragent.fromString('Chrome 15.0.874 / Mac OS X'); | ||
it('should correctly parse chromes user agent', function () { | ||
var agent = useragent.parse(ua) | ||
agent.family.should.equal('Chrome'); | ||
agent.major.should.equal('15'); | ||
agent.minor.should.equal('0'); | ||
agent.patch.should.equal('874'); | ||
agent.family.should.equal('Chrome') | ||
agent.major.should.equal('15') | ||
agent.minor.should.equal('0') | ||
agent.patch.should.equal('874') | ||
agent.os.should.equal('Mac OS X'); | ||
agent.toVersion().should.equal('15.0.874'); | ||
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X'); | ||
agent.toAgent().should.equal('Chrome 15.0.874'); | ||
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}'); | ||
}, | ||
agent.os.should.equal('Mac OS X') | ||
agent.toVersion().should.equal('15.0.874') | ||
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X') | ||
agent.toAgent().should.equal('Chrome 15.0.874') | ||
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}') | ||
}) | ||
}) | ||
'reparse from agent string without operating system': function () { | ||
var agent = useragent.fromString('Chrome 15.0.874'); | ||
describe('#is', function () { | ||
var chrome = ua | ||
, firefox = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0' | ||
, ie = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)' | ||
, opera = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51' | ||
, safari = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1' | ||
, ipod = 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5' | ||
agent.family.should.equal('Chrome'); | ||
agent.major.should.equal('15'); | ||
agent.minor.should.equal('0'); | ||
agent.patch.should.equal('874'); | ||
it('should not throw errors when called without arguments', function () { | ||
useragent.is() | ||
useragent.is('') | ||
}) | ||
agent.os.should.equal('Other'); | ||
agent.toVersion().should.equal('15.0.874'); | ||
agent.toAgent().should.equal('Chrome 15.0.874'); | ||
} | ||
}; | ||
it('should correctly detect google chrome', function () { | ||
useragent.is(chrome).chrome.should.be.true | ||
useragent.is(chrome).webkit.should.be.true | ||
useragent.is(chrome).safari.should.be.false | ||
useragent.is(chrome).firefox.should.be.false | ||
useragent.is(chrome).mozilla.should.be.false | ||
useragent.is(chrome).ie.should.be.false | ||
useragent.is(chrome).opera.should.be.false | ||
useragent.is(chrome).mobile_safari.should.be.false | ||
}) | ||
it('should correctly detect firefox', function () { | ||
useragent.is(firefox).chrome.should.be.false | ||
useragent.is(firefox).webkit.should.be.false | ||
useragent.is(firefox).safari.should.be.false | ||
useragent.is(firefox).firefox.should.be.true | ||
useragent.is(firefox).mozilla.should.be.true | ||
useragent.is(firefox).ie.should.be.false | ||
useragent.is(firefox).opera.should.be.false | ||
useragent.is(firefox).mobile_safari.should.be.false | ||
}) | ||
it('should correctly detect internet explorer', function () { | ||
useragent.is(ie).chrome.should.be.false | ||
useragent.is(ie).webkit.should.be.false | ||
useragent.is(ie).safari.should.be.false | ||
useragent.is(ie).firefox.should.be.false | ||
useragent.is(ie).mozilla.should.be.false | ||
useragent.is(ie).ie.should.be.true | ||
useragent.is(ie).opera.should.be.false | ||
useragent.is(ie).mobile_safari.should.be.false | ||
}) | ||
it('should correctly detect opera', function () { | ||
useragent.is(opera).chrome.should.be.false | ||
useragent.is(opera).webkit.should.be.false | ||
useragent.is(opera).safari.should.be.false | ||
useragent.is(opera).firefox.should.be.false | ||
useragent.is(opera).mozilla.should.be.false | ||
useragent.is(opera).ie.should.be.false | ||
useragent.is(opera).opera.should.be.true | ||
useragent.is(opera).mobile_safari.should.be.false | ||
}) | ||
it('should correctly detect safari', function () { | ||
useragent.is(safari).chrome.should.be.false | ||
useragent.is(safari).webkit.should.be.true | ||
useragent.is(safari).safari.should.be.true | ||
useragent.is(safari).firefox.should.be.false | ||
useragent.is(safari).mozilla.should.be.false | ||
useragent.is(safari).ie.should.be.false | ||
useragent.is(safari).opera.should.be.false | ||
useragent.is(safari).mobile_safari.should.be.false | ||
}) | ||
it('should correctly detect safari-mobile', function () { | ||
useragent.is(ipod).chrome.should.be.false | ||
useragent.is(ipod).webkit.should.be.true | ||
useragent.is(ipod).safari.should.be.true | ||
useragent.is(ipod).firefox.should.be.false | ||
useragent.is(ipod).mozilla.should.be.false | ||
useragent.is(ipod).ie.should.be.false | ||
useragent.is(ipod).opera.should.be.false | ||
useragent.is(ipod).mobile_safari.should.be.true | ||
}) | ||
}) | ||
describe('#fromString', function () { | ||
it('should reparse an Agent string with operating system', function () { | ||
var agent = useragent.fromString('Chrome 15.0.874 / Mac OS X') | ||
agent.family.should.equal('Chrome') | ||
agent.major.should.equal('15') | ||
agent.minor.should.equal('0') | ||
agent.patch.should.equal('874') | ||
agent.os.should.equal('Mac OS X') | ||
agent.toVersion().should.equal('15.0.874') | ||
agent.toString().should.equal('Chrome 15.0.874 / Mac OS X') | ||
agent.toAgent().should.equal('Chrome 15.0.874') | ||
agent.toJSON().should.equal('{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}') | ||
}) | ||
it('should reparse an Agent string without operating system', function () { | ||
var agent = useragent.fromString('Chrome 15.0.874'); | ||
agent.family.should.equal('Chrome'); | ||
agent.major.should.equal('15'); | ||
agent.minor.should.equal('0'); | ||
agent.patch.should.equal('874'); | ||
agent.os.should.equal('Other'); | ||
agent.toVersion().should.equal('15.0.874'); | ||
agent.toAgent().should.equal('Chrome 15.0.874'); | ||
}) | ||
}) | ||
}) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
2144682
27
838
279
1
7
+ Addedrequest@2.2.9(transitive)
+ Addedsemver@1.0.12(transitive)
- Removedrequest@2.1.1(transitive)
- Removedsemver@1.0.11(transitive)
Updatedrequest@2.2.9
Updatedsemver@1.0.12