CSS parser for Node.js
CSS JavaScript Makefile
Pull request Compare This branch is 3 commits ahead, 32 commits behind reworkcss:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
benchmark
examples
test
.gitignore
.npmignore
.travis.yml
History.md
LICENSE
Makefile
Readme.md
component.json
index.js
package.json

Readme.md

css-parse Build Status

JavaScript CSS parser for nodejs and the browser.

Installation

$ npm install css-parse

Usage

var parse = require('css-parse');

// CSS input string
var css = "body { \n background-color: #fff;\n }";

var output_obj = parse(css);

// Position and Filename parameters
var output_obj_pos = parse(css, { position: true, filename: 'file.css' });

// Print parsed object as CSS string
console.log(JSON.stringify(output_obj, null, 2));

API

var ast = parse(css, [options])

options:

  • filename - recommended for debugging
  • position - true by default.

Errors

Errors will have err.position where position is:

  • start - start line and column numbers
  • end - end line and column numbers
  • filename - filename if passed to options
  • source - source CSS string

If you create any errors in plugins such as in rework, you must set the position as well for consistency.

Example

css:

body {
  background: #eee;
  color: #888;
}

parse tree:

{
  "type": "stylesheet",
  "stylesheet": {
    "rules": [
      {
        "type": "rule",
        "selectors": [
          "body"
        ],
        "declarations": [
          {
            "type": "declaration",
            "property": "background",
            "value": "#eee"
          },
          {
            "type": "declaration",
            "property": "color",
            "value": "#888"
          }
        ]
      }
    ]
  }
}

parse tree with .position enabled:

{
  "type": "stylesheet",
  "stylesheet": {
    "rules": [
      {
        "type": "rule",
        "selectors": [
          "body"
        ],
        "declarations": [
          {
            "type": "declaration",
            "property": "background",
            "value": "#eee",
            "position": {
              "start": {
                "line": 3,
                "column": 3
              },
              "end": {
                "line": 3,
                "column": 19
              }
            }
          },
          {
            "type": "declaration",
            "property": "color",
            "value": "#888",
            "position": {
              "start": {
                "line": 4,
                "column": 3
              },
              "end": {
                "line": 4,
                "column": 14
              }
            }
          }
        ],
        "position": {
          "start": {
            "line": 2,
            "column": 1
          },
          "end": {
            "line": 5,
            "column": 2
          }
        }
      }
    ]
  }
}

If you also pass in filename: 'path/to/original.css', that will be set on node.position.filename.

Performance

Parsed 15,000 lines of CSS (2mb) in 40ms on my macbook air.

Related

css-stringify css-value

License

MIT