From ce5d9ed6360bccda909f709b19159e5128a1a8e0 Mon Sep 17 00:00:00 2001 From: ty-v1 Date: Thu, 24 Mar 2022 16:22:12 +0900 Subject: [PATCH 1/4] remove prefix and suffix from model before generate import path --- .../languages/TypeScriptNodeClientCodegen.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java index ad8947cb3aeb..147e561dbac1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java @@ -30,6 +30,7 @@ import java.io.File; import java.util.*; +import static org.apache.commons.lang3.StringUtils.capitalize; import static org.openapitools.codegen.utils.StringUtils.camelize; public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen { @@ -189,7 +190,7 @@ private List> toTsImports(CodegenModel cm, Set impor if (!im.equals(cm.classname)) { HashMap tsImport = new HashMap<>(); tsImport.put("classname", im); - tsImport.put("filename", toModelFilename(im)); + tsImport.put("filename", toModelFilename(removeModelPrefixSuffix(im))); tsImports.add(tsImport); } } @@ -309,6 +310,20 @@ private String getApiFilenameFromClassname(String classname) { return toApiFilename(name); } + private String removeModelPrefixSuffix(String name) { + String result = name; + final String prefix = capitalize(this.modelNamePrefix); + final String suffix = capitalize(this.modelNameSuffix); + + if (prefix.length() > 0 && result.startsWith(prefix)) { + result = result.substring(prefix.length()); + } + if (suffix.length() > 0 && result.endsWith(suffix)) { + result = result.substring(0, result.length() - suffix.length()); + } + return result; + } + @Override protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) { super.addAdditionPropertiesToCodeGenModel(codegenModel, schema); From 9256e10b7ae1322fd8268dd6641d924159afb1d5 Mon Sep 17 00:00:00 2001 From: ty-v1 Date: Thu, 24 Mar 2022 17:46:34 +0900 Subject: [PATCH 2/4] add testcases --- .../TypeScriptNodeClientCodegenTest.java | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java index d48db3981e4a..9589caf0c6d5 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java @@ -1,13 +1,30 @@ package org.openapitools.codegen.typescript.typescriptnode; import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.media.ArraySchema; +import io.swagger.v3.oas.models.media.ObjectSchema; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.media.StringSchema; +import org.apache.commons.lang3.ObjectUtils; +import org.commonmark.node.Code; +import org.openapitools.codegen.CodegenModel; +import org.openapitools.codegen.CodegenProperty; +import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.languages.AbstractPhpCodegen; +import org.openapitools.codegen.languages.DartDioClientCodegen; +import org.openapitools.codegen.languages.TypeScriptClientCodegen; import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen; +import org.openapitools.codegen.php.AbstractPhpCodegenTest; +import org.stringtemplate.v4.ST; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import javax.inject.Singleton; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class TypeScriptNodeClientCodegenTest { @@ -157,6 +174,64 @@ public void postProcessOperationsWithModelsTestWithImportMapping() { Assert.assertEquals(extractedImports.get(0).get("filename"), importName); } + @Test(description = "correctly produces imports with model name suffix") + public void postProcessOperationsWithModelsTestWithModelNameSuffix() { + final OpenAPI openAPI = TestUtils.createOpenAPI(); + final Schema rootSchema = new ObjectSchema() + .addProperties("child", new Schema().$ref("Child")); + final Schema childSchema = new ObjectSchema() + .addProperties("key", new StringSchema()); + + openAPI.getComponents() + .addSchemas("Root", rootSchema) + .addSchemas("Child", childSchema); + + final TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen(); + codegen.setModelNameSuffix("Suffix"); + + final HashMap allModels = createParameterForPostProcessAllModels( + codegen.fromModel("Root", rootSchema), + codegen.fromModel("Child", childSchema) + ); + final Map results = codegen.postProcessAllModels(allModels); + final Map root = (Map) results.get("Root"); + final List> modelsOfRoot = (List>) root.get("models"); + final List> tsImports = (List>) modelsOfRoot.get(0) + .get("tsImports"); + + Assert.assertEquals(tsImports.size(), 1); + Assert.assertEquals(tsImports.get(0).get("filename"), "./childSuffix"); + } + + @Test(description = "correctly produces imports with model name prefix") + public void postProcessOperationsWithModelsTestWithModelNamePrefix() { + final OpenAPI openAPI = TestUtils.createOpenAPI(); + final Schema rootSchema = new ObjectSchema() + .addProperties("child", new Schema().$ref("Child")); + final Schema childSchema = new ObjectSchema() + .addProperties("key", new StringSchema()); + + openAPI.getComponents() + .addSchemas("Root", rootSchema) + .addSchemas("Child", childSchema); + + final TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen(); + codegen.setModelNamePrefix("Prefix"); + + final HashMap allModels = createParameterForPostProcessAllModels( + codegen.fromModel("Root", rootSchema), + codegen.fromModel("Child", childSchema) + ); + final Map results = codegen.postProcessAllModels(allModels); + final Map root = (Map) results.get("Root"); + final List> modelsOfRoot = (List>) root.get("models"); + final List> tsImports = (List>) modelsOfRoot.get(0) + .get("tsImports"); + + Assert.assertEquals(tsImports.size(), 1); + Assert.assertEquals(tsImports.get(0).get("filename"), "./prefixChild"); + } + private Map createPostProcessOperationsMapWithImportName(String importName) { Map operations = new HashMap() {{ put("operation", Collections.emptyList()); @@ -174,4 +249,30 @@ private Map createPostProcessOperationsMapWithImportName(String put("imports", imports); }}; } + + private HashMap createParameterForPostProcessAllModels(CodegenModel root, CodegenModel child) { + return new HashMap() {{ + put("Child", new HashMap() {{ + put("models", Collections.singletonList( + new HashMap() {{ + put("importPath", "../model/child"); + put("model", child); + }} + )); + }}); + put("Root", new HashMap() {{ + put("models", Collections.singletonList( + new HashMap() {{ + put("importPath", "../model/root"); + put("model", root); + }} + )); + put("imports", Collections.singletonList( + new HashMap() {{ + put("import", "../model/child"); + }} + )); + }}); + }}; + } } From 901a681cb4e568870cc0561075ba3dc2e1fd3e83 Mon Sep 17 00:00:00 2001 From: ty-v1 Date: Thu, 24 Mar 2022 17:47:17 +0900 Subject: [PATCH 3/4] optimize import --- .../TypeScriptNodeClientCodegenTest.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java index 9589caf0c6d5..b950e55a645e 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java @@ -1,30 +1,17 @@ package org.openapitools.codegen.typescript.typescriptnode; import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ObjectSchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; -import org.apache.commons.lang3.ObjectUtils; -import org.commonmark.node.Code; import org.openapitools.codegen.CodegenModel; -import org.openapitools.codegen.CodegenProperty; -import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.TestUtils; -import org.openapitools.codegen.languages.AbstractPhpCodegen; -import org.openapitools.codegen.languages.DartDioClientCodegen; -import org.openapitools.codegen.languages.TypeScriptClientCodegen; import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen; -import org.openapitools.codegen.php.AbstractPhpCodegenTest; -import org.stringtemplate.v4.ST; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import javax.inject.Singleton; import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; public class TypeScriptNodeClientCodegenTest { From 12fb6e448acbbbb14c9f23d9061649b064b63b3c Mon Sep 17 00:00:00 2001 From: ty-v1 Date: Fri, 25 Mar 2022 14:36:56 +0900 Subject: [PATCH 4/4] fix testcases --- .../TypeScriptNodeClientCodegenTest.java | 60 +++++++++---------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java index b950e55a645e..d08944e269cf 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java @@ -7,6 +7,8 @@ import org.openapitools.codegen.CodegenModel; import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen; +import org.openapitools.codegen.model.ModelMap; +import org.openapitools.codegen.model.ModelsMap; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -176,14 +178,14 @@ public void postProcessOperationsWithModelsTestWithModelNameSuffix() { final TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen(); codegen.setModelNameSuffix("Suffix"); - final HashMap allModels = createParameterForPostProcessAllModels( + final HashMap allModels = createParameterForPostProcessAllModels( codegen.fromModel("Root", rootSchema), codegen.fromModel("Child", childSchema) ); - final Map results = codegen.postProcessAllModels(allModels); - final Map root = (Map) results.get("Root"); - final List> modelsOfRoot = (List>) root.get("models"); - final List> tsImports = (List>) modelsOfRoot.get(0) + final Map results = codegen.postProcessAllModels(allModels); + final List rootModelMaps = results.get("Root") + .getModels(); + final List> tsImports = (List>) rootModelMaps.get(0) .get("tsImports"); Assert.assertEquals(tsImports.size(), 1); @@ -205,14 +207,14 @@ public void postProcessOperationsWithModelsTestWithModelNamePrefix() { final TypeScriptNodeClientCodegen codegen = new TypeScriptNodeClientCodegen(); codegen.setModelNamePrefix("Prefix"); - final HashMap allModels = createParameterForPostProcessAllModels( + final HashMap allModels = createParameterForPostProcessAllModels( codegen.fromModel("Root", rootSchema), codegen.fromModel("Child", childSchema) ); - final Map results = codegen.postProcessAllModels(allModels); - final Map root = (Map) results.get("Root"); - final List> modelsOfRoot = (List>) root.get("models"); - final List> tsImports = (List>) modelsOfRoot.get(0) + final Map results = codegen.postProcessAllModels(allModels); + final List rootModelMaps = results.get("Root") + .getModels(); + final List> tsImports = (List>) rootModelMaps.get(0) .get("tsImports"); Assert.assertEquals(tsImports.size(), 1); @@ -237,29 +239,21 @@ private Map createPostProcessOperationsMapWithImportName(String }}; } - private HashMap createParameterForPostProcessAllModels(CodegenModel root, CodegenModel child) { - return new HashMap() {{ - put("Child", new HashMap() {{ - put("models", Collections.singletonList( - new HashMap() {{ - put("importPath", "../model/child"); - put("model", child); - }} - )); - }}); - put("Root", new HashMap() {{ - put("models", Collections.singletonList( - new HashMap() {{ - put("importPath", "../model/root"); - put("model", root); - }} - )); - put("imports", Collections.singletonList( - new HashMap() {{ - put("import", "../model/child"); - }} - )); - }}); + private HashMap createParameterForPostProcessAllModels(CodegenModel root, CodegenModel child) { + final ModelsMap rootModelsMap = new ModelsMap(); + final ModelMap rootModelMap = new ModelMap(); + rootModelMap.setModel(root); + rootModelsMap.setModels(Collections.singletonList(rootModelMap)); + rootModelsMap.setImports(Collections.singletonList(Collections.singletonMap("import", "../model/Child"))); + + final ModelsMap childModelsMap = new ModelsMap(); + final ModelMap childModelMap = new ModelMap(); + childModelMap.setModel(child); + childModelsMap.setModels(Collections.singletonList(childModelMap)); + + return new HashMap() {{ + put("Child", childModelsMap); + put("Root", rootModelsMap); }}; } }