From d33c4bb4a3d886b63f4296bf515da2dac29be80f Mon Sep 17 00:00:00 2001 From: Bernd Date: Mon, 21 Jan 2019 16:26:18 +0100 Subject: [PATCH] add new generator: typescript-rxjs (#1884) * Merged in feature/rxjs (pull request #2) Feature/rxjs * feat: duplicate typescript-fetch, add docs * duplicate fetch codegen to use for rxjs * remove mapping helpers from modesl * introduce rxjs, adjust apis * make middlewares work * fix namespace issue with babel * fix enum generation * fix formatting of enum * remove other readme * feat: duplicate typescript-fetch, add docs * duplicate fetch codegen to use for rxjs * remove mapping helpers from modesl * introduce rxjs, adjust apis * make middlewares work * fix namespace issue with babel * fix enum generation * fix formatting of enum * remove other readme * add bash scripts to generate samples * remove environment import * add rxjs dependency to package.mustache * add genereated samples * add docs * add windows scripts * adjust license info * update "ensure-up-to-date" by typescript-rxjs * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache Co-Authored-By: denyo * Update modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache Co-Authored-By: denyo * fix missing return for Observable * use shorthand syntax * improve linting * improve linting * revert previous changes * Revert "Update modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache" This reverts commit 26f65ca4ce29ab9ab4602e7cb0367895e93ddf4e. * recreate typescript-rxjs samples --- README.md | 3 +- bin/typescript-rxjs-petstore-all.sh | 6 + bin/typescript-rxjs-petstore-interfaces.sh | 32 ++ bin/typescript-rxjs-petstore-target-es6.json | 7 + bin/typescript-rxjs-petstore-target-es6.sh | 32 ++ ...script-rxjs-petstore-with-npm-version.json | 6 + ...pescript-rxjs-petstore-with-npm-version.sh | 32 ++ bin/typescript-rxjs-petstore.sh | 32 ++ bin/utils/ensure-up-to-date | 1 + bin/windows/typescript-rxjs-petstore-all.bat | 6 + .../typescript-rxjs-petstore-interfaces.bat | 12 + .../typescript-rxjs-petstore-target-es6.bat | 12 + ...escript-rxjs-petstore-with-npm-version.bat | 12 + bin/windows/typescript-rxjs-petstore.bat | 14 + docs/generators/README.md | 1 + docs/generators/typescript-rxjs.md | 37 ++ .../TypeScriptRxjsClientCodegen.java | 250 +++++++++++ .../org.openapitools.codegen.CodegenConfig | 1 + .../resources/typescript-rxjs/README.mustache | 45 ++ .../typescript-rxjs/apis.index.mustache | 7 + .../resources/typescript-rxjs/apis.mustache | 225 ++++++++++ .../resources/typescript-rxjs/index.mustache | 3 + .../typescript-rxjs/licenseInfo.mustache | 11 + .../typescript-rxjs/modelEnum.mustache | 12 + .../typescript-rxjs/modelGeneric.mustache | 43 ++ .../typescript-rxjs/models.index.mustache | 5 + .../resources/typescript-rxjs/models.mustache | 12 + .../typescript-rxjs/package.mustache | 23 + .../typescript-rxjs/runtime.mustache | 199 +++++++++ .../typescript-rxjs/tsconfig.mustache | 19 + .../builds/default/.openapi-generator-ignore | 23 + .../builds/default/.openapi-generator/VERSION | 1 + .../builds/default/apis/PetApi.ts | 400 ++++++++++++++++++ .../builds/default/apis/StoreApi.ts | 154 +++++++ .../builds/default/apis/UserApi.ts | 301 +++++++++++++ .../builds/default/apis/index.ts | 3 + .../typescript-rxjs/builds/default/index.ts | 3 + .../builds/default/models/ApiResponse.ts | 38 ++ .../builds/default/models/Category.ts | 32 ++ .../builds/default/models/Order.ts | 64 +++ .../builds/default/models/Pet.ts | 69 +++ .../builds/default/models/Tag.ts | 32 ++ .../builds/default/models/User.ts | 68 +++ .../builds/default/models/index.ts | 6 + .../typescript-rxjs/builds/default/runtime.ts | 210 +++++++++ .../builds/default/tsconfig.json | 18 + .../es6-target/.openapi-generator-ignore | 23 + .../es6-target/.openapi-generator/VERSION | 1 + .../builds/es6-target/README.md | 45 ++ .../builds/es6-target/apis/PetApi.ts | 400 ++++++++++++++++++ .../builds/es6-target/apis/StoreApi.ts | 154 +++++++ .../builds/es6-target/apis/UserApi.ts | 301 +++++++++++++ .../builds/es6-target/apis/index.ts | 3 + .../builds/es6-target/index.ts | 3 + .../builds/es6-target/models/ApiResponse.ts | 38 ++ .../builds/es6-target/models/Category.ts | 32 ++ .../builds/es6-target/models/Order.ts | 64 +++ .../builds/es6-target/models/Pet.ts | 69 +++ .../builds/es6-target/models/Tag.ts | 32 ++ .../builds/es6-target/models/User.ts | 68 +++ .../builds/es6-target/models/index.ts | 6 + .../builds/es6-target/package.json | 21 + .../builds/es6-target/runtime.ts | 210 +++++++++ .../builds/es6-target/tsconfig.json | 13 + .../with-interfaces/.openapi-generator-ignore | 23 + .../.openapi-generator/VERSION | 1 + .../builds/with-interfaces/apis/PetApi.ts | 400 ++++++++++++++++++ .../builds/with-interfaces/apis/StoreApi.ts | 154 +++++++ .../builds/with-interfaces/apis/UserApi.ts | 301 +++++++++++++ .../builds/with-interfaces/apis/index.ts | 3 + .../builds/with-interfaces/index.ts | 3 + .../with-interfaces/models/ApiResponse.ts | 38 ++ .../builds/with-interfaces/models/Category.ts | 32 ++ .../builds/with-interfaces/models/Order.ts | 64 +++ .../builds/with-interfaces/models/Pet.ts | 69 +++ .../builds/with-interfaces/models/Tag.ts | 32 ++ .../builds/with-interfaces/models/User.ts | 68 +++ .../builds/with-interfaces/models/index.ts | 6 + .../builds/with-interfaces/runtime.ts | 210 +++++++++ .../builds/with-interfaces/tsconfig.json | 18 + .../.openapi-generator-ignore | 23 + .../.openapi-generator/VERSION | 1 + .../builds/with-npm-version/README.md | 45 ++ .../builds/with-npm-version/apis/PetApi.ts | 400 ++++++++++++++++++ .../builds/with-npm-version/apis/StoreApi.ts | 154 +++++++ .../builds/with-npm-version/apis/UserApi.ts | 301 +++++++++++++ .../builds/with-npm-version/apis/index.ts | 3 + .../builds/with-npm-version/index.ts | 3 + .../with-npm-version/models/ApiResponse.ts | 38 ++ .../with-npm-version/models/Category.ts | 32 ++ .../builds/with-npm-version/models/Order.ts | 64 +++ .../builds/with-npm-version/models/Pet.ts | 69 +++ .../builds/with-npm-version/models/Tag.ts | 32 ++ .../builds/with-npm-version/models/User.ts | 68 +++ .../builds/with-npm-version/models/index.ts | 6 + .../builds/with-npm-version/package.json | 21 + .../builds/with-npm-version/runtime.ts | 210 +++++++++ .../builds/with-npm-version/tsconfig.json | 18 + 98 files changed, 6914 insertions(+), 1 deletion(-) create mode 100755 bin/typescript-rxjs-petstore-all.sh create mode 100755 bin/typescript-rxjs-petstore-interfaces.sh create mode 100644 bin/typescript-rxjs-petstore-target-es6.json create mode 100755 bin/typescript-rxjs-petstore-target-es6.sh create mode 100644 bin/typescript-rxjs-petstore-with-npm-version.json create mode 100755 bin/typescript-rxjs-petstore-with-npm-version.sh create mode 100755 bin/typescript-rxjs-petstore.sh create mode 100644 bin/windows/typescript-rxjs-petstore-all.bat create mode 100644 bin/windows/typescript-rxjs-petstore-interfaces.bat create mode 100644 bin/windows/typescript-rxjs-petstore-target-es6.bat create mode 100644 bin/windows/typescript-rxjs-petstore-with-npm-version.bat create mode 100644 bin/windows/typescript-rxjs-petstore.bat create mode 100644 docs/generators/typescript-rxjs.md create mode 100644 modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/README.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/apis.index.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/index.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/licenseInfo.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/modelEnum.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/modelGeneric.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/models.index.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/models.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/package.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache create mode 100644 modules/openapi-generator/src/main/resources/typescript-rxjs/tsconfig.mustache create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator-ignore create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/apis/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/ApiResponse.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/Category.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/Order.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/Pet.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/Tag.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/User.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/models/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/runtime.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/default/tsconfig.json create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator-ignore create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/README.md create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/apis/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/ApiResponse.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/Category.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/Order.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/Pet.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/Tag.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/User.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/models/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/package.json create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/es6-target/tsconfig.json create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator-ignore create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator/VERSION create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/ApiResponse.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Category.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Order.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Pet.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Tag.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/User.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-interfaces/tsconfig.json create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator-ignore create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/README.md create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/ApiResponse.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Category.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Order.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Pet.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Tag.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/User.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/index.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/package.json create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts create mode 100644 samples/client/petstore/typescript-rxjs/builds/with-npm-version/tsconfig.json diff --git a/README.md b/README.md index d937c03f7c4..e4c921dfc3b 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ OpenAPI Generator allows generation of API client libraries (SDK generation), se | | Languages/Frameworks | |-|-| -**API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later), **C++** (cpprest, Qt5, Tizen), **Clojure**, **Dart (1.x, 2.x)**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client), **Kotlin**, **Lua**, **Node.js** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types) **Objective-C**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (rust, rust-server), **Scala** (akka, http4s, scalaz, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x), **Typescript** (AngularJS, Angular (2.x - 7.x), Aurelia, Axios, Fetch, Inversify, jQuery, Node) +**API clients** | **ActionScript**, **Ada**, **Apex**, **Bash**, **C**, **C#** (.net 2.0, 3.5 or later), **C++** (cpprest, Qt5, Tizen), **Clojure**, **Dart (1.x, 2.x)**, **Elixir**, **Elm**, **Eiffel**, **Erlang**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client), **Kotlin**, **Lua**, **Node.js** (ES5, ES6, AngularJS with Google Closure Compiler annotations, Flow types) **Objective-C**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust** (rust, rust-server), **Scala** (akka, http4s, scalaz, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x), **Typescript** (AngularJS, Angular (2.x - 7.x), Aurelia, Axios, Fetch, Inversify, jQuery, Node, Rxjs) **Server stubs** | **Ada**, **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed), **Erlang**, **Go** (net/http, Gin), **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, RestEasy, Play Framework, [PKMST](https://github.com/ProKarma-Inc/pkmst-getting-started-examples)), **Kotlin** (Spring Boot), **PHP** (Laravel, Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust** (rust-server), **Scala** ([Finch](https://github.com/finagle/finch), [Lagom](https://github.com/lagom/lagom), Scalatra) **API documentation generators** | **HTML**, **Confluence Wiki** **Configuration files** | [**Apache2**](https://httpd.apache.org/) @@ -619,6 +619,7 @@ Here is a list of template creators: * TypeScript (Fetch): @leonyu * TypeScript (jQuery): @bherila * TypeScript (Node): @mhardorf + * TypeScript (Rxjs): @denyo * Server Stubs * Ada: @stcarrez * C# ASP.NET5: @jimschubert [:heart:](https://www.patreon.com/jimschubert) diff --git a/bin/typescript-rxjs-petstore-all.sh b/bin/typescript-rxjs-petstore-all.sh new file mode 100755 index 00000000000..2391a66637b --- /dev/null +++ b/bin/typescript-rxjs-petstore-all.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +./bin/typescript-rxjs-petstore-target-es6.sh +./bin/typescript-rxjs-petstore-with-npm-version.sh +./bin/typescript-rxjs-petstore-interfaces.sh +./bin/typescript-rxjs-petstore.sh diff --git a/bin/typescript-rxjs-petstore-interfaces.sh b/bin/typescript-rxjs-petstore-interfaces.sh new file mode 100755 index 00000000000..992073ba4e2 --- /dev/null +++ b/bin/typescript-rxjs-petstore-interfaces.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +SCRIPT="$0" +echo "# START SCRIPT: $SCRIPT" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn -B clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g typescript-rxjs -o samples/client/petstore/typescript-rxjs/builds/with-interfaces -D withInterfaces=true $@" + +java $JAVA_OPTS -jar $executable $ags diff --git a/bin/typescript-rxjs-petstore-target-es6.json b/bin/typescript-rxjs-petstore-target-es6.json new file mode 100644 index 00000000000..319144440c1 --- /dev/null +++ b/bin/typescript-rxjs-petstore-target-es6.json @@ -0,0 +1,7 @@ +{ + "npmName": "@swagger/typescript-rxjs-petstore", + "npmVersion": "1.0.0", + "npmRepository" : "https://skimdb.npmjs.com/registry", + "snapshot" : false, + "supportsES6": true +} diff --git a/bin/typescript-rxjs-petstore-target-es6.sh b/bin/typescript-rxjs-petstore-target-es6.sh new file mode 100755 index 00000000000..57d1ec97400 --- /dev/null +++ b/bin/typescript-rxjs-petstore-target-es6.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +SCRIPT="$0" +echo "# START SCRIPT: $SCRIPT" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn -B clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g typescript-rxjs -c bin/typescript-rxjs-petstore-target-es6.json -o samples/client/petstore/typescript-rxjs/builds/es6-target $@" + +java $JAVA_OPTS -jar $executable $ags \ No newline at end of file diff --git a/bin/typescript-rxjs-petstore-with-npm-version.json b/bin/typescript-rxjs-petstore-with-npm-version.json new file mode 100644 index 00000000000..c24b48f4f4f --- /dev/null +++ b/bin/typescript-rxjs-petstore-with-npm-version.json @@ -0,0 +1,6 @@ +{ + "npmName": "@swagger/typescript-rxjs-petstore", + "npmVersion": "1.0.0", + "npmRepository" : "https://skimdb.npmjs.com/registry", + "snapshot" : false +} diff --git a/bin/typescript-rxjs-petstore-with-npm-version.sh b/bin/typescript-rxjs-petstore-with-npm-version.sh new file mode 100755 index 00000000000..afc827ed7ae --- /dev/null +++ b/bin/typescript-rxjs-petstore-with-npm-version.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +SCRIPT="$0" +echo "# START SCRIPT: $SCRIPT" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn -B clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g typescript-rxjs -c bin/typescript-rxjs-petstore-with-npm-version.json -o samples/client/petstore/typescript-rxjs/builds/with-npm-version $@" + +java $JAVA_OPTS -jar $executable $ags \ No newline at end of file diff --git a/bin/typescript-rxjs-petstore.sh b/bin/typescript-rxjs-petstore.sh new file mode 100755 index 00000000000..0987a533903 --- /dev/null +++ b/bin/typescript-rxjs-petstore.sh @@ -0,0 +1,32 @@ +#!/bin/sh + +SCRIPT="$0" +echo "# START SCRIPT: $SCRIPT" + +while [ -h "$SCRIPT" ] ; do + ls=`ls -ld "$SCRIPT"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + SCRIPT="$link" + else + SCRIPT=`dirname "$SCRIPT"`/"$link" + fi +done + +if [ ! -d "${APP_DIR}" ]; then + APP_DIR=`dirname "$SCRIPT"`/.. + APP_DIR=`cd "${APP_DIR}"; pwd` +fi + +executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar" + +if [ ! -f "$executable" ] +then + mvn -B clean package +fi + +# if you've executed sbt assembly previously it will use that instead. +export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" +ags="generate -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -g typescript-rxjs -o samples/client/petstore/typescript-rxjs/builds/default $@" + +java $JAVA_OPTS -jar $executable $ags \ No newline at end of file diff --git a/bin/utils/ensure-up-to-date b/bin/utils/ensure-up-to-date index 3302a6483cb..d358e59f396 100755 --- a/bin/utils/ensure-up-to-date +++ b/bin/utils/ensure-up-to-date @@ -32,6 +32,7 @@ declare -a scripts=("./bin/openapi3/ruby-client-petstore.sh" "./bin/typescript-fetch-petstore-all.sh" "./bin/typescript-node-petstore-all.sh" "./bin/typescript-inversify-petstore.sh" +"./bin/typescript-rxjs-petstore.sh" "./bin/rust-server-petstore.sh" "./bin/haskell-http-client-petstore.sh" "./bin/csharp-petstore.sh" diff --git a/bin/windows/typescript-rxjs-petstore-all.bat b/bin/windows/typescript-rxjs-petstore-all.bat new file mode 100644 index 00000000000..d86cf0d574d --- /dev/null +++ b/bin/windows/typescript-rxjs-petstore-all.bat @@ -0,0 +1,6 @@ +@ECHO OFF + +call bin\windows\typescript-rxjs-petstore.bat +call bin\windows\typescript-rxjs-petstore-target-es6.bat +call bin\windows\typescript-rxjs-petstore-with-npm-version.bat +call bin\windows\typescript-rxjs-petstore-interfaces.bat diff --git a/bin/windows/typescript-rxjs-petstore-interfaces.bat b/bin/windows/typescript-rxjs-petstore-interfaces.bat new file mode 100644 index 00000000000..401ccb7b376 --- /dev/null +++ b/bin/windows/typescript-rxjs-petstore-interfaces.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar + +If Not Exist %executable% ( + mvn clean package +) + +REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M +set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore.yaml -g typescript-rxjs -o samples\client\petstore\typescript-rxjs\builds\with-interfaces -D withInterfaces=true + +java %JAVA_OPTS% -jar %executable% %ags% diff --git a/bin/windows/typescript-rxjs-petstore-target-es6.bat b/bin/windows/typescript-rxjs-petstore-target-es6.bat new file mode 100644 index 00000000000..7a7151fdc3f --- /dev/null +++ b/bin/windows/typescript-rxjs-petstore-target-es6.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar + +If Not Exist %executable% ( + mvn clean package +) + +REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M +set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore.yaml -g typescript-rxjs -c bin\typescript-rxjs-petstore-target-es6.json -o samples\client\petstore\typescript-rxjs\builds\es6-target + +java %JAVA_OPTS% -jar %executable% %ags% diff --git a/bin/windows/typescript-rxjs-petstore-with-npm-version.bat b/bin/windows/typescript-rxjs-petstore-with-npm-version.bat new file mode 100644 index 00000000000..2bd3875d73c --- /dev/null +++ b/bin/windows/typescript-rxjs-petstore-with-npm-version.bat @@ -0,0 +1,12 @@ +@ECHO OFF + +set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar + +If Not Exist %executable% ( + mvn clean package +) + +REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M +set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore.yaml -g typescript-rxjs -c bin\typescript-rxjs-petstore-with-npm-version.json -o samples\client\petstore\typescript-rxjs\builds\with-npm-version + +java %JAVA_OPTS% -jar %executable% %ags% diff --git a/bin/windows/typescript-rxjs-petstore.bat b/bin/windows/typescript-rxjs-petstore.bat new file mode 100644 index 00000000000..025b967addb --- /dev/null +++ b/bin/windows/typescript-rxjs-petstore.bat @@ -0,0 +1,14 @@ +@ECHO OFF + +set executable=.\modules\openapi-generator-cli\target\openapi-generator-cli.jar + +If Not Exist %executable% ( + mvn clean package +) + +REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M + +echo +set ags=generate -i modules\openapi-generator\src\test\resources\2_0\petstore.yaml -g typescript-rxjs -o samples\client\petstore\typescript-rxjs\builds\default + +java %JAVA_OPTS% -jar %executable% %ags% diff --git a/docs/generators/README.md b/docs/generators/README.md index 79dff0e6def..6c3328cc072 100644 --- a/docs/generators/README.md +++ b/docs/generators/README.md @@ -55,6 +55,7 @@ The following generators are available: - [typescript-inversify](typescript-inversify.md) - [typescript-jquery](typescript-jquery.md) - [typescript-node](typescript-node.md) + - [typescript-rxjs](typescript-rxjs.md) * SERVER generators: diff --git a/docs/generators/typescript-rxjs.md b/docs/generators/typescript-rxjs.md new file mode 100644 index 00000000000..9a2fa940761 --- /dev/null +++ b/docs/generators/typescript-rxjs.md @@ -0,0 +1,37 @@ + +CONFIG OPTIONS for typescript-rxjs + + sortParamsByRequiredFlag + Sort method arguments to place required parameters before optional parameters. (Default: true) + + ensureUniqueParams + Whether to ensure parameter names are unique in an operation (rename parameters that are not). (Default: true) + + allowUnicodeIdentifiers + boolean, toggles whether unicode identifiers are allowed in names or not, default is false (Default: false) + + prependFormOrBodyParameters + Add form or body parameters to the beginning of the parameter list. (Default: false) + + modelPropertyNaming + Naming convention for the property: 'camelCase', 'PascalCase', 'snake_case' and 'original', which keeps the original name (Default: camelCase) + + supportsES6 + Generate code that conforms to ES6. (Default: false) + + npmName + The name under which you want to publish generated npm package + + npmVersion + The version of your npm package + + npmRepository + Use this property to set an url your private npmRepo in the package.json + + snapshot + When setting this property to true the version will be suffixed with -SNAPSHOT.yyyyMMddHHmm (Default: false) + + withInterfaces + Setting this property to true will generate interfaces next to the default class implementations. (Default: false) + +Back to the [generators list](README.md) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java new file mode 100644 index 00000000000..508baf41536 --- /dev/null +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptRxjsClientCodegen.java @@ -0,0 +1,250 @@ +/* + * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * See: https://opensource.stackexchange.com/questions/7300/copyright-notice-in-the-file-header-apache-v2-license/7301#7301 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openapitools.codegen.languages; + +import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.parser.util.SchemaTypeUtil; +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.CodegenModel; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.CodegenParameter; +import org.openapitools.codegen.CodegenConstants; +import org.openapitools.codegen.SupportingFile; +import org.openapitools.codegen.CodegenConstants.MODEL_PROPERTY_NAMING_TYPE; +import org.openapitools.codegen.utils.ModelUtils; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.Map; +import java.util.List; + +public class TypeScriptRxjsClientCodegen extends AbstractTypeScriptClientCodegen { + private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm", Locale.ROOT); + + public static final String NPM_NAME = "npmName"; + public static final String NPM_VERSION = "npmVersion"; + public static final String NPM_REPOSITORY = "npmRepository"; + public static final String SNAPSHOT = "snapshot"; + public static final String WITH_INTERFACES = "withInterfaces"; + + protected String npmName = null; + protected String npmVersion = "1.0.0"; + protected String npmRepository = null; + + public TypeScriptRxjsClientCodegen() { + super(); + + // clear import mapping (from default generator) as TS does not use it + // at the moment + importMapping.clear(); + + outputFolder = "generated-code/typescript-rxjs"; + embeddedTemplateDir = templateDir = "typescript-rxjs"; + + this.apiPackage = "apis"; + this.apiTemplateFiles.put("apis.mustache", ".ts"); + this.modelPackage = "models"; + this.modelTemplateFiles.put("models.mustache", ".ts"); + this.addExtraReservedWords(); + + this.cliOptions.add(new CliOption(NPM_NAME, "The name under which you want to publish generated npm package")); + this.cliOptions.add(new CliOption(NPM_VERSION, "The version of your npm package")); + this.cliOptions.add(new CliOption(NPM_REPOSITORY, "Use this property to set an url your private npmRepo in the package.json")); + this.cliOptions.add(new CliOption(SNAPSHOT, "When setting this property to true the version will be suffixed with -SNAPSHOT.yyyyMMddHHmm", SchemaTypeUtil.BOOLEAN_TYPE).defaultValue(Boolean.FALSE.toString())); + this.cliOptions.add(new CliOption(WITH_INTERFACES, "Setting this property to true will generate interfaces next to the default class implementations.", SchemaTypeUtil.BOOLEAN_TYPE).defaultValue(Boolean.FALSE.toString())); + } + + @Override + public String getName() { + return "typescript-rxjs"; + } + + @Override + public String getHelp() { + return "Generates a TypeScript client library using Rxjs API."; + } + + public String getNpmName() { + return npmName; + } + + public void setNpmName(String npmName) { + this.npmName = npmName; + } + + public String getNpmVersion() { + return npmVersion; + } + + public void setNpmVersion(String npmVersion) { + this.npmVersion = npmVersion; + } + + public String getNpmRepository() { + return npmRepository; + } + + public void setNpmRepository(String npmRepository) { + this.npmRepository = npmRepository; + } + + @Override + public void processOpts() { + super.processOpts(); + additionalProperties.put("isOriginalModelPropertyNaming", getModelPropertyNaming().equals("original")); + additionalProperties.put("modelPropertyNaming", getModelPropertyNaming()); + supportingFiles.add(new SupportingFile("index.mustache", "", "index.ts")); + supportingFiles.add(new SupportingFile("runtime.mustache", "", "runtime.ts")); + supportingFiles.add(new SupportingFile("apis.index.mustache", apiPackage().replace('.', File.separatorChar), "index.ts")); + supportingFiles.add(new SupportingFile("models.index.mustache", modelPackage().replace('.', File.separatorChar), "index.ts")); + supportingFiles.add(new SupportingFile("tsconfig.mustache", "", "tsconfig.json")); + if (additionalProperties.containsKey(NPM_NAME)) { + addNpmPackageGeneration(); + } + } + + @Override + public String getTypeDeclaration(Schema p) { + Schema inner; + if (ModelUtils.isArraySchema(p)) { + inner = ((ArraySchema) p).getItems(); + return this.getSchemaType(p) + "<" + this.getTypeDeclaration(inner) + ">"; + } else if (ModelUtils.isMapSchema(p)) { + inner = ModelUtils.getAdditionalProperties(p); + return "{ [key: string]: " + this.getTypeDeclaration(inner) + "; }"; + } else if (ModelUtils.isFileSchema(p)) { + return "Blob"; + } else if (ModelUtils.isBinarySchema(p)) { + return "Blob"; + } else if (ModelUtils.isDateSchema(p)) { + return "Date"; + } else if (ModelUtils.isDateTimeSchema(p)) { + return "Date"; + } + return super.getTypeDeclaration(p); + } + + @Override + protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) { + codegenModel.additionalPropertiesType = getTypeDeclaration(ModelUtils.getAdditionalProperties(schema)); + addImport(codegenModel, codegenModel.additionalPropertiesType); + } + + @Override + public Map postProcessModels(Map objs) { + // don't do enum modifications + return objs; + } + + @Override + public Map postProcessAllModels(Map objs) { + Map result = super.postProcessAllModels(objs); + for (Map.Entry entry : result.entrySet()) { + Map inner = (Map) entry.getValue(); + List> models = (List>) inner.get("models"); + for (Map model : models) { + CodegenModel codegenModel = (CodegenModel) model.get("model"); + model.put("hasImports", codegenModel.imports.size() > 0); + } + } + return result; + } + + private void addNpmPackageGeneration() { + if (additionalProperties.containsKey(NPM_NAME)) { + this.setNpmName(additionalProperties.get(NPM_NAME).toString()); + } + + if (additionalProperties.containsKey(NPM_VERSION)) { + this.setNpmVersion(additionalProperties.get(NPM_VERSION).toString()); + } + + if (additionalProperties.containsKey(SNAPSHOT) && Boolean.valueOf(additionalProperties.get(SNAPSHOT).toString())) { + this.setNpmVersion(npmVersion + "-SNAPSHOT." + SNAPSHOT_SUFFIX_FORMAT.format(new Date())); + } + additionalProperties.put(NPM_VERSION, npmVersion); + + if (additionalProperties.containsKey(NPM_REPOSITORY)) { + this.setNpmRepository(additionalProperties.get(NPM_REPOSITORY).toString()); + } + + //Files for building our lib + supportingFiles.add(new SupportingFile("README.mustache", "", "README.md")); + supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); + } + + @Override + public Map postProcessOperationsWithModels(Map operations, List allModels) { + this.addOperationModelImportInfomation(operations); + this.updateOperationParameterEnumInformation(operations); + return operations; + } + + private void addOperationModelImportInfomation(Map operations) { + // This method will add extra infomation to the operations.imports array. + // The api template uses this infomation to import all the required + // models for a given operation. + List> imports = (List>) operations.get("imports"); + for (Map im : imports) { + im.put("className", im.get("import").toString().replace("models.", "")); + } + } + + private void updateOperationParameterEnumInformation(Map operations) { + // This method will add extra infomation as to whether or not we have enums and + // update their names with the operation.id prefixed. + Map _operations = (Map) operations.get("operations"); + List operationList = (List) _operations.get("operation"); + boolean hasEnum = false; + for (CodegenOperation op : operationList) { + for (CodegenParameter param : op.allParams) { + if (Boolean.TRUE.equals(param.isEnum)) { + hasEnum = true; + param.datatypeWithEnum = param.datatypeWithEnum + .replace(param.enumName, op.operationIdCamelCase + param.enumName); + } + } + } + + operations.put("hasEnums", hasEnum); + } + + private void addExtraReservedWords() { + this.reservedWords.add("BASE_PATH"); + this.reservedWords.add("BaseAPI"); + this.reservedWords.add("RequiredError"); + this.reservedWords.add("COLLECTION_FORMATS"); + this.reservedWords.add("ConfigurationParameters"); + this.reservedWords.add("Configuration"); + this.reservedWords.add("HttpMethod"); + this.reservedWords.add("HttpHeaders"); + this.reservedWords.add("HttpQuery"); + this.reservedWords.add("HttpBody"); + this.reservedWords.add("ModelPropertyNaming"); + this.reservedWords.add("RequestArgs"); + this.reservedWords.add("RequestOpts"); + this.reservedWords.add("exists"); + this.reservedWords.add("RequestContext"); + this.reservedWords.add("ResponseContext"); + this.reservedWords.add("Middleware"); + this.reservedWords.add("AjaxResponse"); + } +} diff --git a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig index fd1884948ce..c5e74173631 100644 --- a/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig +++ b/modules/openapi-generator/src/main/resources/META-INF/services/org.openapitools.codegen.CodegenConfig @@ -102,3 +102,4 @@ org.openapitools.codegen.languages.TypeScriptFetchClientCodegen org.openapitools.codegen.languages.TypeScriptInversifyClientCodegen org.openapitools.codegen.languages.TypeScriptJqueryClientCodegen org.openapitools.codegen.languages.TypeScriptNodeClientCodegen +org.openapitools.codegen.languages.TypeScriptRxjsClientCodegen diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/README.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/README.mustache new file mode 100644 index 00000000000..4cf502cb67a --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/README.mustache @@ -0,0 +1,45 @@ +## {{npmName}}@{{npmVersion}} + +This generator creates TypeScript/JavaScript client that utilizes [Fetch API](https://fetch.spec.whatwg.org/). The generated Node module can be used in the following environments: + +Environment +* Node.js +* Webpack +* Browserify + +Language level +* ES5 - you must have a Promises/A+ library installed +* ES6 + +Module system +* CommonJS +* ES6 module system + +It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html)) + +### Building + +To build and compile the typescript sources to javascript use: +``` +npm install +npm run build +``` + +### Publishing + +First build the package then run ```npm publish``` + +### Consuming + +navigate to the folder of your consuming project and run one of the following commands. + +_published:_ + +``` +npm install {{npmName}}@{{npmVersion}} --save +``` + +_unPublished (not recommended):_ + +``` +npm install PATH_TO_GENERATED_PACKAGE --save diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.index.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.index.mustache new file mode 100644 index 00000000000..6286332d7bc --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.index.mustache @@ -0,0 +1,7 @@ +{{#apiInfo}} +{{#apis}} +{{#operations}} +export * from './{{ classFilename }}'; +{{/operations}} +{{/apis}} +{{/apiInfo}} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache new file mode 100644 index 00000000000..df02384261e --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/apis.mustache @@ -0,0 +1,225 @@ +// tslint:disable +{{>licenseInfo}} +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +{{#imports.0}} +import { + {{#imports}} + {{className}}, + {{/imports}} +} from '../models'; +{{/imports.0}} + +{{#operations}} +{{#operation}} +{{#allParams.0}} +export interface {{operationIdCamelCase}}Request { + {{#allParams}} + {{paramName}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}; + {{/allParams}} +} + +{{/allParams.0}} +{{/operation}} +{{/operations}} +{{#operations}} +/** + * {{#description}}{{{description}}}{{/description}}{{^description}}no description{{/description}} + */ +export class {{classname}} extends BaseAPI { + + {{#operation}} + /** + {{#notes}} + * {{¬es}} + {{/notes}} + {{#summary}} + * {{&summary}} + {{/summary}} + */ + {{nickname}}Raw({{#allParams.0}}requestParameters: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { + {{#allParams}} + {{#required}} + if (requestParameters.{{paramName}} === null || requestParameters.{{paramName}} === undefined) { + throw new RequiredError('{{paramName}}','Required parameter requestParameters.{{paramName}} was null or undefined when calling {{nickname}}.'); + } + + {{/required}} + {{/allParams}} + const queryParameters: HttpQuery = {}; + + {{#queryParams}} + {{#isListContainer}} + if (requestParameters.{{paramName}}) { + {{#isCollectionFormatMulti}} + queryParameters['{{baseName}}'] = requestParameters.{{paramName}}; + {{/isCollectionFormatMulti}} + {{^isCollectionFormatMulti}} + queryParameters['{{baseName}}'] = requestParameters.{{paramName}}.join(COLLECTION_FORMATS["{{collectionFormat}}"]); + {{/isCollectionFormatMulti}} + } + + {{/isListContainer}} + {{^isListContainer}} + if (requestParameters.{{paramName}} !== undefined && requestParameters.{{paramName}} !== null) { + {{#isDateTime}} + queryParameters['{{baseName}}'] = (requestParameters.{{paramName}} as any).toISOString(); + {{/isDateTime}} + {{^isDateTime}} + {{#isDate}} + queryParameters['{{baseName}}'] = (requestParameters.{{paramName}} as any).toISOString(); + {{/isDate}} + {{^isDate}} + queryParameters['{{baseName}}'] = requestParameters.{{paramName}}; + {{/isDate}} + {{/isDateTime}} + } + + {{/isListContainer}} + {{/queryParams}} + const headerParameters: HttpHeaders = {}; + + {{#bodyParam}} + {{^consumes}} + headerParameters['Content-Type'] = 'application/json'; + + {{/consumes}} + {{#consumes.0}} + headerParameters['Content-Type'] = '{{{mediaType}}}'; + + {{/consumes.0}} + {{/bodyParam}} + {{#headerParams}} + {{#isListContainer}} + if (requestParameters.{{paramName}}) { + headerParameters['{{baseName}}'] = requestParameters.{{paramName}}.join(COLLECTION_FORMATS["{{collectionFormat}}"])); + } + + {{/isListContainer}} + {{^isListContainer}} + if (requestParameters.{{paramName}} !== undefined && requestParameters.{{paramName}} !== null) { + headerParameters['{{baseName}}'] = String(requestParameters.{{paramName}}); + } + + {{/isListContainer}} + {{/headerParams}} + {{#authMethods}} + {{#isBasic}} + if (this.configuration && (this.configuration.username !== undefined || this.configuration.password !== undefined)) { + headerParameters["Authorization"] = "Basic " + btoa(this.configuration.username + ":" + this.configuration.password); + } + + {{/isBasic}} + {{#isApiKey}} + {{#isKeyInHeader}} + if (this.configuration && this.configuration.apiKey) { + headerParameters["{{keyParamName}}"] = this.configuration.apiKey("{{keyParamName}}"); // {{name}} authentication + } + + {{/isKeyInHeader}} + {{#isKeyInQuery}} + if (this.configuration && this.configuration.apiKey) { + queryParameters["{{keyParamName}}"] = this.configuration.apiKey("{{keyParamName}}"); // {{name}} authentication + } + + {{/isKeyInQuery}} + {{/isApiKey}} + {{#isOAuth}} + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + {{/isOAuth}} + {{/authMethods}} + {{#hasFormParams}} + const formData = new FormData(); + {{/hasFormParams}} + {{#formParams}} + {{#isListContainer}} + if (requestParameters.{{paramName}}) { + {{#isCollectionFormatMulti}} + requestParameters.{{paramName}}.forEach((element) => { + formData.append('{{baseName}}', element as any); + }) + {{/isCollectionFormatMulti}} + {{^isCollectionFormatMulti}} + formData.append('{{baseName}}', requestParameters.{{paramName}}.join(COLLECTION_FORMATS["{{collectionFormat}}"])); + {{/isCollectionFormatMulti}} + } + + {{/isListContainer}} + {{^isListContainer}} + if (requestParameters.{{paramName}} !== undefined) { + formData.append('{{baseName}}', requestParameters.{{paramName}} as any); + } + + {{/isListContainer}} + {{/formParams}} + return this.request<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}>({ + path: `{{{path}}}`{{#pathParams}}.replace(`{${"{{baseName}}"}}`, encodeURIComponent(String(requestParameters.{{paramName}}))){{/pathParams}}, + method: '{{httpMethod}}', + headers: headerParameters, + query: queryParameters, + {{#hasBodyParam}} + {{#bodyParam}} + {{#isContainer}} + body: requestParameters.{{paramName}}, + {{/isContainer}} + {{^isContainer}} + {{^isPrimitiveType}} + body: requestParameters.{{paramName}}, + {{/isPrimitiveType}} + {{#isPrimitiveType}} + body: requestParameters.{{paramName}} as any, + {{/isPrimitiveType}} + {{/isContainer}} + {{/bodyParam}} + {{/hasBodyParam}} + {{#hasFormParams}} + body: formData, + {{/hasFormParams}} + }); + } + + /** + {{#notes}} + * {{¬es}} + {{/notes}} + {{#summary}} + * {{&summary}} + {{/summary}} + */ + {{nickname}}({{#allParams.0}}requestParameters: {{operationIdCamelCase}}Request{{/allParams.0}}): Observable<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> { + return this.{{nickname}}Raw({{#allParams.0}}requestParameters{{/allParams.0}}); + } + + {{/operation}} +} +{{/operations}} +{{#hasEnums}} + +{{#operations}} +{{#operation}} +{{#allParams}} +{{#isEnum}} +/** + * @export + * @enum {string} + */ +export enum {{operationIdCamelCase}}{{enumName}} { +{{#allowableValues}} + {{#enumVars}} + {{{name}}} = {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} +{{/allowableValues}} +} +{{/isEnum}} +{{/allParams}} +{{/operation}} +{{/operations}} +{{/hasEnums}} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/index.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/index.mustache new file mode 100644 index 00000000000..848ecfa4d10 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/index.mustache @@ -0,0 +1,3 @@ +export * from './runtime'; +export * from './apis'; +export * from './models'; diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/licenseInfo.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/licenseInfo.mustache new file mode 100644 index 00000000000..469fb03940f --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/licenseInfo.mustache @@ -0,0 +1,11 @@ +/** + * {{{appName}}} + * {{{appDescription}}} + * + * {{#version}}OpenAPI spec version: {{{version}}}{{/version}} + * {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/modelEnum.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/modelEnum.mustache new file mode 100644 index 00000000000..dc04cb0bd63 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/modelEnum.mustache @@ -0,0 +1,12 @@ +/** + * {{{description}}} + * @export + * @enum {string} + */ +export enum {{classname}} { +{{#allowableValues}} +{{#enumVars}} + {{{name}}} = {{{value}}}{{^-last}},{{/-last}} +{{/enumVars}} +{{/allowableValues}} +} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/modelGeneric.mustache new file mode 100644 index 00000000000..331b03ea1d3 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/modelGeneric.mustache @@ -0,0 +1,43 @@ +{{#hasImports}} +import { + {{#imports}} + {{{.}}}, + {{/imports}} +} from './'; + +{{/hasImports}} +/**{{#description}} + * {{{description}}}{{/description}} + * @export + * @interface {{classname}} + */ +export interface {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{ +{{#additionalPropertiesType}} + [key: string]: {{{additionalPropertiesType}}}{{#hasVars}} | any{{/hasVars}}; +{{/additionalPropertiesType}} +{{#vars}} + /** + * {{{description}}} + * @type {{=<% %>=}}{<%&datatype%>}<%={{ }}=%> + * @memberof {{classname}} + */ + {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{datatype}}}{{/isEnum}}; +{{/vars}} +}{{#hasEnums}} + +{{#vars}} +{{#isEnum}} +/** + * @export + * @enum {string} + */ +export enum {{enumName}} { +{{#allowableValues}} + {{#enumVars}} + {{{name}}} = {{{value}}}{{^-last}},{{/-last}} + {{/enumVars}} +{{/allowableValues}} +} +{{/isEnum}} +{{/vars}} +{{/hasEnums}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/models.index.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/models.index.mustache new file mode 100644 index 00000000000..02a39c248c4 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/models.index.mustache @@ -0,0 +1,5 @@ +{{#models}} +{{#model}} +export * from './{{{ classFilename }}}'; +{{/model}} +{{/models}} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/models.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/models.mustache new file mode 100644 index 00000000000..ff9993dc14c --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/models.mustache @@ -0,0 +1,12 @@ +// tslint:disable +{{>licenseInfo}} +{{#models}} +{{#model}} +{{#isEnum}} +{{>modelEnum}} +{{/isEnum}} +{{^isEnum}} +{{>modelGeneric}} +{{/isEnum}} +{{/model}} +{{/models}} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/package.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/package.mustache new file mode 100644 index 00000000000..4da6b0e44d5 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/package.mustache @@ -0,0 +1,23 @@ +{ + "name": "{{npmName}}", + "version": "{{npmVersion}}", + "description": "OpenAPI client for {{npmName}}", + "author": "OpenAPI-Generator", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "scripts" : { + "build": "tsc --outDir dist/", + "prepare": "npm run build" + }, + "dependencies": { + "rxjs": "^6.3.3", + }, + "devDependencies": { + "typescript": "^2.4" + }{{#npmRepository}},{{/npmRepository}} +{{#npmRepository}} + "publishConfig":{ + "registry":"{{npmRepository}}" + } +{{/npmRepository}} +} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache new file mode 100644 index 00000000000..a3644702312 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/runtime.mustache @@ -0,0 +1,199 @@ +// tslint:disable +{{>licenseInfo}} +import { Observable, of } from 'rxjs'; +import { ajax, AjaxResponse } from 'rxjs/ajax'; +import { map, concatMap } from 'rxjs/operators'; + +export const BASE_PATH = '{{{basePath}}}'.replace(/\/+$/, ''); + +export interface ConfigurationParameters { + basePath?: string; // override base path + middleware?: Middleware[]; // middleware to apply before/after rxjs requests + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | ((name: string) => string); // parameter for apiKey security + accessToken?: string | ((name: string, scopes?: string[]) => string); // parameter for oauth2 security +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + get basePath(): string { + return this.configuration.basePath || BASE_PATH; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : () => accessToken; + } + return undefined; + } +} + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + private middleware: Middleware[]; + + constructor(protected configuration = new Configuration()) { + this.middleware = configuration.middleware; + } + + withMiddleware(this: T, ...middlewares: Middleware[]) { + const next = this.clone(); + next.middleware = next.middleware.concat(...middlewares); + return next; + } + + withPreMiddleware(this: T, ...preMiddlewares: Array) { + const middlewares = preMiddlewares.map((pre) => ({ pre })); + return this.withMiddleware(...middlewares); + } + + withPostMiddleware(this: T, ...postMiddlewares: Array) { + const middlewares = postMiddlewares.map((post) => ({ post })); + return this.withMiddleware(...middlewares); + } + + protected request(context: RequestOpts): Observable { + return this.rxjsRequest(this.createRequestArgs(context)).pipe( + map((res) => { + if (res.status >= 200 && res.status < 300) { + return res.response as T; + } + throw res; + }) + ); + } + + private createRequestArgs(context: RequestOpts): RequestArgs { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a '?' character which buggy webservers + // do not handle correctly sometimes. + url += '?' + querystring(context.query); + } + const body = context.body instanceof FormData ? context.body : JSON.stringify(context.body); + const options = { + method: context.method, + headers: context.headers, + body, + }; + return { url, options }; + } + + private rxjsRequest(params: RequestContext): Observable { + const preMiddlewares = this.middleware && this.middleware.filter((item) => item.pre); + const postMiddlewares = this.middleware && this.middleware.filter((item) => item.post); + + return of(params).pipe( + map((args) => { + if (preMiddlewares) { + preMiddlewares.forEach((mw) => (args = mw.pre({ ...args }))); + } + return args; + }), + concatMap((args) => + ajax({ url: args.url, ...args.options }).pipe( + map((response) => { + if (postMiddlewares) { + postMiddlewares.forEach((mw) => (response = mw.post({ ...params, response }))); + } + return response; + }) + ) + ) + ); + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +} + +export class RequiredError extends Error { + name: 'RequiredError' = 'RequiredError'; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ',', + ssv: ' ', + tsv: '\t', + pipes: '|', +}; + +export type Json = any; +export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS'; +export type HttpHeaders = { [key: string]: string }; +export type HttpQuery = { [key: string]: string | number | null | boolean | Array }; +export type HttpBody = Json | FormData; +export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; + +export interface RequestArgs { + url: string; + options: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HttpMethod; + headers: HttpHeaders; + query?: HttpQuery; + body?: HttpBody; +} + +export function querystring(params: HttpQuery): string { + return Object.keys(params) + .map((key) => { + const value = params[key]; + if (value instanceof Array) { + return value.map((val) => `${encodeURIComponent(key)}=${encodeURIComponent(String(val))}`) + .join('&'); + } + return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`; + }) + .join('&'); +} + +export interface RequestContext extends RequestArgs {} +export interface ResponseContext extends RequestArgs { + response: AjaxResponse; +} + +export interface Middleware { + pre?(context: RequestContext): RequestArgs; + post?(context: ResponseContext): AjaxResponse; +} diff --git a/modules/openapi-generator/src/main/resources/typescript-rxjs/tsconfig.mustache b/modules/openapi-generator/src/main/resources/typescript-rxjs/tsconfig.mustache new file mode 100644 index 00000000000..33d10cd9f5e --- /dev/null +++ b/modules/openapi-generator/src/main/resources/typescript-rxjs/tsconfig.mustache @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "{{#supportsES6}}es6{{/supportsES6}}{{^supportsES6}}es5{{/supportsES6}}", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "rootDir": "."{{^supportsES6}}, + "lib": [ + "es6", + "dom" + ] + {{/supportsES6}} + }, + "exclude": [ + "dist", + "node_modules" + ] +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator-ignore b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator-ignore new file mode 100644 index 00000000000..7484ee590a3 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION new file mode 100644 index 00000000000..afa63656064 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/.openapi-generator/VERSION @@ -0,0 +1 @@ +4.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts new file mode 100644 index 00000000000..f057ab1e3d4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/PetApi.ts @@ -0,0 +1,400 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + ApiResponse, + Pet, +} from '../models'; + +export interface AddPetRequest { + body: Pet; +} + +export interface DeletePetRequest { + petId: number; + apiKey?: string; +} + +export interface FindPetsByStatusRequest { + status: Array; +} + +export interface FindPetsByTagsRequest { + tags: Array; +} + +export interface GetPetByIdRequest { + petId: number; +} + +export interface UpdatePetRequest { + body: Pet; +} + +export interface UpdatePetWithFormRequest { + petId: number; + name?: string; + status?: string; +} + +export interface UploadFileRequest { + petId: number; + additionalMetadata?: string; + file?: Blob; +} + +/** + * no description + */ +export class PetApi extends BaseAPI { + + /** + * Add a new pet to the store + */ + addPetRaw(requestParameters: AddPetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling addPet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Add a new pet to the store + */ + addPet(requestParameters: AddPetRequest): Observable { + return this.addPetRaw(requestParameters); + } + + /** + * Deletes a pet + */ + deletePetRaw(requestParameters: DeletePetRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling deletePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (requestParameters.apiKey !== undefined && requestParameters.apiKey !== null) { + headerParameters['api_key'] = String(requestParameters.apiKey); + } + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Deletes a pet + */ + deletePet(requestParameters: DeletePetRequest): Observable { + return this.deletePetRaw(requestParameters); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatusRaw(requestParameters: FindPetsByStatusRequest): Observable> { + if (requestParameters.status === null || requestParameters.status === undefined) { + throw new RequiredError('status','Required parameter requestParameters.status was null or undefined when calling findPetsByStatus.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.status) { + queryParameters['status'] = requestParameters.status.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByStatus`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatus(requestParameters: FindPetsByStatusRequest): Observable> { + return this.findPetsByStatusRaw(requestParameters); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTagsRaw(requestParameters: FindPetsByTagsRequest): Observable> { + if (requestParameters.tags === null || requestParameters.tags === undefined) { + throw new RequiredError('tags','Required parameter requestParameters.tags was null or undefined when calling findPetsByTags.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.tags) { + queryParameters['tags'] = requestParameters.tags.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByTags`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTags(requestParameters: FindPetsByTagsRequest): Observable> { + return this.findPetsByTagsRaw(requestParameters); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetByIdRaw(requestParameters: GetPetByIdRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling getPetById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetById(requestParameters: GetPetByIdRequest): Observable { + return this.getPetByIdRaw(requestParameters); + } + + /** + * Update an existing pet + */ + updatePetRaw(requestParameters: UpdatePetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updatePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Update an existing pet + */ + updatePet(requestParameters: UpdatePetRequest): Observable { + return this.updatePetRaw(requestParameters); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithFormRaw(requestParameters: UpdatePetWithFormRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling updatePetWithForm.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.name !== undefined) { + formData.append('name', requestParameters.name as any); + } + + if (requestParameters.status !== undefined) { + formData.append('status', requestParameters.status as any); + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithForm(requestParameters: UpdatePetWithFormRequest): Observable { + return this.updatePetWithFormRaw(requestParameters); + } + + /** + * uploads an image + */ + uploadFileRaw(requestParameters: UploadFileRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling uploadFile.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.additionalMetadata !== undefined) { + formData.append('additionalMetadata', requestParameters.additionalMetadata as any); + } + + if (requestParameters.file !== undefined) { + formData.append('file', requestParameters.file as any); + } + + return this.request({ + path: `/pet/{petId}/uploadImage`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * uploads an image + */ + uploadFile(requestParameters: UploadFileRequest): Observable { + return this.uploadFileRaw(requestParameters); + } + +} + +/** + * @export + * @enum {string} + */ +export enum FindPetsByStatusStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts new file mode 100644 index 00000000000..2fd95a36c91 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/StoreApi.ts @@ -0,0 +1,154 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + Order, +} from '../models'; + +export interface DeleteOrderRequest { + orderId: string; +} + +export interface GetOrderByIdRequest { + orderId: number; +} + +export interface PlaceOrderRequest { + body: Order; +} + +/** + * no description + */ +export class StoreApi extends BaseAPI { + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrderRaw(requestParameters: DeleteOrderRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling deleteOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrder(requestParameters: DeleteOrderRequest): Observable { + return this.deleteOrderRaw(requestParameters); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventoryRaw(): Observable<{ [key: string]: number; }> { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request<{ [key: string]: number; }>({ + path: `/store/inventory`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventory(): Observable<{ [key: string]: number; }> { + return this.getInventoryRaw(); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderByIdRaw(requestParameters: GetOrderByIdRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling getOrderById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderById(requestParameters: GetOrderByIdRequest): Observable { + return this.getOrderByIdRaw(requestParameters); + } + + /** + * Place an order for a pet + */ + placeOrderRaw(requestParameters: PlaceOrderRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling placeOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/store/order`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Place an order for a pet + */ + placeOrder(requestParameters: PlaceOrderRequest): Observable { + return this.placeOrderRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts new file mode 100644 index 00000000000..68926aa8fd4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/UserApi.ts @@ -0,0 +1,301 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + User, +} from '../models'; + +export interface CreateUserRequest { + body: User; +} + +export interface CreateUsersWithArrayInputRequest { + body: Array; +} + +export interface CreateUsersWithListInputRequest { + body: Array; +} + +export interface DeleteUserRequest { + username: string; +} + +export interface GetUserByNameRequest { + username: string; +} + +export interface LoginUserRequest { + username: string; + password: string; +} + +export interface UpdateUserRequest { + username: string; + body: User; +} + +/** + * no description + */ +export class UserApi extends BaseAPI { + + /** + * This can only be done by the logged in user. + * Create user + */ + createUserRaw(requestParameters: CreateUserRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Create user + */ + createUser(requestParameters: CreateUserRequest): Observable { + return this.createUserRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInputRaw(requestParameters: CreateUsersWithArrayInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithArrayInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithArray`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInput(requestParameters: CreateUsersWithArrayInputRequest): Observable { + return this.createUsersWithArrayInputRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInputRaw(requestParameters: CreateUsersWithListInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithListInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithList`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInput(requestParameters: CreateUsersWithListInputRequest): Observable { + return this.createUsersWithListInputRaw(requestParameters); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUserRaw(requestParameters: DeleteUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling deleteUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUser(requestParameters: DeleteUserRequest): Observable { + return this.deleteUserRaw(requestParameters); + } + + /** + * Get user by user name + */ + getUserByNameRaw(requestParameters: GetUserByNameRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling getUserByName.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Get user by user name + */ + getUserByName(requestParameters: GetUserByNameRequest): Observable { + return this.getUserByNameRaw(requestParameters); + } + + /** + * Logs user into the system + */ + loginUserRaw(requestParameters: LoginUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling loginUser.'); + } + + if (requestParameters.password === null || requestParameters.password === undefined) { + throw new RequiredError('password','Required parameter requestParameters.password was null or undefined when calling loginUser.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.username !== undefined && requestParameters.username !== null) { + queryParameters['username'] = requestParameters.username; + } + + if (requestParameters.password !== undefined && requestParameters.password !== null) { + queryParameters['password'] = requestParameters.password; + } + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/login`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs user into the system + */ + loginUser(requestParameters: LoginUserRequest): Observable { + return this.loginUserRaw(requestParameters); + } + + /** + * Logs out current logged in user session + */ + logoutUserRaw(): Observable { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/logout`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs out current logged in user session + */ + logoutUser(): Observable { + return this.logoutUserRaw(); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUserRaw(requestParameters: UpdateUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling updateUser.'); + } + + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updateUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUser(requestParameters: UpdateUserRequest): Observable { + return this.updateUserRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/apis/index.ts b/samples/client/petstore/typescript-rxjs/builds/default/apis/index.ts new file mode 100644 index 00000000000..056206bfaca --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/apis/index.ts @@ -0,0 +1,3 @@ +export * from './PetApi'; +export * from './StoreApi'; +export * from './UserApi'; diff --git a/samples/client/petstore/typescript-rxjs/builds/default/index.ts b/samples/client/petstore/typescript-rxjs/builds/default/index.ts new file mode 100644 index 00000000000..848ecfa4d10 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/index.ts @@ -0,0 +1,3 @@ +export * from './runtime'; +export * from './apis'; +export * from './models'; diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/ApiResponse.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/ApiResponse.ts new file mode 100644 index 00000000000..ec7675bf2ed --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/ApiResponse.ts @@ -0,0 +1,38 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * Describes the result of uploading an image resource + * @export + * @interface ApiResponse + */ +export interface ApiResponse { + /** + * + * @type {number} + * @memberof ApiResponse + */ + code?: number; + /** + * + * @type {string} + * @memberof ApiResponse + */ + type?: string; + /** + * + * @type {string} + * @memberof ApiResponse + */ + message?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/Category.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/Category.ts new file mode 100644 index 00000000000..0ff44e41405 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/Category.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A category for a pet + * @export + * @interface Category + */ +export interface Category { + /** + * + * @type {number} + * @memberof Category + */ + id?: number; + /** + * + * @type {string} + * @memberof Category + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/Order.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/Order.ts new file mode 100644 index 00000000000..805786fadab --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/Order.ts @@ -0,0 +1,64 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * An order for a pets from the pet store + * @export + * @interface Order + */ +export interface Order { + /** + * + * @type {number} + * @memberof Order + */ + id?: number; + /** + * + * @type {number} + * @memberof Order + */ + petId?: number; + /** + * + * @type {number} + * @memberof Order + */ + quantity?: number; + /** + * + * @type {Date} + * @memberof Order + */ + shipDate?: Date; + /** + * Order Status + * @type {string} + * @memberof Order + */ + status?: StatusEnum; + /** + * + * @type {boolean} + * @memberof Order + */ + complete?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/Pet.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/Pet.ts new file mode 100644 index 00000000000..10a8f347d1b --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/Pet.ts @@ -0,0 +1,69 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { + Category, + Tag, +} from './'; + +/** + * A pet for sale in the pet store + * @export + * @interface Pet + */ +export interface Pet { + /** + * + * @type {number} + * @memberof Pet + */ + id?: number; + /** + * + * @type {Category} + * @memberof Pet + */ + category?: Category; + /** + * + * @type {string} + * @memberof Pet + */ + name: string; + /** + * + * @type {Array} + * @memberof Pet + */ + photoUrls: Array; + /** + * + * @type {Array} + * @memberof Pet + */ + tags?: Array; + /** + * pet status in the store + * @type {string} + * @memberof Pet + */ + status?: StatusEnum; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/Tag.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/Tag.ts new file mode 100644 index 00000000000..bd4f1964855 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/Tag.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A tag for a pet + * @export + * @interface Tag + */ +export interface Tag { + /** + * + * @type {number} + * @memberof Tag + */ + id?: number; + /** + * + * @type {string} + * @memberof Tag + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/User.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/User.ts new file mode 100644 index 00000000000..d539f215b57 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/User.ts @@ -0,0 +1,68 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A User who is purchasing from the pet store + * @export + * @interface User + */ +export interface User { + /** + * + * @type {number} + * @memberof User + */ + id?: number; + /** + * + * @type {string} + * @memberof User + */ + username?: string; + /** + * + * @type {string} + * @memberof User + */ + firstName?: string; + /** + * + * @type {string} + * @memberof User + */ + lastName?: string; + /** + * + * @type {string} + * @memberof User + */ + email?: string; + /** + * + * @type {string} + * @memberof User + */ + password?: string; + /** + * + * @type {string} + * @memberof User + */ + phone?: string; + /** + * User Status + * @type {number} + * @memberof User + */ + userStatus?: number; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/models/index.ts b/samples/client/petstore/typescript-rxjs/builds/default/models/index.ts new file mode 100644 index 00000000000..f53c1dd42bd --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/models/index.ts @@ -0,0 +1,6 @@ +export * from './ApiResponse'; +export * from './Category'; +export * from './Order'; +export * from './Pet'; +export * from './Tag'; +export * from './User'; diff --git a/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts new file mode 100644 index 00000000000..13ec6f7a4af --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/runtime.ts @@ -0,0 +1,210 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable, of } from 'rxjs'; +import { ajax, AjaxResponse } from 'rxjs/ajax'; +import { map, concatMap } from 'rxjs/operators'; + +export const BASE_PATH = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + +export interface ConfigurationParameters { + basePath?: string; // override base path + middleware?: Middleware[]; // middleware to apply before/after rxjs requests + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | ((name: string) => string); // parameter for apiKey security + accessToken?: string | ((name: string, scopes?: string[]) => string); // parameter for oauth2 security +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + get basePath(): string { + return this.configuration.basePath || BASE_PATH; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : () => accessToken; + } + return undefined; + } +} + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + private middleware: Middleware[]; + + constructor(protected configuration = new Configuration()) { + this.middleware = configuration.middleware; + } + + withMiddleware(this: T, ...middlewares: Middleware[]) { + const next = this.clone(); + next.middleware = next.middleware.concat(...middlewares); + return next; + } + + withPreMiddleware(this: T, ...preMiddlewares: Array) { + const middlewares = preMiddlewares.map((pre) => ({ pre })); + return this.withMiddleware(...middlewares); + } + + withPostMiddleware(this: T, ...postMiddlewares: Array) { + const middlewares = postMiddlewares.map((post) => ({ post })); + return this.withMiddleware(...middlewares); + } + + protected request(context: RequestOpts): Observable { + return this.rxjsRequest(this.createRequestArgs(context)).pipe( + map((res) => { + if (res.status >= 200 && res.status < 300) { + return res.response as T; + } + throw res; + }) + ); + } + + private createRequestArgs(context: RequestOpts): RequestArgs { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a '?' character which buggy webservers + // do not handle correctly sometimes. + url += '?' + querystring(context.query); + } + const body = context.body instanceof FormData ? context.body : JSON.stringify(context.body); + const options = { + method: context.method, + headers: context.headers, + body, + }; + return { url, options }; + } + + private rxjsRequest(params: RequestContext): Observable { + const preMiddlewares = this.middleware && this.middleware.filter((item) => item.pre); + const postMiddlewares = this.middleware && this.middleware.filter((item) => item.post); + + return of(params).pipe( + map((args) => { + if (preMiddlewares) { + preMiddlewares.forEach((mw) => (args = mw.pre({ ...args }))); + } + return args; + }), + concatMap((args) => + ajax({ url: args.url, ...args.options }).pipe( + map((response) => { + if (postMiddlewares) { + postMiddlewares.forEach((mw) => (response = mw.post({ ...params, response }))); + } + return response; + }) + ) + ) + ); + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +} + +export class RequiredError extends Error { + name: 'RequiredError' = 'RequiredError'; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ',', + ssv: ' ', + tsv: '\t', + pipes: '|', +}; + +export type Json = any; +export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS'; +export type HttpHeaders = { [key: string]: string }; +export type HttpQuery = { [key: string]: string | number | null | boolean | Array }; +export type HttpBody = Json | FormData; +export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; + +export interface RequestArgs { + url: string; + options: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HttpMethod; + headers: HttpHeaders; + query?: HttpQuery; + body?: HttpBody; +} + +export function querystring(params: HttpQuery): string { + return Object.keys(params) + .map((key) => { + const value = params[key]; + if (value instanceof Array) { + return value.map((val) => `${encodeURIComponent(key)}=${encodeURIComponent(String(val))}`) + .join('&'); + } + return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`; + }) + .join('&'); +} + +export interface RequestContext extends RequestArgs {} +export interface ResponseContext extends RequestArgs { + response: AjaxResponse; +} + +export interface Middleware { + pre?(context: RequestContext): RequestArgs; + post?(context: ResponseContext): AjaxResponse; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/default/tsconfig.json b/samples/client/petstore/typescript-rxjs/builds/default/tsconfig.json new file mode 100644 index 00000000000..5de40723aa1 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/default/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "rootDir": ".", + "lib": [ + "es6", + "dom" + ] + }, + "exclude": [ + "dist", + "node_modules" + ] +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator-ignore b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator-ignore new file mode 100644 index 00000000000..7484ee590a3 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION new file mode 100644 index 00000000000..afa63656064 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/.openapi-generator/VERSION @@ -0,0 +1 @@ +4.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/README.md b/samples/client/petstore/typescript-rxjs/builds/es6-target/README.md new file mode 100644 index 00000000000..6ec53878639 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/README.md @@ -0,0 +1,45 @@ +## @swagger/typescript-rxjs-petstore@1.0.0 + +This generator creates TypeScript/JavaScript client that utilizes [Fetch API](https://fetch.spec.whatwg.org/). The generated Node module can be used in the following environments: + +Environment +* Node.js +* Webpack +* Browserify + +Language level +* ES5 - you must have a Promises/A+ library installed +* ES6 + +Module system +* CommonJS +* ES6 module system + +It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html)) + +### Building + +To build and compile the typescript sources to javascript use: +``` +npm install +npm run build +``` + +### Publishing + +First build the package then run ```npm publish``` + +### Consuming + +navigate to the folder of your consuming project and run one of the following commands. + +_published:_ + +``` +npm install @swagger/typescript-rxjs-petstore@1.0.0 --save +``` + +_unPublished (not recommended):_ + +``` +npm install PATH_TO_GENERATED_PACKAGE --save diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts new file mode 100644 index 00000000000..f057ab1e3d4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/PetApi.ts @@ -0,0 +1,400 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + ApiResponse, + Pet, +} from '../models'; + +export interface AddPetRequest { + body: Pet; +} + +export interface DeletePetRequest { + petId: number; + apiKey?: string; +} + +export interface FindPetsByStatusRequest { + status: Array; +} + +export interface FindPetsByTagsRequest { + tags: Array; +} + +export interface GetPetByIdRequest { + petId: number; +} + +export interface UpdatePetRequest { + body: Pet; +} + +export interface UpdatePetWithFormRequest { + petId: number; + name?: string; + status?: string; +} + +export interface UploadFileRequest { + petId: number; + additionalMetadata?: string; + file?: Blob; +} + +/** + * no description + */ +export class PetApi extends BaseAPI { + + /** + * Add a new pet to the store + */ + addPetRaw(requestParameters: AddPetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling addPet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Add a new pet to the store + */ + addPet(requestParameters: AddPetRequest): Observable { + return this.addPetRaw(requestParameters); + } + + /** + * Deletes a pet + */ + deletePetRaw(requestParameters: DeletePetRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling deletePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (requestParameters.apiKey !== undefined && requestParameters.apiKey !== null) { + headerParameters['api_key'] = String(requestParameters.apiKey); + } + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Deletes a pet + */ + deletePet(requestParameters: DeletePetRequest): Observable { + return this.deletePetRaw(requestParameters); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatusRaw(requestParameters: FindPetsByStatusRequest): Observable> { + if (requestParameters.status === null || requestParameters.status === undefined) { + throw new RequiredError('status','Required parameter requestParameters.status was null or undefined when calling findPetsByStatus.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.status) { + queryParameters['status'] = requestParameters.status.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByStatus`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatus(requestParameters: FindPetsByStatusRequest): Observable> { + return this.findPetsByStatusRaw(requestParameters); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTagsRaw(requestParameters: FindPetsByTagsRequest): Observable> { + if (requestParameters.tags === null || requestParameters.tags === undefined) { + throw new RequiredError('tags','Required parameter requestParameters.tags was null or undefined when calling findPetsByTags.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.tags) { + queryParameters['tags'] = requestParameters.tags.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByTags`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTags(requestParameters: FindPetsByTagsRequest): Observable> { + return this.findPetsByTagsRaw(requestParameters); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetByIdRaw(requestParameters: GetPetByIdRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling getPetById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetById(requestParameters: GetPetByIdRequest): Observable { + return this.getPetByIdRaw(requestParameters); + } + + /** + * Update an existing pet + */ + updatePetRaw(requestParameters: UpdatePetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updatePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Update an existing pet + */ + updatePet(requestParameters: UpdatePetRequest): Observable { + return this.updatePetRaw(requestParameters); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithFormRaw(requestParameters: UpdatePetWithFormRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling updatePetWithForm.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.name !== undefined) { + formData.append('name', requestParameters.name as any); + } + + if (requestParameters.status !== undefined) { + formData.append('status', requestParameters.status as any); + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithForm(requestParameters: UpdatePetWithFormRequest): Observable { + return this.updatePetWithFormRaw(requestParameters); + } + + /** + * uploads an image + */ + uploadFileRaw(requestParameters: UploadFileRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling uploadFile.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.additionalMetadata !== undefined) { + formData.append('additionalMetadata', requestParameters.additionalMetadata as any); + } + + if (requestParameters.file !== undefined) { + formData.append('file', requestParameters.file as any); + } + + return this.request({ + path: `/pet/{petId}/uploadImage`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * uploads an image + */ + uploadFile(requestParameters: UploadFileRequest): Observable { + return this.uploadFileRaw(requestParameters); + } + +} + +/** + * @export + * @enum {string} + */ +export enum FindPetsByStatusStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts new file mode 100644 index 00000000000..2fd95a36c91 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/StoreApi.ts @@ -0,0 +1,154 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + Order, +} from '../models'; + +export interface DeleteOrderRequest { + orderId: string; +} + +export interface GetOrderByIdRequest { + orderId: number; +} + +export interface PlaceOrderRequest { + body: Order; +} + +/** + * no description + */ +export class StoreApi extends BaseAPI { + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrderRaw(requestParameters: DeleteOrderRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling deleteOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrder(requestParameters: DeleteOrderRequest): Observable { + return this.deleteOrderRaw(requestParameters); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventoryRaw(): Observable<{ [key: string]: number; }> { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request<{ [key: string]: number; }>({ + path: `/store/inventory`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventory(): Observable<{ [key: string]: number; }> { + return this.getInventoryRaw(); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderByIdRaw(requestParameters: GetOrderByIdRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling getOrderById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderById(requestParameters: GetOrderByIdRequest): Observable { + return this.getOrderByIdRaw(requestParameters); + } + + /** + * Place an order for a pet + */ + placeOrderRaw(requestParameters: PlaceOrderRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling placeOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/store/order`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Place an order for a pet + */ + placeOrder(requestParameters: PlaceOrderRequest): Observable { + return this.placeOrderRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts new file mode 100644 index 00000000000..68926aa8fd4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/UserApi.ts @@ -0,0 +1,301 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + User, +} from '../models'; + +export interface CreateUserRequest { + body: User; +} + +export interface CreateUsersWithArrayInputRequest { + body: Array; +} + +export interface CreateUsersWithListInputRequest { + body: Array; +} + +export interface DeleteUserRequest { + username: string; +} + +export interface GetUserByNameRequest { + username: string; +} + +export interface LoginUserRequest { + username: string; + password: string; +} + +export interface UpdateUserRequest { + username: string; + body: User; +} + +/** + * no description + */ +export class UserApi extends BaseAPI { + + /** + * This can only be done by the logged in user. + * Create user + */ + createUserRaw(requestParameters: CreateUserRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Create user + */ + createUser(requestParameters: CreateUserRequest): Observable { + return this.createUserRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInputRaw(requestParameters: CreateUsersWithArrayInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithArrayInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithArray`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInput(requestParameters: CreateUsersWithArrayInputRequest): Observable { + return this.createUsersWithArrayInputRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInputRaw(requestParameters: CreateUsersWithListInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithListInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithList`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInput(requestParameters: CreateUsersWithListInputRequest): Observable { + return this.createUsersWithListInputRaw(requestParameters); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUserRaw(requestParameters: DeleteUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling deleteUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUser(requestParameters: DeleteUserRequest): Observable { + return this.deleteUserRaw(requestParameters); + } + + /** + * Get user by user name + */ + getUserByNameRaw(requestParameters: GetUserByNameRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling getUserByName.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Get user by user name + */ + getUserByName(requestParameters: GetUserByNameRequest): Observable { + return this.getUserByNameRaw(requestParameters); + } + + /** + * Logs user into the system + */ + loginUserRaw(requestParameters: LoginUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling loginUser.'); + } + + if (requestParameters.password === null || requestParameters.password === undefined) { + throw new RequiredError('password','Required parameter requestParameters.password was null or undefined when calling loginUser.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.username !== undefined && requestParameters.username !== null) { + queryParameters['username'] = requestParameters.username; + } + + if (requestParameters.password !== undefined && requestParameters.password !== null) { + queryParameters['password'] = requestParameters.password; + } + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/login`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs user into the system + */ + loginUser(requestParameters: LoginUserRequest): Observable { + return this.loginUserRaw(requestParameters); + } + + /** + * Logs out current logged in user session + */ + logoutUserRaw(): Observable { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/logout`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs out current logged in user session + */ + logoutUser(): Observable { + return this.logoutUserRaw(); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUserRaw(requestParameters: UpdateUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling updateUser.'); + } + + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updateUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUser(requestParameters: UpdateUserRequest): Observable { + return this.updateUserRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/index.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/index.ts new file mode 100644 index 00000000000..056206bfaca --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/apis/index.ts @@ -0,0 +1,3 @@ +export * from './PetApi'; +export * from './StoreApi'; +export * from './UserApi'; diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/index.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/index.ts new file mode 100644 index 00000000000..848ecfa4d10 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/index.ts @@ -0,0 +1,3 @@ +export * from './runtime'; +export * from './apis'; +export * from './models'; diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/ApiResponse.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/ApiResponse.ts new file mode 100644 index 00000000000..ec7675bf2ed --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/ApiResponse.ts @@ -0,0 +1,38 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * Describes the result of uploading an image resource + * @export + * @interface ApiResponse + */ +export interface ApiResponse { + /** + * + * @type {number} + * @memberof ApiResponse + */ + code?: number; + /** + * + * @type {string} + * @memberof ApiResponse + */ + type?: string; + /** + * + * @type {string} + * @memberof ApiResponse + */ + message?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Category.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Category.ts new file mode 100644 index 00000000000..0ff44e41405 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Category.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A category for a pet + * @export + * @interface Category + */ +export interface Category { + /** + * + * @type {number} + * @memberof Category + */ + id?: number; + /** + * + * @type {string} + * @memberof Category + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Order.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Order.ts new file mode 100644 index 00000000000..805786fadab --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Order.ts @@ -0,0 +1,64 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * An order for a pets from the pet store + * @export + * @interface Order + */ +export interface Order { + /** + * + * @type {number} + * @memberof Order + */ + id?: number; + /** + * + * @type {number} + * @memberof Order + */ + petId?: number; + /** + * + * @type {number} + * @memberof Order + */ + quantity?: number; + /** + * + * @type {Date} + * @memberof Order + */ + shipDate?: Date; + /** + * Order Status + * @type {string} + * @memberof Order + */ + status?: StatusEnum; + /** + * + * @type {boolean} + * @memberof Order + */ + complete?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Pet.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Pet.ts new file mode 100644 index 00000000000..10a8f347d1b --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Pet.ts @@ -0,0 +1,69 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { + Category, + Tag, +} from './'; + +/** + * A pet for sale in the pet store + * @export + * @interface Pet + */ +export interface Pet { + /** + * + * @type {number} + * @memberof Pet + */ + id?: number; + /** + * + * @type {Category} + * @memberof Pet + */ + category?: Category; + /** + * + * @type {string} + * @memberof Pet + */ + name: string; + /** + * + * @type {Array} + * @memberof Pet + */ + photoUrls: Array; + /** + * + * @type {Array} + * @memberof Pet + */ + tags?: Array; + /** + * pet status in the store + * @type {string} + * @memberof Pet + */ + status?: StatusEnum; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Tag.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Tag.ts new file mode 100644 index 00000000000..bd4f1964855 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/Tag.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A tag for a pet + * @export + * @interface Tag + */ +export interface Tag { + /** + * + * @type {number} + * @memberof Tag + */ + id?: number; + /** + * + * @type {string} + * @memberof Tag + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/User.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/User.ts new file mode 100644 index 00000000000..d539f215b57 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/User.ts @@ -0,0 +1,68 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A User who is purchasing from the pet store + * @export + * @interface User + */ +export interface User { + /** + * + * @type {number} + * @memberof User + */ + id?: number; + /** + * + * @type {string} + * @memberof User + */ + username?: string; + /** + * + * @type {string} + * @memberof User + */ + firstName?: string; + /** + * + * @type {string} + * @memberof User + */ + lastName?: string; + /** + * + * @type {string} + * @memberof User + */ + email?: string; + /** + * + * @type {string} + * @memberof User + */ + password?: string; + /** + * + * @type {string} + * @memberof User + */ + phone?: string; + /** + * User Status + * @type {number} + * @memberof User + */ + userStatus?: number; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/models/index.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/index.ts new file mode 100644 index 00000000000..f53c1dd42bd --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/models/index.ts @@ -0,0 +1,6 @@ +export * from './ApiResponse'; +export * from './Category'; +export * from './Order'; +export * from './Pet'; +export * from './Tag'; +export * from './User'; diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/package.json b/samples/client/petstore/typescript-rxjs/builds/es6-target/package.json new file mode 100644 index 00000000000..5b33f51d196 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/package.json @@ -0,0 +1,21 @@ +{ + "name": "@swagger/typescript-rxjs-petstore", + "version": "1.0.0", + "description": "OpenAPI client for @swagger/typescript-rxjs-petstore", + "author": "OpenAPI-Generator", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "scripts" : { + "build": "tsc --outDir dist/", + "prepare": "npm run build" + }, + "dependencies": { + "rxjs": "^6.3.3", + }, + "devDependencies": { + "typescript": "^2.4" + }, + "publishConfig":{ + "registry":"https://skimdb.npmjs.com/registry" + } +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts new file mode 100644 index 00000000000..13ec6f7a4af --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/runtime.ts @@ -0,0 +1,210 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable, of } from 'rxjs'; +import { ajax, AjaxResponse } from 'rxjs/ajax'; +import { map, concatMap } from 'rxjs/operators'; + +export const BASE_PATH = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + +export interface ConfigurationParameters { + basePath?: string; // override base path + middleware?: Middleware[]; // middleware to apply before/after rxjs requests + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | ((name: string) => string); // parameter for apiKey security + accessToken?: string | ((name: string, scopes?: string[]) => string); // parameter for oauth2 security +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + get basePath(): string { + return this.configuration.basePath || BASE_PATH; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : () => accessToken; + } + return undefined; + } +} + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + private middleware: Middleware[]; + + constructor(protected configuration = new Configuration()) { + this.middleware = configuration.middleware; + } + + withMiddleware(this: T, ...middlewares: Middleware[]) { + const next = this.clone(); + next.middleware = next.middleware.concat(...middlewares); + return next; + } + + withPreMiddleware(this: T, ...preMiddlewares: Array) { + const middlewares = preMiddlewares.map((pre) => ({ pre })); + return this.withMiddleware(...middlewares); + } + + withPostMiddleware(this: T, ...postMiddlewares: Array) { + const middlewares = postMiddlewares.map((post) => ({ post })); + return this.withMiddleware(...middlewares); + } + + protected request(context: RequestOpts): Observable { + return this.rxjsRequest(this.createRequestArgs(context)).pipe( + map((res) => { + if (res.status >= 200 && res.status < 300) { + return res.response as T; + } + throw res; + }) + ); + } + + private createRequestArgs(context: RequestOpts): RequestArgs { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a '?' character which buggy webservers + // do not handle correctly sometimes. + url += '?' + querystring(context.query); + } + const body = context.body instanceof FormData ? context.body : JSON.stringify(context.body); + const options = { + method: context.method, + headers: context.headers, + body, + }; + return { url, options }; + } + + private rxjsRequest(params: RequestContext): Observable { + const preMiddlewares = this.middleware && this.middleware.filter((item) => item.pre); + const postMiddlewares = this.middleware && this.middleware.filter((item) => item.post); + + return of(params).pipe( + map((args) => { + if (preMiddlewares) { + preMiddlewares.forEach((mw) => (args = mw.pre({ ...args }))); + } + return args; + }), + concatMap((args) => + ajax({ url: args.url, ...args.options }).pipe( + map((response) => { + if (postMiddlewares) { + postMiddlewares.forEach((mw) => (response = mw.post({ ...params, response }))); + } + return response; + }) + ) + ) + ); + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +} + +export class RequiredError extends Error { + name: 'RequiredError' = 'RequiredError'; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ',', + ssv: ' ', + tsv: '\t', + pipes: '|', +}; + +export type Json = any; +export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS'; +export type HttpHeaders = { [key: string]: string }; +export type HttpQuery = { [key: string]: string | number | null | boolean | Array }; +export type HttpBody = Json | FormData; +export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; + +export interface RequestArgs { + url: string; + options: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HttpMethod; + headers: HttpHeaders; + query?: HttpQuery; + body?: HttpBody; +} + +export function querystring(params: HttpQuery): string { + return Object.keys(params) + .map((key) => { + const value = params[key]; + if (value instanceof Array) { + return value.map((val) => `${encodeURIComponent(key)}=${encodeURIComponent(String(val))}`) + .join('&'); + } + return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`; + }) + .join('&'); +} + +export interface RequestContext extends RequestArgs {} +export interface ResponseContext extends RequestArgs { + response: AjaxResponse; +} + +export interface Middleware { + pre?(context: RequestContext): RequestArgs; + post?(context: ResponseContext): AjaxResponse; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/es6-target/tsconfig.json b/samples/client/petstore/typescript-rxjs/builds/es6-target/tsconfig.json new file mode 100644 index 00000000000..2e668d3863d --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/es6-target/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "es6", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "rootDir": "." }, + "exclude": [ + "dist", + "node_modules" + ] +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator-ignore b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator-ignore new file mode 100644 index 00000000000..7484ee590a3 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator/VERSION new file mode 100644 index 00000000000..afa63656064 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/.openapi-generator/VERSION @@ -0,0 +1 @@ +4.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts new file mode 100644 index 00000000000..f057ab1e3d4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/PetApi.ts @@ -0,0 +1,400 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + ApiResponse, + Pet, +} from '../models'; + +export interface AddPetRequest { + body: Pet; +} + +export interface DeletePetRequest { + petId: number; + apiKey?: string; +} + +export interface FindPetsByStatusRequest { + status: Array; +} + +export interface FindPetsByTagsRequest { + tags: Array; +} + +export interface GetPetByIdRequest { + petId: number; +} + +export interface UpdatePetRequest { + body: Pet; +} + +export interface UpdatePetWithFormRequest { + petId: number; + name?: string; + status?: string; +} + +export interface UploadFileRequest { + petId: number; + additionalMetadata?: string; + file?: Blob; +} + +/** + * no description + */ +export class PetApi extends BaseAPI { + + /** + * Add a new pet to the store + */ + addPetRaw(requestParameters: AddPetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling addPet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Add a new pet to the store + */ + addPet(requestParameters: AddPetRequest): Observable { + return this.addPetRaw(requestParameters); + } + + /** + * Deletes a pet + */ + deletePetRaw(requestParameters: DeletePetRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling deletePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (requestParameters.apiKey !== undefined && requestParameters.apiKey !== null) { + headerParameters['api_key'] = String(requestParameters.apiKey); + } + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Deletes a pet + */ + deletePet(requestParameters: DeletePetRequest): Observable { + return this.deletePetRaw(requestParameters); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatusRaw(requestParameters: FindPetsByStatusRequest): Observable> { + if (requestParameters.status === null || requestParameters.status === undefined) { + throw new RequiredError('status','Required parameter requestParameters.status was null or undefined when calling findPetsByStatus.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.status) { + queryParameters['status'] = requestParameters.status.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByStatus`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatus(requestParameters: FindPetsByStatusRequest): Observable> { + return this.findPetsByStatusRaw(requestParameters); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTagsRaw(requestParameters: FindPetsByTagsRequest): Observable> { + if (requestParameters.tags === null || requestParameters.tags === undefined) { + throw new RequiredError('tags','Required parameter requestParameters.tags was null or undefined when calling findPetsByTags.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.tags) { + queryParameters['tags'] = requestParameters.tags.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByTags`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTags(requestParameters: FindPetsByTagsRequest): Observable> { + return this.findPetsByTagsRaw(requestParameters); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetByIdRaw(requestParameters: GetPetByIdRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling getPetById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetById(requestParameters: GetPetByIdRequest): Observable { + return this.getPetByIdRaw(requestParameters); + } + + /** + * Update an existing pet + */ + updatePetRaw(requestParameters: UpdatePetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updatePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Update an existing pet + */ + updatePet(requestParameters: UpdatePetRequest): Observable { + return this.updatePetRaw(requestParameters); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithFormRaw(requestParameters: UpdatePetWithFormRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling updatePetWithForm.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.name !== undefined) { + formData.append('name', requestParameters.name as any); + } + + if (requestParameters.status !== undefined) { + formData.append('status', requestParameters.status as any); + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithForm(requestParameters: UpdatePetWithFormRequest): Observable { + return this.updatePetWithFormRaw(requestParameters); + } + + /** + * uploads an image + */ + uploadFileRaw(requestParameters: UploadFileRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling uploadFile.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.additionalMetadata !== undefined) { + formData.append('additionalMetadata', requestParameters.additionalMetadata as any); + } + + if (requestParameters.file !== undefined) { + formData.append('file', requestParameters.file as any); + } + + return this.request({ + path: `/pet/{petId}/uploadImage`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * uploads an image + */ + uploadFile(requestParameters: UploadFileRequest): Observable { + return this.uploadFileRaw(requestParameters); + } + +} + +/** + * @export + * @enum {string} + */ +export enum FindPetsByStatusStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts new file mode 100644 index 00000000000..2fd95a36c91 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/StoreApi.ts @@ -0,0 +1,154 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + Order, +} from '../models'; + +export interface DeleteOrderRequest { + orderId: string; +} + +export interface GetOrderByIdRequest { + orderId: number; +} + +export interface PlaceOrderRequest { + body: Order; +} + +/** + * no description + */ +export class StoreApi extends BaseAPI { + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrderRaw(requestParameters: DeleteOrderRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling deleteOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrder(requestParameters: DeleteOrderRequest): Observable { + return this.deleteOrderRaw(requestParameters); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventoryRaw(): Observable<{ [key: string]: number; }> { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request<{ [key: string]: number; }>({ + path: `/store/inventory`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventory(): Observable<{ [key: string]: number; }> { + return this.getInventoryRaw(); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderByIdRaw(requestParameters: GetOrderByIdRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling getOrderById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderById(requestParameters: GetOrderByIdRequest): Observable { + return this.getOrderByIdRaw(requestParameters); + } + + /** + * Place an order for a pet + */ + placeOrderRaw(requestParameters: PlaceOrderRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling placeOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/store/order`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Place an order for a pet + */ + placeOrder(requestParameters: PlaceOrderRequest): Observable { + return this.placeOrderRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts new file mode 100644 index 00000000000..68926aa8fd4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/UserApi.ts @@ -0,0 +1,301 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + User, +} from '../models'; + +export interface CreateUserRequest { + body: User; +} + +export interface CreateUsersWithArrayInputRequest { + body: Array; +} + +export interface CreateUsersWithListInputRequest { + body: Array; +} + +export interface DeleteUserRequest { + username: string; +} + +export interface GetUserByNameRequest { + username: string; +} + +export interface LoginUserRequest { + username: string; + password: string; +} + +export interface UpdateUserRequest { + username: string; + body: User; +} + +/** + * no description + */ +export class UserApi extends BaseAPI { + + /** + * This can only be done by the logged in user. + * Create user + */ + createUserRaw(requestParameters: CreateUserRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Create user + */ + createUser(requestParameters: CreateUserRequest): Observable { + return this.createUserRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInputRaw(requestParameters: CreateUsersWithArrayInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithArrayInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithArray`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInput(requestParameters: CreateUsersWithArrayInputRequest): Observable { + return this.createUsersWithArrayInputRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInputRaw(requestParameters: CreateUsersWithListInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithListInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithList`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInput(requestParameters: CreateUsersWithListInputRequest): Observable { + return this.createUsersWithListInputRaw(requestParameters); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUserRaw(requestParameters: DeleteUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling deleteUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUser(requestParameters: DeleteUserRequest): Observable { + return this.deleteUserRaw(requestParameters); + } + + /** + * Get user by user name + */ + getUserByNameRaw(requestParameters: GetUserByNameRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling getUserByName.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Get user by user name + */ + getUserByName(requestParameters: GetUserByNameRequest): Observable { + return this.getUserByNameRaw(requestParameters); + } + + /** + * Logs user into the system + */ + loginUserRaw(requestParameters: LoginUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling loginUser.'); + } + + if (requestParameters.password === null || requestParameters.password === undefined) { + throw new RequiredError('password','Required parameter requestParameters.password was null or undefined when calling loginUser.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.username !== undefined && requestParameters.username !== null) { + queryParameters['username'] = requestParameters.username; + } + + if (requestParameters.password !== undefined && requestParameters.password !== null) { + queryParameters['password'] = requestParameters.password; + } + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/login`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs user into the system + */ + loginUser(requestParameters: LoginUserRequest): Observable { + return this.loginUserRaw(requestParameters); + } + + /** + * Logs out current logged in user session + */ + logoutUserRaw(): Observable { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/logout`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs out current logged in user session + */ + logoutUser(): Observable { + return this.logoutUserRaw(); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUserRaw(requestParameters: UpdateUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling updateUser.'); + } + + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updateUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUser(requestParameters: UpdateUserRequest): Observable { + return this.updateUserRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/index.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/index.ts new file mode 100644 index 00000000000..056206bfaca --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/apis/index.ts @@ -0,0 +1,3 @@ +export * from './PetApi'; +export * from './StoreApi'; +export * from './UserApi'; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/index.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/index.ts new file mode 100644 index 00000000000..848ecfa4d10 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/index.ts @@ -0,0 +1,3 @@ +export * from './runtime'; +export * from './apis'; +export * from './models'; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/ApiResponse.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/ApiResponse.ts new file mode 100644 index 00000000000..ec7675bf2ed --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/ApiResponse.ts @@ -0,0 +1,38 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * Describes the result of uploading an image resource + * @export + * @interface ApiResponse + */ +export interface ApiResponse { + /** + * + * @type {number} + * @memberof ApiResponse + */ + code?: number; + /** + * + * @type {string} + * @memberof ApiResponse + */ + type?: string; + /** + * + * @type {string} + * @memberof ApiResponse + */ + message?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Category.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Category.ts new file mode 100644 index 00000000000..0ff44e41405 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Category.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A category for a pet + * @export + * @interface Category + */ +export interface Category { + /** + * + * @type {number} + * @memberof Category + */ + id?: number; + /** + * + * @type {string} + * @memberof Category + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Order.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Order.ts new file mode 100644 index 00000000000..805786fadab --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Order.ts @@ -0,0 +1,64 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * An order for a pets from the pet store + * @export + * @interface Order + */ +export interface Order { + /** + * + * @type {number} + * @memberof Order + */ + id?: number; + /** + * + * @type {number} + * @memberof Order + */ + petId?: number; + /** + * + * @type {number} + * @memberof Order + */ + quantity?: number; + /** + * + * @type {Date} + * @memberof Order + */ + shipDate?: Date; + /** + * Order Status + * @type {string} + * @memberof Order + */ + status?: StatusEnum; + /** + * + * @type {boolean} + * @memberof Order + */ + complete?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Pet.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Pet.ts new file mode 100644 index 00000000000..10a8f347d1b --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Pet.ts @@ -0,0 +1,69 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { + Category, + Tag, +} from './'; + +/** + * A pet for sale in the pet store + * @export + * @interface Pet + */ +export interface Pet { + /** + * + * @type {number} + * @memberof Pet + */ + id?: number; + /** + * + * @type {Category} + * @memberof Pet + */ + category?: Category; + /** + * + * @type {string} + * @memberof Pet + */ + name: string; + /** + * + * @type {Array} + * @memberof Pet + */ + photoUrls: Array; + /** + * + * @type {Array} + * @memberof Pet + */ + tags?: Array; + /** + * pet status in the store + * @type {string} + * @memberof Pet + */ + status?: StatusEnum; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Tag.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Tag.ts new file mode 100644 index 00000000000..bd4f1964855 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/Tag.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A tag for a pet + * @export + * @interface Tag + */ +export interface Tag { + /** + * + * @type {number} + * @memberof Tag + */ + id?: number; + /** + * + * @type {string} + * @memberof Tag + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/User.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/User.ts new file mode 100644 index 00000000000..d539f215b57 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/User.ts @@ -0,0 +1,68 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A User who is purchasing from the pet store + * @export + * @interface User + */ +export interface User { + /** + * + * @type {number} + * @memberof User + */ + id?: number; + /** + * + * @type {string} + * @memberof User + */ + username?: string; + /** + * + * @type {string} + * @memberof User + */ + firstName?: string; + /** + * + * @type {string} + * @memberof User + */ + lastName?: string; + /** + * + * @type {string} + * @memberof User + */ + email?: string; + /** + * + * @type {string} + * @memberof User + */ + password?: string; + /** + * + * @type {string} + * @memberof User + */ + phone?: string; + /** + * User Status + * @type {number} + * @memberof User + */ + userStatus?: number; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/index.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/index.ts new file mode 100644 index 00000000000..f53c1dd42bd --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/models/index.ts @@ -0,0 +1,6 @@ +export * from './ApiResponse'; +export * from './Category'; +export * from './Order'; +export * from './Pet'; +export * from './Tag'; +export * from './User'; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts new file mode 100644 index 00000000000..13ec6f7a4af --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/runtime.ts @@ -0,0 +1,210 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable, of } from 'rxjs'; +import { ajax, AjaxResponse } from 'rxjs/ajax'; +import { map, concatMap } from 'rxjs/operators'; + +export const BASE_PATH = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + +export interface ConfigurationParameters { + basePath?: string; // override base path + middleware?: Middleware[]; // middleware to apply before/after rxjs requests + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | ((name: string) => string); // parameter for apiKey security + accessToken?: string | ((name: string, scopes?: string[]) => string); // parameter for oauth2 security +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + get basePath(): string { + return this.configuration.basePath || BASE_PATH; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : () => accessToken; + } + return undefined; + } +} + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + private middleware: Middleware[]; + + constructor(protected configuration = new Configuration()) { + this.middleware = configuration.middleware; + } + + withMiddleware(this: T, ...middlewares: Middleware[]) { + const next = this.clone(); + next.middleware = next.middleware.concat(...middlewares); + return next; + } + + withPreMiddleware(this: T, ...preMiddlewares: Array) { + const middlewares = preMiddlewares.map((pre) => ({ pre })); + return this.withMiddleware(...middlewares); + } + + withPostMiddleware(this: T, ...postMiddlewares: Array) { + const middlewares = postMiddlewares.map((post) => ({ post })); + return this.withMiddleware(...middlewares); + } + + protected request(context: RequestOpts): Observable { + return this.rxjsRequest(this.createRequestArgs(context)).pipe( + map((res) => { + if (res.status >= 200 && res.status < 300) { + return res.response as T; + } + throw res; + }) + ); + } + + private createRequestArgs(context: RequestOpts): RequestArgs { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a '?' character which buggy webservers + // do not handle correctly sometimes. + url += '?' + querystring(context.query); + } + const body = context.body instanceof FormData ? context.body : JSON.stringify(context.body); + const options = { + method: context.method, + headers: context.headers, + body, + }; + return { url, options }; + } + + private rxjsRequest(params: RequestContext): Observable { + const preMiddlewares = this.middleware && this.middleware.filter((item) => item.pre); + const postMiddlewares = this.middleware && this.middleware.filter((item) => item.post); + + return of(params).pipe( + map((args) => { + if (preMiddlewares) { + preMiddlewares.forEach((mw) => (args = mw.pre({ ...args }))); + } + return args; + }), + concatMap((args) => + ajax({ url: args.url, ...args.options }).pipe( + map((response) => { + if (postMiddlewares) { + postMiddlewares.forEach((mw) => (response = mw.post({ ...params, response }))); + } + return response; + }) + ) + ) + ); + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +} + +export class RequiredError extends Error { + name: 'RequiredError' = 'RequiredError'; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ',', + ssv: ' ', + tsv: '\t', + pipes: '|', +}; + +export type Json = any; +export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS'; +export type HttpHeaders = { [key: string]: string }; +export type HttpQuery = { [key: string]: string | number | null | boolean | Array }; +export type HttpBody = Json | FormData; +export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; + +export interface RequestArgs { + url: string; + options: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HttpMethod; + headers: HttpHeaders; + query?: HttpQuery; + body?: HttpBody; +} + +export function querystring(params: HttpQuery): string { + return Object.keys(params) + .map((key) => { + const value = params[key]; + if (value instanceof Array) { + return value.map((val) => `${encodeURIComponent(key)}=${encodeURIComponent(String(val))}`) + .join('&'); + } + return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`; + }) + .join('&'); +} + +export interface RequestContext extends RequestArgs {} +export interface ResponseContext extends RequestArgs { + response: AjaxResponse; +} + +export interface Middleware { + pre?(context: RequestContext): RequestArgs; + post?(context: ResponseContext): AjaxResponse; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-interfaces/tsconfig.json b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/tsconfig.json new file mode 100644 index 00000000000..5de40723aa1 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-interfaces/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "rootDir": ".", + "lib": [ + "es6", + "dom" + ] + }, + "exclude": [ + "dist", + "node_modules" + ] +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator-ignore b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator-ignore new file mode 100644 index 00000000000..7484ee590a3 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION new file mode 100644 index 00000000000..afa63656064 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/.openapi-generator/VERSION @@ -0,0 +1 @@ +4.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/README.md b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/README.md new file mode 100644 index 00000000000..6ec53878639 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/README.md @@ -0,0 +1,45 @@ +## @swagger/typescript-rxjs-petstore@1.0.0 + +This generator creates TypeScript/JavaScript client that utilizes [Fetch API](https://fetch.spec.whatwg.org/). The generated Node module can be used in the following environments: + +Environment +* Node.js +* Webpack +* Browserify + +Language level +* ES5 - you must have a Promises/A+ library installed +* ES6 + +Module system +* CommonJS +* ES6 module system + +It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html)) + +### Building + +To build and compile the typescript sources to javascript use: +``` +npm install +npm run build +``` + +### Publishing + +First build the package then run ```npm publish``` + +### Consuming + +navigate to the folder of your consuming project and run one of the following commands. + +_published:_ + +``` +npm install @swagger/typescript-rxjs-petstore@1.0.0 --save +``` + +_unPublished (not recommended):_ + +``` +npm install PATH_TO_GENERATED_PACKAGE --save diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts new file mode 100644 index 00000000000..f057ab1e3d4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/PetApi.ts @@ -0,0 +1,400 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + ApiResponse, + Pet, +} from '../models'; + +export interface AddPetRequest { + body: Pet; +} + +export interface DeletePetRequest { + petId: number; + apiKey?: string; +} + +export interface FindPetsByStatusRequest { + status: Array; +} + +export interface FindPetsByTagsRequest { + tags: Array; +} + +export interface GetPetByIdRequest { + petId: number; +} + +export interface UpdatePetRequest { + body: Pet; +} + +export interface UpdatePetWithFormRequest { + petId: number; + name?: string; + status?: string; +} + +export interface UploadFileRequest { + petId: number; + additionalMetadata?: string; + file?: Blob; +} + +/** + * no description + */ +export class PetApi extends BaseAPI { + + /** + * Add a new pet to the store + */ + addPetRaw(requestParameters: AddPetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling addPet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Add a new pet to the store + */ + addPet(requestParameters: AddPetRequest): Observable { + return this.addPetRaw(requestParameters); + } + + /** + * Deletes a pet + */ + deletePetRaw(requestParameters: DeletePetRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling deletePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (requestParameters.apiKey !== undefined && requestParameters.apiKey !== null) { + headerParameters['api_key'] = String(requestParameters.apiKey); + } + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Deletes a pet + */ + deletePet(requestParameters: DeletePetRequest): Observable { + return this.deletePetRaw(requestParameters); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatusRaw(requestParameters: FindPetsByStatusRequest): Observable> { + if (requestParameters.status === null || requestParameters.status === undefined) { + throw new RequiredError('status','Required parameter requestParameters.status was null or undefined when calling findPetsByStatus.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.status) { + queryParameters['status'] = requestParameters.status.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByStatus`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple status values can be provided with comma separated strings + * Finds Pets by status + */ + findPetsByStatus(requestParameters: FindPetsByStatusRequest): Observable> { + return this.findPetsByStatusRaw(requestParameters); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTagsRaw(requestParameters: FindPetsByTagsRequest): Observable> { + if (requestParameters.tags === null || requestParameters.tags === undefined) { + throw new RequiredError('tags','Required parameter requestParameters.tags was null or undefined when calling findPetsByTags.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.tags) { + queryParameters['tags'] = requestParameters.tags.join(COLLECTION_FORMATS["csv"]); + } + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request>({ + path: `/pet/findByTags`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + * Finds Pets by tags + */ + findPetsByTags(requestParameters: FindPetsByTagsRequest): Observable> { + return this.findPetsByTagsRaw(requestParameters); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetByIdRaw(requestParameters: GetPetByIdRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling getPetById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a single pet + * Find pet by ID + */ + getPetById(requestParameters: GetPetByIdRequest): Observable { + return this.getPetByIdRaw(requestParameters); + } + + /** + * Update an existing pet + */ + updatePetRaw(requestParameters: UpdatePetRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updatePet.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + return this.request({ + path: `/pet`, + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Update an existing pet + */ + updatePet(requestParameters: UpdatePetRequest): Observable { + return this.updatePetRaw(requestParameters); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithFormRaw(requestParameters: UpdatePetWithFormRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling updatePetWithForm.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.name !== undefined) { + formData.append('name', requestParameters.name as any); + } + + if (requestParameters.status !== undefined) { + formData.append('status', requestParameters.status as any); + } + + return this.request({ + path: `/pet/{petId}`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * Updates a pet in the store with form data + */ + updatePetWithForm(requestParameters: UpdatePetWithFormRequest): Observable { + return this.updatePetWithFormRaw(requestParameters); + } + + /** + * uploads an image + */ + uploadFileRaw(requestParameters: UploadFileRequest): Observable { + if (requestParameters.petId === null || requestParameters.petId === undefined) { + throw new RequiredError('petId','Required parameter requestParameters.petId was null or undefined when calling uploadFile.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.accessToken) { + // oauth required + if (typeof this.configuration.accessToken === 'function') { + headerParameters["Authorization"] = this.configuration.accessToken("petstore_auth", ["write:pets", "read:pets"]); + } else { + headerParameters["Authorization"] = this.configuration.accessToken; + } + } + + const formData = new FormData(); + if (requestParameters.additionalMetadata !== undefined) { + formData.append('additionalMetadata', requestParameters.additionalMetadata as any); + } + + if (requestParameters.file !== undefined) { + formData.append('file', requestParameters.file as any); + } + + return this.request({ + path: `/pet/{petId}/uploadImage`.replace(`{${"petId"}}`, encodeURIComponent(String(requestParameters.petId))), + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: formData, + }); + } + + /** + * uploads an image + */ + uploadFile(requestParameters: UploadFileRequest): Observable { + return this.uploadFileRaw(requestParameters); + } + +} + +/** + * @export + * @enum {string} + */ +export enum FindPetsByStatusStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts new file mode 100644 index 00000000000..2fd95a36c91 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/StoreApi.ts @@ -0,0 +1,154 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + Order, +} from '../models'; + +export interface DeleteOrderRequest { + orderId: string; +} + +export interface GetOrderByIdRequest { + orderId: number; +} + +export interface PlaceOrderRequest { + body: Order; +} + +/** + * no description + */ +export class StoreApi extends BaseAPI { + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrderRaw(requestParameters: DeleteOrderRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling deleteOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + * Delete purchase order by ID + */ + deleteOrder(requestParameters: DeleteOrderRequest): Observable { + return this.deleteOrderRaw(requestParameters); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventoryRaw(): Observable<{ [key: string]: number; }> { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["api_key"] = this.configuration.apiKey("api_key"); // api_key authentication + } + + return this.request<{ [key: string]: number; }>({ + path: `/store/inventory`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Returns a map of status codes to quantities + * Returns pet inventories by status + */ + getInventory(): Observable<{ [key: string]: number; }> { + return this.getInventoryRaw(); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderByIdRaw(requestParameters: GetOrderByIdRequest): Observable { + if (requestParameters.orderId === null || requestParameters.orderId === undefined) { + throw new RequiredError('orderId','Required parameter requestParameters.orderId was null or undefined when calling getOrderById.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/store/order/{orderId}`.replace(`{${"orderId"}}`, encodeURIComponent(String(requestParameters.orderId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + * Find purchase order by ID + */ + getOrderById(requestParameters: GetOrderByIdRequest): Observable { + return this.getOrderByIdRaw(requestParameters); + } + + /** + * Place an order for a pet + */ + placeOrderRaw(requestParameters: PlaceOrderRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling placeOrder.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/store/order`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Place an order for a pet + */ + placeOrder(requestParameters: PlaceOrderRequest): Observable { + return this.placeOrderRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts new file mode 100644 index 00000000000..68926aa8fd4 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/UserApi.ts @@ -0,0 +1,301 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable } from 'rxjs'; +import { BaseAPI, RequiredError, HttpHeaders, HttpQuery, COLLECTION_FORMATS } from '../runtime'; +import { + User, +} from '../models'; + +export interface CreateUserRequest { + body: User; +} + +export interface CreateUsersWithArrayInputRequest { + body: Array; +} + +export interface CreateUsersWithListInputRequest { + body: Array; +} + +export interface DeleteUserRequest { + username: string; +} + +export interface GetUserByNameRequest { + username: string; +} + +export interface LoginUserRequest { + username: string; + password: string; +} + +export interface UpdateUserRequest { + username: string; + body: User; +} + +/** + * no description + */ +export class UserApi extends BaseAPI { + + /** + * This can only be done by the logged in user. + * Create user + */ + createUserRaw(requestParameters: CreateUserRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Create user + */ + createUser(requestParameters: CreateUserRequest): Observable { + return this.createUserRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInputRaw(requestParameters: CreateUsersWithArrayInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithArrayInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithArray`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithArrayInput(requestParameters: CreateUsersWithArrayInputRequest): Observable { + return this.createUsersWithArrayInputRaw(requestParameters); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInputRaw(requestParameters: CreateUsersWithListInputRequest): Observable { + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling createUsersWithListInput.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/createWithList`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * Creates list of users with given input array + */ + createUsersWithListInput(requestParameters: CreateUsersWithListInputRequest): Observable { + return this.createUsersWithListInputRaw(requestParameters); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUserRaw(requestParameters: DeleteUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling deleteUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * This can only be done by the logged in user. + * Delete user + */ + deleteUser(requestParameters: DeleteUserRequest): Observable { + return this.deleteUserRaw(requestParameters); + } + + /** + * Get user by user name + */ + getUserByNameRaw(requestParameters: GetUserByNameRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling getUserByName.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Get user by user name + */ + getUserByName(requestParameters: GetUserByNameRequest): Observable { + return this.getUserByNameRaw(requestParameters); + } + + /** + * Logs user into the system + */ + loginUserRaw(requestParameters: LoginUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling loginUser.'); + } + + if (requestParameters.password === null || requestParameters.password === undefined) { + throw new RequiredError('password','Required parameter requestParameters.password was null or undefined when calling loginUser.'); + } + + const queryParameters: HttpQuery = {}; + + if (requestParameters.username !== undefined && requestParameters.username !== null) { + queryParameters['username'] = requestParameters.username; + } + + if (requestParameters.password !== undefined && requestParameters.password !== null) { + queryParameters['password'] = requestParameters.password; + } + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/login`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs user into the system + */ + loginUser(requestParameters: LoginUserRequest): Observable { + return this.loginUserRaw(requestParameters); + } + + /** + * Logs out current logged in user session + */ + logoutUserRaw(): Observable { + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + return this.request({ + path: `/user/logout`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }); + } + + /** + * Logs out current logged in user session + */ + logoutUser(): Observable { + return this.logoutUserRaw(); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUserRaw(requestParameters: UpdateUserRequest): Observable { + if (requestParameters.username === null || requestParameters.username === undefined) { + throw new RequiredError('username','Required parameter requestParameters.username was null or undefined when calling updateUser.'); + } + + if (requestParameters.body === null || requestParameters.body === undefined) { + throw new RequiredError('body','Required parameter requestParameters.body was null or undefined when calling updateUser.'); + } + + const queryParameters: HttpQuery = {}; + + const headerParameters: HttpHeaders = {}; + + headerParameters['Content-Type'] = 'application/json'; + + return this.request({ + path: `/user/{username}`.replace(`{${"username"}}`, encodeURIComponent(String(requestParameters.username))), + method: 'PUT', + headers: headerParameters, + query: queryParameters, + body: requestParameters.body, + }); + } + + /** + * This can only be done by the logged in user. + * Updated user + */ + updateUser(requestParameters: UpdateUserRequest): Observable { + return this.updateUserRaw(requestParameters); + } + +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/index.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/index.ts new file mode 100644 index 00000000000..056206bfaca --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/apis/index.ts @@ -0,0 +1,3 @@ +export * from './PetApi'; +export * from './StoreApi'; +export * from './UserApi'; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/index.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/index.ts new file mode 100644 index 00000000000..848ecfa4d10 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/index.ts @@ -0,0 +1,3 @@ +export * from './runtime'; +export * from './apis'; +export * from './models'; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/ApiResponse.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/ApiResponse.ts new file mode 100644 index 00000000000..ec7675bf2ed --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/ApiResponse.ts @@ -0,0 +1,38 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * Describes the result of uploading an image resource + * @export + * @interface ApiResponse + */ +export interface ApiResponse { + /** + * + * @type {number} + * @memberof ApiResponse + */ + code?: number; + /** + * + * @type {string} + * @memberof ApiResponse + */ + type?: string; + /** + * + * @type {string} + * @memberof ApiResponse + */ + message?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Category.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Category.ts new file mode 100644 index 00000000000..0ff44e41405 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Category.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A category for a pet + * @export + * @interface Category + */ +export interface Category { + /** + * + * @type {number} + * @memberof Category + */ + id?: number; + /** + * + * @type {string} + * @memberof Category + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Order.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Order.ts new file mode 100644 index 00000000000..805786fadab --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Order.ts @@ -0,0 +1,64 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * An order for a pets from the pet store + * @export + * @interface Order + */ +export interface Order { + /** + * + * @type {number} + * @memberof Order + */ + id?: number; + /** + * + * @type {number} + * @memberof Order + */ + petId?: number; + /** + * + * @type {number} + * @memberof Order + */ + quantity?: number; + /** + * + * @type {Date} + * @memberof Order + */ + shipDate?: Date; + /** + * Order Status + * @type {string} + * @memberof Order + */ + status?: StatusEnum; + /** + * + * @type {boolean} + * @memberof Order + */ + complete?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Pet.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Pet.ts new file mode 100644 index 00000000000..10a8f347d1b --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Pet.ts @@ -0,0 +1,69 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { + Category, + Tag, +} from './'; + +/** + * A pet for sale in the pet store + * @export + * @interface Pet + */ +export interface Pet { + /** + * + * @type {number} + * @memberof Pet + */ + id?: number; + /** + * + * @type {Category} + * @memberof Pet + */ + category?: Category; + /** + * + * @type {string} + * @memberof Pet + */ + name: string; + /** + * + * @type {Array} + * @memberof Pet + */ + photoUrls: Array; + /** + * + * @type {Array} + * @memberof Pet + */ + tags?: Array; + /** + * pet status in the store + * @type {string} + * @memberof Pet + */ + status?: StatusEnum; +} + +/** + * @export + * @enum {string} + */ +export enum StatusEnum { +} + diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Tag.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Tag.ts new file mode 100644 index 00000000000..bd4f1964855 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/Tag.ts @@ -0,0 +1,32 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A tag for a pet + * @export + * @interface Tag + */ +export interface Tag { + /** + * + * @type {number} + * @memberof Tag + */ + id?: number; + /** + * + * @type {string} + * @memberof Tag + */ + name?: string; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/User.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/User.ts new file mode 100644 index 00000000000..d539f215b57 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/User.ts @@ -0,0 +1,68 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +/** + * A User who is purchasing from the pet store + * @export + * @interface User + */ +export interface User { + /** + * + * @type {number} + * @memberof User + */ + id?: number; + /** + * + * @type {string} + * @memberof User + */ + username?: string; + /** + * + * @type {string} + * @memberof User + */ + firstName?: string; + /** + * + * @type {string} + * @memberof User + */ + lastName?: string; + /** + * + * @type {string} + * @memberof User + */ + email?: string; + /** + * + * @type {string} + * @memberof User + */ + password?: string; + /** + * + * @type {string} + * @memberof User + */ + phone?: string; + /** + * User Status + * @type {number} + * @memberof User + */ + userStatus?: number; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/index.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/index.ts new file mode 100644 index 00000000000..f53c1dd42bd --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/models/index.ts @@ -0,0 +1,6 @@ +export * from './ApiResponse'; +export * from './Category'; +export * from './Order'; +export * from './Pet'; +export * from './Tag'; +export * from './User'; diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/package.json b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/package.json new file mode 100644 index 00000000000..5b33f51d196 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/package.json @@ -0,0 +1,21 @@ +{ + "name": "@swagger/typescript-rxjs-petstore", + "version": "1.0.0", + "description": "OpenAPI client for @swagger/typescript-rxjs-petstore", + "author": "OpenAPI-Generator", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "scripts" : { + "build": "tsc --outDir dist/", + "prepare": "npm run build" + }, + "dependencies": { + "rxjs": "^6.3.3", + }, + "devDependencies": { + "typescript": "^2.4" + }, + "publishConfig":{ + "registry":"https://skimdb.npmjs.com/registry" + } +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts new file mode 100644 index 00000000000..13ec6f7a4af --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/runtime.ts @@ -0,0 +1,210 @@ +// tslint:disable +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { Observable, of } from 'rxjs'; +import { ajax, AjaxResponse } from 'rxjs/ajax'; +import { map, concatMap } from 'rxjs/operators'; + +export const BASE_PATH = 'http://petstore.swagger.io/v2'.replace(/\/+$/, ''); + +export interface ConfigurationParameters { + basePath?: string; // override base path + middleware?: Middleware[]; // middleware to apply before/after rxjs requests + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | ((name: string) => string); // parameter for apiKey security + accessToken?: string | ((name: string, scopes?: string[]) => string); // parameter for oauth2 security +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + get basePath(): string { + return this.configuration.basePath || BASE_PATH; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name: string, scopes?: string[]) => string) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : () => accessToken; + } + return undefined; + } +} + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + private middleware: Middleware[]; + + constructor(protected configuration = new Configuration()) { + this.middleware = configuration.middleware; + } + + withMiddleware(this: T, ...middlewares: Middleware[]) { + const next = this.clone(); + next.middleware = next.middleware.concat(...middlewares); + return next; + } + + withPreMiddleware(this: T, ...preMiddlewares: Array) { + const middlewares = preMiddlewares.map((pre) => ({ pre })); + return this.withMiddleware(...middlewares); + } + + withPostMiddleware(this: T, ...postMiddlewares: Array) { + const middlewares = postMiddlewares.map((post) => ({ post })); + return this.withMiddleware(...middlewares); + } + + protected request(context: RequestOpts): Observable { + return this.rxjsRequest(this.createRequestArgs(context)).pipe( + map((res) => { + if (res.status >= 200 && res.status < 300) { + return res.response as T; + } + throw res; + }) + ); + } + + private createRequestArgs(context: RequestOpts): RequestArgs { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a '?' character which buggy webservers + // do not handle correctly sometimes. + url += '?' + querystring(context.query); + } + const body = context.body instanceof FormData ? context.body : JSON.stringify(context.body); + const options = { + method: context.method, + headers: context.headers, + body, + }; + return { url, options }; + } + + private rxjsRequest(params: RequestContext): Observable { + const preMiddlewares = this.middleware && this.middleware.filter((item) => item.pre); + const postMiddlewares = this.middleware && this.middleware.filter((item) => item.post); + + return of(params).pipe( + map((args) => { + if (preMiddlewares) { + preMiddlewares.forEach((mw) => (args = mw.pre({ ...args }))); + } + return args; + }), + concatMap((args) => + ajax({ url: args.url, ...args.options }).pipe( + map((response) => { + if (postMiddlewares) { + postMiddlewares.forEach((mw) => (response = mw.post({ ...params, response }))); + } + return response; + }) + ) + ) + ); + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +} + +export class RequiredError extends Error { + name: 'RequiredError' = 'RequiredError'; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ',', + ssv: ' ', + tsv: '\t', + pipes: '|', +}; + +export type Json = any; +export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS'; +export type HttpHeaders = { [key: string]: string }; +export type HttpQuery = { [key: string]: string | number | null | boolean | Array }; +export type HttpBody = Json | FormData; +export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; + +export interface RequestArgs { + url: string; + options: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HttpMethod; + headers: HttpHeaders; + query?: HttpQuery; + body?: HttpBody; +} + +export function querystring(params: HttpQuery): string { + return Object.keys(params) + .map((key) => { + const value = params[key]; + if (value instanceof Array) { + return value.map((val) => `${encodeURIComponent(key)}=${encodeURIComponent(String(val))}`) + .join('&'); + } + return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`; + }) + .join('&'); +} + +export interface RequestContext extends RequestArgs {} +export interface ResponseContext extends RequestArgs { + response: AjaxResponse; +} + +export interface Middleware { + pre?(context: RequestContext): RequestArgs; + post?(context: ResponseContext): AjaxResponse; +} diff --git a/samples/client/petstore/typescript-rxjs/builds/with-npm-version/tsconfig.json b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/tsconfig.json new file mode 100644 index 00000000000..5de40723aa1 --- /dev/null +++ b/samples/client/petstore/typescript-rxjs/builds/with-npm-version/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "declaration": true, + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "rootDir": ".", + "lib": [ + "es6", + "dom" + ] + }, + "exclude": [ + "dist", + "node_modules" + ] +}