useragent
Advanced tools
Comparing version 1.0.0 to 1.0.1
@@ -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"}];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)")}]; | ||
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)")}]; |
@@ -15,12 +15,19 @@ var request = require('request') | ||
module.exports = function update (fn) { | ||
// fetch it | ||
request(exports.remote, function remoteResponse (err, res, data) { | ||
if (err) return fn(err); | ||
if (res.statusCode !== 200) return fn(new Error('incorrect status code')); | ||
var ua_parsers = [] | ||
, os_parsers = []; | ||
/** | ||
* Parses the yaml file and adds to our ua / os parser array | ||
* | ||
* @param {String} yamlstring The string that needs to be extracted | ||
* @returns {Boolean} Success | ||
* @api private | ||
*/ | ||
function convert (yamlstring) { | ||
// try to see if we can parse the yaml | ||
var parsed_yaml; | ||
try { parsed_yaml = yaml.eval(data) } | ||
catch (e) { return fn(e) } | ||
try { parsed_yaml = yaml.eval(yamlstring) } | ||
catch (e) { return false } | ||
@@ -36,3 +43,3 @@ // make sure we have a correct structure because we are reading this from | ||
|| !parsed_yaml.os_parsers[0].regex | ||
) return fn(new Error('invalid yaml structure')); | ||
) return false; | ||
@@ -44,4 +51,2 @@ // \o/ working, now to create pre-compiled version of the regexps | ||
, os = parsed_yaml.os_parsers | ||
, ua_parsers = [] | ||
, os_parsers = [] | ||
, parser, i, l; | ||
@@ -76,4 +81,14 @@ | ||
} | ||
agents.length = os.length = parsed_yaml = 0; | ||
return true; | ||
} | ||
/** | ||
* The conversion of the files has been done, output the file and write it | ||
* | ||
* @api private | ||
*/ | ||
function output () { | ||
// now that we have generated arrays of parsers we are gonna build up the | ||
@@ -98,2 +113,18 @@ // file and make it happen. | ||
}); | ||
} | ||
// fetch the remote database from the ua-parser google code project | ||
request(exports.remote, function remoteResponse (err, res, data) { | ||
if (err) return fn(err); | ||
if (res.statusCode !== 200) return fn(new Error('incorrect status code')); | ||
if (!convert(data)) return fn(new Error('unable to parse remote useragent db')); | ||
// now that we parsed the remote file, do the same for the our custom local | ||
// useragent database | ||
fs.readFile(exports.local, 'utf8', function (err, data) { | ||
if (err) return fn(err); | ||
if (!convert(data)) return fn(new Error('unable to parse local useragent db')); | ||
output(); | ||
}); | ||
}); | ||
@@ -108,2 +139,3 @@ }; | ||
exports.remote = 'http://ua-parser.googlecode.com/svn/trunk/resources/user_agent_parser.yaml'; | ||
exports.local = path.join(__dirname, '..', 'static', 'user_agent.after.yaml'); | ||
exports.output = path.join(__dirname, '..', 'lib', 'agents.js'); |
@@ -286,3 +286,3 @@ /** | ||
updater.version = '1.0.0'; | ||
updater.version = '1.0.1'; | ||
@@ -289,0 +289,0 @@ /** |
{ | ||
"name": "useragent" | ||
, "version": "1.0.0" | ||
, "version": "1.0.1" | ||
, "description": "User-Agent string parser based on Browserscope.org algorithms for more browser reporting" | ||
@@ -5,0 +5,0 @@ , "author": "Arnout Kazemier" |
@@ -26,2 +26,3 @@ # useragent | ||
> ``` | ||
> Starting the benchmark, parsing 47 useragent strings per run | ||
@@ -33,2 +34,3 @@ > Executed benchmark (useragent2) | ||
> Count (56), Cycles (96), Elapsed (5.03), Hz (1063.7910527195145) | ||
> ``` | ||
@@ -51,2 +53,17 @@ As you can see that useragent 2 (1.0) is much faster then original parser. The | ||
### Migrating from 0.1.2 to 1.0.0 | ||
If you are upgrading from 0.1.2 to 1.0.0 these changes will affect your: | ||
* `useragent.browser(ua)` has been renamed to `useragent.is(ua)`. | ||
* `useragent.parser(ua, jsua)` has been renamed to `useragent.parse(ua, jsua)`. | ||
* `result.pretty()` has been renamed to `result.toAgent()`. | ||
* `result.V1` has been renamed to `result.major`. | ||
* `result.V2` has been renamed to `result.minor`. | ||
* `result.V3` has been renamed to `result.patch`. | ||
* `result.prettyOS()` has been removed. | ||
* `result.match` has been removed. | ||
For more detailed information, check out the API below. | ||
### API / Working the codez | ||
@@ -91,5 +108,5 @@ | ||
```js | ||
useragent.is('ua string').firefox // true | ||
useragent.is('ua string').safari // false | ||
var ua = useragent.is('ua string') | ||
useragent.is(req.headers['user-agent']).firefox // true | ||
useragent.is(req.headers['user-agent']).safari // false | ||
var ua = useragent.is(req.headers['user-agent']) | ||
@@ -124,6 +141,6 @@ // the object | ||
```js | ||
var agent = useragent.parse(req.headers.useragent); | ||
var agent = useragent.parse(req.headers['user-agent']); | ||
// example for parsing both the useragent header and a optional js useragent | ||
var agent2 = useragent.parse(req.headers.useragent, req.query.jsuseragent); | ||
var agent2 = useragent.parse(req.headers['user-agent'], req.query.jsuseragent); | ||
``` | ||
@@ -145,3 +162,3 @@ | ||
```js | ||
var agent = useragent.parse(req.headers.useragent) | ||
var agent = useragent.parse(req.headers['user-agent']) | ||
, another = useragent.fromString(agent.toString()); | ||
@@ -157,3 +174,3 @@ | ||
```js | ||
var agent = useragent.parse(req.headers.useragent) | ||
var agent = useragent.parse(req.headers['user-agent']) | ||
, another = useragent.fromJSON(agent.toJSON()); | ||
@@ -193,3 +210,3 @@ | ||
```js | ||
var agent = useragent.parse(req.headers.useragent); | ||
var agent = useragent.parse(req.headers['user-agent']); | ||
agent.toAgent(); // 'Chrome 15.0.874' | ||
@@ -204,3 +221,3 @@ ``` | ||
```js | ||
var agent = useragent.parse(req.headers.useragent); | ||
var agent = useragent.parse(req.headers['user-agent']); | ||
agent.toString(); // 'Chrome 15.0.874 / Mac OS X' | ||
@@ -218,3 +235,3 @@ | ||
```js | ||
var agent = useragent.parse(req.headers.useragent); | ||
var agent = useragent.parse(req.headers['user-agent']); | ||
agent.toVersion(); // '15.0.874' | ||
@@ -229,3 +246,3 @@ ``` | ||
```js | ||
var agent = useragent.parse(req.headers.useragent); | ||
var agent = useragent.parse(req.headers['user-agent']); | ||
agent.toJSON(); //'{"family":"Chrome","major":"15","minor":"0","patch":"874","os":"Mac OS X"}' | ||
@@ -267,5 +284,5 @@ ``` | ||
```js | ||
var agent = useragent.parse(req.headers.useragent); | ||
var agent = useragent.parse(req.headers['user-agent']); | ||
agent.satisfies('15.x || >=19.5.0 || 25.0.0 - 17.2.3'); // true | ||
agent.satisfies('>16.12.0'); // false | ||
``` |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
34135
16
478
277
0