-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathformat.ts
More file actions
202 lines (173 loc) · 3.28 KB
/
format.ts
File metadata and controls
202 lines (173 loc) · 3.28 KB
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/**
* This module exports types for representing Bot API methods and types
* in a structured format.
*
* @module
*/
import type { types } from './types.gen.ts'
/**
* Type defined in the API. It can either be an {@link ApiTypeObject object}
* or a {@link ApiTypeOneOf union}.
*/
export type ApiType
= | ApiTypeObject
| ApiTypeOneOf
/**
* Bot API type represented as an object with fields.
*/
export interface ApiTypeObject {
/**
* Name of the type.
*/
name: string
/**
* Description of the type.
*/
description: Description
/**
* Fields of the object representing this type.
*/
fields: Array<FieldOrParam>
oneOf?: never
}
/**
* Bot API type represented as a union of other types.
*/
export interface ApiTypeOneOf {
/**
* Name of the type.
*/
name: string
/**
* Description of the type.
*/
description: Description
/**
* Array of possible types this type can be.
*/
oneOf: Array<ValueTypeApiType>
fields?: never
}
/**
* Bot API method with parameters and return type.
*/
export interface ApiMethod {
/**
* Name of the method.
*/
name: string
/**
* Description of the method.
*/
description: Description
/**
* Parameters this method takes.
*/
parameters: Array<FieldOrParam>
/**
* Type of the value this method returns.
*/
returnType: ValueType
}
/**
* Field of a type or parameter of a method.
*/
export interface FieldOrParam {
/**
* Name of the field/parameter.
*/
name: string
/**
* Type of the value this field/parameter can be assigned.
*/
type: ValueType
/**
* Whether this is a required field/parameter.
*/
required: boolean
/**
* Description of the field/parameter.
*/
description: Description
}
/**
* Description of a type/method/field/parameter.
*/
export interface Description {
markdown: string
}
/**
* Type of a value.
*/
export type ValueType
= | ValueTypeString
| ValueTypeBoolean
| ValueTypeInteger32
| ValueTypeInteger53
| ValueTypeFloat
| ValueTypeInputFile
| ValueTypeApiType
| ValueTypeArray
| ValueTypeUnion
/**
* `String` value type.
*/
export interface ValueTypeString {
type: 'str'
literal?: string
}
/**
* `Boolean` value type.
*/
export interface ValueTypeBoolean {
type: 'bool'
literal?: boolean
}
/**
* `Integer` value type, which fits in a 32-bit integer.
*/
export interface ValueTypeInteger32 {
type: 'int32'
literal?: number
}
/**
* `Integer` value type, which may have more than 32 significant bits, but has
* at most 52 significant bits, so a 64-bit integer or double-precision float
* type are safe for storing values of this type.
*/
export interface ValueTypeInteger53 {
type: 'int53'
}
/**
* `Float` value type.
*/
export interface ValueTypeFloat {
type: 'float'
}
/**
* [`InputFile`](https://core.telegram.org/bots/api#inputfile) value type.
*/
export interface ValueTypeInputFile {
type: 'input-file'
}
/**
* Any {@link ApiType} value type.
*/
export interface ValueTypeApiType {
type: 'api-type'
name: keyof typeof types
}
/**
* Array of any value type.
*/
export interface ValueTypeArray {
type: 'array'
of: ValueType
}
/**
* Union of any value types.
*/
export interface ValueTypeUnion {
type: 'union'
types: Array<ValueType>
}