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

browserslist-generator

v3.0.0

Published

A library that makes generating and validating Browserslists a breeze!

Downloads

238,969

Readme

A library that makes generating and validating Browserslists a breeze!

Description

This is a library that makes it easier to work with browserslists. It can do things like generating a Browserslist that targets only browsers that support - or don't support - specific required features, or even generate a Browserslist from a User Agent string! It can also do the same in reverse - match a Browserslist on a user agent. A Feature is anything that can be found on caniuse or MDN.

Features

  • Generating a Browserslist based on features
  • Generating a Browserslist based on an ECMA version
  • Generating a browserslist based on a User Agent string
  • Checking if a User Agent string supports specific features
  • Checking if a browserslist supports specific features
  • Checking if a browserslist supports a specific ECMA version
  • Getting the most appropriate ECMA version for a browserslist

Backers

Patreon

Table of Contents

Install

npm

$ npm install browserslist-generator

Yarn

$ yarn add browserslist-generator

pnpm

$ pnpm add browserslist-generator

Usage

Generating a Browserslist based on features

When deciding which Browsers and environments to support, it is quite common to make the decision based on feature support. With this library, you no longer have to neither look up Browser support and manually write a Browserslist, nor make sure to keep it up-to-date. Instead, simply declare the features that should be available:

import {browsersWithSupportForFeatures} from "browserslist-generator";
// Generate a browserslist for browsers that support all of the given features
const browserslist = browsersWithSupportForFeatures("es6-module", "shadowdomv1", "custom-elementsv1");

Checking if a User Agent supports a specific feature

This library offers simple ways that you can check if a given User Agent supports any amount of features. This could be useful, among other things, for conditional bundle serving:

import {userAgentSupportsFeatures} from "browserslist-generator";
if (userAgentSupportsFeatures(userAgentString, "javascript.builtins.Promise.finally")) {
	doA();
} else {
	doB();
}

Checking if a Browserslist supports a specific feature

Given an existing Browserslist, this library can check if it supports one or more features. This could be useful, among other things, for conditional bundle serving:

import {browserslistSupportsFeatures} from "browserslist-generator";
if (browserslistSupportsFeatures(browserslist, "es6-module")) {
	useModernBundle();
} else {
	useLegacyBundle();
}

Generating a Browserslist based on a ECMAScript version

When deciding which Browsers and environments to support, it is quite common to make the decision based on a specific version of ECMAScript to target. For example, with the Typescript Compiler, the target option takes an ECMAScript version and the Typescript Compiler then knows which transformations to apply accordingly.

import {browsersWithSupportForEcmaVersion} from "browserslist-generator";
// Generate a browserslist for browsers that support the given version of ECMAScript
const browserslist = browsersWithSupportForEcmaVersion("es2015");

Checking if a Browserslist supports a specific ECMAScript version

Given an existing Browserslist, this library can also check if it supports a specific version of ECMAScript. This could be useful, among other things, for conditional bundle serving:

import {browserslistSupportsEcmaVersion} from "browserslist-generator";
if (browserslistSupportsEcmaVersion(browserslist, "es2015")) {
	useModernBundle();
} else {
	useLegacyBundle();
}

Getting the most appropriate ECMAScript version for a Browserslist

Given an existing Browserslist, this library can detect the most appropriate ECMAScript version to target. This could be useful, for example, when using the Typescript compiler based on a Browserslist.

import {getAppropriateEcmaVersionForBrowserslist} from "browserslist-generator";

const typescriptOptions = {
	// ...
	target: getAppropriateEcmaVersionForBrowserslist(browserslist)
};

Possible ECMAScript versions

All of the possible ECMAScript versions are:

  • es3
  • es5
  • es2015
  • es2016
  • es2017
  • es2018
  • es2019
  • es2020,
  • es2021,
  • es2022,
  • es2023
  • es2024

Contributing

Do you want to contribute? Awesome! Please follow these recommendations.

Maintainers

| | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Frederik WessbergTwitter: @FredWessbergGithub: @wessbergLead Developer |

FAQ

What is some cool example of a use case for this library?

Well, here's one I think is pretty neat: You're building an app, and you care about serving the smallest amount of code to your users. You've decided to build two bundles: One for browsers with, and one for browsers without ES-module support. You can now generate two Browserslists via browserslist-generator:

browsersWithSupportForFeatures("es6-module");
browsersWithoutSupportForFeatures("es6-module");

Now, you can then pass each one into tools like @babel/preset-env and postcss. On the server, you can use the function userAgentSupportsFeatures to check if the same features are supported and respond with resources that points to the right bundle.

License

MIT © Frederik Wessberg (@FredWessberg) (Website)