();
mo.put("model", cm);
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java
index 12abb58094e..5a9a70bcff6 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractAdaCodegen.java
@@ -378,7 +378,7 @@ abstract public class AbstractAdaCodegen extends DefaultCodegen implements Codeg
/**
* Post process the media types (produces and consumes) for Ada code generator.
*
- * For each media type, add a adaMediaType member that gives the Ada enum constant
+ * For each media type, add an adaMediaType member that gives the Ada enum constant
* for the corresponding type.
*
* @param types the list of media types.
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java
index a385c4ddabb..4a6a827932b 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java
@@ -341,7 +341,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
.build();
if (objs.containsKey("lambda")) {
- LOGGER.warn("An property named 'lambda' already exists. Mustache lambdas renamed from 'lambda' to '_lambda'. " +
+ LOGGER.warn("A property named 'lambda' already exists. Mustache lambdas renamed from 'lambda' to '_lambda'. " +
"You'll likely need to use a custom template, " +
"see https://github.com/swagger-api/swagger-codegen#modifying-the-client-library-format. ");
objs.put("_lambda", lambdas);
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
index 5f6f220d74b..a3c09824a81 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java
@@ -105,7 +105,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege
typeMapping.put("file", "*os.File");
typeMapping.put("binary", "*os.File");
typeMapping.put("ByteArray", "string");
- typeMapping.put("object", "interface{}");
+ typeMapping.put("object", "map[string]interface{}");
importMapping = new HashMap();
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java
index 7f2801a7be3..850b3205f26 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractTypeScriptClientCodegen.java
@@ -48,7 +48,9 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
importMapping.clear();
supportsInheritance = true;
- setReservedWordsLowerCase(Arrays.asList(
+
+ // NOTE: TypeScript uses camel cased reserved words, while models are title cased. We don't want lowercase comparisons.
+ reservedWords.addAll(Arrays.asList(
// local variable names used in API methods (endpoints)
"varLocalPath", "queryParameters", "headerParams", "formParams", "useFormData", "varLocalDeferred",
"requestOptions",
@@ -344,6 +346,12 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp
}
}
+
+ @Override
+ protected boolean isReservedWord(String word) {
+ // NOTE: This differs from super's implementation in that TypeScript does _not_ want case insensitive matching.
+ return reservedWords.contains(word);
+ }
@Override
public String getSchemaType(Schema p) {
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java
index b11c02f6329..6467b33edc9 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java
@@ -74,7 +74,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
apiTemplateFiles.put("api-impl-source.mustache", ".cpp");
apiTemplateFiles.put("main-api-server.mustache", ".cpp");
- embeddedTemplateDir = templateDir = "pistache-server";
+ embeddedTemplateDir = templateDir = "cpp-pistache-server";
cliOptions.clear();
@@ -219,14 +219,14 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
//TODO: This changes the info about the real type but it is needed to parse the header params
if (param.isHeaderParam) {
- param.dataType = "Optional";
- param.baseType = "Optional";
+ param.dataType = "Pistache::Optional";
+ param.baseType = "Pistache::Optional";
} else if (param.isQueryParam) {
if (param.isPrimitiveType) {
- param.dataType = "Optional<" + param.dataType + ">";
+ param.dataType = "Pistache::Optional<" + param.dataType + ">";
} else {
- param.dataType = "Optional<" + param.baseType + ">";
- param.baseType = "Optional<" + param.baseType + ">";
+ param.dataType = "Pistache::Optional<" + param.baseType + ">";
+ param.baseType = "Pistache::Optional<" + param.baseType + ">";
}
}
}
@@ -299,7 +299,7 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
return toModelName(openAPIType);
}
- return "std::shared_ptr<" + openAPIType + ">";
+ return openAPIType;
}
@Override
@@ -326,30 +326,14 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
} else if (ModelUtils.isArraySchema(p)) {
ArraySchema ap = (ArraySchema) p;
String inner = getSchemaType(ap.getItems());
- if (!languageSpecificPrimitives.contains(inner)) {
- inner = "std::shared_ptr<" + inner + ">";
- }
return "std::vector<" + inner + ">()";
} else if (!StringUtils.isEmpty(p.get$ref())) { // model
- return "new " + toModelName(ModelUtils.getSimpleRef(p.get$ref())) + "()";
+ return toModelName(ModelUtils.getSimpleRef(p.get$ref())) + "()";
} else if (ModelUtils.isStringSchema(p)) {
return "\"\"";
}
- return "nullptr";
- }
-
- @Override
- public void postProcessParameter(CodegenParameter parameter) {
- super.postProcessParameter(parameter);
-
- boolean isPrimitiveType = parameter.isPrimitiveType == Boolean.TRUE;
- boolean isListContainer = parameter.isListContainer == Boolean.TRUE;
- boolean isString = parameter.isString == Boolean.TRUE;
-
- if (!isPrimitiveType && !isListContainer && !isString && !parameter.dataType.startsWith("std::shared_ptr")) {
- parameter.dataType = "std::shared_ptr<" + parameter.dataType + ">";
- }
+ return "";
}
/**
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java
index dab947d9dd7..f57667f5be5 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java
@@ -92,7 +92,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
* Template Location. This is the location which templates will be read from. The generator
* will use the resource stream to attempt to read the templates.
*/
- embeddedTemplateDir = templateDir = "qt5cpp";
+ embeddedTemplateDir = templateDir = "cpp-qt5-client";
// CLI options
addOption(CPP_NAMESPACE, CPP_NAMESPACE_DESC, this.cppNamespace);
@@ -248,7 +248,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
if (!folder.isEmpty())
folder += File.separator;
- return "#include \"" + folder + name + ".h\"";
+ return "#include \"" + folder + toModelName(name) + ".h\"";
}
/**
@@ -285,7 +285,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
@Override
public String toModelFilename(String name) {
- return modelNamePrefix + initialCaps(name);
+ return initialCaps(toModelName(name));
}
@Override
@@ -381,7 +381,7 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
@Override
public String toModelName(String type) {
if (type == null) {
- LOGGER.warn("Model name can't be null. Defaul to 'UnknownModel'.");
+ LOGGER.warn("Model name can't be null. Default to 'UnknownModel'.");
type = "UnknownModel";
}
@@ -392,30 +392,31 @@ public class CppQt5ClientCodegen extends AbstractCppCodegen implements CodegenCo
languageSpecificPrimitives.contains(type)) {
return type;
} else {
- return modelNamePrefix + Character.toUpperCase(type.charAt(0)) + type.substring(1);
+ String typeName = sanitizeName(type);
+ return modelNamePrefix + Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
}
}
@Override
public String toVarName(String name) {
// sanitize name
- name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
+ String varName = sanitizeName(name);
// if it's all uppper case, convert to lower case
- if (name.matches("^[A-Z_]*$")) {
- name = name.toLowerCase();
+ if (varName.matches("^[A-Z_]*$")) {
+ varName = varName.toLowerCase();
}
// camelize (lower first character) the variable name
// petId => pet_id
- name = underscore(name);
+ varName = underscore(varName);
// for reserved word or word starting with number, append _
- if (isReservedWord(name) || name.matches("^\\d.*")) {
- name = escapeReservedWord(name);
+ if (isReservedWord(varName) || varName.matches("^\\d.*")) {
+ varName = escapeReservedWord(varName);
}
- return name;
+ return varName;
}
@Override
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java
index d8aed6bd863..8cf9a14af6d 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestSdkClientCodegen.java
@@ -99,7 +99,7 @@ public class CppRestSdkClientCodegen extends AbstractCppCodegen {
apiTemplateFiles.put("api-header.mustache", ".h");
apiTemplateFiles.put("api-source.mustache", ".cpp");
- embeddedTemplateDir = templateDir = "cpprest";
+ embeddedTemplateDir = templateDir = "cpp-rest-sdk-client";
cliOptions.clear();
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java
index 69e0ebe17f6..fb8e289b3af 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppRestbedServerCodegen.java
@@ -53,7 +53,7 @@ public class CppRestbedServerCodegen extends AbstractCppCodegen {
apiTemplateFiles.put("api-header.mustache", ".h");
apiTemplateFiles.put("api-source.mustache", ".cpp");
- embeddedTemplateDir = templateDir = "restbed";
+ embeddedTemplateDir = templateDir = "cpp-restbed-server";
cliOptions.clear();
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTizenClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTizenClientCodegen.java
index 2f2afe39139..1e3f1a849f1 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTizenClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppTizenClientCodegen.java
@@ -44,7 +44,7 @@ public class CppTizenClientCodegen extends DefaultCodegen implements CodegenConf
modelTemplateFiles.put("model-body.mustache", ".cpp");
apiTemplateFiles.put("api-header.mustache", ".h");
apiTemplateFiles.put("api-body.mustache", ".cpp");
- embeddedTemplateDir = templateDir = "tizen";
+ embeddedTemplateDir = templateDir = "cpp-tizen-client";
modelPackage = "";
defaultIncludes = new HashSet(
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java
similarity index 93%
rename from modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterCodegen.java
rename to modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java
index a4b35051bdd..830e5b06ade 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JMeterClientCodegen.java
@@ -19,18 +19,13 @@ package org.openapitools.codegen.languages;
import org.openapitools.codegen.*;
import org.openapitools.codegen.utils.*;
-import org.openapitools.codegen.mustache.*;
-import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.*;
import io.swagger.v3.oas.models.media.*;
-import io.swagger.v3.oas.models.responses.ApiResponse;
-import io.swagger.v3.oas.models.parameters.*;
-import io.swagger.v3.oas.models.info.Info;
import java.util.*;
import java.io.File;
-public class JMeterCodegen extends DefaultCodegen implements CodegenConfig {
+public class JMeterClientCodegen extends DefaultCodegen implements CodegenConfig {
// source folder where to write the files
protected String sourceFolder = "";
@@ -69,11 +64,11 @@ public class JMeterCodegen extends DefaultCodegen implements CodegenConfig {
return "Generates a JMeter .jmx file.";
}
- public JMeterCodegen() {
+ public JMeterClientCodegen() {
super();
// set the output folder here
- outputFolder = "generated-code/JMeterCodegen";
+ outputFolder = "generated-code/JMeterClientCodegen";
/*
* Api classes. You can write classes for each Api file with the apiTemplateFiles map.
@@ -90,7 +85,7 @@ public class JMeterCodegen extends DefaultCodegen implements CodegenConfig {
* Template Location. This is the location which templates will be read from. The generator
* will use the resource stream to attempt to read the templates.
*/
- embeddedTemplateDir = templateDir = "JMeter";
+ embeddedTemplateDir = templateDir = "jmeter-client";
/*
* Api Package. Optional, if needed, this can be used in templates
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java
index 75b07b266ff..198a9bff546 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptClientCodegen.java
@@ -986,6 +986,11 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
}
String jsdocType = getJSDocType(operation);
operation.vendorExtensions.put("x-jsdoc-type", jsdocType);
+
+ // Format the return type correctly
+ if (operation.returnType != null) {
+ operation.vendorExtensions.put("x-return-type", normalizeType(operation.returnType));
+ }
}
}
return objs;
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptFlowtypedClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptFlowtypedClientCodegen.java
new file mode 100644
index 00000000000..bb415e2bc41
--- /dev/null
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavascriptFlowtypedClientCodegen.java
@@ -0,0 +1,281 @@
+/*
+ * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech)
+ * Copyright 2018 SmartBear Software
+ *
+ * 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.OpenAPI;
+import io.swagger.v3.oas.models.media.ArraySchema;
+import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.parser.util.SchemaTypeUtil;
+import org.openapitools.codegen.*;
+import org.apache.commons.lang3.StringUtils;
+import org.openapitools.codegen.utils.ModelUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class JavascriptFlowtypedClientCodegen extends AbstractTypeScriptClientCodegen {
+ private static final SimpleDateFormat SNAPSHOT_SUFFIX_FORMAT = new SimpleDateFormat("yyyyMMddHHmm");
+
+ 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";
+
+ protected String npmName = null;
+ protected String npmVersion = "1.0.0";
+ protected String npmRepository = null;
+
+ public JavascriptFlowtypedClientCodegen() {
+ super();
+
+ // clear import mapping (from default generator) as TS does not use it
+ // at the moment
+ importMapping.clear();
+
+ setReservedWordsLowerCase(Arrays.asList(
+ // local variable names used in API methods (endpoints)
+ "varLocalPath", "queryParameters", "headerParams", "formParams", "useFormData", "varLocalDeferred",
+ "requestOptions",
+ // Typescript reserved words
+ "abstract", "arguments", "boolean", "break", "byte",
+ "case", "catch", "char", "class", "const",
+ "continue", "debugger", "default", "delete", "do",
+ "double", "else", "enum", "eval", "export",
+ "extends", "false", "final", "finally", "float",
+ "for", "function", "goto", "if", "implements",
+ "import", "in", "instanceof", "int", "interface",
+ "let", "long", "native", "new", "null",
+ "package", "private", "protected", "public", "return",
+ "short", "static", "super", "switch", "synchronized",
+ "this", "throw", "throws", "transient", "true",
+ "try", "typeof", "var", "void", "volatile",
+ "while", "with", "yield",
+ "Array", "Date", "eval", "function", "hasOwnProperty",
+ "Infinity", "isFinite", "isNaN", "isPrototypeOf",
+ "Math", "NaN", "Number", "Object",
+ "prototype", "String", "toString", "undefined", "valueOf"));
+
+ languageSpecificPrimitives = new HashSet(
+ Arrays.asList("string", "boolean", "number", "Array", "Object", "Date", "File", "Blob")
+ );
+
+ instantiationTypes.put("array", "Array");
+ instantiationTypes.put("list", "Array");
+ instantiationTypes.put("map", "Object");
+ typeMapping.clear();
+ typeMapping.put("array", "Array");
+ typeMapping.put("map", "Object");
+ typeMapping.put("List", "Array");
+ typeMapping.put("boolean", "boolean");
+ typeMapping.put("string", "string");
+ typeMapping.put("int", "number");
+ typeMapping.put("float", "number");
+ typeMapping.put("number", "number");
+ typeMapping.put("DateTime", "Date");
+ typeMapping.put("date", "Date");
+ typeMapping.put("long", "number");
+ typeMapping.put("short", "number");
+ typeMapping.put("char", "string");
+ typeMapping.put("double", "number");
+ typeMapping.put("object", "Object");
+ typeMapping.put("integer", "number");
+ // file, binary not supported in JS client right now, using String as a workaround
+ typeMapping.put("file", "string");
+ typeMapping.put("binary", "string");
+ typeMapping.put("ByteArray", "string");
+ typeMapping.put("UUID", "string");
+
+ defaultIncludes = new HashSet(languageSpecificPrimitives);
+ outputFolder = "generated-code/javascript-flowtyped";
+ embeddedTemplateDir = templateDir = "Javascript-Flowtyped";
+
+ 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()));
+
+ }
+
+ @Override
+ public CodegenType getTag() {
+ return CodegenType.CLIENT;
+ }
+
+ @Override
+ protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) {
+ codegenModel.additionalPropertiesType = getTypeDeclaration((Schema) schema.getAdditionalProperties());
+ addImport(codegenModel, codegenModel.additionalPropertiesType);
+ }
+
+ @Override
+ public void processOpts() {
+ super.processOpts();
+ supportingFiles.add(new SupportingFile("index.mustache", "src", "index.js"));
+ supportingFiles.add(new SupportingFile("api.mustache", "src", "api.js"));
+ supportingFiles.add(new SupportingFile("configuration.mustache", "src", "configuration.js"));
+ supportingFiles.add(new SupportingFile("gitignore", "", ".gitignore"));
+
+ 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 = (Schema) p.getAdditionalProperties();
+ return "{ [key: string]: " + this.getTypeDeclaration(inner) + "; }";
+ } else if (ModelUtils.isFileSchema(p)) {
+ return "any";
+ } else if (ModelUtils.isBinarySchema(p)) {
+ return "any";
+ } else {
+ return super.getTypeDeclaration(p);
+ }
+ }
+
+ 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"));
+ supportingFiles.add(new SupportingFile("flowconfig.mustache", "", ".flowconfig"));
+ supportingFiles.add(new SupportingFile("babelrc", "", ".babelrc"));
+ }
+
+ @Override
+ public void preprocessOpenAPI(OpenAPI openAPI) {
+ super.preprocessOpenAPI(openAPI);
+
+ if (openAPI.getInfo() != null) {
+ Info info = openAPI.getInfo();
+ if (StringUtils.isBlank(npmName) && info.getTitle() != null) {
+ // when projectName is not specified, generate it from info.title
+ npmName = sanitizeName(dashize(info.getTitle()));
+ }
+ if (StringUtils.isBlank(npmVersion)) {
+ // when projectVersion is not specified, use info.version
+ npmVersion = escapeUnsafeCharacters(escapeQuotationMark(info.getVersion()));
+ }
+ }
+
+ // default values
+ if (StringUtils.isBlank(npmName)) {
+ npmName = "openapi-js-client";
+ }
+ if (StringUtils.isBlank(npmVersion)) {
+ npmVersion = "1.0.0";
+ }
+
+ additionalProperties.put(NPM_NAME, npmName);
+ additionalProperties.put(NPM_VERSION, npmVersion);
+ additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage);
+ }
+
+ @Override
+ public Map postProcessModels(Map objs) {
+ // process enum in models
+ List