Added middleware to fetch

This commit is contained in:
Tino Fuhrmann 2018-10-17 16:51:56 +02:00
parent a7de49110e
commit 61a1bbdabe
7 changed files with 340 additions and 93 deletions

View File

@ -24,10 +24,21 @@ export class {{classname}} {
{{#operation}}
public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: any): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> {
const requestContext = this.requestFactory.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.{{nickname}}(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.{{nickname}}(rsp));
});
}
{{/operation}}

View File

@ -6,7 +6,6 @@ import 'isomorphic-fetch';
export class IsomorphicFetchHttpLibrary implements HttpLibrary {
public send(request: RequestContext): Promise<ResponseContext> {
console.log("Request: ", request);
let method = request.getHttpMethod().toString();
let body = request.getBody();

View File

@ -1,8 +1,8 @@
import {RequestContext, ResponseContext} from './http/http';
export interface Middleware {
pre?(context: RequestContext): Promise<RequestContext>;
post?(context: ResponseContext): Promise<ResponseContext>;
pre(context: RequestContext): Promise<RequestContext>;
post(context: ResponseContext): Promise<ResponseContext>;
}
// TODO: package.json set npmName

View File

@ -21,66 +21,154 @@ export class PetApi {
public addPet(pet: Pet, options?: any): Promise<void> {
const requestContext = this.requestFactory.addPet(pet, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.addPet(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.addPet(rsp));
});
}
public deletePet(petId: number, apiKey?: string, options?: any): Promise<void> {
const requestContext = this.requestFactory.deletePet(petId, apiKey, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.deletePet(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.deletePet(rsp));
});
}
public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: any): Promise<Array<Pet>> {
const requestContext = this.requestFactory.findPetsByStatus(status, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.findPetsByStatus(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.findPetsByStatus(rsp));
});
}
public findPetsByTags(tags: Array<string>, options?: any): Promise<Array<Pet>> {
const requestContext = this.requestFactory.findPetsByTags(tags, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.findPetsByTags(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.findPetsByTags(rsp));
});
}
public getPetById(petId: number, options?: any): Promise<Pet> {
const requestContext = this.requestFactory.getPetById(petId, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.getPetById(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.getPetById(rsp));
});
}
public updatePet(pet: Pet, options?: any): Promise<void> {
const requestContext = this.requestFactory.updatePet(pet, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.updatePet(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.updatePet(rsp));
});
}
public updatePetWithForm(petId: number, name?: string, status?: string, options?: any): Promise<void> {
const requestContext = this.requestFactory.updatePetWithForm(petId, name, status, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.updatePetWithForm(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.updatePetWithForm(rsp));
});
}
public uploadFile(petId: number, additionalMetadata?: string, file?: any, options?: any): Promise<ApiResponse> {
const requestContext = this.requestFactory.uploadFile(petId, additionalMetadata, file, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.uploadFile(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.uploadFile(rsp));
});
}
@ -101,34 +189,78 @@ export class StoreApi {
public deleteOrder(orderId: string, options?: any): Promise<void> {
const requestContext = this.requestFactory.deleteOrder(orderId, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.deleteOrder(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.deleteOrder(rsp));
});
}
public getInventory(options?: any): Promise<{ [key: string]: number; }> {
const requestContext = this.requestFactory.getInventory(options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.getInventory(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.getInventory(rsp));
});
}
public getOrderById(orderId: number, options?: any): Promise<Order> {
const requestContext = this.requestFactory.getOrderById(orderId, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.getOrderById(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.getOrderById(rsp));
});
}
public placeOrder(order: Order, options?: any): Promise<Order> {
const requestContext = this.requestFactory.placeOrder(order, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.placeOrder(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.placeOrder(rsp));
});
}
@ -149,66 +281,154 @@ export class UserApi {
public createUser(user: User, options?: any): Promise<void> {
const requestContext = this.requestFactory.createUser(user, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.createUser(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.createUser(rsp));
});
}
public createUsersWithArrayInput(user: Array<User>, options?: any): Promise<void> {
const requestContext = this.requestFactory.createUsersWithArrayInput(user, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.createUsersWithArrayInput(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.createUsersWithArrayInput(rsp));
});
}
public createUsersWithListInput(user: Array<User>, options?: any): Promise<void> {
const requestContext = this.requestFactory.createUsersWithListInput(user, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.createUsersWithListInput(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.createUsersWithListInput(rsp));
});
}
public deleteUser(username: string, options?: any): Promise<void> {
const requestContext = this.requestFactory.deleteUser(username, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.deleteUser(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.deleteUser(rsp));
});
}
public getUserByName(username: string, options?: any): Promise<User> {
const requestContext = this.requestFactory.getUserByName(username, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.getUserByName(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.getUserByName(rsp));
});
}
public loginUser(username: string, password: string, options?: any): Promise<string> {
const requestContext = this.requestFactory.loginUser(username, password, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.loginUser(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.loginUser(rsp));
});
}
public logoutUser(options?: any): Promise<void> {
const requestContext = this.requestFactory.logoutUser(options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.logoutUser(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.logoutUser(rsp));
});
}
public updateUser(username: string, user: User, options?: any): Promise<void> {
const requestContext = this.requestFactory.updateUser(username, user, options);
return this.configuration.httpApi.send(requestContext).then((response: ResponseContext) => {
return this.responseProcessor.updateUser(response);
});
// build promise chain
let middlewarePrePromise =Promise.resolve(requestContext);
for (let middleware of this.configuration.middleware) {
middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx));
}
return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)).
then((response: ResponseContext) => {
let middlewarePostPromise = Promise.resolve(response);
for (let middleware of this.configuration.middleware) {
middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp));
}
return middlewarePostPromise.then((rsp) => this.responseProcessor.updateUser(rsp));
});
}

View File

@ -6,7 +6,6 @@ import 'isomorphic-fetch';
export class IsomorphicFetchHttpLibrary implements HttpLibrary {
public send(request: RequestContext): Promise<ResponseContext> {
console.log("Request: ", request);
let method = request.getHttpMethod().toString();
let body = request.getBody();

View File

@ -1,8 +1,8 @@
import {RequestContext, ResponseContext} from './http/http';
export interface Middleware {
pre?(context: RequestContext): Promise<RequestContext>;
post?(context: ResponseContext): Promise<ResponseContext>;
pre(context: RequestContext): Promise<RequestContext>;
post(context: ResponseContext): Promise<ResponseContext>;
}
// TODO: package.json set npmName

View File

@ -1,12 +1,30 @@
import {PetApi} from './api';
import {Configuration } from './configuration';
import { Middleware } from './middleware';
import { RequestContext, ResponseContext } from './http/http';
const config = new Configuration();
class MiddlewareA implements Middleware {
public pre(request: RequestContext) {
console.log(request);
return Promise.resolve(request);
}
public post(response: ResponseContext) {
console.log(response)
return Promise.resolve(response);
}
}
const config = new Configuration({
middleware: [
new MiddlewareA()
]
});
const api = new PetApi(config);
api.getPetById(3).then((pet) => {
console.log(pet)
}).catch((err) => {
console.log(err);
console.log(err);
});