From e825b953f72ca8341e25c3f54dc86b8378608201 Mon Sep 17 00:00:00 2001 From: delenius Date: Mon, 8 Feb 2016 12:31:00 -0800 Subject: [PATCH] Add usePromise parameter to JS client --- .../languages/JavascriptClientCodegen.java | 14 +++++++++++--- .../main/resources/Javascript/ApiClient.mustache | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index cc5dcff3fa26..20c7fc62e6bc 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -23,6 +23,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo private static final String PROJECT_DESCRIPTION = "projectDescription"; private static final String PROJECT_VERSION = "projectVersion"; private static final String PROJECT_LICENSE_NAME = "projectLicenseName"; + private static final String USE_PROMISES = "usePromises"; protected String projectName; protected String moduleName; @@ -31,7 +32,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo protected String sourceFolder = "src"; protected String localVariablePrefix = ""; - + protected boolean usePromises = false; + public JavascriptClientCodegen() { super(); outputFolder = "generated-code/js"; @@ -40,7 +42,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo templateDir = "Javascript"; apiPackage = "api"; modelPackage = "model"; - + // reference: http://www.w3schools.com/js/js_reserved.asp reservedWords = new HashSet( Arrays.asList( @@ -80,6 +82,8 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo "version of the project (Default: using info.version or \"1.0.0\")")); cliOptions.add(new CliOption(PROJECT_LICENSE_NAME, "name of the license the project uses (Default: using info.license.name)")); + cliOptions.add(new CliOption(USE_PROMISES, + "use Promises as return values from the client API, instead of superagent callbacks (Default: false)")); } @Override @@ -146,7 +150,10 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)) { sourceFolder = (String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER); } - + if (additionalProperties.containsKey(USE_PROMISES)) { + usePromises = Boolean.parseBoolean((String)additionalProperties.get(USE_PROMISES)); + } + if (swagger.getInfo() != null) { Info info = swagger.getInfo(); if (StringUtils.isBlank(projectName) && info.getTitle() != null) { @@ -189,6 +196,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo additionalProperties.put(PROJECT_VERSION, projectVersion); additionalProperties.put(CodegenConstants.LOCAL_VARIABLE_PREFIX, localVariablePrefix); additionalProperties.put(CodegenConstants.SOURCE_FOLDER, sourceFolder); + additionalProperties.put(USE_PROMISES, usePromises); supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); supportingFiles.add(new SupportingFile("index.mustache", sourceFolder, "index.js")); diff --git a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache index b301da5c3012..55a786514851 100644 --- a/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache +++ b/modules/swagger-codegen/src/main/resources/Javascript/ApiClient.mustache @@ -214,6 +214,20 @@ request.accept(accept); } + {{#usePromises}} + return new Promise( function(resolve,reject) { + request.end(function(error, response) { + if (error) { + reject(error); + } + else { + var data = _this.deserialize(response, returnType); + resolve(data); + } + }); + }); + {{/usePromises}} + {{^usePromises}} request.end(function(error, response) { if (callback) { var data = null; @@ -225,6 +239,7 @@ }); return request; + {{/usePromises}} }; ApiClient.parseDate = function parseDate(str) {