diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java index 43dae3adec8..3c69beb3f23 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptClientCodegen.java @@ -136,8 +136,11 @@ public class TypeScriptClientCodegen extends DefaultCodegen implements CodegenCo supportingFiles.add(new SupportingFile("model/models_all.mustache", "models", "all.ts")); // TODO: add supporting files depending on cli parameter e.g. fetch vs angular - supportingFiles.add(new SupportingFile("generators/PromiseAPI.mustache", "PromiseAPI.ts")); - supportingFiles.add(new SupportingFile("generators/fetch/index.mustache", "index.ts")); + supportingFiles.add(new SupportingFile("generators/types/PromiseAPI.mustache", "types", "PromiseAPI.ts")); + supportingFiles.add(new SupportingFile("generators/types/ObservableAPI.mustache", "types", "ObservableAPI.ts")); + + + supportingFiles.add(new SupportingFile("generators/fetch.mustache", "index.ts")); // models // TODO: properly set model and api packages diff --git a/modules/openapi-generator/src/main/resources/typescript/api/middleware.mustache b/modules/openapi-generator/src/main/resources/typescript/api/middleware.mustache index bb2037740f2..5e6d88eeeb1 100644 --- a/modules/openapi-generator/src/main/resources/typescript/api/middleware.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/api/middleware.mustache @@ -1,6 +1,7 @@ import {RequestContext, ResponseContext} from './http/http'; +import { Observable } from 'rxjs'; export interface Middleware { - pre(context: RequestContext): Promise; - post(context: ResponseContext): Promise; + pre(context: RequestContext): Observable; + post(context: ResponseContext): Observable; } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache b/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache deleted file mode 100644 index e60ef05dd76..00000000000 --- a/modules/openapi-generator/src/main/resources/typescript/generators/PromiseAPI.mustache +++ /dev/null @@ -1,52 +0,0 @@ -import { ResponseContext, HttpFile } from './http/http'; -import * as models from './models/all'; -import { Configuration} from './configuration' - -{{#models}} -{{#model}} -import { {{name}} } from './models/{{name}}'; -{{/model}} -{{/models}} -{{#apiInfo}} -{{#apis}} - -{{#operations}} -import { {{classname}}RequestFactory, {{classname}}ResponseProcessor} from "./apis/{{classname}}"; -export class {{classname}} { - private requestFactory: {{classname}}RequestFactory; - private responseProcessor: {{classname}}ResponseProcessor; - - public constructor(private configuration: Configuration) { - this.requestFactory = new {{classname}}RequestFactory(configuration); - this.responseProcessor = new {{classname}}ResponseProcessor(); - } - -{{#operation}} - public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: Configuration): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { - const requestContext = this.requestFactory.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); - - // 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}} - -} - -{{/operations}} - - -{{/apis}} -{{/apiInfo}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript/generators/fetch/index.mustache b/modules/openapi-generator/src/main/resources/typescript/generators/fetch.mustache similarity index 88% rename from modules/openapi-generator/src/main/resources/typescript/generators/fetch/index.mustache rename to modules/openapi-generator/src/main/resources/typescript/generators/fetch.mustache index f244e4733a8..e17b67f2a6c 100644 --- a/modules/openapi-generator/src/main/resources/typescript/generators/fetch/index.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/generators/fetch.mustache @@ -3,7 +3,7 @@ import * as auth from './auth/auth'; import {Middleware} from './middleware'; import * as models from './models/all'; import { Configuration} from './configuration' -import * as apis from './PromiseAPI'; +import * as apis from './types/PromiseAPI'; import * as exceptions from './apis/exception'; export { diff --git a/modules/openapi-generator/src/main/resources/typescript/generators/types/ObservableAPI.mustache b/modules/openapi-generator/src/main/resources/typescript/generators/types/ObservableAPI.mustache new file mode 100644 index 00000000000..a8e02e4ba94 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript/generators/types/ObservableAPI.mustache @@ -0,0 +1,54 @@ +import { ResponseContext, RequestContext, HttpFile } from '../http/http'; +import * as models from '../models/all'; +import { Configuration} from '../configuration' +import { Observable, of } from 'rxjs'; +import {mergeMap, map} from 'rxjs/operators'; + +{{#models}} +{{#model}} +import { {{name}} } from '../models/{{name}}'; +{{/model}} +{{/models}} +{{#apiInfo}} +{{#apis}} + +{{#operations}} +import { {{classname}}RequestFactory, {{classname}}ResponseProcessor} from "../apis/{{classname}}"; +export class Observable{{classname}} { + private requestFactory: {{classname}}RequestFactory; + private responseProcessor: {{classname}}ResponseProcessor; + + public constructor(private configuration: Configuration) { + this.requestFactory = new {{classname}}RequestFactory(configuration); + this.responseProcessor = new {{classname}}ResponseProcessor(); + } + +{{#operation}} + public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: Configuration): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { + const requestContext = this.requestFactory.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.{{nickname}}(rsp))); + })); + } + +{{/operation}} + +} + +{{/operations}} + + +{{/apis}} +{{/apiInfo}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript/generators/types/PromiseAPI.mustache b/modules/openapi-generator/src/main/resources/typescript/generators/types/PromiseAPI.mustache new file mode 100644 index 00000000000..4f1ea13cdef --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript/generators/types/PromiseAPI.mustache @@ -0,0 +1,38 @@ +import { ResponseContext, RequestContext, HttpFile } from '../http/http'; +import * as models from '../models/all'; +import { Configuration} from '../configuration' + +{{#models}} +{{#model}} +import { {{name}} } from '../models/{{name}}'; +{{/model}} +{{/models}} +{{#apiInfo}} +{{#apis}} +import { Observable{{classname}} } from './ObservableAPI'; + + +{{#operations}} +import { {{classname}}RequestFactory, {{classname}}ResponseProcessor} from "../apis/{{classname}}"; +export class Promise{{classname}} { + private api: Observable{{classname}} + + public constructor(configuration: Configuration) { + this.api = new Observable{{classname}}(configuration); + } + +{{#operation}} + public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}options?: Configuration): Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { + const result = this.api.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}options); + return result.toPromise(); + } + +{{/operation}} + +} + +{{/operations}} + + +{{/apis}} +{{/apiInfo}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript/http/http.mustache b/modules/openapi-generator/src/main/resources/typescript/http/http.mustache index 692cac75146..5bd5f8229ed 100644 --- a/modules/openapi-generator/src/main/resources/typescript/http/http.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/http/http.mustache @@ -3,6 +3,8 @@ import * as FormData from "form-data"; // typings of url-parse are incorrect... // @ts-ignore import * as URLParse from "url-parse"; +import { Observable } from 'rxjs'; + export * from './isomorphic-fetch'; @@ -104,5 +106,5 @@ export class ResponseContext { } export interface HttpLibrary { - send(request: RequestContext): Promise; + send(request: RequestContext): Observable; } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript/http/isomorphic-fetch.mustache b/modules/openapi-generator/src/main/resources/typescript/http/isomorphic-fetch.mustache index b62f68418d3..e6b5b183e67 100644 --- a/modules/openapi-generator/src/main/resources/typescript/http/isomorphic-fetch.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/http/isomorphic-fetch.mustache @@ -1,15 +1,16 @@ import {HttpLibrary, RequestContext, ResponseContext} from './http'; import * as e6p from 'es6-promise' +import { from, Observable } from 'rxjs'; e6p.polyfill(); import 'isomorphic-fetch'; export class IsomorphicFetchHttpLibrary implements HttpLibrary { - public send(request: RequestContext): Promise { + public send(request: RequestContext): Observable { let method = request.getHttpMethod().toString(); let body = request.getBody(); - return fetch(request.getUrl(), { + const resultPromise = fetch(request.getUrl(), { method: method, body: body as any, headers: request.getHeaders(), @@ -25,6 +26,8 @@ export class IsomorphicFetchHttpLibrary implements HttpLibrary { return new ResponseContext(resp.status, headers, body) }); }); + + return from(resultPromise); } } diff --git a/modules/openapi-generator/src/main/resources/typescript/package.mustache b/modules/openapi-generator/src/main/resources/typescript/package.mustache index 000086e2010..087e657262d 100644 --- a/modules/openapi-generator/src/main/resources/typescript/package.mustache +++ b/modules/openapi-generator/src/main/resources/typescript/package.mustache @@ -24,7 +24,9 @@ "@types/isomorphic-fetch": "0.0.34", "form-data": "^2.3.2", "@types/form-data": "^2.2.1", - "url-parse": "^1.4.3" + "url-parse": "^1.4.3", + "rxjs": "^6.4.0", + "@types/rx": "^4.1.1" }, "devDependencies": { "typescript": "^2.9.2" diff --git a/samples/client/petstore/typescript/builds/default/PromiseAPI.ts b/samples/client/petstore/typescript/builds/default/PromiseAPI.ts index 48f63d417e6..9306e5f30f7 100644 --- a/samples/client/petstore/typescript/builds/default/PromiseAPI.ts +++ b/samples/client/petstore/typescript/builds/default/PromiseAPI.ts @@ -1,6 +1,8 @@ -import { ResponseContext, HttpFile } from './http/http'; +import { ResponseContext, RequestContext, HttpFile } from './http/http'; import * as models from './models/all'; import { Configuration} from './configuration' +import { Observable, of } from 'rxjs'; +import {mergeMap, map} from 'rxjs/operators'; import { ApiResponse } from './models/ApiResponse'; import { Category } from './models/Category'; @@ -19,156 +21,156 @@ export class PetApi { this.responseProcessor = new PetApiResponseProcessor(); } - public addPet(pet: Pet, options?: Configuration): Promise { + public addPet(pet: Pet, options?: Configuration): Observable { const requestContext = this.requestFactory.addPet(pet, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.addPet(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.addPet(rsp))); + })); } - public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { + public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { const requestContext = this.requestFactory.deletePet(petId, apiKey, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.deletePet(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.deletePet(rsp))); + })); } - public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { const requestContext = this.requestFactory.findPetsByStatus(status, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.findPetsByStatus(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.findPetsByStatus(rsp))); + })); } - public findPetsByTags(tags: Array, options?: Configuration): Promise> { + public findPetsByTags(tags: Array, options?: Configuration): Observable> { const requestContext = this.requestFactory.findPetsByTags(tags, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.findPetsByTags(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.findPetsByTags(rsp))); + })); } - public getPetById(petId: number, options?: Configuration): Promise { + public getPetById(petId: number, options?: Configuration): Observable { const requestContext = this.requestFactory.getPetById(petId, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.getPetById(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getPetById(rsp))); + })); } - public updatePet(pet: Pet, options?: Configuration): Promise { + public updatePet(pet: Pet, options?: Configuration): Observable { const requestContext = this.requestFactory.updatePet(pet, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.updatePet(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.updatePet(rsp))); + })); } - public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { + public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { const requestContext = this.requestFactory.updatePetWithForm(petId, name, status, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.updatePetWithForm(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.updatePetWithForm(rsp))); + })); } - public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { const requestContext = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.uploadFile(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.uploadFile(rsp))); + })); } @@ -187,80 +189,80 @@ export class StoreApi { this.responseProcessor = new StoreApiResponseProcessor(); } - public deleteOrder(orderId: string, options?: Configuration): Promise { + public deleteOrder(orderId: string, options?: Configuration): Observable { const requestContext = this.requestFactory.deleteOrder(orderId, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.deleteOrder(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.deleteOrder(rsp))); + })); } - public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { + public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { const requestContext = this.requestFactory.getInventory(options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.getInventory(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getInventory(rsp))); + })); } - public getOrderById(orderId: number, options?: Configuration): Promise { + public getOrderById(orderId: number, options?: Configuration): Observable { const requestContext = this.requestFactory.getOrderById(orderId, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.getOrderById(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getOrderById(rsp))); + })); } - public placeOrder(order: Order, options?: Configuration): Promise { + public placeOrder(order: Order, options?: Configuration): Observable { const requestContext = this.requestFactory.placeOrder(order, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.placeOrder(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.placeOrder(rsp))); + })); } @@ -279,156 +281,156 @@ export class UserApi { this.responseProcessor = new UserApiResponseProcessor(); } - public createUser(user: User, options?: Configuration): Promise { + public createUser(user: User, options?: Configuration): Observable { const requestContext = this.requestFactory.createUser(user, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.createUser(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.createUser(rsp))); + })); } - public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { + public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { const requestContext = this.requestFactory.createUsersWithArrayInput(user, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.createUsersWithArrayInput(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.createUsersWithArrayInput(rsp))); + })); } - public createUsersWithListInput(user: Array, options?: Configuration): Promise { + public createUsersWithListInput(user: Array, options?: Configuration): Observable { const requestContext = this.requestFactory.createUsersWithListInput(user, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.createUsersWithListInput(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.createUsersWithListInput(rsp))); + })); } - public deleteUser(username: string, options?: Configuration): Promise { + public deleteUser(username: string, options?: Configuration): Observable { const requestContext = this.requestFactory.deleteUser(username, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.deleteUser(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.deleteUser(rsp))); + })); } - public getUserByName(username: string, options?: Configuration): Promise { + public getUserByName(username: string, options?: Configuration): Observable { const requestContext = this.requestFactory.getUserByName(username, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.getUserByName(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getUserByName(rsp))); + })); } - public loginUser(username: string, password: string, options?: Configuration): Promise { + public loginUser(username: string, password: string, options?: Configuration): Observable { const requestContext = this.requestFactory.loginUser(username, password, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.loginUser(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.loginUser(rsp))); + })); } - public logoutUser(options?: Configuration): Promise { + public logoutUser(options?: Configuration): Observable { const requestContext = this.requestFactory.logoutUser(options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.logoutUser(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.logoutUser(rsp))); + })); } - public updateUser(username: string, user: User, options?: Configuration): Promise { + public updateUser(username: string, user: User, options?: Configuration): Observable { const requestContext = this.requestFactory.updateUser(username, user, options); // build promise chain - let middlewarePrePromise = Promise.resolve(requestContext); + let middlewarePreObservable = of(requestContext); for (let middleware of this.configuration.middleware) { - middlewarePrePromise = middlewarePrePromise.then((ctx) => middleware.pre(ctx)); + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); } - return middlewarePrePromise.then((ctx) => this.configuration.httpApi.send(ctx)). - then((response: ResponseContext) => { - let middlewarePostPromise = Promise.resolve(response); + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); for (let middleware of this.configuration.middleware) { - middlewarePostPromise = middlewarePostPromise.then((rsp) => middleware.post(rsp)); + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); } - return middlewarePostPromise.then((rsp) => this.responseProcessor.updateUser(rsp)); - }); + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.updateUser(rsp))); + })); } diff --git a/samples/client/petstore/typescript/builds/default/http/http.ts b/samples/client/petstore/typescript/builds/default/http/http.ts index 34bffd7a8e4..5bd5f8229ed 100644 --- a/samples/client/petstore/typescript/builds/default/http/http.ts +++ b/samples/client/petstore/typescript/builds/default/http/http.ts @@ -3,6 +3,8 @@ import * as FormData from "form-data"; // typings of url-parse are incorrect... // @ts-ignore import * as URLParse from "url-parse"; +import { Observable } from 'rxjs'; + export * from './isomorphic-fetch'; @@ -104,5 +106,5 @@ export class ResponseContext { } export interface HttpLibrary { - send(request: RequestContext): Promise; -} + send(request: RequestContext): Observable; +} \ No newline at end of file diff --git a/samples/client/petstore/typescript/builds/default/http/isomorphic-fetch.ts b/samples/client/petstore/typescript/builds/default/http/isomorphic-fetch.ts index b62f68418d3..e6b5b183e67 100644 --- a/samples/client/petstore/typescript/builds/default/http/isomorphic-fetch.ts +++ b/samples/client/petstore/typescript/builds/default/http/isomorphic-fetch.ts @@ -1,15 +1,16 @@ import {HttpLibrary, RequestContext, ResponseContext} from './http'; import * as e6p from 'es6-promise' +import { from, Observable } from 'rxjs'; e6p.polyfill(); import 'isomorphic-fetch'; export class IsomorphicFetchHttpLibrary implements HttpLibrary { - public send(request: RequestContext): Promise { + public send(request: RequestContext): Observable { let method = request.getHttpMethod().toString(); let body = request.getBody(); - return fetch(request.getUrl(), { + const resultPromise = fetch(request.getUrl(), { method: method, body: body as any, headers: request.getHeaders(), @@ -25,6 +26,8 @@ export class IsomorphicFetchHttpLibrary implements HttpLibrary { return new ResponseContext(resp.status, headers, body) }); }); + + return from(resultPromise); } } diff --git a/samples/client/petstore/typescript/builds/default/index.ts b/samples/client/petstore/typescript/builds/default/index.ts index 5de2901009a..e17b67f2a6c 100644 --- a/samples/client/petstore/typescript/builds/default/index.ts +++ b/samples/client/petstore/typescript/builds/default/index.ts @@ -3,10 +3,9 @@ import * as auth from './auth/auth'; import {Middleware} from './middleware'; import * as models from './models/all'; import { Configuration} from './configuration' -import * as apis from './PromiseAPI'; +import * as apis from './types/PromiseAPI'; import * as exceptions from './apis/exception'; - export { http, diff --git a/samples/client/petstore/typescript/builds/default/middleware.ts b/samples/client/petstore/typescript/builds/default/middleware.ts index bb2037740f2..5e6d88eeeb1 100644 --- a/samples/client/petstore/typescript/builds/default/middleware.ts +++ b/samples/client/petstore/typescript/builds/default/middleware.ts @@ -1,6 +1,7 @@ import {RequestContext, ResponseContext} from './http/http'; +import { Observable } from 'rxjs'; export interface Middleware { - pre(context: RequestContext): Promise; - post(context: ResponseContext): Promise; + pre(context: RequestContext): Observable; + post(context: ResponseContext): Observable; } \ No newline at end of file diff --git a/samples/client/petstore/typescript/builds/default/package-lock.json b/samples/client/petstore/typescript/builds/default/package-lock.json index 331f3c78d71..3420dfb5cb3 100644 --- a/samples/client/petstore/typescript/builds/default/package-lock.json +++ b/samples/client/petstore/typescript/builds/default/package-lock.json @@ -22,6 +22,119 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz", "integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==" }, + "@types/rx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/rx/-/rx-4.1.1.tgz", + "integrity": "sha1-WY/JSla67ZdfGUV04PVy/Y5iekg=", + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*", + "@types/rx-lite": "*", + "@types/rx-lite-aggregates": "*", + "@types/rx-lite-async": "*", + "@types/rx-lite-backpressure": "*", + "@types/rx-lite-coincidence": "*", + "@types/rx-lite-experimental": "*", + "@types/rx-lite-joinpatterns": "*", + "@types/rx-lite-testing": "*", + "@types/rx-lite-time": "*", + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-core": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-core/-/rx-core-4.0.3.tgz", + "integrity": "sha1-CzNUsSOM7b4rdPYybxOdvHpZHWA=" + }, + "@types/rx-core-binding": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz", + "integrity": "sha512-5pkfxnC4w810LqBPUwP5bg7SFR/USwhMSaAeZQQbEHeBp57pjKXRlXmqpMrLJB4y1oglR/c2502853uN0I+DAQ==", + "requires": { + "@types/rx-core": "*" + } + }, + "@types/rx-lite": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/rx-lite/-/rx-lite-4.0.6.tgz", + "integrity": "sha512-oYiDrFIcor9zDm0VDUca1UbROiMYBxMLMaM6qzz4ADAfOmA9r1dYEcAFH+2fsPI5BCCjPvV9pWC3X3flbrvs7w==", + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*" + } + }, + "@types/rx-lite-aggregates": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.3.tgz", + "integrity": "sha512-MAGDAHy8cRatm94FDduhJF+iNS5//jrZ/PIfm+QYw9OCeDgbymFHChM8YVIvN2zArwsRftKgE33QfRWvQk4DPg==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-async": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/rx-lite-async/-/rx-lite-async-4.0.2.tgz", + "integrity": "sha512-vTEv5o8l6702ZwfAM5aOeVDfUwBSDOs+ARoGmWAKQ6LOInQ8J4/zjM7ov12fuTpktUKdMQjkeCp07Vd73mPkxw==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-backpressure": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.3.tgz", + "integrity": "sha512-Y6aIeQCtNban5XSAF4B8dffhIKu6aAy/TXFlScHzSxh6ivfQBQw6UjxyEJxIOt3IT49YkS+siuayM2H/Q0cmgA==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-coincidence": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.3.tgz", + "integrity": "sha512-1VNJqzE9gALUyMGypDXZZXzR0Tt7LC9DdAZQ3Ou/Q0MubNU35agVUNXKGHKpNTba+fr8GdIdkC26bRDqtCQBeQ==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-experimental": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz", + "integrity": "sha1-xTL1y98/LBXaFt7Ykw0bKYQCPL0=", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-joinpatterns": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz", + "integrity": "sha1-9w/jcFGKhDLykVjMkv+1a05K/D4=", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-testing": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz", + "integrity": "sha1-IbGdEfTf1v/vWp0WSOnIh5v+Iek=", + "requires": { + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-lite-time": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-time/-/rx-lite-time-4.0.3.tgz", + "integrity": "sha512-ukO5sPKDRwCGWRZRqPlaAU0SKVxmWwSjiOrLhoQDoWxZWg6vyB9XLEZViKOzIO6LnTIQBlk4UylYV0rnhJLxQw==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-virtualtime": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.3.tgz", + "integrity": "sha512-3uC6sGmjpOKatZSVHI2xB1+dedgml669ZRvqxy+WqmGJDVusOdyxcKfyzjW0P3/GrCiN4nmRkLVMhPwHCc5QLg==", + "requires": { + "@types/rx-lite": "*" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -122,11 +235,24 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "^1.9.0" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, "typescript": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", diff --git a/samples/client/petstore/typescript/builds/default/package.json b/samples/client/petstore/typescript/builds/default/package.json index 7ffb1436e08..01d8c238d6d 100644 --- a/samples/client/petstore/typescript/builds/default/package.json +++ b/samples/client/petstore/typescript/builds/default/package.json @@ -24,7 +24,9 @@ "@types/isomorphic-fetch": "0.0.34", "form-data": "^2.3.2", "@types/form-data": "^2.2.1", - "url-parse": "^1.4.3" + "url-parse": "^1.4.3", + "rxjs": "^6.4.0", + "@types/rx": "^4.1.1" }, "devDependencies": { "typescript": "^2.9.2" diff --git a/samples/client/petstore/typescript/builds/default/types/ObservableAPI.ts b/samples/client/petstore/typescript/builds/default/types/ObservableAPI.ts new file mode 100644 index 00000000000..8499e8bacad --- /dev/null +++ b/samples/client/petstore/typescript/builds/default/types/ObservableAPI.ts @@ -0,0 +1,440 @@ +import { ResponseContext, RequestContext, HttpFile } from '../http/http'; +import * as models from '../models/all'; +import { Configuration} from '../configuration' +import { Observable, of } from 'rxjs'; +import {mergeMap, map} from 'rxjs/operators'; + +import { ApiResponse } from '../models/ApiResponse'; +import { Category } from '../models/Category'; +import { Order } from '../models/Order'; +import { Pet } from '../models/Pet'; +import { Tag } from '../models/Tag'; +import { User } from '../models/User'; + +import { PetApiRequestFactory, PetApiResponseProcessor} from "../apis/PetApi"; +export class ObservablePetApi { + private requestFactory: PetApiRequestFactory; + private responseProcessor: PetApiResponseProcessor; + + public constructor(private configuration: Configuration) { + this.requestFactory = new PetApiRequestFactory(configuration); + this.responseProcessor = new PetApiResponseProcessor(); + } + + public addPet(pet: Pet, options?: Configuration): Observable { + const requestContext = this.requestFactory.addPet(pet, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.addPet(rsp))); + })); + } + + public deletePet(petId: number, apiKey?: string, options?: Configuration): Observable { + const requestContext = this.requestFactory.deletePet(petId, apiKey, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.deletePet(rsp))); + })); + } + + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Observable> { + const requestContext = this.requestFactory.findPetsByStatus(status, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.findPetsByStatus(rsp))); + })); + } + + public findPetsByTags(tags: Array, options?: Configuration): Observable> { + const requestContext = this.requestFactory.findPetsByTags(tags, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.findPetsByTags(rsp))); + })); + } + + public getPetById(petId: number, options?: Configuration): Observable { + const requestContext = this.requestFactory.getPetById(petId, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getPetById(rsp))); + })); + } + + public updatePet(pet: Pet, options?: Configuration): Observable { + const requestContext = this.requestFactory.updatePet(pet, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.updatePet(rsp))); + })); + } + + public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Observable { + const requestContext = this.requestFactory.updatePetWithForm(petId, name, status, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.updatePetWithForm(rsp))); + })); + } + + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Observable { + const requestContext = this.requestFactory.uploadFile(petId, additionalMetadata, file, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.uploadFile(rsp))); + })); + } + + +} + + + + +import { StoreApiRequestFactory, StoreApiResponseProcessor} from "../apis/StoreApi"; +export class ObservableStoreApi { + private requestFactory: StoreApiRequestFactory; + private responseProcessor: StoreApiResponseProcessor; + + public constructor(private configuration: Configuration) { + this.requestFactory = new StoreApiRequestFactory(configuration); + this.responseProcessor = new StoreApiResponseProcessor(); + } + + public deleteOrder(orderId: string, options?: Configuration): Observable { + const requestContext = this.requestFactory.deleteOrder(orderId, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.deleteOrder(rsp))); + })); + } + + public getInventory(options?: Configuration): Observable<{ [key: string]: number; }> { + const requestContext = this.requestFactory.getInventory(options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getInventory(rsp))); + })); + } + + public getOrderById(orderId: number, options?: Configuration): Observable { + const requestContext = this.requestFactory.getOrderById(orderId, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getOrderById(rsp))); + })); + } + + public placeOrder(order: Order, options?: Configuration): Observable { + const requestContext = this.requestFactory.placeOrder(order, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.placeOrder(rsp))); + })); + } + + +} + + + + +import { UserApiRequestFactory, UserApiResponseProcessor} from "../apis/UserApi"; +export class ObservableUserApi { + private requestFactory: UserApiRequestFactory; + private responseProcessor: UserApiResponseProcessor; + + public constructor(private configuration: Configuration) { + this.requestFactory = new UserApiRequestFactory(configuration); + this.responseProcessor = new UserApiResponseProcessor(); + } + + public createUser(user: User, options?: Configuration): Observable { + const requestContext = this.requestFactory.createUser(user, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.createUser(rsp))); + })); + } + + public createUsersWithArrayInput(user: Array, options?: Configuration): Observable { + const requestContext = this.requestFactory.createUsersWithArrayInput(user, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.createUsersWithArrayInput(rsp))); + })); + } + + public createUsersWithListInput(user: Array, options?: Configuration): Observable { + const requestContext = this.requestFactory.createUsersWithListInput(user, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.createUsersWithListInput(rsp))); + })); + } + + public deleteUser(username: string, options?: Configuration): Observable { + const requestContext = this.requestFactory.deleteUser(username, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.deleteUser(rsp))); + })); + } + + public getUserByName(username: string, options?: Configuration): Observable { + const requestContext = this.requestFactory.getUserByName(username, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.getUserByName(rsp))); + })); + } + + public loginUser(username: string, password: string, options?: Configuration): Observable { + const requestContext = this.requestFactory.loginUser(username, password, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.loginUser(rsp))); + })); + } + + public logoutUser(options?: Configuration): Observable { + const requestContext = this.requestFactory.logoutUser(options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.logoutUser(rsp))); + })); + } + + public updateUser(username: string, user: User, options?: Configuration): Observable { + const requestContext = this.requestFactory.updateUser(username, user, options); + + // build promise chain + let middlewarePreObservable = of(requestContext); + for (let middleware of this.configuration.middleware) { + middlewarePreObservable = middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => middleware.pre(ctx))); + } + + return middlewarePreObservable.pipe(mergeMap((ctx: RequestContext) => this.configuration.httpApi.send(ctx))). + pipe(mergeMap((response: ResponseContext) => { + let middlewarePostObservable = of(response); + for (let middleware of this.configuration.middleware) { + middlewarePostObservable = middlewarePostObservable.pipe(mergeMap((rsp: ResponseContext) => middleware.post(rsp))); + } + return middlewarePostObservable.pipe(map((rsp: ResponseContext) => this.responseProcessor.updateUser(rsp))); + })); + } + + +} + + + diff --git a/samples/client/petstore/typescript/builds/default/types/PromiseAPI.ts b/samples/client/petstore/typescript/builds/default/types/PromiseAPI.ts new file mode 100644 index 00000000000..c449b9e5b8e --- /dev/null +++ b/samples/client/petstore/typescript/builds/default/types/PromiseAPI.ts @@ -0,0 +1,158 @@ +import { ResponseContext, RequestContext, HttpFile } from '../http/http'; +import * as models from '../models/all'; +import { Configuration} from '../configuration' + +import { ApiResponse } from '../models/ApiResponse'; +import { Category } from '../models/Category'; +import { Order } from '../models/Order'; +import { Pet } from '../models/Pet'; +import { Tag } from '../models/Tag'; +import { User } from '../models/User'; +import { ObservablePetApi } from './ObservableAPI'; + + +import { PetApiRequestFactory, PetApiResponseProcessor} from "../apis/PetApi"; +export class PromisePetApi { + private api: ObservablePetApi + + public constructor(configuration: Configuration) { + this.api = new ObservablePetApi(configuration); + } + + public addPet(pet: Pet, options?: Configuration): Promise { + const result = this.api.addPet(pet, options); + return result.toPromise(); + } + + public deletePet(petId: number, apiKey?: string, options?: Configuration): Promise { + const result = this.api.deletePet(petId, apiKey, options); + return result.toPromise(); + } + + public findPetsByStatus(status: Array<'available' | 'pending' | 'sold'>, options?: Configuration): Promise> { + const result = this.api.findPetsByStatus(status, options); + return result.toPromise(); + } + + public findPetsByTags(tags: Array, options?: Configuration): Promise> { + const result = this.api.findPetsByTags(tags, options); + return result.toPromise(); + } + + public getPetById(petId: number, options?: Configuration): Promise { + const result = this.api.getPetById(petId, options); + return result.toPromise(); + } + + public updatePet(pet: Pet, options?: Configuration): Promise { + const result = this.api.updatePet(pet, options); + return result.toPromise(); + } + + public updatePetWithForm(petId: number, name?: string, status?: string, options?: Configuration): Promise { + const result = this.api.updatePetWithForm(petId, name, status, options); + return result.toPromise(); + } + + public uploadFile(petId: number, additionalMetadata?: string, file?: HttpFile, options?: Configuration): Promise { + const result = this.api.uploadFile(petId, additionalMetadata, file, options); + return result.toPromise(); + } + + +} + + + +import { ObservableStoreApi } from './ObservableAPI'; + + +import { StoreApiRequestFactory, StoreApiResponseProcessor} from "../apis/StoreApi"; +export class PromiseStoreApi { + private api: ObservableStoreApi + + public constructor(configuration: Configuration) { + this.api = new ObservableStoreApi(configuration); + } + + public deleteOrder(orderId: string, options?: Configuration): Promise { + const result = this.api.deleteOrder(orderId, options); + return result.toPromise(); + } + + public getInventory(options?: Configuration): Promise<{ [key: string]: number; }> { + const result = this.api.getInventory(options); + return result.toPromise(); + } + + public getOrderById(orderId: number, options?: Configuration): Promise { + const result = this.api.getOrderById(orderId, options); + return result.toPromise(); + } + + public placeOrder(order: Order, options?: Configuration): Promise { + const result = this.api.placeOrder(order, options); + return result.toPromise(); + } + + +} + + + +import { ObservableUserApi } from './ObservableAPI'; + + +import { UserApiRequestFactory, UserApiResponseProcessor} from "../apis/UserApi"; +export class PromiseUserApi { + private api: ObservableUserApi + + public constructor(configuration: Configuration) { + this.api = new ObservableUserApi(configuration); + } + + public createUser(user: User, options?: Configuration): Promise { + const result = this.api.createUser(user, options); + return result.toPromise(); + } + + public createUsersWithArrayInput(user: Array, options?: Configuration): Promise { + const result = this.api.createUsersWithArrayInput(user, options); + return result.toPromise(); + } + + public createUsersWithListInput(user: Array, options?: Configuration): Promise { + const result = this.api.createUsersWithListInput(user, options); + return result.toPromise(); + } + + public deleteUser(username: string, options?: Configuration): Promise { + const result = this.api.deleteUser(username, options); + return result.toPromise(); + } + + public getUserByName(username: string, options?: Configuration): Promise { + const result = this.api.getUserByName(username, options); + return result.toPromise(); + } + + public loginUser(username: string, password: string, options?: Configuration): Promise { + const result = this.api.loginUser(username, password, options); + return result.toPromise(); + } + + public logoutUser(options?: Configuration): Promise { + const result = this.api.logoutUser(options); + return result.toPromise(); + } + + public updateUser(username: string, user: User, options?: Configuration): Promise { + const result = this.api.updateUser(username, user, options); + return result.toPromise(); + } + + +} + + + diff --git a/samples/client/petstore/typescript/tests/default/package-lock.json b/samples/client/petstore/typescript/tests/default/package-lock.json index de0cb9aad91..609eb4d2909 100644 --- a/samples/client/petstore/typescript/tests/default/package-lock.json +++ b/samples/client/petstore/typescript/tests/default/package-lock.json @@ -48,6 +48,119 @@ "resolved": "https://registry.npmjs.org/@types/rewire/-/rewire-2.5.28.tgz", "integrity": "sha512-uD0j/AQOa5le7afuK+u+woi8jNKF1vf3DN0H7LCJhft/lNNibUr7VcAesdgtWfEKveZol3ZG1CJqwx2Bhrnl8w==" }, + "@types/rx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/rx/-/rx-4.1.1.tgz", + "integrity": "sha1-WY/JSla67ZdfGUV04PVy/Y5iekg=", + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*", + "@types/rx-lite": "*", + "@types/rx-lite-aggregates": "*", + "@types/rx-lite-async": "*", + "@types/rx-lite-backpressure": "*", + "@types/rx-lite-coincidence": "*", + "@types/rx-lite-experimental": "*", + "@types/rx-lite-joinpatterns": "*", + "@types/rx-lite-testing": "*", + "@types/rx-lite-time": "*", + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-core": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-core/-/rx-core-4.0.3.tgz", + "integrity": "sha1-CzNUsSOM7b4rdPYybxOdvHpZHWA=" + }, + "@types/rx-core-binding": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/rx-core-binding/-/rx-core-binding-4.0.4.tgz", + "integrity": "sha512-5pkfxnC4w810LqBPUwP5bg7SFR/USwhMSaAeZQQbEHeBp57pjKXRlXmqpMrLJB4y1oglR/c2502853uN0I+DAQ==", + "requires": { + "@types/rx-core": "*" + } + }, + "@types/rx-lite": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/rx-lite/-/rx-lite-4.0.6.tgz", + "integrity": "sha512-oYiDrFIcor9zDm0VDUca1UbROiMYBxMLMaM6qzz4ADAfOmA9r1dYEcAFH+2fsPI5BCCjPvV9pWC3X3flbrvs7w==", + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*" + } + }, + "@types/rx-lite-aggregates": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.3.tgz", + "integrity": "sha512-MAGDAHy8cRatm94FDduhJF+iNS5//jrZ/PIfm+QYw9OCeDgbymFHChM8YVIvN2zArwsRftKgE33QfRWvQk4DPg==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-async": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/rx-lite-async/-/rx-lite-async-4.0.2.tgz", + "integrity": "sha512-vTEv5o8l6702ZwfAM5aOeVDfUwBSDOs+ARoGmWAKQ6LOInQ8J4/zjM7ov12fuTpktUKdMQjkeCp07Vd73mPkxw==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-backpressure": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.3.tgz", + "integrity": "sha512-Y6aIeQCtNban5XSAF4B8dffhIKu6aAy/TXFlScHzSxh6ivfQBQw6UjxyEJxIOt3IT49YkS+siuayM2H/Q0cmgA==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-coincidence": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.3.tgz", + "integrity": "sha512-1VNJqzE9gALUyMGypDXZZXzR0Tt7LC9DdAZQ3Ou/Q0MubNU35agVUNXKGHKpNTba+fr8GdIdkC26bRDqtCQBeQ==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-experimental": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz", + "integrity": "sha1-xTL1y98/LBXaFt7Ykw0bKYQCPL0=", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-joinpatterns": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz", + "integrity": "sha1-9w/jcFGKhDLykVjMkv+1a05K/D4=", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-testing": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz", + "integrity": "sha1-IbGdEfTf1v/vWp0WSOnIh5v+Iek=", + "requires": { + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-lite-time": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-time/-/rx-lite-time-4.0.3.tgz", + "integrity": "sha512-ukO5sPKDRwCGWRZRqPlaAU0SKVxmWwSjiOrLhoQDoWxZWg6vyB9XLEZViKOzIO6LnTIQBlk4UylYV0rnhJLxQw==", + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-virtualtime": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.3.tgz", + "integrity": "sha512-3uC6sGmjpOKatZSVHI2xB1+dedgml669ZRvqxy+WqmGJDVusOdyxcKfyzjW0P3/GrCiN4nmRkLVMhPwHCc5QLg==", + "requires": { + "@types/rx-lite": "*" + } + }, "acorn": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", @@ -1052,6 +1165,14 @@ "rx-lite": "*" } }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1232,10 +1353,12 @@ "requires": { "@types/form-data": "^2.2.1", "@types/isomorphic-fetch": "0.0.34", + "@types/rx": "^4.1.1", "btoa": "^1.2.1", "es6-promise": "^4.2.4", "form-data": "^2.3.2", "isomorphic-fetch": "^2.2.1", + "rxjs": "^6.4.0", "url-parse": "^1.4.3" }, "dependencies": { @@ -1254,6 +1377,106 @@ "version": "10.12.0", "bundled": true }, + "@types/rx": { + "version": "4.1.1", + "bundled": true, + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*", + "@types/rx-lite": "*", + "@types/rx-lite-aggregates": "*", + "@types/rx-lite-async": "*", + "@types/rx-lite-backpressure": "*", + "@types/rx-lite-coincidence": "*", + "@types/rx-lite-experimental": "*", + "@types/rx-lite-joinpatterns": "*", + "@types/rx-lite-testing": "*", + "@types/rx-lite-time": "*", + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-core": { + "version": "4.0.3", + "bundled": true + }, + "@types/rx-core-binding": { + "version": "4.0.4", + "bundled": true, + "requires": { + "@types/rx-core": "*" + } + }, + "@types/rx-lite": { + "version": "4.0.6", + "bundled": true, + "requires": { + "@types/rx-core": "*", + "@types/rx-core-binding": "*" + } + }, + "@types/rx-lite-aggregates": { + "version": "4.0.3", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-async": { + "version": "4.0.2", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-backpressure": { + "version": "4.0.3", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-coincidence": { + "version": "4.0.3", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-experimental": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-joinpatterns": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-testing": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@types/rx-lite-virtualtime": "*" + } + }, + "@types/rx-lite-time": { + "version": "4.0.3", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, + "@types/rx-lite-virtualtime": { + "version": "4.0.3", + "bundled": true, + "requires": { + "@types/rx-lite": "*" + } + }, "asynckit": { "version": "0.4.0", "bundled": true @@ -1313,14 +1536,14 @@ } }, "mime-db": { - "version": "1.37.0", + "version": "1.36.0", "bundled": true }, "mime-types": { - "version": "2.1.21", + "version": "2.1.20", "bundled": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "~1.36.0" } }, "node-fetch": { @@ -1339,10 +1562,25 @@ "version": "1.0.0", "bundled": true }, + "rxjs": { + "version": "6.4.0", + "bundled": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safer-buffer": { "version": "2.1.2", "bundled": true }, + "tslib": { + "version": "1.9.3", + "bundled": true + }, + "typescript": { + "version": "2.9.2", + "bundled": true + }, "url-parse": { "version": "1.4.3", "bundled": true, @@ -1366,6 +1604,11 @@ "strip-json-comments": "^2.0.0" } }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", diff --git a/samples/client/petstore/typescript/tests/default/package.json b/samples/client/petstore/typescript/tests/default/package.json index 1f924a40bf3..d88b1e07f9f 100644 --- a/samples/client/petstore/typescript/tests/default/package.json +++ b/samples/client/petstore/typescript/tests/default/package.json @@ -3,8 +3,10 @@ "dependencies": { "@types/form-data": "^2.2.1", "@types/rewire": "^2.5.28", + "@types/rx": "^4.1.1", "form-data": "^2.3.2", "rewire": "^4.0.1", + "rxjs": "^6.4.0", "ts-node": "^3.3.0", "ts-petstore-client": "file:../../builds/default" }, diff --git a/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts b/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts index 98c478995ce..813e5321eaa 100644 --- a/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts +++ b/samples/client/petstore/typescript/tests/default/test/api/PetApi.test.ts @@ -4,7 +4,7 @@ import { expect, assert } from "chai"; import * as fs from 'fs'; const configuration = new petstore.Configuration() -const petApi = new petstore.apis.PetApi(configuration) +const petApi = new petstore.apis.PromisePetApi(configuration) const tag = new petstore.models.Tag(); tag.name = "tag1" @@ -22,7 +22,7 @@ describe("PetApi", () =>{ it("addPet", (done) => { petApi.addPet(pet).then(() => { return petApi.getPetById(pet.id) - }).then((createdPet) => { + }).then((createdPet: petstore.models.Pet) => { expect(createdPet).to.deep.equal(pet); done() }).catch((err) => { diff --git a/samples/client/petstore/typescript/tests/default/test/http/isomorphic-fetch.test.ts b/samples/client/petstore/typescript/tests/default/test/http/isomorphic-fetch.test.ts index 3fa0113d37b..df08272870f 100644 --- a/samples/client/petstore/typescript/tests/default/test/http/isomorphic-fetch.test.ts +++ b/samples/client/petstore/typescript/tests/default/test/http/isomorphic-fetch.test.ts @@ -1,5 +1,6 @@ import * as petstore from "ts-petstore-client"; +import {map} from 'rxjs/operators'; import { expect} from "chai"; import * as FormData from "form-data"; @@ -17,16 +18,18 @@ for (let libName in libs) { let requestContext = new petstore.http.RequestContext("http://httpbin.org/get", petstore.http.HttpMethod.GET); requestContext.setHeaderParam("X-Test-Token", "Test-Token"); requestContext.addCookie("test-cookie", "cookie-value"); - lib.send(requestContext).then((resp: petstore.http.ResponseContext) => { - expect(resp.httpStatusCode, "Expected status code to be 200").to.eq(200); - let body = JSON.parse(resp.body); - expect(body["headers"]).to.exist; - expect(body["headers"]["X-Test-Token"]).to.equal("Test-Token"); - expect(body["headers"]["Cookie"]).to.equal("test-cookie=cookie-value;"); - done(); - }).catch((e) => { - done(e); - }) + lib.send(requestContext).subscribe((resp: petstore.http.ResponseContext) => { + expect(resp.httpStatusCode, "Expected status code to be 200").to.eq(200); + let body = JSON.parse(resp.body); + expect(body["headers"]).to.exist; + expect(body["headers"]["X-Test-Token"]).to.equal("Test-Token"); + expect(body["headers"]["Cookie"]).to.equal("test-cookie=cookie-value;"); + done(); + }, + (e: any) => { + done(e); + } + ) }) it("POST-Request", (done) => { @@ -38,32 +41,36 @@ for (let libName in libs) { formData.append("testFile", Buffer.from("abc"), "fileName.json"); requestContext.setBody(formData); - lib.send(requestContext).then((resp: petstore.http.ResponseContext) => { - expect(resp.httpStatusCode, "Expected status code to be 200").to.eq(200); - let body = JSON.parse(resp.body); - expect(body["headers"]).to.exist; - expect(body["headers"]["X-Test-Token"]).to.equal("Test-Token"); - expect(body["headers"]["Cookie"]).to.equal("test-cookie=cookie-value;"); - expect(body["files"]["testFile"]).to.equal("abc"); - expect(body["form"]["test"]).to.equal("test2"); - done(); - }).catch((e) => { - done(e); - }) + lib.send(requestContext).subscribe( + (resp: petstore.http.ResponseContext) => { + expect(resp.httpStatusCode, "Expected status code to be 200").to.eq(200); + let body = JSON.parse(resp.body); + expect(body["headers"]).to.exist; + expect(body["headers"]["X-Test-Token"]).to.equal("Test-Token"); + expect(body["headers"]["Cookie"]).to.equal("test-cookie=cookie-value;"); + expect(body["files"]["testFile"]).to.equal("abc"); + expect(body["form"]["test"]).to.equal("test2"); + done(); + }, + (e: any) => { + done(e); + }) }); it("Cookies-Request", (done) => { let requestContext = new petstore.http.RequestContext("http://httpbin.org/cookies", petstore.http.HttpMethod.GET); requestContext.addCookie("test-cookie", "cookie-value"); - lib.send(requestContext).then((resp: petstore.http.ResponseContext) => { - expect(resp.httpStatusCode, "Expected status code to be 200").to.eq(200); - let body = JSON.parse(resp.body); - expect(body["cookies"]["test-cookie"]).to.equal("cookie-value"); - done(); - }).catch((e) => { - done(e); - }) + lib.send(requestContext).subscribe( + (resp: petstore.http.ResponseContext) => { + expect(resp.httpStatusCode, "Expected status code to be 200").to.eq(200); + let body = JSON.parse(resp.body); + expect(body["cookies"]["test-cookie"]).to.equal("cookie-value"); + done(); + }, + (e: any) => { + done(e); + }) }) }) } \ No newline at end of file