@projectwallace/css-parser 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/arena.d.ts CHANGED
@@ -37,6 +37,7 @@ export declare const FLAG_HAS_ERROR: number;
37
37
  export declare const FLAG_LENGTH_OVERFLOW: number;
38
38
  export declare const FLAG_HAS_BLOCK: number;
39
39
  export declare const FLAG_VENDOR_PREFIXED: number;
40
+ export declare const FLAG_HAS_DECLARATIONS: number;
40
41
  export declare class CSSDataArena {
41
42
  private buffer;
42
43
  private view;
@@ -1,5 +1,5 @@
1
1
  import { L as Lexer, q as TOKEN_COMMA, T as TOKEN_IDENT, t as TOKEN_LEFT_PAREN, u as TOKEN_RIGHT_PAREN, l as TOKEN_WHITESPACE, f as TOKEN_URL, a as TOKEN_FUNCTION, d as TOKEN_STRING, y as TOKEN_EOF } from './lexer-DXablYMZ.js';
2
- import { Q as str_equals, E as NODE_PRELUDE_OPERATOR, y as NODE_PRELUDE_MEDIA_TYPE, w as NODE_PRELUDE_MEDIA_QUERY, x as NODE_PRELUDE_MEDIA_FEATURE, P as trim_boundaries, D as NODE_PRELUDE_IDENTIFIER, z as NODE_PRELUDE_CONTAINER_QUERY, A as NODE_PRELUDE_SUPPORTS_QUERY, B as NODE_PRELUDE_LAYER_NAME, F as NODE_PRELUDE_IMPORT_URL, G as NODE_PRELUDE_IMPORT_LAYER, H as NODE_PRELUDE_IMPORT_SUPPORTS, R as CHAR_SPACE, S as CHAR_TAB, T as CHAR_NEWLINE, U as CHAR_CARRIAGE_RETURN, V as CHAR_FORM_FEED } from './string-utils-5j619JDp.js';
2
+ import { R as str_equals, E as NODE_PRELUDE_OPERATOR, y as NODE_PRELUDE_MEDIA_TYPE, w as NODE_PRELUDE_MEDIA_QUERY, x as NODE_PRELUDE_MEDIA_FEATURE, Q as trim_boundaries, D as NODE_PRELUDE_IDENTIFIER, z as NODE_PRELUDE_CONTAINER_QUERY, A as NODE_PRELUDE_SUPPORTS_QUERY, B as NODE_PRELUDE_LAYER_NAME, F as NODE_PRELUDE_IMPORT_URL, G as NODE_PRELUDE_IMPORT_LAYER, H as NODE_PRELUDE_IMPORT_SUPPORTS, S as CHAR_SPACE, T as CHAR_TAB, U as CHAR_NEWLINE, V as CHAR_CARRIAGE_RETURN, W as CHAR_FORM_FEED } from './string-utils-tMt2O9RW.js';
3
3
 
4
4
  class AtRulePreludeParser {
5
5
  lexer;
@@ -18,6 +18,7 @@ export declare class CSSNode {
18
18
  get has_error(): boolean;
19
19
  get has_prelude(): boolean;
20
20
  get has_block(): boolean;
21
+ get has_declarations(): boolean;
21
22
  get values(): CSSNode[];
22
23
  get value_count(): number;
23
24
  get line(): number;
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ export { parse } from './parse.js';
2
2
  export { parse_selector } from './parse-selector.js';
3
3
  export { parse_atrule_prelude } from './parse-atrule-prelude.js';
4
4
  export { tokenize } from './tokenize.js';
5
- export { C as CSSNode, I as FLAG_IMPORTANT, a as NODE_AT_RULE, b as NODE_COMMENT, c as NODE_DECLARATION, z as NODE_PRELUDE_CONTAINER_QUERY, D as NODE_PRELUDE_IDENTIFIER, G as NODE_PRELUDE_IMPORT_LAYER, H as NODE_PRELUDE_IMPORT_SUPPORTS, F as NODE_PRELUDE_IMPORT_URL, B as NODE_PRELUDE_LAYER_NAME, x as NODE_PRELUDE_MEDIA_FEATURE, w as NODE_PRELUDE_MEDIA_QUERY, y as NODE_PRELUDE_MEDIA_TYPE, E as NODE_PRELUDE_OPERATOR, A as NODE_PRELUDE_SUPPORTS_QUERY, d as NODE_SELECTOR, q as NODE_SELECTOR_ATTRIBUTE, o as NODE_SELECTOR_CLASS, t as NODE_SELECTOR_COMBINATOR, p as NODE_SELECTOR_ID, m as NODE_SELECTOR_LIST, v as NODE_SELECTOR_NESTING, r as NODE_SELECTOR_PSEUDO_CLASS, s as NODE_SELECTOR_PSEUDO_ELEMENT, n as NODE_SELECTOR_TYPE, u as NODE_SELECTOR_UNIVERSAL, e as NODE_STYLESHEET, N as NODE_STYLE_RULE, j as NODE_VALUE_COLOR, h as NODE_VALUE_DIMENSION, k as NODE_VALUE_FUNCTION, f as NODE_VALUE_KEYWORD, g as NODE_VALUE_NUMBER, l as NODE_VALUE_OPERATOR, i as NODE_VALUE_STRING } from './string-utils-5j619JDp.js';
5
+ export { C as CSSNode, I as FLAG_IMPORTANT, a as NODE_AT_RULE, b as NODE_COMMENT, c as NODE_DECLARATION, z as NODE_PRELUDE_CONTAINER_QUERY, D as NODE_PRELUDE_IDENTIFIER, G as NODE_PRELUDE_IMPORT_LAYER, H as NODE_PRELUDE_IMPORT_SUPPORTS, F as NODE_PRELUDE_IMPORT_URL, B as NODE_PRELUDE_LAYER_NAME, x as NODE_PRELUDE_MEDIA_FEATURE, w as NODE_PRELUDE_MEDIA_QUERY, y as NODE_PRELUDE_MEDIA_TYPE, E as NODE_PRELUDE_OPERATOR, A as NODE_PRELUDE_SUPPORTS_QUERY, d as NODE_SELECTOR, q as NODE_SELECTOR_ATTRIBUTE, o as NODE_SELECTOR_CLASS, t as NODE_SELECTOR_COMBINATOR, p as NODE_SELECTOR_ID, m as NODE_SELECTOR_LIST, v as NODE_SELECTOR_NESTING, r as NODE_SELECTOR_PSEUDO_CLASS, s as NODE_SELECTOR_PSEUDO_ELEMENT, n as NODE_SELECTOR_TYPE, u as NODE_SELECTOR_UNIVERSAL, e as NODE_STYLESHEET, N as NODE_STYLE_RULE, j as NODE_VALUE_COLOR, h as NODE_VALUE_DIMENSION, k as NODE_VALUE_FUNCTION, f as NODE_VALUE_KEYWORD, g as NODE_VALUE_NUMBER, l as NODE_VALUE_OPERATOR, i as NODE_VALUE_STRING } from './string-utils-tMt2O9RW.js';
6
6
  export { b as TOKEN_AT_KEYWORD, e as TOKEN_BAD_STRING, g as TOKEN_BAD_URL, n as TOKEN_CDC, m as TOKEN_CDO, o as TOKEN_COLON, q as TOKEN_COMMA, x as TOKEN_COMMENT, h as TOKEN_DELIM, k as TOKEN_DIMENSION, y as TOKEN_EOF, a as TOKEN_FUNCTION, c as TOKEN_HASH, T as TOKEN_IDENT, v as TOKEN_LEFT_BRACE, r as TOKEN_LEFT_BRACKET, t as TOKEN_LEFT_PAREN, i as TOKEN_NUMBER, j as TOKEN_PERCENTAGE, w as TOKEN_RIGHT_BRACE, s as TOKEN_RIGHT_BRACKET, u as TOKEN_RIGHT_PAREN, p as TOKEN_SEMICOLON, d as TOKEN_STRING, f as TOKEN_URL, l as TOKEN_WHITESPACE } from './lexer-DXablYMZ.js';
7
7
 
8
8
  function walk(node, callback, depth = 0) {
@@ -1,5 +1,5 @@
1
- import { K as CSSDataArena, C as CSSNode } from './string-utils-5j619JDp.js';
2
- import { A as AtRulePreludeParser } from './at-rule-prelude-parser-pzWB6S0z.js';
1
+ import { K as CSSDataArena, C as CSSNode } from './string-utils-tMt2O9RW.js';
2
+ import { A as AtRulePreludeParser } from './at-rule-prelude-parser-Cj8ecgQp.js';
3
3
 
4
4
  function parse_atrule_prelude(at_rule_name, prelude) {
5
5
  const arena = new CSSDataArena(CSSDataArena.capacity_for_source(prelude.length));
@@ -1,5 +1,5 @@
1
- import { K as CSSDataArena, d as NODE_SELECTOR, C as CSSNode } from './string-utils-5j619JDp.js';
2
- import { S as SelectorParser } from './selector-parser-CwNLN7Us.js';
1
+ import { K as CSSDataArena, m as NODE_SELECTOR_LIST, C as CSSNode } from './string-utils-tMt2O9RW.js';
2
+ import { S as SelectorParser } from './selector-parser-C-u1epDB.js';
3
3
 
4
4
  function parse_selector(source) {
5
5
  const arena = new CSSDataArena(CSSDataArena.capacity_for_source(source.length));
@@ -7,7 +7,7 @@ function parse_selector(source) {
7
7
  const selector_index = selector_parser.parse_selector(0, source.length);
8
8
  if (selector_index === null) {
9
9
  const empty = arena.create_node();
10
- arena.set_type(empty, NODE_SELECTOR);
10
+ arena.set_type(empty, NODE_SELECTOR_LIST);
11
11
  arena.set_start_offset(empty, 0);
12
12
  arena.set_length(empty, 0);
13
13
  arena.set_start_line(empty, 1);
package/dist/parse.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { L as Lexer, y as TOKEN_EOF, q as TOKEN_COMMA, h as TOKEN_DELIM, a as TOKEN_FUNCTION, c as TOKEN_HASH, d as TOKEN_STRING, k as TOKEN_DIMENSION, j as TOKEN_PERCENTAGE, i as TOKEN_NUMBER, T as TOKEN_IDENT, t as TOKEN_LEFT_PAREN, u as TOKEN_RIGHT_PAREN, b as TOKEN_AT_KEYWORD, v as TOKEN_LEFT_BRACE, w as TOKEN_RIGHT_BRACE, o as TOKEN_COLON, p as TOKEN_SEMICOLON } from './lexer-DXablYMZ.js';
2
- import { J as is_whitespace, f as NODE_VALUE_KEYWORD, g as NODE_VALUE_NUMBER, h as NODE_VALUE_DIMENSION, i as NODE_VALUE_STRING, j as NODE_VALUE_COLOR, l as NODE_VALUE_OPERATOR, k as NODE_VALUE_FUNCTION, K as CSSDataArena, e as NODE_STYLESHEET, C as CSSNode, N as NODE_STYLE_RULE, L as FLAG_HAS_BLOCK, d as NODE_SELECTOR, c as NODE_DECLARATION, M as is_vendor_prefixed, O as FLAG_VENDOR_PREFIXED, P as trim_boundaries, I as FLAG_IMPORTANT, a as NODE_AT_RULE } from './string-utils-5j619JDp.js';
3
- import { S as SelectorParser } from './selector-parser-CwNLN7Us.js';
4
- import { A as AtRulePreludeParser } from './at-rule-prelude-parser-pzWB6S0z.js';
2
+ import { J as is_whitespace, f as NODE_VALUE_KEYWORD, g as NODE_VALUE_NUMBER, h as NODE_VALUE_DIMENSION, i as NODE_VALUE_STRING, j as NODE_VALUE_COLOR, l as NODE_VALUE_OPERATOR, k as NODE_VALUE_FUNCTION, K as CSSDataArena, e as NODE_STYLESHEET, C as CSSNode, N as NODE_STYLE_RULE, L as FLAG_HAS_BLOCK, M as FLAG_HAS_DECLARATIONS, m as NODE_SELECTOR_LIST, c as NODE_DECLARATION, O as is_vendor_prefixed, P as FLAG_VENDOR_PREFIXED, Q as trim_boundaries, I as FLAG_IMPORTANT, a as NODE_AT_RULE } from './string-utils-tMt2O9RW.js';
3
+ import { S as SelectorParser } from './selector-parser-C-u1epDB.js';
4
+ import { A as AtRulePreludeParser } from './at-rule-prelude-parser-Cj8ecgQp.js';
5
5
 
6
6
  const CH_PLUS = 43;
7
7
  const CH_MINUS = 45;
@@ -195,12 +195,7 @@ class Parser {
195
195
  parse_atrule_preludes_enabled;
196
196
  constructor(source, options) {
197
197
  this.source = source;
198
- let opts;
199
- if (typeof options === "boolean") {
200
- opts = { skip_comments: options };
201
- } else {
202
- opts = options || {};
203
- }
198
+ let opts = options || {};
204
199
  let skip_comments = opts.skip_comments ?? true;
205
200
  this.parse_values_enabled = opts.parse_values ?? true;
206
201
  this.parse_selectors_enabled = opts.parse_selectors ?? true;
@@ -294,6 +289,7 @@ class Parser {
294
289
  }
295
290
  let declaration = this.parse_declaration();
296
291
  if (declaration !== null) {
292
+ this.arena.set_flag(style_rule, FLAG_HAS_DECLARATIONS);
297
293
  this.arena.append_child(style_rule, declaration);
298
294
  continue;
299
295
  }
@@ -329,7 +325,7 @@ class Parser {
329
325
  }
330
326
  }
331
327
  let selector = this.arena.create_node();
332
- this.arena.set_type(selector, NODE_SELECTOR);
328
+ this.arena.set_type(selector, NODE_SELECTOR_LIST);
333
329
  this.arena.set_start_line(selector, selector_line);
334
330
  this.arena.set_start_column(selector, selector_column);
335
331
  this.arena.set_start_offset(selector, selector_start);
package/dist/parser.d.ts CHANGED
@@ -16,7 +16,7 @@ export declare class Parser {
16
16
  private parse_values_enabled;
17
17
  private parse_selectors_enabled;
18
18
  private parse_atrule_preludes_enabled;
19
- constructor(source: string, options?: ParserOptions | boolean);
19
+ constructor(source: string, options?: ParserOptions);
20
20
  get_arena(): CSSDataArena;
21
21
  get_source(): string;
22
22
  private next_token;
@@ -1,5 +1,5 @@
1
1
  import { L as Lexer, q as TOKEN_COMMA, y as TOKEN_EOF, l as TOKEN_WHITESPACE, a as TOKEN_FUNCTION, o as TOKEN_COLON, r as TOKEN_LEFT_BRACKET, h as TOKEN_DELIM, c as TOKEN_HASH, T as TOKEN_IDENT, s as TOKEN_RIGHT_BRACKET, t as TOKEN_LEFT_PAREN, u as TOKEN_RIGHT_PAREN } from './lexer-DXablYMZ.js';
2
- import { d as NODE_SELECTOR, m as NODE_SELECTOR_LIST, J as is_whitespace, o as NODE_SELECTOR_CLASS, q as NODE_SELECTOR_ATTRIBUTE, P as trim_boundaries, s as NODE_SELECTOR_PSEUDO_ELEMENT, r as NODE_SELECTOR_PSEUDO_CLASS, M as is_vendor_prefixed, O as FLAG_VENDOR_PREFIXED, n as NODE_SELECTOR_TYPE, p as NODE_SELECTOR_ID, u as NODE_SELECTOR_UNIVERSAL, v as NODE_SELECTOR_NESTING, t as NODE_SELECTOR_COMBINATOR } from './string-utils-5j619JDp.js';
2
+ import { m as NODE_SELECTOR_LIST, J as is_whitespace, o as NODE_SELECTOR_CLASS, q as NODE_SELECTOR_ATTRIBUTE, Q as trim_boundaries, s as NODE_SELECTOR_PSEUDO_ELEMENT, r as NODE_SELECTOR_PSEUDO_CLASS, O as is_vendor_prefixed, P as FLAG_VENDOR_PREFIXED, n as NODE_SELECTOR_TYPE, p as NODE_SELECTOR_ID, u as NODE_SELECTOR_UNIVERSAL, v as NODE_SELECTOR_NESTING, t as NODE_SELECTOR_COMBINATOR } from './string-utils-tMt2O9RW.js';
3
3
 
4
4
  class SelectorParser {
5
5
  lexer;
@@ -13,30 +13,20 @@ class SelectorParser {
13
13
  this.selector_end = 0;
14
14
  }
15
15
  // Parse a selector range into selector nodes
16
- // Always returns a NODE_SELECTOR wrapper with detailed selector nodes as children
16
+ // Always returns a NODE_SELECTOR_LIST with selector components as children
17
17
  parse_selector(start, end, line = 1, column = 1) {
18
18
  this.selector_end = end;
19
19
  this.lexer.pos = start;
20
20
  this.lexer.line = line;
21
21
  this.lexer.column = column;
22
- let innerSelector = this.parse_selector_list();
23
- if (innerSelector === null) {
24
- return null;
25
- }
26
- let selectorWrapper = this.arena.create_node();
27
- this.arena.set_type(selectorWrapper, NODE_SELECTOR);
28
- this.arena.set_start_offset(selectorWrapper, start);
29
- this.arena.set_length(selectorWrapper, end - start);
30
- this.arena.set_start_line(selectorWrapper, line);
31
- this.arena.set_start_column(selectorWrapper, column);
32
- this.arena.set_first_child(selectorWrapper, innerSelector);
33
- this.arena.set_last_child(selectorWrapper, innerSelector);
34
- return selectorWrapper;
22
+ return this.parse_selector_list();
35
23
  }
36
24
  // Parse comma-separated selectors
37
25
  parse_selector_list() {
38
26
  let selectors = [];
39
27
  let list_start = this.lexer.pos;
28
+ let list_line = this.lexer.line;
29
+ let list_column = this.lexer.column;
40
30
  while (this.lexer.pos < this.selector_end) {
41
31
  let selector = this.parse_complex_selector();
42
32
  if (selector !== null) {
@@ -53,16 +43,13 @@ class SelectorParser {
53
43
  break;
54
44
  }
55
45
  }
56
- if (selectors.length === 1) {
57
- return selectors[0];
58
- }
59
- if (selectors.length > 1) {
46
+ if (selectors.length >= 1) {
60
47
  let list_node = this.arena.create_node();
61
48
  this.arena.set_type(list_node, NODE_SELECTOR_LIST);
62
49
  this.arena.set_start_offset(list_node, list_start);
63
50
  this.arena.set_length(list_node, this.lexer.pos - list_start);
64
- this.arena.set_start_line(list_node, this.lexer.line);
65
- this.arena.set_start_column(list_node, this.lexer.column);
51
+ this.arena.set_start_line(list_node, list_line);
52
+ this.arena.set_start_column(list_node, list_column);
66
53
  this.arena.set_first_child(list_node, selectors[0]);
67
54
  this.arena.set_last_child(list_node, selectors[selectors.length - 1]);
68
55
  for (let i = 0; i < selectors.length - 1; i++) {
@@ -37,6 +37,7 @@ const FLAG_IMPORTANT = 1 << 0;
37
37
  const FLAG_HAS_ERROR = 1 << 1;
38
38
  const FLAG_HAS_BLOCK = 1 << 3;
39
39
  const FLAG_VENDOR_PREFIXED = 1 << 4;
40
+ const FLAG_HAS_DECLARATIONS = 1 << 5;
40
41
  class CSSDataArena {
41
42
  buffer;
42
43
  view;
@@ -307,6 +308,10 @@ class CSSNode {
307
308
  get has_block() {
308
309
  return this.arena.has_flag(this.index, FLAG_HAS_BLOCK);
309
310
  }
311
+ // Check if this style rule has declarations
312
+ get has_declarations() {
313
+ return this.arena.has_flag(this.index, FLAG_HAS_DECLARATIONS);
314
+ }
310
315
  // --- Value Node Access (for declarations) ---
311
316
  // Get array of parsed value nodes (for declarations only)
312
317
  get values() {
@@ -463,4 +468,4 @@ function is_vendor_prefixed(source, start, end) {
463
468
  return secondHyphenPos !== -1 && secondHyphenPos < end;
464
469
  }
465
470
 
466
- export { NODE_PRELUDE_SUPPORTS_QUERY as A, NODE_PRELUDE_LAYER_NAME as B, CSSNode as C, NODE_PRELUDE_IDENTIFIER as D, NODE_PRELUDE_OPERATOR as E, NODE_PRELUDE_IMPORT_URL as F, NODE_PRELUDE_IMPORT_LAYER as G, NODE_PRELUDE_IMPORT_SUPPORTS as H, FLAG_IMPORTANT as I, is_whitespace as J, CSSDataArena as K, FLAG_HAS_BLOCK as L, is_vendor_prefixed as M, NODE_STYLE_RULE as N, FLAG_VENDOR_PREFIXED as O, trim_boundaries as P, str_equals as Q, CHAR_SPACE as R, CHAR_TAB as S, CHAR_NEWLINE as T, CHAR_CARRIAGE_RETURN as U, CHAR_FORM_FEED as V, NODE_AT_RULE as a, NODE_COMMENT as b, NODE_DECLARATION as c, NODE_SELECTOR as d, NODE_STYLESHEET as e, NODE_VALUE_KEYWORD as f, NODE_VALUE_NUMBER as g, NODE_VALUE_DIMENSION as h, NODE_VALUE_STRING as i, NODE_VALUE_COLOR as j, NODE_VALUE_FUNCTION as k, NODE_VALUE_OPERATOR as l, NODE_SELECTOR_LIST as m, NODE_SELECTOR_TYPE as n, NODE_SELECTOR_CLASS as o, NODE_SELECTOR_ID as p, NODE_SELECTOR_ATTRIBUTE as q, NODE_SELECTOR_PSEUDO_CLASS as r, NODE_SELECTOR_PSEUDO_ELEMENT as s, NODE_SELECTOR_COMBINATOR as t, NODE_SELECTOR_UNIVERSAL as u, NODE_SELECTOR_NESTING as v, NODE_PRELUDE_MEDIA_QUERY as w, NODE_PRELUDE_MEDIA_FEATURE as x, NODE_PRELUDE_MEDIA_TYPE as y, NODE_PRELUDE_CONTAINER_QUERY as z };
471
+ export { NODE_PRELUDE_SUPPORTS_QUERY as A, NODE_PRELUDE_LAYER_NAME as B, CSSNode as C, NODE_PRELUDE_IDENTIFIER as D, NODE_PRELUDE_OPERATOR as E, NODE_PRELUDE_IMPORT_URL as F, NODE_PRELUDE_IMPORT_LAYER as G, NODE_PRELUDE_IMPORT_SUPPORTS as H, FLAG_IMPORTANT as I, is_whitespace as J, CSSDataArena as K, FLAG_HAS_BLOCK as L, FLAG_HAS_DECLARATIONS as M, NODE_STYLE_RULE as N, is_vendor_prefixed as O, FLAG_VENDOR_PREFIXED as P, trim_boundaries as Q, str_equals as R, CHAR_SPACE as S, CHAR_TAB as T, CHAR_NEWLINE as U, CHAR_CARRIAGE_RETURN as V, CHAR_FORM_FEED as W, NODE_AT_RULE as a, NODE_COMMENT as b, NODE_DECLARATION as c, NODE_SELECTOR as d, NODE_STYLESHEET as e, NODE_VALUE_KEYWORD as f, NODE_VALUE_NUMBER as g, NODE_VALUE_DIMENSION as h, NODE_VALUE_STRING as i, NODE_VALUE_COLOR as j, NODE_VALUE_FUNCTION as k, NODE_VALUE_OPERATOR as l, NODE_SELECTOR_LIST as m, NODE_SELECTOR_TYPE as n, NODE_SELECTOR_CLASS as o, NODE_SELECTOR_ID as p, NODE_SELECTOR_ATTRIBUTE as q, NODE_SELECTOR_PSEUDO_CLASS as r, NODE_SELECTOR_PSEUDO_ELEMENT as s, NODE_SELECTOR_COMBINATOR as t, NODE_SELECTOR_UNIVERSAL as u, NODE_SELECTOR_NESTING as v, NODE_PRELUDE_MEDIA_QUERY as w, NODE_PRELUDE_MEDIA_FEATURE as x, NODE_PRELUDE_MEDIA_TYPE as y, NODE_PRELUDE_CONTAINER_QUERY as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectwallace/css-parser",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "High-performance CSS lexer and parser, optimized for CSS inspection and analysis",
5
5
  "author": "Bart Veneman <bat@projectwallace.com>",
6
6
  "license": "MIT",