-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathapi-all.mustache
176 lines (151 loc) · 4.93 KB
/
api-all.mustache
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
{{#apiInfo}}
{{^useCustomTemplateCode}}
{{#apis}}
{{#operations}}
export * from './{{ classFilename }}';
import { {{ classname }} } from './{{ classFilename }}';
{{/operations}}
{{#withInterfaces}}
export * from './{{ classFilename }}Interface'
{{/withInterfaces}}
{{/apis}}
{{/useCustomTemplateCode}}
import * as http from 'http';
{{#useCustomTemplateCode}}
import { ErrorResponse } from "../model";
{{/useCustomTemplateCode}}
export class HttpError extends Error {
{{^useCustomTemplateCode}}
constructor (public response: http.IncomingMessage, public body: any, public statusCode?: number) {
{{/useCustomTemplateCode}}
{{#useCustomTemplateCode}}
constructor (public response: AxiosResponse, public body: ErrorResponse, public statusCode?: number) {
{{/useCustomTemplateCode}}
super('HTTP request failed');
this.name = 'HttpError';
}
}
{{^useCustomTemplateCode}}
export { RequestFile } from '../model/models';
{{/useCustomTemplateCode}}
{{#useCustomTemplateCode}}
export { RequestFile } from '../model';
{{/useCustomTemplateCode}}
{{^useCustomTemplateCode}}
export const APIS = [{{#apis}}{{#operations}}{{ classname }}{{/operations}}{{^-last}}, {{/-last}}{{/apis}}];
{{/useCustomTemplateCode}}
{{/apiInfo}}
{{#useCustomTemplateCode}}
import { AxiosResponse } from "axios";
import { AttributeTypeMap, ObjectSerializer, RequestDetailedFile } from "../model";
import formData from "form-data";
import Qs from "qs";
export interface optionsI { headers: { [name: string]: string } }
export interface returnTypeT<T> { response: AxiosResponse, body: T }
export interface returnTypeI { response: AxiosResponse, body?: any }
export const queryParamsSerializer = (params) => {
return Qs.stringify(params, { arrayFormat: 'brackets' })
}
export const USER_AGENT = "OpenAPI-Generator/{{{npmVersion}}}/node";
/**
* Generates an object containing form data.
*
* Data is converted to JSON and added to data.body
*
* @param obj
* @param typemap
*/
export const generateFormData = (
obj: any,
typemap: AttributeTypeMap
): { localVarUseFormData: boolean; data: object } => {
const data = {};
let localVarUseFormData = false;
if (typeof obj !== "object" || Array.isArray(obj) || obj === null) {
return {
localVarUseFormData,
data,
};
}
typemap.forEach((paramInfo) => {
if (obj[paramInfo.name] === undefined) {
return;
}
/**
* Everything except binary (file) data can be serialized to JSON.
* If file data we want to keep as-is.
*/
if (paramInfo.type.indexOf("RequestFile") !== -1) {
localVarUseFormData = true;
/**
* Some parameters can be arrays of files
*/
if (Array.isArray(obj[paramInfo.name])) {
obj[paramInfo.name].forEach((childObject, i) => {
/**
* We want to conform to form data key naming. For example we can't
* actually send a true array of data in our request:
* form[file][0] = ...
* form[file][1] = ...
*
* We need to change the key name to match formdata:
*
* form["file[0]"] = ...
* form["file[1]"] = ...
*/
const key = `${paramInfo.baseName}[${i}]`;
data[key] = childObject;
});
return;
}
/**
* File is already a type of `RequestFile`
* @see RequestFile
*/
data[paramInfo.baseName] = obj[paramInfo.name];
return;
}
// Convert boolean value into string when using FormData, to prevent "data should be a string, Buffer or Uint8Array" error
if (paramInfo.type.indexOf("boolean") !== -1) {
data[paramInfo.baseName] = JSON.stringify(obj[paramInfo.name]);
return;
}
/**
* Everything else that is not binary data (file uploads) can be
* serialized to JSON and sent over. This helps reduce complexity
* when trying to keep formdata key names and serializing each nested
* object individually.
*/
const serialized = ObjectSerializer.serialize(
obj[paramInfo.name],
paramInfo.type
);
data[paramInfo.baseName] = shouldJsonify(serialized)
? JSON.stringify(serialized)
: serialized;
});
return {
localVarUseFormData,
data,
};
};
export const toFormData = (obj: object): formData => {
const form = new formData();
Object.keys(obj).forEach((key) => {
if (isBufferDetailedFile(obj[key])) {
form.append(key, obj[key].value, obj[key].options);
return;
}
form.append(key, obj[key]);
});
return form;
};
function isBufferDetailedFile(obj: any): obj is RequestDetailedFile {
return (<RequestDetailedFile>obj).value !== undefined
&& Buffer.isBuffer(obj.value)
&& (<RequestDetailedFile>obj).options !== undefined
&& (<RequestDetailedFile>obj).options?.filename !== undefined
&& (<RequestDetailedFile>obj).options?.contentType !== undefined
}
const shouldJsonify = (val: any): boolean => val === Object(val);
{{/useCustomTemplateCode}}