diff --git a/src/main/java/com/wordnik/swagger/codegen/Codegen.java b/src/main/java/com/wordnik/swagger/codegen/Codegen.java index aafa9a85397..0f1ed5da507 100644 --- a/src/main/java/com/wordnik/swagger/codegen/Codegen.java +++ b/src/main/java/com/wordnik/swagger/codegen/Codegen.java @@ -69,6 +69,8 @@ public class Codegen extends DefaultGenerator { return new JavaClientCodegen(); else if("jaxrs".equals(name)) return new JaxRSServerCodegen(); + else if("nodejs".equals(name)) + return new NodeJSServerCodegen(); else if("static".equals(name)) return new StaticDocCodegen(); else if(name.indexOf(".") > 0) { diff --git a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index 445455000eb..43f4a583788 100644 --- a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -413,8 +413,8 @@ public class DefaultCodegen { property.name = toVarName(name); property.baseName = name; property.description = p.getDescription(); - property.getter = "get" + name.substring(0, 1).toUpperCase() + name.substring(1); - property.setter = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); + property.getter = "get" + initialCaps(name); + property.setter = "set" + initialCaps(name); property.example = p.getExample(); property.defaultValue = toDefaultValue(p); @@ -508,7 +508,7 @@ public class DefaultCodegen { if(builder.toString().length() == 0) part = Character.toLowerCase(part.charAt(0)) + part.substring(1); else - part = Character.toUpperCase(part.charAt(0)) + part.substring(1); + part = initialCaps(part); builder.append(part); } } diff --git a/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java b/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java new file mode 100644 index 00000000000..b30db030087 --- /dev/null +++ b/src/main/java/com/wordnik/swagger/codegen/languages/NodeJSServerCodegen.java @@ -0,0 +1,71 @@ +package com.wordnik.swagger.codegen.languages; + +import com.wordnik.swagger.codegen.*; +import com.wordnik.swagger.models.properties.*; + +import java.util.*; +import java.io.File; + +public class NodeJSServerCodegen extends DefaultCodegen implements CodegenConfig { + protected String invokerPackage = "com.wordnik.client"; + protected String groupId = "com.wordnik"; + protected String artifactId = "swagger-client"; + protected String artifactVersion = "1.0.0"; + + public NodeJSServerCodegen() { + super(); + outputFolder = "generated-code/nodejs"; + apiTemplateFiles.put("api.mustache", ".js"); + templateDir = "nodejs"; + apiPackage = "app.apis"; + modelPackage = "app"; + + additionalProperties.put("invokerPackage", invokerPackage); + additionalProperties.put("groupId", groupId); + additionalProperties.put("artifactId", artifactId); + additionalProperties.put("artifactVersion", artifactVersion); + + supportingFiles.add(new SupportingFile("package.mustache", "", "package.json")); + supportingFiles.add(new SupportingFile("models.mustache", modelPackage, "models.js")); + supportingFiles.add(new SupportingFile("main.mustache", "", "main.js")); + supportingFiles.add(new SupportingFile("README.mustache", "", "README.js")); + + languageSpecificPrimitives = new HashSet( + Arrays.asList( + "String", + "boolean", + "Boolean", + "Double", + "Integer", + "Long", + "Float") + ); + typeMapping.put("array", "array"); + } + + @Override + public String escapeReservedWord(String name) { + return "_" + name; + } + + @Override + public String apiFileFolder() { + return outputFolder + File.separator + apiPackage().replaceAll("\\.", File.separator); + } + + public String modelFileFolder() { + return outputFolder + File.separator + modelPackage().replaceAll("\\.", File.separator); + } + + @Override + public String getSwaggerType(Property p) { + String swaggerType = super.getSwaggerType(p); + String type = null; + if(typeMapping.containsKey(swaggerType)) { + return typeMapping.get(swaggerType); + } + else + type = swaggerType; + return toModelName(type); + } +} \ No newline at end of file diff --git a/src/main/resources/nodejs/api.mustache b/src/main/resources/nodejs/api.mustache index 93560fbe2ad..82f0145ce8e 100644 --- a/src/main/resources/nodejs/api.mustache +++ b/src/main/resources/nodejs/api.mustache @@ -33,7 +33,17 @@ exports.{{nickname}} = { {{/headerParams}}]).concat([{{#bodyParams}} params.body("body", "{{swaggerDataType}}", "{{description}}", {{#required}}{{required}}{{/required}}{{^required}}false{{/required}}) {{/bodyParams}}]), + {{#returnContainer}} + "type": "{{returnType}}", + "items": { + {{#returnTypeIsPrimitive}}"type": "{{returnContainer}}"{{/returnTypeIsPrimitive}} + {{^returnTypeIsPrimitive}}"$ref": "{{returnContainer}}"{{/returnTypeIsPrimitive}} + }, + // container + {{/returnContainer}} + {{^returnContainer}} "type" : "{{returnType}}", + {{/returnContainer}} "responseMessages" : [errors.invalid('id'), errors.notFound('{{returnType}}')], "nickname" : "{{nickname}}" }, diff --git a/src/main/resources/nodejs/main.mustache b/src/main/resources/nodejs/main.mustache index 6005108643d..59265d99d09 100644 --- a/src/main/resources/nodejs/main.mustache +++ b/src/main/resources/nodejs/main.mustache @@ -23,7 +23,7 @@ app.use(cors(corsOptions)); swagger.setAppHandler(app); swagger.configureSwaggerPaths("", "api-docs", "") -var models = require("./models.js"); +var models = require("./app/models.js"); {{#apiInfo}} {{#apis}} @@ -32,13 +32,8 @@ var {{classname}} = require("./{{apiFolder}}/{{classname}}.js"); {{/apiInfo}} swagger.addModels(models) - {{#apiInfo}} - {{#apis}} - {{#operations}} - {{#operation}}.add{{httpMethod}}({{classname}}.{{nickname}}){{newline}}{{/operation}} - {{/operations}} - {{/apis}}; - {{/apiInfo}} + {{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}.add{{httpMethod}}({{classname}}.{{nickname}}){{/operation}}{{/operations}} + {{/apis}}{{/apiInfo}}; // configures the app swagger.configure("http://localhost:8002", "0.1");