forked from muralco/mural-schema
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathast.ts
60 lines (50 loc) · 1 KB
/
ast.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
import { Key, ValidationFn } from './types';
interface BaseAst {
key: Key;
}
export interface ObjectPropertyAst extends BaseAst {
anyKey: boolean;
ast: Ast;
objectKey: string;
}
export interface ObjectAst extends BaseAst {
type: 'object';
extendsFrom: string[];
properties: ObjectPropertyAst[];
strict: boolean;
}
export interface UnionAst extends BaseAst {
type: 'union';
items: Ast[];
}
export interface ArrayAst extends BaseAst {
type: 'array';
item: Ast;
}
export interface ValueAst<T> extends BaseAst {
type: 'value';
name: string;
value: T;
}
export interface RegExpAst extends BaseAst {
type: 'regexp';
value: RegExp;
}
export interface FunctionAst extends BaseAst {
type: 'function';
name: string;
fn: ValidationFn;
}
export interface LiteralAst extends BaseAst {
type: 'literal';
value: string | number | boolean;
}
export type Ast =
| ArrayAst
| FunctionAst
| LiteralAst
| ObjectAst
| RegExpAst
| UnionAst
| ValueAst<null>
| ValueAst<undefined>;