npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@hyperwatch/useragent

v3.9.3

Published

User Agent parser

Downloads

9,905

Readme

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