forked from loafle/openapi-generator-original
190 lines
5.5 KiB
JavaScript
190 lines
5.5 KiB
JavaScript
(function(root, factory) {
|
|
if (typeof define === 'function' && define.amd) {
|
|
// AMD. Register as an anonymous module.
|
|
define(['superagent'], factory);
|
|
} else if (typeof module === 'object' && module.exports) {
|
|
// CommonJS-like environments that support module.exports, like Node.
|
|
module.exports = factory(require('superagent'));
|
|
} else {
|
|
// Browser globals (root is window)
|
|
if (!root.SwaggerPetstore) {
|
|
root.SwaggerPetstore = {};
|
|
}
|
|
root.SwaggerPetstore.ApiClient = factory(root.superagent);
|
|
}
|
|
}(this, function(superagent) {
|
|
'use strict';
|
|
|
|
var ApiClient = function ApiClient() {
|
|
/**
|
|
* The base path to put in front of every API call's (relative) path.
|
|
*/
|
|
this.basePath = 'http://petstore.swagger.io/v2'.replace(/\/+$/, '');
|
|
|
|
/**
|
|
* The default HTTP headers to be included for all API calls.
|
|
*/
|
|
this.defaultHeaders = {};
|
|
};
|
|
|
|
ApiClient.prototype.paramToString = function paramToString(param) {
|
|
if (param == null) {
|
|
// return empty string for null and undefined
|
|
return '';
|
|
} else {
|
|
return param.toString();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Build full URL by appending the given path to base path and replacing
|
|
* path parameter placeholders with parameter values.
|
|
* NOTE: query parameters are not handled here.
|
|
*/
|
|
ApiClient.prototype.buildUrl = function buildUrl(path, pathParams) {
|
|
if (!path.match(/^\//)) {
|
|
path = '/' + path;
|
|
}
|
|
var url = this.basePath + path;
|
|
var _this = this;
|
|
url = url.replace(/\{([\w-]+)\}/g, function(fullMatch, key) {
|
|
var value;
|
|
if (pathParams.hasOwnProperty(key)) {
|
|
value = _this.paramToString(pathParams[key]);
|
|
} else {
|
|
value = fullMatch;
|
|
}
|
|
return encodeURIComponent(value);
|
|
});
|
|
return url;
|
|
};
|
|
|
|
/**
|
|
* Check if the given MIME is a JSON MIME.
|
|
* JSON MIME examples:
|
|
* application/json
|
|
* application/json; charset=UTF8
|
|
* APPLICATION/JSON
|
|
*/
|
|
ApiClient.prototype.isJsonMime = function isJsonMime(mime) {
|
|
return Boolean(mime != null && mime.match(/^application\/json(;.*)?$/i));
|
|
};
|
|
|
|
/**
|
|
* Choose a MIME from the given MIMEs with JSON preferred,
|
|
* i.e. return JSON if included, otherwise return the first one.
|
|
*/
|
|
ApiClient.prototype.jsonPreferredMime = function jsonPreferredMime(mimes) {
|
|
var len = mimes.length;
|
|
for (var i = 0; i < len; i++) {
|
|
if (this.isJsonMime(mimes[i])) {
|
|
return mimes[i];
|
|
}
|
|
}
|
|
return mimes[0];
|
|
};
|
|
|
|
/**
|
|
* Check if the given parameter value is like file content.
|
|
*/
|
|
ApiClient.prototype.isFileParam = function isFileParam(param) {
|
|
// fs.ReadStream in Node.js (but not in runtime like browserify)
|
|
if (typeof window === 'undefined' &&
|
|
typeof require === 'function' &&
|
|
require('fs') &&
|
|
param instanceof require('fs').ReadStream) {
|
|
return true;
|
|
}
|
|
// Buffer in Node.js
|
|
if (typeof Buffer === 'function' && param instanceof Buffer) {
|
|
return true;
|
|
}
|
|
// Blob in browser
|
|
if (typeof Blob === 'function' && param instanceof Blob) {
|
|
return true;
|
|
}
|
|
// File in browser (it seems File object is also instance of Blob, but keep this for safe)
|
|
if (typeof File === 'function' && param instanceof File) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Normalize parameters values:
|
|
* remove nils,
|
|
* keep files and arrays,
|
|
* format to string with `paramToString` for other cases.
|
|
*/
|
|
ApiClient.prototype.normalizeParams = function normalizeParams(params) {
|
|
var newParams = {};
|
|
for (var key in params) {
|
|
if (params.hasOwnProperty(key) && params[key] != null) {
|
|
var value = params[key];
|
|
if (this.isFileParam(value) || Array.isArray(value)) {
|
|
newParams[key] = value;
|
|
} else {
|
|
newParams[key] = this.paramToString(value);
|
|
}
|
|
}
|
|
}
|
|
return newParams;
|
|
};
|
|
|
|
ApiClient.prototype.callApi = function callApi(path, httpMethod, pathParams,
|
|
queryParams, headerParams, formParams, bodyParam, contentTypes, accepts,
|
|
callback) {
|
|
var url = this.buildUrl(path, pathParams);
|
|
var request = superagent(httpMethod, url);
|
|
|
|
// set query parameters
|
|
request.query(this.normalizeParams(queryParams));
|
|
|
|
// set header parameters
|
|
request.set(this.defaultHeaders).set(this.normalizeParams(headerParams));
|
|
|
|
var contentType = this.jsonPreferredMime(contentTypes);
|
|
if (contentType) {
|
|
request.type(contentType);
|
|
} else if (!request.header['Content-Type']) {
|
|
request.type('application/json');
|
|
}
|
|
|
|
if (contentType === 'application/x-www-form-urlencoded') {
|
|
request.send(this.normalizeParams(formParams));
|
|
} else if (contentType == 'multipart/form-data') {
|
|
var _formParams = this.normalizeParams(formParams);
|
|
for (var key in _formParams) {
|
|
if (_formParams.hasOwnProperty(key)) {
|
|
if (this.isFileParam(_formParams[key])) {
|
|
// file field
|
|
request.attach(key, _formParams[key]);
|
|
} else {
|
|
request.field(key, _formParams[key]);
|
|
}
|
|
}
|
|
}
|
|
} else if (bodyParam) {
|
|
request.send(bodyParam);
|
|
}
|
|
|
|
var accept = this.jsonPreferredMime(accepts);
|
|
if (accept) {
|
|
request.accept(accept);
|
|
}
|
|
|
|
request.end(function(error, response) {
|
|
if (callback) {
|
|
var data = response && response.body;
|
|
callback(error, data, response);
|
|
}
|
|
});
|
|
|
|
return request;
|
|
};
|
|
|
|
ApiClient.default = new ApiClient();
|
|
|
|
return ApiClient;
|
|
}));
|