npm.io
0.0.30 • Published 2d ago

csskit

Licence
MIT
Version
0.0.30
Deps
0
Size
15.0 MB
Vulns
0
Weekly
0
Stars
314

csskit

csskit is a suite of high performance tools for CSS, written in Rust.

Goals

The goal of this project is to provide a high quality set of tools for writing native CSS and shipping said CSS into production the best way possible. This means:

  • Preventing mistakes at author time (parsing & linting).
  • Advising best practices and highlighting pitfalls (linting).
  • Allow consistent homogeneous code to be written (formatting).
  • Allowing the authorship of modern CSS that is downsampled for browser support ("transpiling").
  • Provides integration with IDEs (LSP).
  • Producing the smallest available artefacts (minification & bundling).
  • Provide a way for authors to migrate from alternative authoring formats (such as SCSS).

Usage

Binary

When installed, csskit will be available as a binary. Run csskit --help to see how to use it, with full instructions and examples.

Library

csskit can also be used as a library, for creating custom scripts:

import { parse, StyleRule, StyleSheet } from "csskit";

const sheet = parse("a { color: red }");
sheet instanceof StyleSheet; // true

for (const rule of sheet.querySelectorAll("style-rule")) {
 console.log(rule.constructor.name, rule.text); // StyleRule a { color: red }
}

Every AST node kind has its own class, similar to way the DOM has HTMLDivElement. Each one has a parse method. This allows you to parse individual grammars, for example:

import { parse, Color, MediaRule, WidthStyleValue } from "csskit/nodes";

Color.parse("#ff0000");
WidthStyleValue.parse("100px");
parse("@media print { a { color: red } }", { context: MediaRule });
Client Side

While the main entry is a native addon, therefore only possible to use in Node, a simplified WASM API is available for client side code:

import { minify } from "csskit/bundle";
const min = minify("a{color:#ff0000}");
console.assert(min === "a{color:red}");

The WASM build exposes lex, minify, format and parseErrorReport, but no object model, so classes like Color are not available.

Visit the Getting started guide for more detail.