-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema.d.ts
134 lines (110 loc) · 2.47 KB
/
schema.d.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
type Type_ =
'string' |
'number' |
'integer' |
'positiveNumber' |
'positiveInteger' |
'nonNegativeNumber' |
'nonNegativeInteger' |
'boolean' |
'date' |
'email' |
'url' |
'relativeUrl' |
'any';
// Developers can define their own "custom" types
// so the list of property types is not enumerated here.
type CustomType = string;
type Type = Type_ | null | CustomType;
type WhenRules = {
$exists: string;
}
type WhenValue = string | number | boolean | WhenRules;
type When = {
[property: string]: WhenValue;
}
type ConditionalRequired = {
when: When;
}
type Required = boolean | ConditionalRequired;
type Nullable = boolean;
type Value = {
type: Type;
description: string;
required?: Required;
nullable?: Nullable;
}
type ValueWithSchemaReference = {
schema: string;
description: string;
required?: Required;
}
type Of<Schema> = Type | (Schema & {
// `description` is optional for `arrayOf` / `objectOf` type definitions:
// if not present, it's inherited from the `arrayOf` / `objectOf` `description`.
description?: string;
})
type ArrayOf<Schema> = {
arrayOf: Of<Schema>;
description: string;
required?: Required;
}
type ObjectOf<Schema> = {
objectOf: Of<Schema>;
description: string;
required?: Required;
}
type OneOfTypeIsNonObject =
'string' |
'number' |
'boolean' |
'date' |
'string[]' |
'number[]' |
'boolean[]' |
'date[]' |
'any[]';
type OneOfTypeIsObject =
'object' |
'object[]';
type OneOfTypeNonObject = {
is: OneOfTypeIsNonObject;
}
type OneOfTypeObject = {
is: OneOfTypeIsObject;
when?: When;
}
type OneOfTypeVariation<Schema> = (OneOfTypeNonObject | OneOfTypeObject) & Schema & {
// `description` is optional for `oneOfType` type variations:
// if not present, it's inherited from the `oneOfType` `description`.
description?: string;
}
type OneOfType<Schema> = {
oneOfType: OneOfTypeVariation<Schema>[];
description: string;
required?: Required;
}
// `oneOf` only supports "basic" values (no arrays, no objects, etc).
type OneOfValueType = string | number | boolean;
type OneOf = {
oneOf: OneOfValueType[];
description: string;
required?: Required;
}
type Object<Schema> = {
schema: string | Schema;
description: string;
required?: Required;
}
type ObjectShape<Schema> = {
[property: string]: Schema;
}
export type Schema =
Value |
ValueWithSchemaReference |
ArrayOf<Schema> |
ObjectOf<Schema> |
OneOfType<Schema> |
OneOf |
Object<Schema> |
ObjectShape<Schema>;