Security News
vlt Debuts New JavaScript Package Manager and Serverless Registry at NodeConf EU
vlt introduced its new package manager and a serverless registry this week, innovating in a space where npm has stagnated.
The doiuse npm package is a tool for checking your CSS against browser support. It helps developers ensure that their CSS is compatible with the browsers they intend to support by identifying unsupported or partially supported CSS features.
Check CSS for browser support
This feature allows you to check your CSS code against a list of browsers to see if any features are not supported. The code sample demonstrates how to use doiuse with PostCSS to process a CSS string and log any warnings about unsupported features.
const doiuse = require('doiuse');
const postcss = require('postcss');
const css = 'a { display: flex; }';
postcss([doiuse({ browsers: ['> 1%', 'last 2 versions'] })])
.process(css)
.then(result => {
result.warnings().forEach(warn => {
console.warn(warn.toString());
});
});
Custom browser support configuration
This feature allows you to specify custom browser support configurations. The code sample shows how to configure doiuse to check CSS against Internet Explorer 10 and the last two versions of all other browsers.
const doiuse = require('doiuse');
const postcss = require('postcss');
const css = 'a { display: grid; }';
postcss([doiuse({ browsers: ['ie >= 10', 'last 2 versions'] })])
.process(css)
.then(result => {
result.warnings().forEach(warn => {
console.warn(warn.toString());
});
});
caniuse-lite is a smaller, more compact version of the caniuse database that provides data on browser support for various web technologies. Unlike doiuse, caniuse-lite does not directly check your CSS but provides the data that can be used by other tools to perform such checks.
Autoprefixer is a PostCSS plugin that parses your CSS and adds vendor prefixes to CSS rules using values from the Can I Use database. While doiuse checks for unsupported features, Autoprefixer automatically adds necessary prefixes to ensure compatibility with specified browsers.
Stylelint is a powerful CSS linter that helps you avoid errors and enforce consistent conventions in your stylesheets. It can be extended with plugins to check for browser compatibility issues, similar to doiuse, but offers a broader range of linting capabilities.
Lint CSS for browser support against caniuse database.
NOTE: This is a very, very initial release. Feedback or contributions are quite welcome!
doiuse --browsers "ie >= 9, > 1%, last 2 versions" main.css
# or
cat main.css | doiuse --browsers "ie >= 9, > 1%, last 2 versions"
Sample output:
/projects/website/main.css:5:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
/projects/website/main.css:6:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
/projects/website/main.css:8:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:9:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:10:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:11:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:12:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:13:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:14:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:32:3: CSS3 Transforms not supported by: IE (8)
Use --json
to get output as (newline-delimited) JSON objects.
var postcss = require('postcss');
var doiuse = require('doiuse');
postcss(doiuse({
browsers:['ie >= 6', '> 1%'],
onUnsupportedFeatureUse: function(usageInfo) {
console.log(usageInfo.message);
}
})).process("a { background-size: cover; }")
In particular, the approach to detecting features usage is currently quite naive.
Refer to the data in /src/data/features.coffee.
properties
, we just use those
properties for regex/substring matches against the properties used in the input CSS.values
, then we also require that the associated
value matches one of those values.TODO:
var doiuse = require('doiuse/stream');
process.stdin
.pipe(doiuse(['ie >= 8', '> 1%']))
.pipe(process.stdout);
Yields usage info in objects as described below.
postcss(doiuse(opts)).process(css)
, where opts
is:
{
browserSelection: ['ie >= 8', '> 1%'] // an autoprefixer-like array of browsers.
onUnsupportedFeatureUse: function(usageInfo) { } // a callback for usages of features not supported by the selected browsers
}
And usageInfo
looks like this:
{
message: '<input source>: line <l>, col <c> - CSS3 Gradients not supported by: IE (8)'
feature: 'css-gradients', //slug identifying a caniuse-db feature
featureData:{
title: 'CSS Gradients',
missing: "IE (8)" // string of browsers missing support for this feature.
missingData: {
// map of browser -> version -> (lack of)support code
ie: { '8': 'n' }
},
caniuseData: { // data from caniuse-db/features-json/[feature].json }
},
usage: {} //the postcss node where that feature is being used.
}
Called once for each usage of each css feature not supported by the selected
browsers.
MIT
NOTE: Many of the files in test/cases are from autoprefixer-core, Copyright 2013 Andrey Sitnik andrey@sitnik.ru. Please see https://github.com/postcss/autoprefixer-core.
FAQs
Lint CSS for browser support against caniuse database
The npm package doiuse receives a total of 255,779 weekly downloads. As such, doiuse popularity was classified as popular.
We found that doiuse demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
vlt introduced its new package manager and a serverless registry this week, innovating in a space where npm has stagnated.
Security News
Research
The Socket Research Team uncovered a malicious Python package typosquatting the popular 'fabric' SSH library, silently exfiltrating AWS credentials from unsuspecting developers.
Security News
At its inaugural meeting, the JSR Working Group outlined plans for an open governance model and a roadmap to enhance JavaScript package management.