@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.
- package/dist/constants.d.ts +2 -2
- package/dist/{css-node-BmD2JJLr.js → css-node-CH5HqF0J.js} +9 -5
- package/dist/index.d.ts +7 -7
- package/dist/index.js +4 -4
- package/dist/parse-anplusb.d.ts +3 -4
- package/dist/parse-anplusb.js +3 -3
- package/dist/parse-atrule-prelude.d.ts +3 -4
- package/dist/parse-atrule-prelude.js +5 -5
- package/dist/parse-declaration.d.ts +3 -4
- package/dist/parse-declaration.js +4 -4
- package/dist/{parse-dimension-ouWXNHdx.js → parse-dimension-CQELWb5z.js} +28 -3
- package/dist/parse-dimension.d.ts +10 -3
- package/dist/parse-dimension.js +2 -2
- package/dist/{parse-selector-DMduLN4o.js → parse-selector-PhqFezCi.js} +8 -9
- package/dist/parse-selector.d.ts +4 -5
- package/dist/parse-selector.js +1 -1
- package/dist/parse-value.d.ts +3 -4
- package/dist/parse-value.js +2 -2
- package/dist/parse.d.ts +4 -5
- package/dist/parse.js +11 -9
- package/dist/{tokenize-DK24ACbY.js → tokenize-BYl6GvyV.js} +1 -10
- package/dist/tokenize.js +1 -1
- package/dist/{value-node-parser-3ET5Z4Rf.js → value-node-parser-tjY982sG.js} +20 -23
- package/dist/walk.d.ts +5 -6
- package/dist/walk.js +1 -1
- package/package.json +5 -5
package/dist/constants.d.ts
CHANGED
|
@@ -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,
|
|
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
|
|
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)
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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-
|
|
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 {
|
|
4
|
-
import { n as TYPE_NAMES } from "./css-node-
|
|
5
|
-
import { n as parse_selector, r as parse_selector_list } from "./parse-selector-
|
|
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";
|
package/dist/parse-anplusb.d.ts
CHANGED
|
@@ -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
|
package/dist/parse-anplusb.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as Lexer } from "./tokenize-
|
|
1
|
+
import { t as Lexer } from "./tokenize-BYl6GvyV.js";
|
|
2
2
|
import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as CSSNode } from "./css-node-
|
|
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-
|
|
1
|
+
import { t as Lexer } from "./tokenize-BYl6GvyV.js";
|
|
2
2
|
import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as CSSNode } from "./css-node-
|
|
5
|
-
import { s as trim_boundaries } from "./parse-selector-
|
|
6
|
-
import { n as ConditionParser, t as ValueNodeParser } from "./value-node-parser-
|
|
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-
|
|
1
|
+
import { t as Lexer } from "./tokenize-BYl6GvyV.js";
|
|
2
2
|
import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as CSSNode } from "./css-node-
|
|
5
|
-
import { a as skip_whitespace_and_comments_backward, s as trim_boundaries } from "./parse-selector-
|
|
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
|
-
/**
|
|
93
|
-
|
|
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 {
|
|
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
|
package/dist/parse-dimension.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
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-
|
|
1
|
+
import { t as Lexer } from "./tokenize-BYl6GvyV.js";
|
|
2
2
|
import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
|
|
3
|
-
import {
|
|
4
|
-
import { t as CSSNode } from "./css-node-
|
|
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
|
-
|
|
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 (
|
|
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 =
|
|
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(
|
|
446
|
-
return
|
|
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();
|
package/dist/parse-selector.d.ts
CHANGED
|
@@ -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
|
package/dist/parse-selector.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as parse_selector, r as parse_selector_list, t as SelectorParser } from "./parse-selector-
|
|
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 };
|
package/dist/parse-value.d.ts
CHANGED
|
@@ -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
|
package/dist/parse-value.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as CSSDataArena } from "./arena-e9O_g2AN.js";
|
|
2
|
-
import { t as CSSNode } from "./css-node-
|
|
3
|
-
import { t as ValueNodeParser } from "./value-node-parser-
|
|
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-
|
|
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-
|
|
4
|
-
import { a as skip_whitespace_and_comments_backward, s as trim_boundaries, t as SelectorParser } from "./parse-selector-
|
|
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)
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
}
|
|
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.
|
|
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-
|
|
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-
|
|
1
|
+
import { t as Lexer } from "./tokenize-BYl6GvyV.js";
|
|
2
2
|
import "./arena-e9O_g2AN.js";
|
|
3
|
-
import {
|
|
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-
|
|
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
|
-
|
|
320
|
-
if (
|
|
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
|
-
|
|
394
|
-
|
|
395
|
-
let node = this.arena.create_node(
|
|
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 (
|
|
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.
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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.
|
|
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
|
-
|
|
697
|
-
if (
|
|
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 (
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@projectwallace/css-parser",
|
|
3
|
-
"version": "0.18.
|
|
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": "^
|
|
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.
|
|
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.
|
|
92
|
+
"tsdown": "^0.23.0",
|
|
93
93
|
"typescript": "^7.0.2",
|
|
94
94
|
"vite": "^8.0.16",
|
|
95
|
-
"vitest": "^
|
|
95
|
+
"vitest": "^5.0.1"
|
|
96
96
|
},
|
|
97
97
|
"engines": {
|
|
98
98
|
"pnpm": ">=11.0.0"
|