-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
parameterBuilder.ts
153 lines (144 loc) · 4.49 KB
/
parameterBuilder.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* eslint-disable no-underscore-dangle */
import { OpenAPIV3 } from 'openapi-types';
import clone from '../utl';
export default class ParameterBuilder {
private readonly _parameter: OpenAPIV3.ParameterObject;
/**
* Starts building a path parameter object
*
* @param name The name of the parameter
* @returns ParameterBuilder instance for method chaining
*/
public static path(name: string): ParameterBuilder {
return new ParameterBuilder(name, 'path');
}
/**
* Starts building a query parameter object
*
* @param name The name of the parameter
* @returns ParameterBuilder instance for method chaining
*/
public static query(name: string): ParameterBuilder {
return new ParameterBuilder(name, 'query');
}
/**
* Starts building a header parameter object
*
* @param name The name of the parameter
* @returns ParameterBuilder instance for method chaining
*/
public static header(name: string): ParameterBuilder {
return new ParameterBuilder(name, 'header');
}
/**
* Starts building a cookie parameter object
*
* @param name The name of the parameter
* @returns ParameterBuilder instance for method chaining
*/
public static cookie(name: string): ParameterBuilder {
return new ParameterBuilder(name, 'cookie');
}
private constructor(name: string, _in: string) {
const parameter: OpenAPIV3.ParameterObject = { name, in: _in };
if (_in === 'path') {
parameter.required = true;
}
this._parameter = parameter;
}
/**
* Sets the required field, defaults to true
*
* @param {boolean} [required=true] Required flag
* @returns ParameterBuilder instance for method chaining
*/
public isRequired(required = true) {
this._parameter.required = required;
return this;
}
/**
* Sets the deprecated field, defaults to true
*
* @param {boolean} [deprecated=true] Deprecated flag
* @returns ParameterBuilder instance for method chaining
*/
public deprecated(deprecated = true) {
this._parameter.deprecated = deprecated;
return this;
}
/**
* Sets the parameter's schema to be a simple string type.
* Used to offer quick complete - does not require .build()
*
* @returns A complete OpenApiv3 parameter object
*/
public stringType() {
this._parameter.schema = { type: 'string' };
return clone(this._parameter);
}
/**
* Sets the parameter's schema to be a simple boolean type.
* Used to offer quick complete - does not require .build()
*
* @returns A complete OpenApiv3 parameter object
*/
public booleanType() {
this._parameter.schema = { type: 'boolean' };
return clone(this._parameter);
}
/**
* Sets the parameter's schema to be a simple integer type.
* Used to offer quick complete - does not require .build()
*
* @returns A complete OpenApiv3 parameter object
*/
public integerType() {
this._parameter.schema = { type: 'integer' };
return clone(this._parameter);
}
/**
* Sets the parameter's schema to be a simple number type.
* Used to offer quick complete - does not require .build()
*
* @returns A complete OpenApiv3 parameter object
*/
public numberType() {
this._parameter.schema = { type: 'number' };
return clone(this._parameter);
}
/**
* Sets the parameter's schema field
*
* @returns ParameterBuilder instance for method chaining
*/
public schema(schema: OpenAPIV3.SchemaObject) {
this._parameter.schema = schema;
return this;
}
/**
* Sets the parameter's schema field
*
* @returns ParameterBuilder instance for method chaining
*/
public example(example: any) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
this._parameter.example = example;
return this;
}
/**
* Creates a deep copy of the current state of the parameter object and returns it.
*
* @returns A deep copy of the built parameter object
*/
public build(): OpenAPIV3.ParameterObject {
return clone(this._parameter);
}
/**
* Shorthand for build() method.
*
* @returns A deep copy of the built parameter object
*/
public b(): OpenAPIV3.ParameterObject {
return this.build();
}
}