-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser-types.ts
87 lines (74 loc) · 1.69 KB
/
parser-types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
export const enum NodeType {
FRAGMENT,
ELEMENT,
ATTRIBUTE,
TEXT,
ARGUMENT,
FUNCTION,
PLURAL,
SELECT,
SELECT_ORDINAL,
SELECT_CASE,
OCTOTHORPE,
}
export type Node =
| ContainerNode
| IArgumentNode
| IOctothorpeNode
| ITextNode;
export type ContainerNode =
| IFragmentNode
| IElementNode
| IAttributeNode
| ISelectNode
| ISelectCaseNode
| IFunctionNode;
export interface INode {
nodeType: NodeType;
parent: ContainerNode | null;
start: number;
end: number;
}
export interface IContainerNode extends INode {
children: Array<Node>;
}
export interface IFragmentNode extends IContainerNode {
nodeType: NodeType.FRAGMENT,
}
export interface IElementNode extends IContainerNode {
nodeType: NodeType.ELEMENT;
tagName: string;
attributes: Array<IAttributeNode>;
}
export interface IAttributeNode extends IContainerNode {
nodeType: NodeType.ATTRIBUTE;
parent: IElementNode | null;
name: string;
}
export interface ISelectNode extends IContainerNode {
nodeType: NodeType.PLURAL | NodeType.SELECT | NodeType.SELECT_ORDINAL;
argumentName: string;
children: Array<ISelectCaseNode>;
pluralOffset?: number;
}
export interface ISelectCaseNode extends IContainerNode {
nodeType: NodeType.SELECT_CASE;
parent: ISelectNode | null;
key: string;
}
export interface IFunctionNode extends IContainerNode {
nodeType: NodeType.FUNCTION;
name: string;
argumentName: string;
}
export interface IArgumentNode extends INode {
nodeType: NodeType.ARGUMENT;
name: string;
}
export interface IOctothorpeNode extends INode {
nodeType: NodeType.OCTOTHORPE;
}
export interface ITextNode extends INode {
nodeType: NodeType.TEXT;
value: string;
}