@hyperwatch/useragent

3.9.3 • Public • Published

NPM version Build Status

This is Hyperwatch's User Agent parser for Node.js.

It's fast and detects more user agents that any other similar libraries.

It's derived from UAP Core and forked from 3rd-Eden useragent.

It's using an innovative approach, it doesn't try to target each known user agent but instead targets generic patterns. It allows the library to be more exhaustive, it doesn't need to contain a single rule for each user agent and it doesn't need to be updated each time there is a new active user agent in the wild.

It's much faster because it's containing fewer regexes than predecessors, it's starting with a plain text "pre-parsing" to lower even more the number of regexes to execute.

Install

npm install --save @hyperwatch/useragent

Usage

In short:

const useragent = require('@hyperwatch/useragent');

const agent = useragent.parse(
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:82.0) Gecko/20100101 Firefox/82.0'
);

console.log(agent);

Returns:

{
  family: 'Firefox',
  major: '82',
  minor: '0',
  patch: null,
  patch_minor: null,
  source: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:82.0) Gecko/20100101 Firefox/82.0'
}

For more details, read the dedicated API documentation.

Regexes

First

This set contains today 2 regular expressions.

It aims to contain generic regexes that can parse enough user agents that it's justified to run them every single time as first.

Core

This set contains today around 90 regular expressions in 20 families.

A plain text pre-parser is triggered first to recognize the user agent family, it then iterates over all regexes in the family, order matters.

Extra

This set contains non-generic regexes targeting user agents that are not recognized by the 'First' or 'Core' sets. Sometimes it's acceptable to fall back on 'UAP' instead of adding a rule in 'Extra'. We're usually adding rules in 'Extra' for the following reasons:

  • for coverage: to increase the success rate of our own Hyperwatch regex sets
  • for performance: because it's faster to skip UAP and use our own Hyperwatch regex sets
  • because it's not supported by UAP anyway

UAP

If it's not able to provide a result with the 'First', 'Core' and 'Extra' sets, it uses UAP as a fallback.

Also, it's still using UAP for Device and OS parsing as this is not a focus of the library at this time.

License

Apache License, version 2

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
3.9.31,149latest

Version History

VersionDownloads (Last 7 Days)Published
3.9.31,149
3.9.10
3.9.00
3.8.2435
3.7.40
3.7.30
3.7.20

Package Sidebar

Install

npm i @hyperwatch/useragent

Weekly Downloads

1,584

Version

3.9.3

License

Apache-2.0

Unpacked Size

505 kB

Total Files

34

Last publish

Collaborators

  • znarf