Share target browsers between different front-end tools, like Autoprefixer, Stylelint and babel-env-preset
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Calculate market coverage percentage for browser lists. This functionality helps understand the reach of browser support decisions by computing what percentage of users are covered by a given set of browsers.
Calculate the total market coverage for a list of browsers.
/**
* Return browsers market coverage
* @param browsers - Browser names in Can I Use format
* @param stats - Statistics to use for calculation
* @returns Total market coverage percentage
*/
browserslist.coverage(
browsers: string[],
stats?: string | object
): number;Usage Examples:
const browserslist = require("browserslist");
// Calculate coverage for specific browsers
const browsers = ['chrome 88', 'firefox 85', 'safari 14'];
const globalCoverage = browserslist.coverage(browsers);
console.log(`Global coverage: ${globalCoverage}%`);
// => Global coverage: 78.3%
// Calculate coverage for browserslist result
const modernBrowsers = browserslist('last 2 versions, > 1%');
const coverage = browserslist.coverage(modernBrowsers);
console.log(`Coverage: ${coverage.toFixed(2)}%`);
// Coverage with country-specific stats
const usCoverage = browserslist.coverage(browsers, 'US');
console.log(`US coverage: ${usCoverage}%`);
// Coverage with custom statistics
const customStats = {
'chrome 88': 25.5,
'firefox 85': 15.2,
'safari 14': 12.8
};
const customCoverage = browserslist.coverage(browsers, customStats);The stats parameter accepts different types of statistics sources:
Global Statistics (default):
// Uses global browser usage statistics
const coverage = browserslist.coverage(browsers);
// Equivalent to:
const coverage = browserslist.coverage(browsers, 'global');Country-specific Statistics:
// Two-letter country codes (uppercase)
const usCoverage = browserslist.coverage(browsers, 'US');
const jpCoverage = browserslist.coverage(browsers, 'JP');
const deCoverage = browserslist.coverage(browsers, 'DE');
// Full country names (lowercase)
const chinaCoverage = browserslist.coverage(browsers, 'china');
const russiaCoverage = browserslist.coverage(browsers, 'russia');Custom Statistics from File:
// Load custom statistics from browserslist config
const myStatsCoverage = browserslist.coverage(browsers, 'my stats');Custom Statistics Object:
// Direct statistics object
const customStats = {
'chrome 88': 30.5,
'chrome 87': 25.2,
'firefox 85': 20.1,
'safari 14': 15.8
};
const coverage = browserslist.coverage(browsers, customStats);
// Statistics with dataByBrowser format (common in analytics tools)
const analyticsStats = {
dataByBrowser: {
chrome: { '88': 30.5, '87': 25.2 },
firefox: { '85': 20.1, '84': 18.5 },
safari: { '14': 15.8, '13': 12.2 }
}
};
const analyticsCoverage = browserslist.coverage(browsers, analyticsStats);Access to the underlying usage statistics used by browserslist:
/** Browser usage statistics */
browserslist.usage: {
/** Global browser usage statistics */
global: object;
/** Custom usage statistics (loaded from files) */
custom: object | null;
};Usage Examples:
// Access global usage stats
console.log(browserslist.usage.global['chrome 88']);
// => 25.5 (percentage)
// Check if custom stats are loaded
if (browserslist.usage.custom) {
console.log('Custom statistics available');
}Browserslist can load custom usage statistics from JSON files:
browserslist-stats.json format:
{
"chrome": {
"88": 25.5,
"87": 23.2
},
"firefox": {
"85": 18.1,
"84": 16.8
}
}dataByBrowser format (common in analytics tools):
{
"dataByBrowser": {
"chrome": {
"88": 25.5,
"87": 23.2
},
"firefox": {
"85": 18.1,
"84": 16.8
}
}
}Coverage calculation can throw BrowserslistError for:
// Invalid statistics source
try {
browserslist.coverage(browsers, 'my stats');
} catch (error) {
// Throws if no custom statistics provided
console.error(error.message); // "Custom usage statistics was not provided"
}
// Missing browser data
const coverage = browserslist.coverage(['unknown-browser 1']);
// Returns 0 for unknown browsers (no error thrown)Build Tool Integration:
// Check if browser support meets coverage requirements
const browsers = browserslist('> 1%, last 2 versions');
const coverage = browserslist.coverage(browsers);
if (coverage < 95) {
console.warn(`Browser coverage is only ${coverage.toFixed(1)}%, consider expanding support`);
}Regional Analysis:
// Compare coverage across different regions
const browsers = browserslist('defaults');
const regions = ['US', 'GB', 'DE', 'JP', 'CN'];
regions.forEach(region => {
const coverage = browserslist.coverage(browsers, region);
console.log(`${region}: ${coverage.toFixed(1)}%`);
});Custom Analytics Integration:
// Use your own analytics data
const analyticsData = getAnalyticsData(); // Your analytics function
const supportedBrowsers = browserslist('> 0.1%');
const actualCoverage = browserslist.coverage(supportedBrowsers, analyticsData);
console.log(`Your users: ${actualCoverage.toFixed(1)}% coverage`);