UNPKG

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