@projectwallace/css-parser 0.9.0 → 0.10.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 +1 -0
- package/dist/arena.js +5 -2
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +3 -2
- package/dist/css-node.d.ts +4 -5
- package/dist/css-node.js +5 -12
- package/dist/index.js +1 -1
- package/dist/parse-declaration.js +6 -2
- package/dist/parse-value.d.ts +3 -3
- package/dist/parse-value.js +16 -6
- package/package.json +1 -1
package/dist/arena.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare const FUNCTION = 15;
|
|
|
14
14
|
export declare const OPERATOR = 16;
|
|
15
15
|
export declare const PARENTHESIS = 17;
|
|
16
16
|
export declare const URL = 18;
|
|
17
|
+
export declare const VALUE = 19;
|
|
17
18
|
export declare const SELECTOR_LIST = 20;
|
|
18
19
|
export declare const TYPE_SELECTOR = 21;
|
|
19
20
|
export declare const CLASS_SELECTOR = 22;
|
package/dist/arena.js
CHANGED
|
@@ -15,6 +15,7 @@ const FUNCTION = 15;
|
|
|
15
15
|
const OPERATOR = 16;
|
|
16
16
|
const PARENTHESIS = 17;
|
|
17
17
|
const URL = 18;
|
|
18
|
+
const VALUE = 19;
|
|
18
19
|
const SELECTOR_LIST = 20;
|
|
19
20
|
const TYPE_SELECTOR = 21;
|
|
20
21
|
const CLASS_SELECTOR = 22;
|
|
@@ -67,7 +68,9 @@ class CSSDataArena {
|
|
|
67
68
|
// Growth multiplier when capacity is exceeded
|
|
68
69
|
static GROWTH_FACTOR = 1.3;
|
|
69
70
|
// Estimated nodes per KB of CSS (based on real-world data)
|
|
70
|
-
|
|
71
|
+
// Increased from 270 to 325 to account for VALUE wrapper nodes
|
|
72
|
+
// (~20% of nodes are declarations, +1 VALUE node per declaration = +20% nodes)
|
|
73
|
+
static NODES_PER_KB = 325;
|
|
71
74
|
// Buffer to avoid frequent growth (15%)
|
|
72
75
|
static CAPACITY_BUFFER = 1.2;
|
|
73
76
|
constructor(initial_capacity = 1024) {
|
|
@@ -281,4 +284,4 @@ class CSSDataArena {
|
|
|
281
284
|
}
|
|
282
285
|
}
|
|
283
286
|
|
|
284
|
-
export { ATTRIBUTE_SELECTOR, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, ATTR_FLAG_NONE, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_NONE, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, AT_RULE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, CSSDataArena, DECLARATION, DIMENSION, FEATURE_RANGE, FLAG_BROWSERHACK, FLAG_HAS_BLOCK, FLAG_HAS_DECLARATIONS, FLAG_HAS_ERROR, FLAG_HAS_PARENS, FLAG_IMPORTANT, FLAG_LENGTH_OVERFLOW, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, 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, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_QUERY, TYPE_SELECTOR, UNIVERSAL_SELECTOR, URL };
|
|
287
|
+
export { ATTRIBUTE_SELECTOR, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, ATTR_FLAG_NONE, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_NONE, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, AT_RULE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, CSSDataArena, DECLARATION, DIMENSION, FEATURE_RANGE, FLAG_BROWSERHACK, FLAG_HAS_BLOCK, FLAG_HAS_DECLARATIONS, FLAG_HAS_ERROR, FLAG_HAS_PARENS, FLAG_IMPORTANT, FLAG_LENGTH_OVERFLOW, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, 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, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_QUERY, TYPE_SELECTOR, UNIVERSAL_SELECTOR, URL, VALUE };
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { STYLESHEET, STYLE_RULE, AT_RULE, DECLARATION, SELECTOR, COMMENT, BLOCK, IDENTIFIER, NUMBER, DIMENSION, STRING, HASH, FUNCTION, OPERATOR, PARENTHESIS, URL, SELECTOR_LIST, TYPE_SELECTOR, CLASS_SELECTOR, ID_SELECTOR, ATTRIBUTE_SELECTOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, COMBINATOR, UNIVERSAL_SELECTOR, NESTING_SELECTOR, NTH_SELECTOR, NTH_OF_SELECTOR, LANG_SELECTOR, MEDIA_QUERY, MEDIA_FEATURE, MEDIA_TYPE, CONTAINER_QUERY, SUPPORTS_QUERY, LAYER_NAME, PRELUDE_OPERATOR, FEATURE_RANGE, FLAG_IMPORTANT, ATTR_OPERATOR_NONE, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_FLAG_NONE, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE } from './arena';
|
|
2
|
-
export { STYLESHEET, STYLE_RULE, AT_RULE, DECLARATION, SELECTOR, COMMENT, BLOCK, IDENTIFIER, NUMBER, DIMENSION, STRING, HASH, FUNCTION, OPERATOR, PARENTHESIS, URL, SELECTOR_LIST, TYPE_SELECTOR, CLASS_SELECTOR, ID_SELECTOR, ATTRIBUTE_SELECTOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, COMBINATOR, UNIVERSAL_SELECTOR, NESTING_SELECTOR, NTH_SELECTOR, NTH_OF_SELECTOR, LANG_SELECTOR, MEDIA_QUERY, MEDIA_FEATURE, MEDIA_TYPE, CONTAINER_QUERY, SUPPORTS_QUERY, LAYER_NAME, PRELUDE_OPERATOR, FEATURE_RANGE, FLAG_IMPORTANT, ATTR_OPERATOR_NONE, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_FLAG_NONE, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, };
|
|
1
|
+
import { STYLESHEET, STYLE_RULE, AT_RULE, DECLARATION, SELECTOR, COMMENT, BLOCK, IDENTIFIER, NUMBER, DIMENSION, STRING, HASH, FUNCTION, OPERATOR, PARENTHESIS, URL, VALUE, SELECTOR_LIST, TYPE_SELECTOR, CLASS_SELECTOR, ID_SELECTOR, ATTRIBUTE_SELECTOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, COMBINATOR, UNIVERSAL_SELECTOR, NESTING_SELECTOR, NTH_SELECTOR, NTH_OF_SELECTOR, LANG_SELECTOR, MEDIA_QUERY, MEDIA_FEATURE, MEDIA_TYPE, CONTAINER_QUERY, SUPPORTS_QUERY, LAYER_NAME, PRELUDE_OPERATOR, FEATURE_RANGE, FLAG_IMPORTANT, ATTR_OPERATOR_NONE, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_FLAG_NONE, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE } from './arena';
|
|
2
|
+
export { STYLESHEET, STYLE_RULE, AT_RULE, DECLARATION, SELECTOR, COMMENT, BLOCK, IDENTIFIER, NUMBER, DIMENSION, STRING, HASH, FUNCTION, OPERATOR, PARENTHESIS, URL, VALUE, SELECTOR_LIST, TYPE_SELECTOR, CLASS_SELECTOR, ID_SELECTOR, ATTRIBUTE_SELECTOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, COMBINATOR, UNIVERSAL_SELECTOR, NESTING_SELECTOR, NTH_SELECTOR, NTH_OF_SELECTOR, LANG_SELECTOR, MEDIA_QUERY, MEDIA_FEATURE, MEDIA_TYPE, CONTAINER_QUERY, SUPPORTS_QUERY, LAYER_NAME, PRELUDE_OPERATOR, FEATURE_RANGE, FLAG_IMPORTANT, ATTR_OPERATOR_NONE, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_FLAG_NONE, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, };
|
|
3
3
|
export declare const NODE_TYPES: {
|
|
4
4
|
readonly STYLESHEET: 1;
|
|
5
5
|
readonly STYLE_RULE: 2;
|
|
@@ -17,6 +17,7 @@ export declare const NODE_TYPES: {
|
|
|
17
17
|
readonly OPERATOR: 16;
|
|
18
18
|
readonly PARENTHESIS: 17;
|
|
19
19
|
readonly URL: 18;
|
|
20
|
+
readonly VALUE: 19;
|
|
20
21
|
readonly SELECTOR_LIST: 20;
|
|
21
22
|
readonly TYPE_SELECTOR: 21;
|
|
22
23
|
readonly CLASS_SELECTOR: 22;
|
package/dist/constants.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FEATURE_RANGE, PRELUDE_OPERATOR, LAYER_NAME, SUPPORTS_QUERY, CONTAINER_QUERY, MEDIA_TYPE, MEDIA_FEATURE, MEDIA_QUERY, LANG_SELECTOR, NTH_OF_SELECTOR, NTH_SELECTOR, NESTING_SELECTOR, UNIVERSAL_SELECTOR, COMBINATOR, PSEUDO_ELEMENT_SELECTOR, PSEUDO_CLASS_SELECTOR, ATTRIBUTE_SELECTOR, ID_SELECTOR, CLASS_SELECTOR, TYPE_SELECTOR, SELECTOR_LIST, URL, PARENTHESIS, OPERATOR, FUNCTION, HASH, STRING, DIMENSION, NUMBER, IDENTIFIER, BLOCK, COMMENT, SELECTOR, DECLARATION, AT_RULE, STYLE_RULE, STYLESHEET } from './arena.js';
|
|
1
|
+
import { FEATURE_RANGE, PRELUDE_OPERATOR, LAYER_NAME, SUPPORTS_QUERY, CONTAINER_QUERY, MEDIA_TYPE, MEDIA_FEATURE, MEDIA_QUERY, LANG_SELECTOR, NTH_OF_SELECTOR, NTH_SELECTOR, NESTING_SELECTOR, UNIVERSAL_SELECTOR, COMBINATOR, PSEUDO_ELEMENT_SELECTOR, PSEUDO_CLASS_SELECTOR, ATTRIBUTE_SELECTOR, ID_SELECTOR, CLASS_SELECTOR, TYPE_SELECTOR, SELECTOR_LIST, VALUE, URL, PARENTHESIS, OPERATOR, FUNCTION, HASH, STRING, DIMENSION, NUMBER, IDENTIFIER, BLOCK, COMMENT, SELECTOR, DECLARATION, AT_RULE, STYLE_RULE, STYLESHEET } from './arena.js';
|
|
2
2
|
export { ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, ATTR_FLAG_NONE, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_NONE, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, FLAG_IMPORTANT } from './arena.js';
|
|
3
3
|
|
|
4
4
|
const NODE_TYPES = {
|
|
@@ -20,6 +20,7 @@ const NODE_TYPES = {
|
|
|
20
20
|
OPERATOR,
|
|
21
21
|
PARENTHESIS,
|
|
22
22
|
URL,
|
|
23
|
+
VALUE,
|
|
23
24
|
// Selector nodes
|
|
24
25
|
SELECTOR_LIST,
|
|
25
26
|
TYPE_SELECTOR,
|
|
@@ -45,4 +46,4 @@ const NODE_TYPES = {
|
|
|
45
46
|
FEATURE_RANGE
|
|
46
47
|
};
|
|
47
48
|
|
|
48
|
-
export { ATTRIBUTE_SELECTOR, AT_RULE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, DECLARATION, DIMENSION, FEATURE_RANGE, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, 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, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_QUERY, TYPE_SELECTOR, UNIVERSAL_SELECTOR, URL };
|
|
49
|
+
export { ATTRIBUTE_SELECTOR, AT_RULE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, DECLARATION, DIMENSION, FEATURE_RANGE, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, 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, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_QUERY, TYPE_SELECTOR, UNIVERSAL_SELECTOR, URL, VALUE };
|
package/dist/css-node.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CSSDataArena } from './arena';
|
|
2
|
-
import { STYLESHEET, STYLE_RULE, AT_RULE, DECLARATION, SELECTOR, COMMENT, BLOCK, IDENTIFIER, NUMBER, DIMENSION, STRING, HASH, FUNCTION, OPERATOR, PARENTHESIS, URL, SELECTOR_LIST, TYPE_SELECTOR, CLASS_SELECTOR, ID_SELECTOR, ATTRIBUTE_SELECTOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, COMBINATOR, UNIVERSAL_SELECTOR, NESTING_SELECTOR, NTH_SELECTOR, NTH_OF_SELECTOR, LANG_SELECTOR, MEDIA_QUERY, MEDIA_FEATURE, MEDIA_TYPE, CONTAINER_QUERY, SUPPORTS_QUERY, LAYER_NAME, PRELUDE_OPERATOR, FEATURE_RANGE } from './arena';
|
|
2
|
+
import { STYLESHEET, STYLE_RULE, AT_RULE, DECLARATION, SELECTOR, COMMENT, BLOCK, IDENTIFIER, NUMBER, DIMENSION, STRING, HASH, FUNCTION, OPERATOR, PARENTHESIS, URL, VALUE, SELECTOR_LIST, TYPE_SELECTOR, CLASS_SELECTOR, ID_SELECTOR, ATTRIBUTE_SELECTOR, PSEUDO_CLASS_SELECTOR, PSEUDO_ELEMENT_SELECTOR, COMBINATOR, UNIVERSAL_SELECTOR, NESTING_SELECTOR, NTH_SELECTOR, NTH_OF_SELECTOR, LANG_SELECTOR, MEDIA_QUERY, MEDIA_FEATURE, MEDIA_TYPE, CONTAINER_QUERY, SUPPORTS_QUERY, LAYER_NAME, PRELUDE_OPERATOR, FEATURE_RANGE } from './arena';
|
|
3
3
|
export declare const TYPE_NAMES: {
|
|
4
4
|
readonly 1: "StyleSheet";
|
|
5
5
|
readonly 2: "Rule";
|
|
@@ -17,6 +17,7 @@ export declare const TYPE_NAMES: {
|
|
|
17
17
|
readonly 16: "Operator";
|
|
18
18
|
readonly 17: "Parentheses";
|
|
19
19
|
readonly 18: "Url";
|
|
20
|
+
readonly 19: "Value";
|
|
20
21
|
readonly 20: "SelectorList";
|
|
21
22
|
readonly 21: "TypeSelector";
|
|
22
23
|
readonly 22: "ClassSelector";
|
|
@@ -40,7 +41,7 @@ export declare const TYPE_NAMES: {
|
|
|
40
41
|
readonly 39: "MediaFeatureRange";
|
|
41
42
|
};
|
|
42
43
|
export type TypeName = (typeof TYPE_NAMES)[keyof typeof TYPE_NAMES] | 'unknown';
|
|
43
|
-
export type CSSNodeType = typeof STYLESHEET | typeof STYLE_RULE | typeof AT_RULE | typeof DECLARATION | typeof SELECTOR | typeof COMMENT | typeof BLOCK | typeof IDENTIFIER | typeof NUMBER | typeof DIMENSION | typeof STRING | typeof HASH | typeof FUNCTION | typeof OPERATOR | typeof PARENTHESIS | typeof URL | typeof SELECTOR_LIST | typeof TYPE_SELECTOR | typeof CLASS_SELECTOR | typeof ID_SELECTOR | typeof ATTRIBUTE_SELECTOR | typeof PSEUDO_CLASS_SELECTOR | typeof PSEUDO_ELEMENT_SELECTOR | typeof COMBINATOR | typeof UNIVERSAL_SELECTOR | typeof NESTING_SELECTOR | typeof NTH_SELECTOR | typeof NTH_OF_SELECTOR | typeof LANG_SELECTOR | typeof MEDIA_QUERY | typeof MEDIA_FEATURE | typeof MEDIA_TYPE | typeof CONTAINER_QUERY | typeof SUPPORTS_QUERY | typeof LAYER_NAME | typeof PRELUDE_OPERATOR | typeof FEATURE_RANGE;
|
|
44
|
+
export type CSSNodeType = typeof STYLESHEET | typeof STYLE_RULE | typeof AT_RULE | typeof DECLARATION | typeof SELECTOR | typeof COMMENT | typeof BLOCK | typeof IDENTIFIER | typeof NUMBER | typeof DIMENSION | typeof STRING | typeof HASH | typeof FUNCTION | typeof OPERATOR | typeof PARENTHESIS | typeof URL | typeof VALUE | typeof SELECTOR_LIST | typeof TYPE_SELECTOR | typeof CLASS_SELECTOR | typeof ID_SELECTOR | typeof ATTRIBUTE_SELECTOR | typeof PSEUDO_CLASS_SELECTOR | typeof PSEUDO_ELEMENT_SELECTOR | typeof COMBINATOR | typeof UNIVERSAL_SELECTOR | typeof NESTING_SELECTOR | typeof NTH_SELECTOR | typeof NTH_OF_SELECTOR | typeof LANG_SELECTOR | typeof MEDIA_QUERY | typeof MEDIA_FEATURE | typeof MEDIA_TYPE | typeof CONTAINER_QUERY | typeof SUPPORTS_QUERY | typeof LAYER_NAME | typeof PRELUDE_OPERATOR | typeof FEATURE_RANGE;
|
|
44
45
|
export interface CloneOptions {
|
|
45
46
|
/**
|
|
46
47
|
* Recursively clone all children
|
|
@@ -102,7 +103,7 @@ export declare class CSSNode {
|
|
|
102
103
|
* For URL nodes with quoted string: returns the string with quotes (consistent with STRING node)
|
|
103
104
|
* For URL nodes with unquoted URL: returns the URL content without quotes
|
|
104
105
|
*/
|
|
105
|
-
get value(): string | number | null;
|
|
106
|
+
get value(): CSSNode | string | number | null;
|
|
106
107
|
/** Get the numeric value for NUMBER and DIMENSION nodes, or null for other node types */
|
|
107
108
|
get value_as_number(): number | null;
|
|
108
109
|
/**
|
|
@@ -140,8 +141,6 @@ export declare class CSSNode {
|
|
|
140
141
|
get block(): CSSNode | null;
|
|
141
142
|
/** Check if this block is empty (no declarations or rules, only comments allowed) */
|
|
142
143
|
get is_empty(): boolean;
|
|
143
|
-
/** Get array of parsed value nodes (for declarations only) */
|
|
144
|
-
get values(): CSSNode[];
|
|
145
144
|
/** Get start line number */
|
|
146
145
|
get line(): number;
|
|
147
146
|
/** Get start column number */
|
package/dist/css-node.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DIMENSION, NUMBER, URL, STRING,
|
|
1
|
+
import { DECLARATION, DIMENSION, NUMBER, URL, STRING, FLAG_IMPORTANT, FLAG_BROWSERHACK, IDENTIFIER, FUNCTION, AT_RULE, PSEUDO_ELEMENT_SELECTOR, PSEUDO_CLASS_SELECTOR, FLAG_HAS_ERROR, FLAG_HAS_BLOCK, FLAG_HAS_DECLARATIONS, STYLE_RULE, BLOCK, COMMENT, FLAG_HAS_PARENS, NTH_SELECTOR, NTH_OF_SELECTOR, SELECTOR_LIST, SELECTOR, COMBINATOR, ATTRIBUTE_SELECTOR, FEATURE_RANGE, PRELUDE_OPERATOR, LAYER_NAME, SUPPORTS_QUERY, CONTAINER_QUERY, MEDIA_TYPE, MEDIA_FEATURE, MEDIA_QUERY, LANG_SELECTOR, NESTING_SELECTOR, UNIVERSAL_SELECTOR, ID_SELECTOR, CLASS_SELECTOR, TYPE_SELECTOR, VALUE, PARENTHESIS, OPERATOR, HASH, STYLESHEET } from './arena.js';
|
|
2
2
|
import { str_starts_with, is_vendor_prefixed, is_whitespace, CHAR_MINUS_HYPHEN, CHAR_PLUS } from './string-utils.js';
|
|
3
3
|
import { parse_dimension } from './parse-utils.js';
|
|
4
4
|
|
|
@@ -19,6 +19,7 @@ const TYPE_NAMES = {
|
|
|
19
19
|
[OPERATOR]: "Operator",
|
|
20
20
|
[PARENTHESIS]: "Parentheses",
|
|
21
21
|
[URL]: "Url",
|
|
22
|
+
[VALUE]: "Value",
|
|
22
23
|
[SELECTOR_LIST]: "SelectorList",
|
|
23
24
|
[TYPE_SELECTOR]: "TypeSelector",
|
|
24
25
|
[CLASS_SELECTOR]: "ClassSelector",
|
|
@@ -94,6 +95,9 @@ class CSSNode {
|
|
|
94
95
|
*/
|
|
95
96
|
get value() {
|
|
96
97
|
let { type, text } = this;
|
|
98
|
+
if (type === DECLARATION && this.first_child) {
|
|
99
|
+
return this.first_child;
|
|
100
|
+
}
|
|
97
101
|
if (type === DIMENSION) {
|
|
98
102
|
return parse_dimension(text).value;
|
|
99
103
|
}
|
|
@@ -238,17 +242,6 @@ class CSSNode {
|
|
|
238
242
|
}
|
|
239
243
|
return true;
|
|
240
244
|
}
|
|
241
|
-
// --- Value Node Access (for declarations) ---
|
|
242
|
-
/** Get array of parsed value nodes (for declarations only) */
|
|
243
|
-
get values() {
|
|
244
|
-
let result = [];
|
|
245
|
-
let child = this.first_child;
|
|
246
|
-
while (child) {
|
|
247
|
-
result.push(child);
|
|
248
|
-
child = child.next_sibling;
|
|
249
|
-
}
|
|
250
|
-
return result;
|
|
251
|
-
}
|
|
252
245
|
/** Get start line number */
|
|
253
246
|
get line() {
|
|
254
247
|
return this.arena.get_start_line(this.index);
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,6 @@ export { tokenize } from './tokenize.js';
|
|
|
7
7
|
export { BREAK, SKIP, traverse, walk } from './walk.js';
|
|
8
8
|
export { is_custom, is_vendor_prefixed, str_equals, str_index_of, str_starts_with } from './string-utils.js';
|
|
9
9
|
export { CSSNode, TYPE_NAMES } from './css-node.js';
|
|
10
|
-
export { ATTRIBUTE_SELECTOR, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, ATTR_FLAG_NONE, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_NONE, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, AT_RULE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, DECLARATION, DIMENSION, FEATURE_RANGE, FLAG_IMPORTANT, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, 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, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_QUERY, TYPE_SELECTOR, UNIVERSAL_SELECTOR, URL } from './arena.js';
|
|
10
|
+
export { ATTRIBUTE_SELECTOR, ATTR_FLAG_CASE_INSENSITIVE, ATTR_FLAG_CASE_SENSITIVE, ATTR_FLAG_NONE, ATTR_OPERATOR_CARET_EQUAL, ATTR_OPERATOR_DOLLAR_EQUAL, ATTR_OPERATOR_EQUAL, ATTR_OPERATOR_NONE, ATTR_OPERATOR_PIPE_EQUAL, ATTR_OPERATOR_STAR_EQUAL, ATTR_OPERATOR_TILDE_EQUAL, AT_RULE, BLOCK, CLASS_SELECTOR, COMBINATOR, COMMENT, CONTAINER_QUERY, DECLARATION, DIMENSION, FEATURE_RANGE, FLAG_IMPORTANT, FUNCTION, HASH, IDENTIFIER, ID_SELECTOR, 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, SELECTOR, SELECTOR_LIST, STRING, STYLESHEET, STYLE_RULE, SUPPORTS_QUERY, TYPE_SELECTOR, UNIVERSAL_SELECTOR, URL, VALUE } from './arena.js';
|
|
11
11
|
export { NODE_TYPES } from './constants.js';
|
|
12
12
|
export { 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_URL, TOKEN_WHITESPACE } from './token-types.js';
|
|
@@ -124,12 +124,16 @@ class DeclarationParser {
|
|
|
124
124
|
this.arena.set_value_start_delta(declaration, trimmed[0] - prop_start);
|
|
125
125
|
this.arena.set_value_length(declaration, trimmed[1] - trimmed[0]);
|
|
126
126
|
if (this.value_parser) {
|
|
127
|
-
let
|
|
128
|
-
this.arena.append_children(declaration,
|
|
127
|
+
let valueNode = this.value_parser.parse_value(value_start, trimmed[1], value_start_line, value_start_column);
|
|
128
|
+
this.arena.append_children(declaration, [valueNode]);
|
|
129
129
|
}
|
|
130
130
|
} else {
|
|
131
131
|
this.arena.set_value_start_delta(declaration, value_start - prop_start);
|
|
132
132
|
this.arena.set_value_length(declaration, 0);
|
|
133
|
+
if (this.value_parser) {
|
|
134
|
+
let valueNode = this.value_parser.parse_value(value_start, value_start, value_start_line, value_start_column);
|
|
135
|
+
this.arena.append_children(declaration, [valueNode]);
|
|
136
|
+
}
|
|
133
137
|
}
|
|
134
138
|
if (has_important) {
|
|
135
139
|
this.arena.set_flag(declaration, FLAG_IMPORTANT);
|
package/dist/parse-value.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CSSNode } from './css-node';
|
|
2
2
|
/**
|
|
3
|
-
* Parse a CSS declaration value string and return
|
|
3
|
+
* Parse a CSS declaration value string and return a VALUE node
|
|
4
4
|
* @param value_string - The CSS value to parse (e.g., "1px solid red")
|
|
5
|
-
* @returns
|
|
5
|
+
* @returns A CSSNode VALUE wrapper containing the parsed value tokens as children
|
|
6
6
|
*/
|
|
7
|
-
export declare function parse_value(value_string: string): CSSNode
|
|
7
|
+
export declare function parse_value(value_string: string): CSSNode;
|
package/dist/parse-value.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Lexer } from './tokenize.js';
|
|
2
|
-
import { CSSDataArena, OPERATOR, HASH, STRING, DIMENSION, NUMBER, IDENTIFIER, URL, FUNCTION, PARENTHESIS } from './arena.js';
|
|
2
|
+
import { CSSDataArena, VALUE, OPERATOR, HASH, STRING, DIMENSION, NUMBER, IDENTIFIER, URL, FUNCTION, PARENTHESIS } from './arena.js';
|
|
3
3
|
import { TOKEN_EOF, TOKEN_LEFT_PAREN, TOKEN_COMMA, TOKEN_DELIM, TOKEN_FUNCTION, TOKEN_HASH, TOKEN_STRING, TOKEN_DIMENSION, TOKEN_PERCENTAGE, TOKEN_NUMBER, TOKEN_IDENT, TOKEN_RIGHT_PAREN } from './token-types.js';
|
|
4
4
|
import { is_whitespace, CHAR_PLUS, CHAR_MINUS_HYPHEN, CHAR_ASTERISK, CHAR_FORWARD_SLASH, str_equals } from './string-utils.js';
|
|
5
5
|
import { CSSNode } from './css-node.js';
|
|
@@ -15,14 +15,24 @@ class ValueParser {
|
|
|
15
15
|
this.lexer = new Lexer(source, false);
|
|
16
16
|
this.value_end = 0;
|
|
17
17
|
}
|
|
18
|
-
// Parse a declaration value range into
|
|
19
|
-
// Returns
|
|
18
|
+
// Parse a declaration value range into a VALUE wrapper node
|
|
19
|
+
// Returns single VALUE node index
|
|
20
20
|
parse_value(start, end, start_line, start_column) {
|
|
21
21
|
this.value_end = end;
|
|
22
22
|
this.lexer.pos = start;
|
|
23
23
|
this.lexer.line = start_line;
|
|
24
24
|
this.lexer.column = start_column;
|
|
25
|
-
|
|
25
|
+
let value_nodes = this.parse_value_tokens();
|
|
26
|
+
if (value_nodes.length === 0) {
|
|
27
|
+
let value_node2 = this.arena.create_node(VALUE, start, 0, start_line, start_column);
|
|
28
|
+
return value_node2;
|
|
29
|
+
}
|
|
30
|
+
let first_node_start = this.arena.get_start_offset(value_nodes[0]);
|
|
31
|
+
let last_node_index = value_nodes[value_nodes.length - 1];
|
|
32
|
+
let last_node_end = this.arena.get_start_offset(last_node_index) + this.arena.get_length(last_node_index);
|
|
33
|
+
let value_node = this.arena.create_node(VALUE, first_node_start, last_node_end - first_node_start, start_line, start_column);
|
|
34
|
+
this.arena.append_children(value_node, value_nodes);
|
|
35
|
+
return value_node;
|
|
26
36
|
}
|
|
27
37
|
// Core token parsing logic
|
|
28
38
|
parse_value_tokens() {
|
|
@@ -210,8 +220,8 @@ class ValueParser {
|
|
|
210
220
|
function parse_value(value_string) {
|
|
211
221
|
const arena = new CSSDataArena(CSSDataArena.capacity_for_source(value_string.length));
|
|
212
222
|
const value_parser = new ValueParser(arena, value_string);
|
|
213
|
-
const
|
|
214
|
-
return
|
|
223
|
+
const value_node_index = value_parser.parse_value(0, value_string.length, 1, 1);
|
|
224
|
+
return new CSSNode(arena, value_string, value_node_index);
|
|
215
225
|
}
|
|
216
226
|
|
|
217
227
|
export { ValueParser, parse_value };
|
package/package.json
CHANGED