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 2755301b909..3023e83afcf 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 @@ -29,6 +29,8 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen implements CodegenConfig { @@ -156,12 +158,6 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp @Override public String toParamName(String name) { - // should be the same as variable name - return toVarName(name); - } - - @Override - public String toVarName(String name) { // sanitize name name = sanitizeName(name, "\\W-[\\$]"); @@ -184,6 +180,33 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp return name; } + @Override + public String toVarName(String name) { + name = this.toParamName(name); + + // if the proprty name has any breaking characters such as :, ;, . etc. + // then wrap the name within single quotes. + // my:interface:property: string; => 'my:interface:property': string; + if (propertyHasBreakingCharacters(name)) { + name = "\'" + name + "\'"; + } + + return name; + } + + /** + * Checks whether property names have breaking characters like ':', '-'. + * @param str string to check for breaking characters + * @return true if breaking characters are present and false if not + */ + private boolean propertyHasBreakingCharacters(String str) { + final String regex = "^.*[+*:;,.()-]+.*$"; + final Pattern pattern = Pattern.compile(regex); + final Matcher matcher = pattern.matcher(str); + boolean matches = matcher.matches(); + return matches; + } + @Override public String toModelName(String name) { name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'. diff --git a/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache b/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache index c9da208072e..9ec6e67dde9 100644 --- a/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache +++ b/modules/openapi-generator/src/main/resources/typescript-angular/modelGeneric.mustache @@ -5,6 +5,6 @@ export interface {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{ {{>m * {{{description}}} */ {{/description}} - {{#isReadOnly}}readonly {{/isReadOnly}}{{name}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}; + {{#isReadOnly}}readonly {{/isReadOnly}}{{{name}}}{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{/isEnum}}; {{/vars}} }{{>modelGenericEnums}} \ No newline at end of file