1export type Expr =
2 | ArrayIndex
3 | Identifier
4 | NumberLiteral
5 | OperatorExpr
6 | NameRef
7 | PropRef
8 | ValueRef;
9//
10
11export interface NameRef<Name extends string = string> {
12 kind: "name-ref";
13 name: Name;
14}
15export interface ValueRef<Name extends string = string> {
16 kind: "value-ref";
17 name: Name;
18}
19export interface Identifier<I extends string = string> {
20 kind: "identifier";
21 name: I;
22}
23
24export interface NumberLiteral<N extends string = string> {
25 kind: "index";
26 number: N;
27}
28export interface PropRef<Ex extends Expr = any, Id extends Identifier = any> {
29 kind: "prop-ref";
30 expr: Ex;
31 name: Id;
32}
33export interface ArrayIndex<
34 List extends Expr = any,
35 Number extends NumberLiteral | ValueRef = NumberLiteral | ValueRef,
36> {
37 kind: "array-index";
38 list: List;
39 number: Number;
40}
41
42export type Operator = "and" | "or" | "=" | "<" | "<=" | ">=" | ">";
43export interface OperatorExpr<
44 Left extends Expr = any,
45 Op extends Operator = Operator,
46 Right extends Expr = any,
47> {
48 kind: "op";
49 left: Left;
50 op: Op;
51 right: Right;
52}
53
54export type LowercaseLetter =
55 | "a"
56 | "b"
57 | "c"
58 | "d"
59 | "e"
60 | "f"
61 | "g"
62 | "h"
63 | "i"
64 | "j"
65 | "k"
66 | "l"
67 | "m"
68 | "n"
69 | "o"
70 | "p"
71 | "q"
72 | "r"
73 | "s"
74 | "t"
75 | "u"
76 | "v"
77 | "w"
78 | "x"
79 | "y"
80 | "z";
81
82export type UppercaseLetter = Uppercase<LowercaseLetter>;
83
84export type Letter = LowercaseLetter | UppercaseLetter;
85
86export type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
87
88export type SpecialCharacter = "_";
89
90export type Word = Digit | Letter | SpecialCharacter;