lightningcss 1.0.0-alpha.61

A CSS parser, transformer, and minifier
Documentation
const css = require('./');
const fs = require('fs');

if (process.argv[process.argv.length - 1] !== __filename) {
  let opts = {
    filename: process.argv[process.argv.length - 1],
    code: fs.readFileSync(process.argv[process.argv.length - 1]),
    minify: true,
    sourceMap: true,
    targets: {
      chrome: 95 << 16
    }
  };

  console.time('optimize');
  let r = css.transform(opts);
  console.timeEnd('optimize')
  // console.log(r.toString());
  console.log(r);
  let code = r.code;
  if (r.map) {
    code = code.toString() + `\n/*# sourceMappingURL=out.css.map */\n`;
  }
  fs.writeFileSync('out.css', code);
  if (r.map) {
    fs.writeFileSync('out.css.map', r.map);
  }
  return;
}

let res = css.transform({
  filename: __filename,
  code: Buffer.from(`
  @breakpoints {
    .foo { color: yellow; }
  }

  .foo {
    color: red;
    @bar {
      width: 25px;
    }
  }
`),
  drafts: {
    nesting: true
  },
  targets: {
    safari: 16 << 16
  },
  customAtRules: {
    breakpoints: {
      // Syntax string defining the at rule prelude.
      // https://drafts.css-houdini.org/css-properties-values-api/#syntax-strings
      prelude: null,
      // Type of the at rule block.
      // Can be declaration-list, rule-list, or style-block.
      // https://www.w3.org/TR/css-syntax-3/#declaration-rule-list
      body: 'rule-list'
    },
    bar: {
      body: 'style-block'
    }
  },
  visitor: {
    Rule: {
      custom(rule) {
        console.log(rule.body);
      }
    },
    Length(length) {
      length.value *= 2;
      return length;
    }
  }
});

console.log(res.code.toString());