Add multiple servers support to JS API client (#1974)

* add multiple servers support to JS ES6

* multiple server support in js es5

* using exports in es5

* fix index check

* add oas v3 js es6 client to travis
This commit is contained in:
William Cheng
2019-01-29 11:19:21 +08:00
committed by GitHub
parent 046db19a85
commit 83d34bd8d7
222 changed files with 24380 additions and 6 deletions

View File

@@ -101,6 +101,11 @@
* Allow user to override superagent agent
*/
this.requestAgent = null;
/*
* Allow user to add superagent plugins
*/
this.plugins = null;
};
/**
@@ -378,6 +383,14 @@
var url = this.buildUrl(path, pathParams);
var request = superagent(httpMethod, url);
if (this.plugins !== null) {
for (var index in this.plugins) {
if (this.plugins.hasOwnProperty(index)) {
request.use(this.plugins[index])
}
}
}
// apply authentications
this.applyAuthToRequest(request, authNames);
@@ -560,6 +573,46 @@
}
};
/**
* Gets an array of host settings
* @returns An array of host settings
*/
exports.hostSettings = function() {
return [
{
'url': "http://petstore.swagger.io:80/v2",
'description': "No description provided",
}
];
};
exports.getBasePathFromSettings = function(index, variables={}) {
var servers = this.hostSettings();
// check array index out of bound
if (index < 0 || index >= servers.length) {
throw new Error("Invalid index " + index + " when selecting the host settings. Must be less than " + servers.length);
}
var server = servers[index];
var url = server['url'];
// go through variable and assign a value
for (var variable_name in server['variables']) {
if (variable_name in variables) {
if (server['variables'][variable_name]['enum_values'].includes(variables[variable_name])) {
url = url.replace("{" + variable_name + "}", variables[variable_name]);
} else {
throw new Error("The variable `" + variable_name + "` in the host URL has invalid value " + variables[variable_name] + ". Must be " + server['variables'][variable_name]['enum_values'] + ".");
}
} else {
// use default value
url = url.replace("{" + variable_name + "}", server['variables'][variable_name]['default_value'])
}
}
return url;
};
/**
* Constructs a new map or array model from REST data.
* @param data {Object|Array} The REST data.

View File

@@ -16,12 +16,12 @@
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['ApiClient', 'model/AdditionalPropertiesClass', 'model/Animal', 'model/ApiResponse', 'model/ArrayOfArrayOfNumberOnly', 'model/ArrayOfNumberOnly', 'model/ArrayTest', 'model/Capitalization', 'model/Cat', 'model/Category', 'model/ClassModel', 'model/Client', 'model/Dog', 'model/EnumArrays', 'model/EnumClass', 'model/EnumTest', 'model/File', 'model/FileSchemaTestClass', 'model/FormatTest', 'model/HasOnlyReadOnly', 'model/List', 'model/MapTest', 'model/MixedPropertiesAndAdditionalPropertiesClass', 'model/Model200Response', 'model/ModelReturn', 'model/Name', 'model/NumberOnly', 'model/Order', 'model/OuterComposite', 'model/OuterEnum', 'model/Pet', 'model/ReadOnlyFirst', 'model/SpecialModelName', 'model/Tag', 'model/User', 'api/AnotherFakeApi', 'api/FakeApi', 'api/FakeClassnameTags123Api', 'api/PetApi', 'api/StoreApi', 'api/UserApi'], factory);
define(['ApiClient', 'model/AdditionalPropertiesClass', 'model/Animal', 'model/ApiResponse', 'model/ArrayOfArrayOfNumberOnly', 'model/ArrayOfNumberOnly', 'model/ArrayTest', 'model/Capitalization', 'model/Cat', 'model/Category', 'model/ClassModel', 'model/Client', 'model/Dog', 'model/EnumArrays', 'model/EnumClass', 'model/EnumTest', 'model/File', 'model/FileSchemaTestClass', 'model/FormatTest', 'model/HasOnlyReadOnly', 'model/List', 'model/MapTest', 'model/MixedPropertiesAndAdditionalPropertiesClass', 'model/Model200Response', 'model/ModelReturn', 'model/Name', 'model/NumberOnly', 'model/Order', 'model/OuterComposite', 'model/OuterEnum', 'model/Pet', 'model/ReadOnlyFirst', 'model/SpecialModelName', 'model/Tag', 'model/TypeHolderDefault', 'model/TypeHolderExample', 'model/User', 'api/AnotherFakeApi', 'api/FakeApi', 'api/FakeClassnameTags123Api', 'api/PetApi', 'api/StoreApi', 'api/UserApi'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports, like Node.
module.exports = factory(require('./ApiClient'), require('./model/AdditionalPropertiesClass'), require('./model/Animal'), require('./model/ApiResponse'), require('./model/ArrayOfArrayOfNumberOnly'), require('./model/ArrayOfNumberOnly'), require('./model/ArrayTest'), require('./model/Capitalization'), require('./model/Cat'), require('./model/Category'), require('./model/ClassModel'), require('./model/Client'), require('./model/Dog'), require('./model/EnumArrays'), require('./model/EnumClass'), require('./model/EnumTest'), require('./model/File'), require('./model/FileSchemaTestClass'), require('./model/FormatTest'), require('./model/HasOnlyReadOnly'), require('./model/List'), require('./model/MapTest'), require('./model/MixedPropertiesAndAdditionalPropertiesClass'), require('./model/Model200Response'), require('./model/ModelReturn'), require('./model/Name'), require('./model/NumberOnly'), require('./model/Order'), require('./model/OuterComposite'), require('./model/OuterEnum'), require('./model/Pet'), require('./model/ReadOnlyFirst'), require('./model/SpecialModelName'), require('./model/Tag'), require('./model/User'), require('./api/AnotherFakeApi'), require('./api/FakeApi'), require('./api/FakeClassnameTags123Api'), require('./api/PetApi'), require('./api/StoreApi'), require('./api/UserApi'));
module.exports = factory(require('./ApiClient'), require('./model/AdditionalPropertiesClass'), require('./model/Animal'), require('./model/ApiResponse'), require('./model/ArrayOfArrayOfNumberOnly'), require('./model/ArrayOfNumberOnly'), require('./model/ArrayTest'), require('./model/Capitalization'), require('./model/Cat'), require('./model/Category'), require('./model/ClassModel'), require('./model/Client'), require('./model/Dog'), require('./model/EnumArrays'), require('./model/EnumClass'), require('./model/EnumTest'), require('./model/File'), require('./model/FileSchemaTestClass'), require('./model/FormatTest'), require('./model/HasOnlyReadOnly'), require('./model/List'), require('./model/MapTest'), require('./model/MixedPropertiesAndAdditionalPropertiesClass'), require('./model/Model200Response'), require('./model/ModelReturn'), require('./model/Name'), require('./model/NumberOnly'), require('./model/Order'), require('./model/OuterComposite'), require('./model/OuterEnum'), require('./model/Pet'), require('./model/ReadOnlyFirst'), require('./model/SpecialModelName'), require('./model/Tag'), require('./model/TypeHolderDefault'), require('./model/TypeHolderExample'), require('./model/User'), require('./api/AnotherFakeApi'), require('./api/FakeApi'), require('./api/FakeClassnameTags123Api'), require('./api/PetApi'), require('./api/StoreApi'), require('./api/UserApi'));
}
}(function(ApiClient, AdditionalPropertiesClass, Animal, ApiResponse, ArrayOfArrayOfNumberOnly, ArrayOfNumberOnly, ArrayTest, Capitalization, Cat, Category, ClassModel, Client, Dog, EnumArrays, EnumClass, EnumTest, File, FileSchemaTestClass, FormatTest, HasOnlyReadOnly, List, MapTest, MixedPropertiesAndAdditionalPropertiesClass, Model200Response, ModelReturn, Name, NumberOnly, Order, OuterComposite, OuterEnum, Pet, ReadOnlyFirst, SpecialModelName, Tag, User, AnotherFakeApi, FakeApi, FakeClassnameTags123Api, PetApi, StoreApi, UserApi) {
}(function(ApiClient, AdditionalPropertiesClass, Animal, ApiResponse, ArrayOfArrayOfNumberOnly, ArrayOfNumberOnly, ArrayTest, Capitalization, Cat, Category, ClassModel, Client, Dog, EnumArrays, EnumClass, EnumTest, File, FileSchemaTestClass, FormatTest, HasOnlyReadOnly, List, MapTest, MixedPropertiesAndAdditionalPropertiesClass, Model200Response, ModelReturn, Name, NumberOnly, Order, OuterComposite, OuterEnum, Pet, ReadOnlyFirst, SpecialModelName, Tag, TypeHolderDefault, TypeHolderExample, User, AnotherFakeApi, FakeApi, FakeClassnameTags123Api, PetApi, StoreApi, UserApi) {
'use strict';
/**
@@ -226,6 +226,16 @@
* @property {module:model/Tag}
*/
Tag: Tag,
/**
* The TypeHolderDefault model constructor.
* @property {module:model/TypeHolderDefault}
*/
TypeHolderDefault: TypeHolderDefault,
/**
* The TypeHolderExample model constructor.
* @property {module:model/TypeHolderExample}
*/
TypeHolderExample: TypeHolderExample,
/**
* The User model constructor.
* @property {module:model/User}

View File

@@ -0,0 +1,118 @@
/**
* OpenAPI Petstore
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
*
* OpenAPI spec version: 1.0.0
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
*
* OpenAPI Generator version: 4.0.0-SNAPSHOT
*
* Do not edit the class manually.
*
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['ApiClient'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports, like Node.
module.exports = factory(require('../ApiClient'));
} else {
// Browser globals (root is window)
if (!root.OpenApiPetstore) {
root.OpenApiPetstore = {};
}
root.OpenApiPetstore.TypeHolderDefault = factory(root.OpenApiPetstore.ApiClient);
}
}(this, function(ApiClient) {
'use strict';
/**
* The TypeHolderDefault model module.
* @module model/TypeHolderDefault
* @version 1.0.0
*/
/**
* Constructs a new <code>TypeHolderDefault</code>.
* @alias module:model/TypeHolderDefault
* @class
* @param stringItem {String}
* @param numberItem {Number}
* @param integerItem {Number}
* @param boolItem {Boolean}
* @param arrayItem {Array.<Number>}
*/
var exports = function(stringItem, numberItem, integerItem, boolItem, arrayItem) {
var _this = this;
_this['string_item'] = stringItem;
_this['number_item'] = numberItem;
_this['integer_item'] = integerItem;
_this['bool_item'] = boolItem;
_this['array_item'] = arrayItem;
};
/**
* Constructs a <code>TypeHolderDefault</code> from a plain JavaScript object, optionally creating a new instance.
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
* @param {Object} data The plain JavaScript object bearing properties of interest.
* @param {module:model/TypeHolderDefault} obj Optional instance to populate.
* @return {module:model/TypeHolderDefault} The populated <code>TypeHolderDefault</code> instance.
*/
exports.constructFromObject = function(data, obj) {
if (data) {
obj = obj || new exports();
if (data.hasOwnProperty('string_item')) {
obj['string_item'] = ApiClient.convertToType(data['string_item'], 'String');
}
if (data.hasOwnProperty('number_item')) {
obj['number_item'] = ApiClient.convertToType(data['number_item'], 'Number');
}
if (data.hasOwnProperty('integer_item')) {
obj['integer_item'] = ApiClient.convertToType(data['integer_item'], 'Number');
}
if (data.hasOwnProperty('bool_item')) {
obj['bool_item'] = ApiClient.convertToType(data['bool_item'], 'Boolean');
}
if (data.hasOwnProperty('array_item')) {
obj['array_item'] = ApiClient.convertToType(data['array_item'], ['Number']);
}
}
return obj;
}
/**
* @member {String} string_item
* @default 'what'
*/
exports.prototype['string_item'] = 'what';
/**
* @member {Number} number_item
*/
exports.prototype['number_item'] = undefined;
/**
* @member {Number} integer_item
*/
exports.prototype['integer_item'] = undefined;
/**
* @member {Boolean} bool_item
* @default true
*/
exports.prototype['bool_item'] = true;
/**
* @member {Array.<Number>} array_item
*/
exports.prototype['array_item'] = undefined;
return exports;
}));

View File

@@ -0,0 +1,116 @@
/**
* OpenAPI Petstore
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
*
* OpenAPI spec version: 1.0.0
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
*
* OpenAPI Generator version: 4.0.0-SNAPSHOT
*
* Do not edit the class manually.
*
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['ApiClient'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports, like Node.
module.exports = factory(require('../ApiClient'));
} else {
// Browser globals (root is window)
if (!root.OpenApiPetstore) {
root.OpenApiPetstore = {};
}
root.OpenApiPetstore.TypeHolderExample = factory(root.OpenApiPetstore.ApiClient);
}
}(this, function(ApiClient) {
'use strict';
/**
* The TypeHolderExample model module.
* @module model/TypeHolderExample
* @version 1.0.0
*/
/**
* Constructs a new <code>TypeHolderExample</code>.
* @alias module:model/TypeHolderExample
* @class
* @param stringItem {String}
* @param numberItem {Number}
* @param integerItem {Number}
* @param boolItem {Boolean}
* @param arrayItem {Array.<Number>}
*/
var exports = function(stringItem, numberItem, integerItem, boolItem, arrayItem) {
var _this = this;
_this['string_item'] = stringItem;
_this['number_item'] = numberItem;
_this['integer_item'] = integerItem;
_this['bool_item'] = boolItem;
_this['array_item'] = arrayItem;
};
/**
* Constructs a <code>TypeHolderExample</code> from a plain JavaScript object, optionally creating a new instance.
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
* @param {Object} data The plain JavaScript object bearing properties of interest.
* @param {module:model/TypeHolderExample} obj Optional instance to populate.
* @return {module:model/TypeHolderExample} The populated <code>TypeHolderExample</code> instance.
*/
exports.constructFromObject = function(data, obj) {
if (data) {
obj = obj || new exports();
if (data.hasOwnProperty('string_item')) {
obj['string_item'] = ApiClient.convertToType(data['string_item'], 'String');
}
if (data.hasOwnProperty('number_item')) {
obj['number_item'] = ApiClient.convertToType(data['number_item'], 'Number');
}
if (data.hasOwnProperty('integer_item')) {
obj['integer_item'] = ApiClient.convertToType(data['integer_item'], 'Number');
}
if (data.hasOwnProperty('bool_item')) {
obj['bool_item'] = ApiClient.convertToType(data['bool_item'], 'Boolean');
}
if (data.hasOwnProperty('array_item')) {
obj['array_item'] = ApiClient.convertToType(data['array_item'], ['Number']);
}
}
return obj;
}
/**
* @member {String} string_item
*/
exports.prototype['string_item'] = undefined;
/**
* @member {Number} number_item
*/
exports.prototype['number_item'] = undefined;
/**
* @member {Number} integer_item
*/
exports.prototype['integer_item'] = undefined;
/**
* @member {Boolean} bool_item
*/
exports.prototype['bool_item'] = undefined;
/**
* @member {Array.<Number>} array_item
*/
exports.prototype['array_item'] = undefined;
return exports;
}));