From e0cbf46041cdbe7a9a6670db599dfe9f3faea5e7 Mon Sep 17 00:00:00 2001 From: William Cheng Date: Sat, 29 Sep 2018 16:35:24 +0800 Subject: [PATCH] Add post processing to files generated by TS generators (#1063) * add file post proess to TS generators * update ts node petstore with prettier * update base on feedback --- .../AbstractTypeScriptClientCodegen.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) 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 77756cf99ff..2755301b909 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 @@ -20,6 +20,7 @@ package org.openapitools.codegen.languages; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.parameters.Parameter; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.*; import org.openapitools.codegen.utils.ModelUtils; @@ -48,7 +49,7 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp importMapping.clear(); supportsInheritance = true; - + // 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) @@ -116,6 +117,10 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp public void processOpts() { super.processOpts(); + if (StringUtils.isEmpty(System.getenv("TS_POST_PROCESS_FILE"))) { + LOGGER.info("Hint: Environment variable 'TS_POST_PROCESS_FILE' (optional) not defined. E.g. to format the source code, please try 'export TS_POST_PROCESS_FILE=\"/usr/local/bin/prettier --write\"' (Linux/Mac)"); + } + if (additionalProperties.containsKey(CodegenConstants.MODEL_PROPERTY_NAMING)) { setModelPropertyNaming((String) additionalProperties.get(CodegenConstants.MODEL_PROPERTY_NAMING)); } @@ -328,10 +333,10 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp } else if (ModelUtils.isDateTimeSchema(p)) { return UNDEFINED_VALUE; } else if (ModelUtils.isNumberSchema(p)) { - if (p.getDefault() != null) { - return p.getDefault().toString(); - } - return UNDEFINED_VALUE; + if (p.getDefault() != null) { + return p.getDefault().toString(); + } + return UNDEFINED_VALUE; } else if (ModelUtils.isIntegerSchema(p)) { if (p.getDefault() != null) { return p.getDefault().toString(); @@ -347,7 +352,7 @@ 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. @@ -561,4 +566,32 @@ public abstract class AbstractTypeScriptClientCodegen extends DefaultCodegen imp public String escapeUnsafeCharacters(String input) { return input.replace("*/", "*_/").replace("/*", "/_*"); } + + @Override + public void postProcessFile(File file, String fileType) { + super.postProcessFile(file, fileType); + + if (file == null) { + return; + } + String tsPostProcessFile = System.getenv("TS_POST_PROCESS_FILE"); + if (StringUtils.isEmpty(tsPostProcessFile)) { + return; // skip if TS_POST_PROCESS_FILE env variable is not defined + } + // only process files with ts extension + if ("ts".equals(FilenameUtils.getExtension(file.toString()))) { + String command = tsPostProcessFile + " " + file.toString(); + try { + Process p = Runtime.getRuntime().exec(command); + int exitValue = p.waitFor(); + if (exitValue != 0) { + LOGGER.error("Error running the command ({}). Exit value: {}", command, exitValue); + } else { + LOGGER.info("Successfully executed: " + command); + } + } catch (Exception e) { + LOGGER.error("Error running the command ({}). Exception: {}", command, e.getMessage()); + } + } + } }