UNPKG

3.3 kBTypeScriptView Raw
1export interface BaseNode {
2 name?: string | undefined;
3 before?: string | undefined;
4 after?: string | undefined;
5}
6
7/** Any node returned by `parse`. Useful for `walk` implementations. */
8export type AnySelectorNode = SelectorsNode | SelectorNode | SelectorNodeType;
9
10export interface SelectorsNode extends BaseNode {
11 type: "selectors";
12 nodes: SelectorNode[];
13}
14
15export interface SelectorNode extends BaseNode {
16 type: "selector";
17 nodes: SelectorNodeType[];
18}
19
20/** Any node that can be child of `SelectorNode`. */
21export type SelectorNodeType =
22 | ElementNode
23 | ClassNode
24 | SpacingNode
25 | IdNode
26 | PseudoClassNode
27 | NestedPseudoClassNode
28 | UniversalNode
29 | AttributeNode
30 | CommentNode
31 | OperatorNode
32 | InvalidNode
33 | PseudoElementNode;
34
35export interface ElementNode extends BaseNode {
36 type: "element";
37 name: string;
38 namespace?: string | undefined;
39}
40
41export interface PseudoElementNode extends BaseNode {
42 type: "pseudo-element";
43 name: string;
44}
45
46export interface ClassNode extends BaseNode {
47 type: "class";
48 name: string;
49}
50
51export interface PseudoClassNode extends BaseNode {
52 type: "pseudo-class";
53 name: string;
54 content?: string | undefined;
55}
56
57export interface AttributeNode extends BaseNode {
58 type: "attribute";
59 content: string;
60}
61
62export interface CommentNode extends BaseNode {
63 type: "comment";
64 content: string;
65}
66
67export interface NestedPseudoClassNode extends BaseNode {
68 type: "nested-pseudo-class";
69 name: string;
70 nodes: SelectorNode[];
71}
72
73export interface IdNode extends BaseNode {
74 type: "id";
75 name: string;
76}
77
78export interface SpacingNode extends BaseNode {
79 type: "spacing";
80 value: string;
81}
82
83export interface UniversalNode extends BaseNode {
84 type: "universal";
85 namespace?: string | undefined;
86}
87
88export interface OperatorNode extends BaseNode {
89 type: "operator";
90 operator: string;
91}
92
93export interface InvalidNode extends BaseNode {
94 type: "invalid";
95 value: string;
96}
97
98/** Any node returned by `parseValues`. Useful for `walk` implementations. */
99export type AnyValueNode = ValuesNode | ValueNode | ValueNodeType;
100
101export interface ValuesNode extends BaseNode {
102 type: "values";
103 nodes: ValueNode[];
104}
105
106export interface ValueNode extends BaseNode {
107 type: "value";
108 nodes: ValueNodeType[];
109}
110
111/** Any node that can be child of `ValueNode`. */
112export type ValueNodeType = ItemNode | NestedItemNode | StringNode | CommentNode | UrlNode | InvalidNode;
113
114export interface ItemNode extends BaseNode {
115 type: "item";
116 name: string;
117}
118
119export interface NestedItemNode extends BaseNode {
120 type: "nested-item";
121 name: string;
122 nodes: ValueNode[];
123}
124
125export interface UrlNode extends BaseNode {
126 type: "url";
127 url: string;
128 stringType?: string | undefined;
129 innerSpacingBefore?: string | undefined;
130 innerSpacingAfter?: string | undefined;
131}
132
133export interface StringNode extends BaseNode {
134 type: "string";
135 value: string;
136 stringType: string;
137}
138
139export function parse(selectors: string): SelectorsNode;
140export function stringify(node: SelectorsNode): string;
141export function parseValues(values: string): ValuesNode;
142export function stringifyValues(node: ValuesNode): string;