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

postcss-customprop-validate

v1.0.0

Published

PostCSS plugin to validate fallback values of CSS custom properties

Downloads

2

Readme

PostCSS Customprop Validate Build

PostCSS plugin to validate fallback values of CSS custom properties.

Validating the fallback values of CSS custom properties manually can be error prone and challening, specially if there are many.

This plugin validates the CSS and returns custom properties with incorrect fallback values. It can also modify the source CSS file with the updated values.

Usage

const postcss = require("postcss");
const plugin = require("postcss-customprop-validate");
const { readFileSync } = require("fs");

const cssPath = "./sample.css";
const css = readFileSync(cssPath, "utf-8");
/*
{
  font-size: 1rem;
  color: var(--color-red, #fa0000);
}
*/

const properties = {
  "--color-red": "#ff0000",
};

const callback = (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
};

postcss([
  plugin({
    properties,
    write: false,
    callback,
  }),
])
  .process(css, { from: cssPath })
  .then((result) => {
    console.log(result.wrongProps);
    /*
     [
       {
         path: "./sample.js",
         line: 3,
         key: "--color-red",
         current: "#fa0000",
         expected: "#ff0000"
       }
     ]
    */
  });

See PostCSS docs for examples for your environment.

Options

The plugin accepts an object containing 3 properties:

properties

Required: true

An object containg key and expected fallback values of custom properties. The plugin uses it as the source of truth to validate the CSS.

Example:

{
  "--border-radius": "4px",
  "--color-red": "#ff0000",
  "--danger-border":
    "var(--border-radius, 4px) solid var(--color-red, #ff0000)",
};

write

Default: false

Modifies the source CSS file with the correct fallback values.

Formatting

The plugin does not preserves the code formatting. If you use a code formatter like prettier, you may need to re-run it after the plugin modifies the source file.

callback

Default: () => {}

Callback to handle the output of the plugin. The plugin invokes the callback after it processes the CSS of each file. The callback accepts 2 arguments. The first argument is an error object. The second argument is an array of objects. Each object represents an incorrect fallback value having the following shape:

  • path - absolute path of the CSS file
  • line - line number containing the custom property
  • key - key of the custom property
  • current - current fallback value
  • expected - expected fallback value

The second argument is also available in the plugin's result as result.wrongProps

Example

A sample CSS:

.foo {
  border: var(
    --danger-border,
    var(--border-radius, 5px) solid var(--color-red, #fa0000)
  );
}

.bar {
  --danger-text: var(--color-red, red);
  color: var(--danger-text);
}

The resultant CSS that the plugin produces:

.foo {
  border: var(
    --danger-border,
-    var(--border-radius, 5px) solid var(--color-red, #fa0000)
+    var(--border-radius, 4px) solid var(--color-red, #ff0000)
  );
}

.bar {
-  --danger-text: var(--color-red, red);
+  --danger-text: var(--color-red, #ff0000);
  color: var(--danger-text);
}

Custom properties with incorrect fallback values:

[
  {
    path: undefined,
    line: 2,
    key: "--danger-border",
    current: "var(--border-radius, 5px) solid var(--color-red, #fa0000)",
    expected: "var(--border-radius, 4px) solid var(--color-red, #ff0000)",
  },
  {
    path: undefined,
    line: 9,
    key: "--color-red",
    current: "red",
    expected: "#ff0000",
  },
];