| 1 | export type Expr = |
| 2 | | ArrayIndex |
| 3 | | Identifier |
| 4 | | NumberLiteral |
| 5 | | OperatorExpr |
| 6 | | NameRef |
| 7 | | PropRef |
| 8 | | ValueRef; |
| 9 | // |
| 10 | |
| 11 | export interface NameRef<Name extends string = string> { |
| 12 | kind: "name-ref"; |
| 13 | name: Name; |
| 14 | } |
| 15 | export interface ValueRef<Name extends string = string> { |
| 16 | kind: "value-ref"; |
| 17 | name: Name; |
| 18 | } |
| 19 | export interface Identifier<I extends string = string> { |
| 20 | kind: "identifier"; |
| 21 | name: I; |
| 22 | } |
| 23 | |
| 24 | export interface NumberLiteral<N extends string = string> { |
| 25 | kind: "index"; |
| 26 | number: N; |
| 27 | } |
| 28 | export interface PropRef<Ex extends Expr = any, Id extends Identifier = any> { |
| 29 | kind: "prop-ref"; |
| 30 | expr: Ex; |
| 31 | name: Id; |
| 32 | } |
| 33 | export 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 | |
| 42 | export type Operator = "and" | "or" | "=" | "<" | "<=" | ">=" | ">"; |
| 43 | export 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 | |
| 54 | export 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 | |
| 82 | export type UppercaseLetter = Uppercase<LowercaseLetter>; |
| 83 | |
| 84 | export type Letter = LowercaseLetter | UppercaseLetter; |
| 85 | |
| 86 | export type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; |
| 87 | |
| 88 | export type SpecialCharacter = "_"; |
| 89 | |
| 90 | export type Word = Digit | Letter | SpecialCharacter; |