@projectwallace/css-parser 0.18.6 → 0.18.8

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.
@@ -1,6 +1,6 @@
1
1
  import { A as PARENTHESIS, B as STYLESHEET, C as MEDIA_QUERY, D as NTH_SELECTOR, E as NTH_OF_SELECTOR, F as RATIO, G as UNICODE_RANGE, H as SUPPORTS_DECLARATION, I as RAW, J as VALUE, K as UNIVERSAL_SELECTOR, L as SELECTOR, N as PSEUDO_CLASS_SELECTOR, O as NUMBER, P as PSEUDO_ELEMENT_SELECTOR, R as SELECTOR_LIST, S as MEDIA_FEATURE, T as NESTING_SELECTOR, U as SUPPORTS_QUERY, V as STYLE_RULE, W as TYPE_SELECTOR, _ as ID_SELECTOR, a as CLASS_SELECTOR, b as LANG_SELECTOR, c as CONTAINER_QUERY, d as DIMENSION, f as FEATURE_RANGE, g as IDENTIFIER, h as HASH, i as BLOCK, j as PRELUDE_OPERATOR, k as OPERATOR, m as FUNCTION, n as AT_RULE, o as COMBINATOR, p as FLAG_IMPORTANT, q as URL, r as AT_RULE_PRELUDE, s as COMMENT, t as ATTRIBUTE_SELECTOR, u as DECLARATION, v as IF_BRANCH, w as MEDIA_TYPE, x as LAYER_NAME, y as IF_CONDITION, z as STRING } from "./arena-BGvFdbj5.js";
2
2
  //#region src/constants.d.ts
3
- declare const NODE_TYPES: {
3
+ export declare const NODE_TYPES: {
4
4
  readonly STYLESHEET: 1;
5
5
  readonly STYLE_RULE: 2;
6
6
  readonly AT_RULE: 3;
@@ -48,4 +48,4 @@ declare const NODE_TYPES: {
48
48
  readonly RATIO: 58;
49
49
  };
50
50
  //#endregion
51
- export { ATTRIBUTE_SELECTOR, AT_RULE, AT_RULE_PRELUDE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, DECLARATION, DIMENSION, FEATURE_RANGE, FLAG_IMPORTANT, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, IF_BRANCH, IF_CONDITION, LANG_SELECTOR, LAYER_NAME, MEDIA_FEATURE, MEDIA_QUERY, MEDIA_TYPE, NESTING_SELECTOR, NODE_TYPES, NTH_OF_SELECTOR, NTH_SELECTOR, NUMBER, OPERATOR, PARENTHESIS, PRELUDE_OPERATOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, RATIO, RAW, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_DECLARATION, SUPPORTS_QUERY, TYPE_SELECTOR, UNICODE_RANGE, UNIVERSAL_SELECTOR, URL, VALUE };
51
+ export { ATTRIBUTE_SELECTOR, AT_RULE, AT_RULE_PRELUDE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, DECLARATION, DIMENSION, FEATURE_RANGE, FLAG_IMPORTANT, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, IF_BRANCH, IF_CONDITION, LANG_SELECTOR, LAYER_NAME, MEDIA_FEATURE, MEDIA_QUERY, MEDIA_TYPE, NESTING_SELECTOR, NTH_OF_SELECTOR, NTH_SELECTOR, NUMBER, OPERATOR, PARENTHESIS, PRELUDE_OPERATOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, RATIO, RAW, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_DECLARATION, SUPPORTS_QUERY, TYPE_SELECTOR, UNICODE_RANGE, UNIVERSAL_SELECTOR, URL, VALUE };
@@ -1,5 +1,5 @@
1
1
  import "./arena-e9O_g2AN.js";
2
- import { a as is_whitespace, c as str_starts_with, i as is_vendor_prefixed, o as str_equals, t as parse_dimension } from "./parse-dimension-ouWXNHdx.js";
2
+ import { a as is_vendor_prefixed, o as is_whitespace, s as str_equals, t as dimension_number_end, u as str_starts_with } from "./parse-dimension-CQELWb5z.js";
3
3
  //#region src/css-node.ts
4
4
  const TYPE_NAMES = {
5
5
  [1]: "StyleSheet",
@@ -185,7 +185,10 @@ var CSSNode = class CSSNode {
185
185
  if (type === 33) return first_child ?? null;
186
186
  if (type === 57) return first_child?.first_child ?? null;
187
187
  if (type === 59) return first_child?.next_sibling ?? null;
188
- if (type === 12) return parse_dimension(text).value;
188
+ if (type === 12) {
189
+ let num_str = text.substring(0, dimension_number_end(text));
190
+ return num_str ? Number.parseFloat(num_str) : 0;
191
+ }
189
192
  if (type === 11) return Number(text);
190
193
  if (type === 18) {
191
194
  if (first_child?.type === 13) return first_child.text;
@@ -221,7 +224,7 @@ var CSSNode = class CSSNode {
221
224
  if (pos >= node_end) return null;
222
225
  let ch1 = this.source.charCodeAt(pos);
223
226
  let ch2 = pos + 1 < node_end ? this.source.charCodeAt(pos + 1) : 0;
224
- if (ch1 === 61) return this.source.substring(pos, pos + 1);
227
+ if (ch1 === 61) return this.source.at(pos);
225
228
  if (ch1 === 126 && ch2 === 61) return this.source.substring(pos, pos + 2);
226
229
  if (ch1 === 124 && ch2 === 61) return this.source.substring(pos, pos + 2);
227
230
  if (ch1 === 94 && ch2 === 61) return this.source.substring(pos, pos + 2);
@@ -240,13 +243,14 @@ var CSSNode = class CSSNode {
240
243
  while (pos < node_end && is_whitespace(this.source.charCodeAt(pos))) pos++;
241
244
  if (pos >= node_end) return null;
242
245
  let flag_ch = this.source.charCodeAt(pos);
243
- if (flag_ch === 105 || flag_ch === 73 || flag_ch === 115 || flag_ch === 83) return this.source.substring(pos, pos + 1);
246
+ if (flag_ch === 105 || flag_ch === 73 || flag_ch === 115 || flag_ch === 83) return this.source.at(pos);
244
247
  return null;
245
248
  }
246
249
  /** Get the unit for dimension nodes (e.g., "px" from "100px", "%" from "50%") */
247
250
  get unit() {
248
251
  if (this.type !== 12) return void 0;
249
- return parse_dimension(this.text).unit;
252
+ let text = this.text;
253
+ return text.substring(dimension_number_end(text));
250
254
  }
251
255
  /** Numerator for ratio values, e.g. the Number "16" in `aspect-ratio: 16/9` */
252
256
  get left() {
package/dist/index.d.ts CHANGED
@@ -14,15 +14,15 @@ import { BREAK, SKIP, traverse, walk } from "./walk.js";
14
14
  * @param a Base string, MUST be lowercase!
15
15
  * @param b Compare string
16
16
  */
17
- declare function str_equals(a: string, b: string): boolean;
17
+ export declare function str_equals(a: string, b: string): boolean;
18
18
  /** Case-insensitive ASCII prefix check without allocations. `prefix` MUST be lowercase. */
19
- declare function str_starts_with(str: string, prefix: string): boolean;
19
+ export declare function str_starts_with(str: string, prefix: string): boolean;
20
20
  /** Case-insensitive substring search without allocations, or -1 if not found. `searchChar` MUST be lowercase. */
21
- declare function str_index_of(str: string, searchChar: string): number;
21
+ export declare function str_index_of(str: string, searchChar: string): number;
22
22
  /** True if the string/range is vendor-prefixed (-webkit-, -moz-, -ms-, -o-). `--custom-property` is not. */
23
- declare function is_vendor_prefixed(text: string): boolean;
24
- declare function is_vendor_prefixed(source: string, start: number, end: number): boolean;
23
+ export declare function is_vendor_prefixed(text: string): boolean;
24
+ export declare function is_vendor_prefixed(source: string, start: number, end: number): boolean;
25
25
  /** True if the string is a CSS custom property (starts with `--`). */
26
- declare function is_custom(str: string): boolean;
26
+ export declare function is_custom(str: string): boolean;
27
27
  //#endregion
28
- export { ATTRIBUTE_SELECTOR, AT_RULE, AT_RULE_PRELUDE, type AnyNode, type Atrule, type AtrulePrelude, type AttributeSelector, BLOCK, BREAK, type Block, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, type CSSNode, type ClassSelector, type CloneOptions, type Combinator, type Comment, type CommentInfo, type ContainerQuery, DECLARATION, DIMENSION, type Declaration, type Dimension, FEATURE_RANGE, FLAG_IMPORTANT, FUNCTION, type FeatureRange, type Function, HASH, type Hash, IDENTIFIER, ID_SELECTOR, IF_BRANCH, IF_CONDITION, type IdSelector, type Identifier, type IfBranch, type IfCondition, LANG_SELECTOR, LAYER_NAME, type LangSelector, type LayerName, type LexerPosition, MEDIA_FEATURE, MEDIA_QUERY, MEDIA_TYPE, type MediaFeature, type MediaQuery, type MediaType, NESTING_SELECTOR, NODE_TYPES, NTH_OF_SELECTOR, NTH_SELECTOR, NUMBER, type NestingSelector, type NthOfSelector, type NthSelector, type Number, OPERATOR, type Operator, PARENTHESIS, PRELUDE_OPERATOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, type Parenthesis, type ParserOptions, type PlainCSSNode, type PreludeOperator, type PreludeSelectorList, type PseudoClassSelector, type PseudoElementSelector, RATIO, RAW, type Ratio, type Raw, type Rule, SELECTOR, SELECTOR_LIST, SKIP, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_DECLARATION, SUPPORTS_QUERY, type Selector, type SelectorList, type SelectorNode, type String, type StyleSheet, type SupportsDeclaration, type SupportsQuery, TOKEN_AT_KEYWORD, TOKEN_BAD_STRING, TOKEN_BAD_URL, TOKEN_CDC, TOKEN_CDO, TOKEN_COLON, TOKEN_COMMA, TOKEN_COMMENT, TOKEN_DELIM, TOKEN_DIMENSION, TOKEN_EOF, TOKEN_FUNCTION, TOKEN_HASH, TOKEN_IDENT, TOKEN_LEFT_BRACE, TOKEN_LEFT_BRACKET, TOKEN_LEFT_PAREN, TOKEN_NUMBER, TOKEN_PERCENTAGE, TOKEN_RIGHT_BRACE, TOKEN_RIGHT_BRACKET, TOKEN_RIGHT_PAREN, TOKEN_SEMICOLON, TOKEN_STRING, TOKEN_UNICODE_RANGE, TOKEN_URL, TOKEN_WHITESPACE, TYPE_NAMES, TYPE_SELECTOR, type ToPlain, Token, TokenType, type TypeSelector, UNICODE_RANGE, UNIVERSAL_SELECTOR, URL, type UnicodeRange, type UniversalSelector, type Url, VALUE, type Value, type WithChildren, is_atrule, is_atrule_prelude, is_attribute_selector, is_block, is_class_selector, is_combinator, is_comment, is_container_query, is_custom, is_declaration, is_dimension, is_feature_range, is_function, is_hash, is_id_selector, is_identifier, is_if_branch, is_if_condition, is_lang_selector, is_layer_name, is_media_feature, is_media_query, is_media_type, is_nesting_selector, is_nth_of_selector, is_nth_selector, is_number, is_operator, is_parenthesis, is_prelude_operator, is_prelude_selectorlist, is_pseudo_class_selector, is_pseudo_element_selector, is_ratio, is_raw, is_rule, is_selector, is_selector_list, is_string, is_stylesheet, is_supports_declaration, is_supports_query, is_type_selector, is_unicode_range, is_universal_selector, is_url, is_value, is_vendor_prefixed, parse, parse_atrule_prelude, parse_declaration, parse_dimension, parse_selector, parse_selector_list, parse_value, str_equals, str_index_of, str_starts_with, tokenize, traverse, walk };
28
+ export { ATTRIBUTE_SELECTOR, AT_RULE, AT_RULE_PRELUDE, type AnyNode, type Atrule, type AtrulePrelude, type AttributeSelector, BLOCK, BREAK, type Block, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, type CSSNode, type ClassSelector, type CloneOptions, type Combinator, type Comment, type CommentInfo, type ContainerQuery, DECLARATION, DIMENSION, type Declaration, type Dimension, FEATURE_RANGE, FLAG_IMPORTANT, FUNCTION, type FeatureRange, type Function, HASH, type Hash, IDENTIFIER, ID_SELECTOR, IF_BRANCH, IF_CONDITION, type IdSelector, type Identifier, type IfBranch, type IfCondition, LANG_SELECTOR, LAYER_NAME, type LangSelector, type LayerName, type LexerPosition, MEDIA_FEATURE, MEDIA_QUERY, MEDIA_TYPE, type MediaFeature, type MediaQuery, type MediaType, NESTING_SELECTOR, NODE_TYPES, NTH_OF_SELECTOR, NTH_SELECTOR, NUMBER, type NestingSelector, type NthOfSelector, type NthSelector, type Number, OPERATOR, type Operator, PARENTHESIS, PRELUDE_OPERATOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, type Parenthesis, type ParserOptions, type PlainCSSNode, type PreludeOperator, type PreludeSelectorList, type PseudoClassSelector, type PseudoElementSelector, RATIO, RAW, type Ratio, type Raw, type Rule, SELECTOR, SELECTOR_LIST, SKIP, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_DECLARATION, SUPPORTS_QUERY, type Selector, type SelectorList, type SelectorNode, type String, type StyleSheet, type SupportsDeclaration, type SupportsQuery, TOKEN_AT_KEYWORD, TOKEN_BAD_STRING, TOKEN_BAD_URL, TOKEN_CDC, TOKEN_CDO, TOKEN_COLON, TOKEN_COMMA, TOKEN_COMMENT, TOKEN_DELIM, TOKEN_DIMENSION, TOKEN_EOF, TOKEN_FUNCTION, TOKEN_HASH, TOKEN_IDENT, TOKEN_LEFT_BRACE, TOKEN_LEFT_BRACKET, TOKEN_LEFT_PAREN, TOKEN_NUMBER, TOKEN_PERCENTAGE, TOKEN_RIGHT_BRACE, TOKEN_RIGHT_BRACKET, TOKEN_RIGHT_PAREN, TOKEN_SEMICOLON, TOKEN_STRING, TOKEN_UNICODE_RANGE, TOKEN_URL, TOKEN_WHITESPACE, TYPE_NAMES, TYPE_SELECTOR, type ToPlain, Token, TokenType, type TypeSelector, UNICODE_RANGE, UNIVERSAL_SELECTOR, URL, type UnicodeRange, type UniversalSelector, type Url, VALUE, type Value, type WithChildren, is_atrule, is_atrule_prelude, is_attribute_selector, is_block, is_class_selector, is_combinator, is_comment, is_container_query, is_declaration, is_dimension, is_feature_range, is_function, is_hash, is_id_selector, is_identifier, is_if_branch, is_if_condition, is_lang_selector, is_layer_name, is_media_feature, is_media_query, is_media_type, is_nesting_selector, is_nth_of_selector, is_nth_selector, is_number, is_operator, is_parenthesis, is_prelude_operator, is_prelude_selectorlist, is_pseudo_class_selector, is_pseudo_element_selector, is_ratio, is_raw, is_rule, is_selector, is_selector_list, is_string, is_stylesheet, is_supports_declaration, is_supports_query, is_type_selector, is_unicode_range, is_universal_selector, is_url, is_value, parse, parse_atrule_prelude, parse_declaration, parse_dimension, parse_selector, parse_selector_list, parse_value, tokenize, traverse, walk };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { C as TOKEN_RIGHT_BRACKET, D as TOKEN_UNICODE_RANGE, E as TOKEN_STRING, O as TOKEN_URL, S as TOKEN_RIGHT_BRACE, T as TOKEN_SEMICOLON, _ as TOKEN_LEFT_BRACE, a as TOKEN_BAD_URL, b as TOKEN_NUMBER, c as TOKEN_COLON, d as TOKEN_DELIM, f as TOKEN_DIMENSION, g as TOKEN_IDENT, h as TOKEN_HASH, i as TOKEN_BAD_STRING, k as TOKEN_WHITESPACE, l as TOKEN_COMMA, m as TOKEN_FUNCTION, n as tokenize, o as TOKEN_CDC, p as TOKEN_EOF, r as TOKEN_AT_KEYWORD, s as TOKEN_CDO, u as TOKEN_COMMENT, v as TOKEN_LEFT_BRACKET, w as TOKEN_RIGHT_PAREN, x as TOKEN_PERCENTAGE, y as TOKEN_LEFT_PAREN } from "./tokenize-DK24ACbY.js";
1
+ import { C as TOKEN_RIGHT_BRACKET, D as TOKEN_UNICODE_RANGE, E as TOKEN_STRING, O as TOKEN_URL, S as TOKEN_RIGHT_BRACE, T as TOKEN_SEMICOLON, _ as TOKEN_LEFT_BRACE, a as TOKEN_BAD_URL, b as TOKEN_NUMBER, c as TOKEN_COLON, d as TOKEN_DELIM, f as TOKEN_DIMENSION, g as TOKEN_IDENT, h as TOKEN_HASH, i as TOKEN_BAD_STRING, k as TOKEN_WHITESPACE, l as TOKEN_COMMA, m as TOKEN_FUNCTION, n as tokenize, o as TOKEN_CDC, p as TOKEN_EOF, r as TOKEN_AT_KEYWORD, s as TOKEN_CDO, u as TOKEN_COMMENT, v as TOKEN_LEFT_BRACKET, w as TOKEN_RIGHT_PAREN, x as TOKEN_PERCENTAGE, y as TOKEN_LEFT_PAREN } from "./tokenize-BYl6GvyV.js";
2
2
  import { A as PARENTHESIS, B as STYLE_RULE, C as MEDIA_QUERY, D as NTH_SELECTOR, E as NTH_OF_SELECTOR, F as RAW, G as UNIVERSAL_SELECTOR, H as SUPPORTS_QUERY, I as SELECTOR, K as URL, L as SELECTOR_LIST, M as PSEUDO_CLASS_SELECTOR, N as PSEUDO_ELEMENT_SELECTOR, O as NUMBER, P as RATIO, R as STRING, S as MEDIA_FEATURE, T as NESTING_SELECTOR, U as TYPE_SELECTOR, V as SUPPORTS_DECLARATION, W as UNICODE_RANGE, _ as ID_SELECTOR, a as CLASS_SELECTOR, b as LANG_SELECTOR, c as CONTAINER_QUERY, d as DIMENSION, f as FEATURE_RANGE, g as IDENTIFIER, h as HASH, i as BLOCK, j as PRELUDE_OPERATOR, k as OPERATOR, m as FUNCTION, n as AT_RULE, o as COMBINATOR, p as FLAG_IMPORTANT, q as VALUE, r as AT_RULE_PRELUDE, s as COMMENT, t as ATTRIBUTE_SELECTOR, u as DECLARATION, v as IF_BRANCH, w as MEDIA_TYPE, x as LAYER_NAME, y as IF_CONDITION, z as STYLESHEET } from "./arena-e9O_g2AN.js";
3
- import { c as str_starts_with, i as is_vendor_prefixed, o as str_equals, r as is_custom, s as str_index_of, t as parse_dimension } from "./parse-dimension-ouWXNHdx.js";
4
- import { n as TYPE_NAMES } from "./css-node-BmD2JJLr.js";
5
- import { n as parse_selector, r as parse_selector_list } from "./parse-selector-DMduLN4o.js";
3
+ import { a as is_vendor_prefixed, i as is_custom, l as str_index_of, n as parse_dimension, s as str_equals, u as str_starts_with } from "./parse-dimension-CQELWb5z.js";
4
+ import { n as TYPE_NAMES } from "./css-node-CH5HqF0J.js";
5
+ import { n as parse_selector, r as parse_selector_list } from "./parse-selector-PhqFezCi.js";
6
6
  import { parse_atrule_prelude } from "./parse-atrule-prelude.js";
7
7
  import { parse_value } from "./parse-value.js";
8
8
  import { parse_declaration } from "./parse-declaration.js";
@@ -2,7 +2,7 @@ import { l as CSSDataArena } from "./arena-BGvFdbj5.js";
2
2
  import { D as NthSelector } from "./node-types-YnOKcNfU.js";
3
3
  //#region src/parse-anplusb.d.ts
4
4
  /** @internal */
5
- declare class ANplusBParser {
5
+ export declare class ANplusBParser {
6
6
  private lexer;
7
7
  private arena;
8
8
  private source;
@@ -21,6 +21,5 @@ declare class ANplusBParser {
21
21
  private skip_whitespace;
22
22
  private create_anplusb_node;
23
23
  }
24
- declare function parse_anplusb(expr: string): NthSelector | null;
25
- //#endregion
26
- export { ANplusBParser, parse_anplusb };
24
+ export declare function parse_anplusb(expr: string): NthSelector | null;
25
+ //#endregion
@@ -1,7 +1,7 @@
1
- import { t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
3
- import { o as str_equals, s as str_index_of } from "./parse-dimension-ouWXNHdx.js";
4
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
3
+ import { l as str_index_of, s as str_equals } from "./parse-dimension-CQELWb5z.js";
4
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
5
5
  //#region src/parse-anplusb.ts
6
6
  /** @internal */
7
7
  var ANplusBParser = class {
@@ -2,7 +2,7 @@ import { l as CSSDataArena } from "./arena-BGvFdbj5.js";
2
2
  import { t as AnyNode } from "./node-types-YnOKcNfU.js";
3
3
  //#region src/parse-atrule-prelude.d.ts
4
4
  /** @internal */
5
- declare class AtRulePreludeParser {
5
+ export declare class AtRulePreludeParser {
6
6
  private lexer;
7
7
  private arena;
8
8
  private source;
@@ -40,6 +40,5 @@ declare class AtRulePreludeParser {
40
40
  * @param prelude - The at-rule prelude to parse (e.g., "(min-width: 768px)", "utilities")
41
41
  * @returns An array of CSSNode objects representing the parsed prelude
42
42
  */
43
- declare function parse_atrule_prelude(at_rule_name: string, prelude: string): AnyNode[];
44
- //#endregion
45
- export { AtRulePreludeParser, parse_atrule_prelude };
43
+ export declare function parse_atrule_prelude(at_rule_name: string, prelude: string): AnyNode[];
44
+ //#endregion
@@ -1,9 +1,9 @@
1
- import { t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
3
- import { l as strip_vendor_prefix, o as str_equals } from "./parse-dimension-ouWXNHdx.js";
4
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
5
- import { s as trim_boundaries } from "./parse-selector-DMduLN4o.js";
6
- import { n as ConditionParser, t as ValueNodeParser } from "./value-node-parser-3ET5Z4Rf.js";
3
+ import { d as strip_vendor_prefix, s as str_equals } from "./parse-dimension-CQELWb5z.js";
4
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
5
+ import { s as trim_boundaries } from "./parse-selector-PhqFezCi.js";
6
+ import { n as ConditionParser, t as ValueNodeParser } from "./value-node-parser-tjY982sG.js";
7
7
  //#region src/parse-atrule-prelude.ts
8
8
  /** @internal */
9
9
  var AtRulePreludeParser = class {
@@ -3,7 +3,7 @@ import { n as Lexer } from "./tokenize-CDEnYcVG.js";
3
3
  import { d as Declaration } from "./node-types-YnOKcNfU.js";
4
4
  //#region src/parse-declaration.d.ts
5
5
  /** @internal */
6
- declare class DeclarationParser {
6
+ export declare class DeclarationParser {
7
7
  private arena;
8
8
  private source;
9
9
  private value_parser;
@@ -16,6 +16,5 @@ declare class DeclarationParser {
16
16
  * @param source - The CSS declaration to parse (e.g., "color: red", "margin: 10px !important")
17
17
  * @returns The DECLARATION CSSNode
18
18
  */
19
- declare function parse_declaration(source: string): Declaration;
20
- //#endregion
21
- export { DeclarationParser, parse_declaration };
19
+ export declare function parse_declaration(source: string): Declaration;
20
+ //#endregion
@@ -1,8 +1,8 @@
1
- import { t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
3
- import { i as is_vendor_prefixed } from "./parse-dimension-ouWXNHdx.js";
4
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
5
- import { a as skip_whitespace_and_comments_backward, s as trim_boundaries } from "./parse-selector-DMduLN4o.js";
3
+ import { a as is_vendor_prefixed } from "./parse-dimension-CQELWb5z.js";
4
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
5
+ import { a as skip_whitespace_and_comments_backward, s as trim_boundaries } from "./parse-selector-PhqFezCi.js";
6
6
  import { ValueParser } from "./parse-value.js";
7
7
  //#region src/parse-declaration.ts
8
8
  /** @internal */
@@ -27,6 +27,20 @@ function str_equals(a, b) {
27
27
  }
28
28
  return true;
29
29
  }
30
+ /**
31
+ * Case-insensitive equality between `source[start, end)` and `literal`, without allocating
32
+ * a substring first. Same semantics as `str_equals(literal, source.substring(start, end))`.
33
+ * `literal` MUST be lowercase.
34
+ */
35
+ function str_equals_range(source, start, end, literal) {
36
+ if (end - start !== literal.length) return false;
37
+ for (let i = 0; i < literal.length; i++) {
38
+ let ch = source.charCodeAt(start + i);
39
+ ch |= 32;
40
+ if (ch !== literal.charCodeAt(i)) return false;
41
+ }
42
+ return true;
43
+ }
30
44
  /** Case-insensitive ASCII prefix check without allocations. `prefix` MUST be lowercase. */
31
45
  function str_starts_with(str, prefix) {
32
46
  if (str.length < prefix.length) return false;
@@ -89,8 +103,14 @@ function strip_vendor_prefix(str) {
89
103
  }
90
104
  //#endregion
91
105
  //#region src/parse-dimension.ts
92
- /** Parse a dimension string into value and unit, e.g. "100px" → { value: 100, unit: "px" } or "2%" → { value: 2, unit: "%" } */
93
- function parse_dimension(text) {
106
+ /**
107
+ * Find where a dimension's numeric part ends, e.g. 3 for "100px" or 2 for "2%".
108
+ * No allocation — callers that only need `value` or only `unit` can slice just
109
+ * the part they want instead of going through `parse_dimension`'s object + two
110
+ * substrings for both.
111
+ * @internal
112
+ */
113
+ function dimension_number_end(text) {
94
114
  let num_end = 0;
95
115
  for (let i = 0; i < text.length; i++) {
96
116
  let ch = text.charCodeAt(i);
@@ -113,6 +133,11 @@ function parse_dimension(text) {
113
133
  if (is_digit(ch) || ch === 46 || ch === 45 || ch === 43) num_end = i + 1;
114
134
  else break;
115
135
  }
136
+ return num_end;
137
+ }
138
+ /** Parse a dimension string into value and unit, e.g. "100px" → { value: 100, unit: "px" } or "2%" → { value: 2, unit: "%" } */
139
+ function parse_dimension(text) {
140
+ let num_end = dimension_number_end(text);
116
141
  let num_str = text.substring(0, num_end);
117
142
  let unit = text.substring(num_end);
118
143
  return {
@@ -121,4 +146,4 @@ function parse_dimension(text) {
121
146
  };
122
147
  }
123
148
  //#endregion
124
- export { is_whitespace as a, str_starts_with as c, is_vendor_prefixed as i, strip_vendor_prefix as l, is_combinator as n, str_equals as o, is_custom as r, str_index_of as s, parse_dimension as t };
149
+ export { is_vendor_prefixed as a, str_equals_range as c, strip_vendor_prefix as d, is_custom as i, str_index_of as l, parse_dimension as n, is_whitespace as o, is_combinator as r, str_equals as s, dimension_number_end as t, str_starts_with as u };
@@ -1,8 +1,15 @@
1
1
  //#region src/parse-dimension.d.ts
2
+ /**
3
+ * Find where a dimension's numeric part ends, e.g. 3 for "100px" or 2 for "2%".
4
+ * No allocation — callers that only need `value` or only `unit` can slice just
5
+ * the part they want instead of going through `parse_dimension`'s object + two
6
+ * substrings for both.
7
+ * @internal
8
+ */
9
+ export declare function dimension_number_end(text: string): number;
2
10
  /** Parse a dimension string into value and unit, e.g. "100px" → { value: 100, unit: "px" } or "2%" → { value: 2, unit: "%" } */
3
- declare function parse_dimension(text: string): {
11
+ export declare function parse_dimension(text: string): {
4
12
  value: number;
5
13
  unit: string;
6
14
  };
7
- //#endregion
8
- export { parse_dimension };
15
+ //#endregion
@@ -1,2 +1,2 @@
1
- import { t as parse_dimension } from "./parse-dimension-ouWXNHdx.js";
2
- export { parse_dimension };
1
+ import { n as parse_dimension, t as dimension_number_end } from "./parse-dimension-CQELWb5z.js";
2
+ export { dimension_number_end, parse_dimension };
@@ -1,7 +1,7 @@
1
- import { t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
3
- import { a as is_whitespace, n as is_combinator, o as str_equals } from "./parse-dimension-ouWXNHdx.js";
4
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
3
+ import { c as str_equals_range, o as is_whitespace, r as is_combinator } from "./parse-dimension-CQELWb5z.js";
4
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
5
5
  import { ANplusBParser } from "./parse-anplusb.js";
6
6
  //#region src/parse-utils.ts
7
7
  /** @internal */
@@ -425,15 +425,14 @@ var SelectorParser = class {
425
425
  this.arena.set_content_length(node, func_name_end - func_name_start);
426
426
  this.arena.set_flag(node, 64);
427
427
  if (content_end > content_start) {
428
- let func_name_substr = this.source.substring(func_name_start, func_name_end);
429
- if (this.is_nth_pseudo(func_name_substr)) {
428
+ if (this.is_nth_pseudo(func_name_start, func_name_end)) {
430
429
  let child = this.parse_nth_expression(content_start, content_end);
431
430
  if (child !== null) this.arena.set_first_child(node, child);
432
- } else if (str_equals("lang", func_name_substr)) this.parse_lang_identifiers(content_start, content_end, node);
431
+ } else if (str_equals_range(this.source, func_name_start, func_name_end, "lang")) this.parse_lang_identifiers(content_start, content_end, node);
433
432
  else {
434
433
  let saved_selector_end = this.selector_end;
435
434
  const saved = this.lexer.save_position();
436
- let allow_relative = str_equals("has", func_name_substr);
435
+ let allow_relative = str_equals_range(this.source, func_name_start, func_name_end, "has");
437
436
  let child_selector = this.parse_selector(content_start, content_end, this.lexer.line, this.lexer.column, allow_relative);
438
437
  this.selector_end = saved_selector_end;
439
438
  this.lexer.restore_position(saved);
@@ -442,8 +441,8 @@ var SelectorParser = class {
442
441
  }
443
442
  return node;
444
443
  }
445
- is_nth_pseudo(name) {
446
- return str_equals("nth-child", name) || str_equals("nth-last-child", name) || str_equals("nth-of-type", name) || str_equals("nth-last-of-type", name) || str_equals("nth-col", name) || str_equals("nth-last-col", name);
444
+ is_nth_pseudo(start, end) {
445
+ return str_equals_range(this.source, start, end, "nth-child") || str_equals_range(this.source, start, end, "nth-last-child") || str_equals_range(this.source, start, end, "nth-of-type") || str_equals_range(this.source, start, end, "nth-last-of-type") || str_equals_range(this.source, start, end, "nth-col") || str_equals_range(this.source, start, end, "nth-last-col");
447
446
  }
448
447
  parse_lang_identifiers(start, end, parent_node) {
449
448
  const saved_position = this.lexer.save_position();
@@ -2,7 +2,7 @@ import { l as CSSDataArena } from "./arena-BGvFdbj5.js";
2
2
  import { R as Selector, z as SelectorList } from "./node-types-YnOKcNfU.js";
3
3
  //#region src/parse-selector.d.ts
4
4
  /** @internal */
5
- declare class SelectorParser {
5
+ export declare class SelectorParser {
6
6
  private lexer;
7
7
  private arena;
8
8
  private source;
@@ -32,7 +32,6 @@ declare class SelectorParser {
32
32
  private create_node;
33
33
  private skip_whitespace;
34
34
  }
35
- declare function parse_selector_list(source: string): SelectorList;
36
- declare function parse_selector(source: string): Selector;
37
- //#endregion
38
- export { SelectorParser, parse_selector, parse_selector_list };
35
+ export declare function parse_selector_list(source: string): SelectorList;
36
+ export declare function parse_selector(source: string): Selector;
37
+ //#endregion
@@ -1,2 +1,2 @@
1
- import { n as parse_selector, r as parse_selector_list, t as SelectorParser } from "./parse-selector-DMduLN4o.js";
1
+ import { n as parse_selector, r as parse_selector_list, t as SelectorParser } from "./parse-selector-PhqFezCi.js";
2
2
  export { SelectorParser, parse_selector, parse_selector_list };
@@ -2,7 +2,7 @@ import { l as CSSDataArena } from "./arena-BGvFdbj5.js";
2
2
  import { X as Value } from "./node-types-YnOKcNfU.js";
3
3
  //#region src/parse-value.d.ts
4
4
  /** @internal */
5
- declare class ValueParser {
5
+ export declare class ValueParser {
6
6
  private nodes;
7
7
  private arena;
8
8
  constructor(arena: CSSDataArena, source: string);
@@ -13,6 +13,5 @@ declare class ValueParser {
13
13
  * @param value_string - The CSS value to parse (e.g., "1px solid red")
14
14
  * @returns A CSSNode VALUE wrapper containing the parsed value tokens as children
15
15
  */
16
- declare function parse_value(value_string: string): Value;
17
- //#endregion
18
- export { ValueParser, parse_value };
16
+ export declare function parse_value(value_string: string): Value;
17
+ //#endregion
@@ -1,6 +1,6 @@
1
1
  import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
2
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
3
- import { t as ValueNodeParser } from "./value-node-parser-3ET5Z4Rf.js";
2
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
3
+ import { t as ValueNodeParser } from "./value-node-parser-tjY982sG.js";
4
4
  //#region src/parse-value.ts
5
5
  /** @internal */
6
6
  var ValueParser = class {
package/dist/parse.d.ts CHANGED
@@ -2,14 +2,14 @@ import { l as CSSDataArena } from "./arena-BGvFdbj5.js";
2
2
  import { t as CommentInfo } from "./tokenize-CDEnYcVG.js";
3
3
  import { H as StyleSheet } from "./node-types-YnOKcNfU.js";
4
4
  //#region src/parse.d.ts
5
- interface ParserOptions {
5
+ export interface ParserOptions {
6
6
  parse_values?: boolean;
7
7
  parse_selectors?: boolean;
8
8
  parse_atrule_preludes?: boolean;
9
9
  on_comment?: (info: CommentInfo) => void;
10
10
  }
11
11
  /** @internal */
12
- declare class Parser {
12
+ export declare class Parser {
13
13
  private source;
14
14
  private lexer;
15
15
  private arena;
@@ -40,6 +40,5 @@ declare class Parser {
40
40
  * @param options - Parser options
41
41
  * @returns The root CSSNode of the AST
42
42
  */
43
- declare function parse(source: string, options?: ParserOptions): StyleSheet;
44
- //#endregion
45
- export { Parser, ParserOptions, parse };
43
+ export declare function parse(source: string, options?: ParserOptions): StyleSheet;
44
+ //#endregion
package/dist/parse.js CHANGED
@@ -1,7 +1,7 @@
1
- import { t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
3
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
4
- import { a as skip_whitespace_and_comments_backward, s as trim_boundaries, t as SelectorParser } from "./parse-selector-DMduLN4o.js";
3
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
4
+ import { a as skip_whitespace_and_comments_backward, s as trim_boundaries, t as SelectorParser } from "./parse-selector-PhqFezCi.js";
5
5
  import { AtRulePreludeParser } from "./parse-atrule-prelude.js";
6
6
  import { DeclarationParser } from "./parse-declaration.js";
7
7
  //#region src/parse.ts
@@ -189,13 +189,15 @@ var Parser = class {
189
189
  }
190
190
  let trimmed = trim_boundaries(this.source, prelude_start, prelude_end);
191
191
  let prelude_wrapper = null;
192
- if (trimmed) if (this.prelude_parser) {
193
- let prelude_nodes = this.prelude_parser.parse_prelude(at_rule_name, trimmed[0], trimmed[1], at_rule_line, at_rule_column);
194
- if (prelude_nodes.length > 0) {
195
- prelude_wrapper = this.arena.create_node(40, trimmed[0], trimmed[1] - trimmed[0], at_rule_line, at_rule_column);
196
- this.arena.append_children(prelude_wrapper, prelude_nodes);
192
+ if (trimmed) {
193
+ if (this.prelude_parser) {
194
+ let prelude_nodes = this.prelude_parser.parse_prelude(at_rule_name, trimmed[0], trimmed[1], at_rule_line, at_rule_column);
195
+ if (prelude_nodes.length > 0) {
196
+ prelude_wrapper = this.arena.create_node(40, trimmed[0], trimmed[1] - trimmed[0], at_rule_line, at_rule_column);
197
+ this.arena.append_children(prelude_wrapper, prelude_nodes);
198
+ } else prelude_wrapper = this.arena.create_node(8, trimmed[0], trimmed[1] - trimmed[0], at_rule_line, at_rule_column);
197
199
  } else prelude_wrapper = this.arena.create_node(8, trimmed[0], trimmed[1] - trimmed[0], at_rule_line, at_rule_column);
198
- } else prelude_wrapper = this.arena.create_node(8, trimmed[0], trimmed[1] - trimmed[0], at_rule_line, at_rule_column);
200
+ }
199
201
  let last_end = this.lexer.token_end;
200
202
  if (this.peek_type() === 23) {
201
203
  let block_start = this.lexer.token_end;
@@ -701,16 +701,7 @@ var Lexer = class {
701
701
  continue;
702
702
  }
703
703
  if (ch === CHAR_FORWARD_SLASH && this.pos + 1 < end && this.source.charCodeAt(this.pos + 1) === CHAR_ASTERISK) {
704
- this.advance();
705
- this.advance();
706
- while (this.pos < end) {
707
- if (this.source.charCodeAt(this.pos) === CHAR_ASTERISK && this.pos + 1 < end && this.source.charCodeAt(this.pos + 1) === CHAR_FORWARD_SLASH) {
708
- this.advance();
709
- this.advance();
710
- break;
711
- }
712
- this.advance();
713
- }
704
+ this._skip_comment();
714
705
  continue;
715
706
  }
716
707
  break;
package/dist/tokenize.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as tokenize, t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { n as tokenize, t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  export { Lexer, tokenize };
@@ -1,7 +1,7 @@
1
- import { t as Lexer } from "./tokenize-DK24ACbY.js";
1
+ import { t as Lexer } from "./tokenize-BYl6GvyV.js";
2
2
  import "./arena-e9O_g2AN.js";
3
- import { a as is_whitespace, o as str_equals } from "./parse-dimension-ouWXNHdx.js";
4
- import { i as find_colon_at_depth_zero, o as skip_whitespace_and_comments_forward, s as trim_boundaries, t as SelectorParser } from "./parse-selector-DMduLN4o.js";
3
+ import { c as str_equals_range, s as str_equals } from "./parse-dimension-CQELWb5z.js";
4
+ import { i as find_colon_at_depth_zero, o as skip_whitespace_and_comments_forward, s as trim_boundaries, t as SelectorParser } from "./parse-selector-PhqFezCi.js";
5
5
  //#region src/parse-condition.ts
6
6
  /** @internal */
7
7
  var ConditionParser = class {
@@ -316,8 +316,9 @@ var ValueNodeParser = class ValueNodeParser {
316
316
  while (this.lexer.pos < this.end) {
317
317
  this.lexer.next_token_fast(false);
318
318
  if (this.lexer.token_start >= this.end) break;
319
- if (this.lexer.token_type === 26) break;
320
- if (this.is_whitespace_inline()) continue;
319
+ let token_type = this.lexer.token_type;
320
+ if (token_type === 26) break;
321
+ if (token_type === 13) continue;
321
322
  let node = this.parse_value_node();
322
323
  if (node !== null) {
323
324
  if (first_node === 0) first_node = node;
@@ -328,11 +329,6 @@ var ValueNodeParser = class ValueNodeParser {
328
329
  this.last_chain_node = last_node;
329
330
  return first_node;
330
331
  }
331
- is_whitespace_inline() {
332
- if (this.lexer.token_start >= this.lexer.token_end) return false;
333
- for (let i = this.lexer.token_start; i < this.lexer.token_end; i++) if (!is_whitespace(this.source.charCodeAt(i))) return false;
334
- return true;
335
- }
336
332
  parse_value_node() {
337
333
  let token_type = this.lexer.token_type;
338
334
  let start = this.lexer.token_start;
@@ -390,15 +386,15 @@ var ValueNodeParser = class ValueNodeParser {
390
386
  }
391
387
  parse_function_node(start, end) {
392
388
  let name_end = end - 1;
393
- let func_name_substr = this.source.substring(start, name_end);
394
- if (str_equals("if", func_name_substr)) return this.parse_if_function_node(start, end);
395
- let node = this.arena.create_node(str_equals("url", func_name_substr) ? 18 : 15, start, 0, this.lexer.token_line, this.lexer.token_column);
389
+ if (str_equals_range(this.source, start, name_end, "if")) return this.parse_if_function_node(start, end);
390
+ let is_url = str_equals_range(this.source, start, name_end, "url");
391
+ let node = this.arena.create_node(is_url ? 18 : 15, start, 0, this.lexer.token_line, this.lexer.token_column);
396
392
  this.arena.set_content_start_delta(node, 0);
397
393
  this.arena.set_content_length(node, name_end - start);
398
- if (str_equals("url", func_name_substr) || str_equals("src", func_name_substr)) {
394
+ if (is_url || str_equals_range(this.source, start, name_end, "src")) {
399
395
  let save_pos = this.lexer.save_position();
400
396
  this.lexer.next_token_fast(false);
401
- while (this.is_whitespace_inline() && this.lexer.pos < this.end) this.lexer.next_token_fast(false);
397
+ while (this.lexer.token_type === 13 && this.lexer.pos < this.end) this.lexer.next_token_fast(false);
402
398
  let first_token_type = this.lexer.token_type;
403
399
  this.lexer.restore_position(save_pos);
404
400
  if (first_token_type === 5) {} else {
@@ -435,7 +431,7 @@ var ValueNodeParser = class ValueNodeParser {
435
431
  break;
436
432
  }
437
433
  }
438
- if (this.is_whitespace_inline()) continue;
434
+ if (token_type === 13) continue;
439
435
  let arg_node = this.parse_value_node();
440
436
  if (arg_node !== null) {
441
437
  if (first_arg === 0) first_arg = arg_node;
@@ -482,7 +478,7 @@ var ValueNodeParser = class ValueNodeParser {
482
478
  func_end = this.lexer.token_end;
483
479
  break;
484
480
  }
485
- if (this.is_whitespace_inline() || tt === 17 || tt === 16) continue;
481
+ if (tt === 13 || tt === 17 || tt === 16) continue;
486
482
  let branch_start = this.lexer.token_start;
487
483
  let branch_line = this.lexer.token_line;
488
484
  let branch_col = this.lexer.token_column;
@@ -495,7 +491,7 @@ var ValueNodeParser = class ValueNodeParser {
495
491
  let t = this.lexer.token_type;
496
492
  if (t === 26) break;
497
493
  if (this.lexer.token_start >= this.end) break;
498
- if (this.is_whitespace_inline()) continue;
494
+ if (t === 13) continue;
499
495
  if (t === 16) {
500
496
  colon_found = true;
501
497
  break;
@@ -517,7 +513,7 @@ var ValueNodeParser = class ValueNodeParser {
517
513
  let t = this.lexer.token_type;
518
514
  if (t === 26) break;
519
515
  if (this.lexer.token_start >= this.end) break;
520
- if (this.is_whitespace_inline()) continue;
516
+ if (t === 13) continue;
521
517
  if (t === 17) break;
522
518
  if (t === 22) {
523
519
  content_end = this.lexer.token_start;
@@ -568,7 +564,7 @@ var ValueNodeParser = class ValueNodeParser {
568
564
  while (this.lexer.pos < this.end) {
569
565
  this.lexer.next_token_fast(false);
570
566
  if (this.lexer.token_start >= this.end) return 26;
571
- if (this.is_whitespace_inline()) continue;
567
+ if (this.lexer.token_type === 13) continue;
572
568
  return this.lexer.token_type;
573
569
  }
574
570
  return 26;
@@ -693,8 +689,9 @@ var ValueNodeParser = class ValueNodeParser {
693
689
  while (this.lexer.pos < this.end) {
694
690
  this.lexer.next_token_fast(false);
695
691
  if (this.lexer.token_start >= this.end) break;
696
- if (this.lexer.token_type === 26) break;
697
- if (this.is_whitespace_inline()) continue;
692
+ let token_type = this.lexer.token_type;
693
+ if (token_type === 26) break;
694
+ if (token_type === 13) continue;
698
695
  let node = this.parse_value_node();
699
696
  if (node !== null) nodes.push(node);
700
697
  }
@@ -720,7 +717,7 @@ var ValueNodeParser = class ValueNodeParser {
720
717
  break;
721
718
  }
722
719
  }
723
- if (this.is_whitespace_inline()) continue;
720
+ if (token_type === 13) continue;
724
721
  let child_node = this.parse_value_node();
725
722
  if (child_node !== null) {
726
723
  if (first_child === 0) first_child = child_node;
package/dist/walk.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { o as CSSNode, t as AnyNode } from "./node-types-YnOKcNfU.js";
2
2
  //#region src/walk.d.ts
3
- declare const SKIP: unique symbol;
4
- declare const BREAK: unique symbol;
3
+ export declare const SKIP: unique symbol;
4
+ export declare const BREAK: unique symbol;
5
5
  type WalkCallback = (node: AnyNode, depth: number) => void | typeof SKIP | typeof BREAK;
6
6
  /**
7
7
  * Walk the AST depth-first, calling `callback` for each node. Return SKIP to skip
8
8
  * children, BREAK to stop. `depth` tracks rule nesting (STYLE_RULE/AT_RULE only),
9
9
  * not tree depth.
10
10
  */
11
- declare function walk(node: CSSNode, callback: WalkCallback, depth?: number): boolean;
11
+ export declare function walk(node: CSSNode, callback: WalkCallback, depth?: number): boolean;
12
12
  type WalkEnterLeaveCallback = (node: AnyNode) => void | typeof SKIP | typeof BREAK;
13
13
  interface WalkEnterLeaveOptions {
14
14
  enter?: WalkEnterLeaveCallback;
@@ -18,6 +18,5 @@ interface WalkEnterLeaveOptions {
18
18
  * Walk the AST depth-first, calling `enter` before children and `leave` after.
19
19
  * SKIP in enter skips children (leave still runs); BREAK stops (leave doesn't run).
20
20
  */
21
- declare function traverse(node: CSSNode, { enter, leave }?: WalkEnterLeaveOptions): boolean;
22
- //#endregion
23
- export { BREAK, SKIP, traverse, walk };
21
+ export declare function traverse(node: CSSNode, { enter, leave }?: WalkEnterLeaveOptions): boolean;
22
+ //#endregion
package/dist/walk.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./arena-e9O_g2AN.js";
2
- import { t as CSSNode } from "./css-node-BmD2JJLr.js";
2
+ import { t as CSSNode } from "./css-node-CH5HqF0J.js";
3
3
  import "./constants.js";
4
4
  //#region src/walk.ts
5
5
  const SKIP = Symbol("SKIP");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectwallace/css-parser",
3
- "version": "0.18.6",
3
+ "version": "0.18.8",
4
4
  "description": "High-performance CSS lexer and parser, optimized for CSS inspection and analysis",
5
5
  "keywords": [
6
6
  "ast",
@@ -78,21 +78,21 @@
78
78
  "devDependencies": {
79
79
  "@projectwallace/preset-oxlint": "^0.0.11",
80
80
  "@types/node": "^26.1.1",
81
- "@vitest/coverage-v8": "^4.1.9",
81
+ "@vitest/coverage-v8": "^5.0.1",
82
82
  "bootstrap": "^5.3.8",
83
83
  "css-tree": "^3.1.0",
84
84
  "knip": "^6.18.0",
85
- "oxfmt": "^0.60.0",
85
+ "oxfmt": "^0.70.0",
86
86
  "oxlint": "^1.71.0",
87
87
  "pkg-pr-new": "^0.0.88",
88
88
  "postcss": "^8.5.15",
89
89
  "publint": "^0.3.21",
90
90
  "tailwindcss": "^2.2.8",
91
91
  "tinybench": "^6.0.2",
92
- "tsdown": "^0.22.3",
92
+ "tsdown": "^0.23.0",
93
93
  "typescript": "^7.0.2",
94
94
  "vite": "^8.0.16",
95
- "vitest": "^4.1.9"
95
+ "vitest": "^5.0.1"
96
96
  },
97
97
  "engines": {
98
98
  "pnpm": ">=11.0.0"