From 85850b28468e022179bf33838302a2e4b0d2235b Mon Sep 17 00:00:00 2001 From: miguelvaladez Date: Thu, 15 Jun 2017 18:44:34 +1000 Subject: [PATCH] Feature/es6 angular (#5495) * module code added for es6-angular client code generation * typescript wiped out the core gitignore file * added USE_ES6 cli option to javascript-closure-angular, will use the javascript-es6-angular templates instead * fixed issue with module file * added annotations to the templates * moved default output folder declaration * moved es6 template folder under closure-angular --- .gitignore | 1 - ...JavascriptClosureAngularClientCodegen.java | 46 ++++++++++--- .../es6/api.mustache | 64 +++++++++++++++++++ .../es6/module.mustache | 18 ++++++ 4 files changed, 119 insertions(+), 10 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/api.mustache create mode 100644 modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/module.mustache diff --git a/.gitignore b/.gitignore index 5fce63f33c5..62978c501be 100644 --- a/.gitignore +++ b/.gitignore @@ -158,4 +158,3 @@ samples/client/petstore/typescript-node/npm/npm-debug.log # aspnetcore samples/server/petstore/aspnetcore/.vs/ - diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java index 779f51d178b..24f6d22112b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClosureAngularClientCodegen.java @@ -3,6 +3,7 @@ package io.swagger.codegen.languages; import io.swagger.codegen.CodegenModel; import io.swagger.codegen.*; import io.swagger.models.properties.*; +import io.swagger.models.Swagger; import java.util.TreeSet; import java.util.*; @@ -11,8 +12,14 @@ import java.io.File; import org.apache.commons.lang3.StringUtils; public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implements CodegenConfig { + + public static final String USE_ES6 = "useEs6"; + + protected boolean useEs6; + public JavascriptClosureAngularClientCodegen() { super(); + outputFolder = "generated-code/javascript-closure-angular"; supportsInheritance = false; setReservedWordsLowerCase(Arrays.asList("abstract", @@ -64,15 +71,11 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem typeMapping.put("binary", "string"); - outputFolder = "generated-code/javascript-closure-angular"; - modelTemplateFiles.put("model.mustache", ".js"); - apiTemplateFiles.put("api.mustache", ".js"); - embeddedTemplateDir = templateDir = "Javascript-Closure-Angular"; - apiPackage = "API.Client"; - modelPackage = "API.Client"; - cliOptions.add(new CliOption(CodegenConstants.HIDE_GENERATION_TIMESTAMP, "hides the timestamp when files were generated") .defaultValue(Boolean.TRUE.toString())); + cliOptions.add(new CliOption(USE_ES6, + "use ES6 templates") + .defaultValue(Boolean.FALSE.toString())); } @Override @@ -83,6 +86,28 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem if (!additionalProperties.containsKey(CodegenConstants.HIDE_GENERATION_TIMESTAMP)) { additionalProperties.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, Boolean.TRUE.toString()); } + + if (additionalProperties.containsKey(USE_ES6)) { + setUseEs6(convertPropertyToBooleanAndWriteBack(USE_ES6)); + } + } + + @Override + public void preprocessSwagger(Swagger swagger) { + super.preprocessSwagger(swagger); + + if (useEs6) { + embeddedTemplateDir = templateDir = "Javascript-Closure-Angular/es6"; + apiPackage = "resources"; + apiTemplateFiles.put("api.mustache", ".js"); + supportingFiles.add(new SupportingFile("module.mustache", "", "module.js")); + } else { + modelTemplateFiles.put("model.mustache", ".js"); + apiTemplateFiles.put("api.mustache", ".js"); + embeddedTemplateDir = templateDir = "Javascript-Closure-Angular"; + apiPackage = "API.Client"; + modelPackage = "API.Client"; + } } @Override @@ -102,7 +127,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem } @Override - public String escapeReservedWord(String name) { + public String escapeReservedWord(String name) { if(this.reservedWordsMappings().containsKey(name)) { return this.reservedWordsMappings().get(name); } @@ -121,7 +146,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem @Override public String toVarName(String name) { // sanitize name - name = sanitizeName(name); + name = sanitizeName(name); // replace - with _ e.g. created-at => created_at name = name.replaceAll("-", "_"); @@ -273,4 +298,7 @@ public class JavascriptClosureAngularClientCodegen extends DefaultCodegen implem return input.replace("*/", "*_/").replace("/*", "/_*"); } + public void setUseEs6(boolean useEs6) { + this.useEs6 = useEs6; + } } diff --git a/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/api.mustache b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/api.mustache new file mode 100644 index 00000000000..ffb87706783 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/api.mustache @@ -0,0 +1,64 @@ +/** + * @fileoverview AUTOMATICALLY GENERATED service for {{package}}.{{classname}}. + * Do not edit this file by hand or your changes will be lost next time it is + * generated.{{#appDescription}} + * + * {{ appDescription }}{{/appDescription}}{{#version}} + * Version: {{version}}{{/version}}{{#appContact}} + * Contact: {{appContact}}{{/appContact}} +{{^hideGenerationTimestamp}} + * Generated at: {{generatedDate}} +{{/hideGenerationTimestamp}} + * Generated by: {{generatorClass}} + */{{#licenseInfo}} +/** + * @license {{licenseInfo}}{{#licenseUrl}} + * {{licenseUrl}}{{/licenseUrl}} + */ +{{/licenseInfo}} + +{{#operations}} + +export default class {{classname}} { + + /** + {{#description}} + * {{&description}} + {{/description}} + * @constructor + * @param {!angular.$resource} $resource + * @ngInject + */ + constructor($resource) { + this.basePath = '{{basePath}}'; + + return $resource(null, {}, { + {{#operation}} + '{{operationId}}': this.{{operationId}}(), + {{/operation}} + }); + } + +{{#operation}} + + /** + * {{summary}} + * {{notes}} {{#pathParams}} + * @param {object} { {{paramName}} : !{{{dataType}}}{{^required}}={{/required}} } path parameters required by resource {{/pathParams}}{{#bodyParams}} + * @param {object} { {{paramName}} : !{{{dataType}}}{{^required}}={{/required}} } postData required by resource {{/bodyParams}} + * @param {function} Success Callback + * @param {function} Error Callback + * @return {object} + */ + {{operationId}}() { + return { + method: '{{httpMethod}}', + url: this.basePath + '{{path}}' + {{#pathParams}} + .replace('{' + '{{baseName}}' + '}', ':{{paramName}}') + {{/pathParams}} + } + } +{{/operation}} +} +{{/operations}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/module.mustache b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/module.mustache new file mode 100644 index 00000000000..e142e74c187 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/Javascript-Closure-Angular/es6/module.mustache @@ -0,0 +1,18 @@ +{{#apiInfo}} +{{#apis}} +{{#operations}} +import {{classname}} from './resources/{{classname}}'; +{{/operations}} +{{/apis}} + +let moduleName = '{{appName}}'.toLowerCase().replace(/\s/g, '.'); + +export default angular + .module(moduleName, []) + {{#apis}} + {{#operations}} + .service('{{classname}}', {{classname}}) + {{/operations}} + {{/apis}}; + +{{/apiInfo}} \ No newline at end of file