Skip to content

Commit ca5d384

Browse files
authored
[bug][typescript] Fix node client generator import file paths (#7410)
1 parent 620f8db commit ca5d384

File tree

3 files changed

+48
-12
lines changed

3 files changed

+48
-12
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
3636
private static final Logger LOGGER = LoggerFactory.getLogger(TypeScriptNodeClientCodegen.class);
3737

3838
public static final String NPM_REPOSITORY = "npmRepository";
39-
private static final String DEFAULT_IMPORT_PREFIX = "./";
39+
private static final String DEFAULT_MODEL_FILENAME_DIRECTORY_PREFIX = "./";
40+
private static final String DEFAULT_MODEL_IMPORT_DIRECTORY_PREFIX = "../";
4041

4142
protected String npmRepository = null;
4243
protected String apiSuffix = "Api";
@@ -153,7 +154,7 @@ public String toModelFilename(String name) {
153154
return importMapping.get(name);
154155
}
155156

156-
return DEFAULT_IMPORT_PREFIX + camelize(toModelName(name), true);
157+
return DEFAULT_MODEL_FILENAME_DIRECTORY_PREFIX + camelize(toModelName(name), true);
157158
}
158159

159160
@Override
@@ -162,7 +163,7 @@ public String toModelImport(String name) {
162163
return importMapping.get(name);
163164
}
164165

165-
return modelPackage() + "/" + camelize(toModelName(name), true);
166+
return DEFAULT_MODEL_IMPORT_DIRECTORY_PREFIX + modelPackage() + "/" + camelize(toModelName(name), true);
166167
}
167168

168169
@Override
@@ -222,8 +223,7 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
222223
// Add additional filename information for model imports in the apis
223224
List<Map<String, Object>> imports = (List<Map<String, Object>>) operations.get("imports");
224225
for (Map<String, Object> im : imports) {
225-
im.put("filename", im.get("import"));
226-
im.put("classname", getModelnameFromModelFilename(im.get("filename").toString()));
226+
im.put("filename", im.get("import").toString());
227227
}
228228

229229
return operations;
@@ -309,10 +309,6 @@ private String getApiFilenameFromClassname(String classname) {
309309
return toApiFilename(name);
310310
}
311311

312-
private String getModelnameFromModelFilename(String filename) {
313-
String name = filename.substring((modelPackage() + File.separator).length());
314-
return camelize(name);
315-
}
316312
@Override
317313
protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) {
318314
super.addAdditionPropertiesToCodeGenModel(codegenModel, schema);

modules/openapi-generator/src/main/resources/typescript-node/api-single.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import http from 'http';
55

66
/* tslint:disable:no-unused-locals */
77
{{#imports}}
8-
import { {{classname}} } from '../{{filename}}';
8+
import { {{classname}} } from '{{filename}}';
99
{{/imports}}
1010

1111
import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models';

modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptnode/TypeScriptNodeClientCodegenTest.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import org.testng.annotations.BeforeMethod;
88
import org.testng.annotations.Test;
99

10+
import java.util.*;
11+
1012
public class TypeScriptNodeClientCodegenTest {
1113

1214
private TypeScriptNodeClientCodegen codegen;
@@ -87,9 +89,9 @@ public void modelFilenameWithMappingTest() {
8789
Assert.assertEquals(codegen.toModelFilename("ApiResponse"), mappedName);
8890
}
8991

90-
@Test(description = "prepend model import with ./ by default")
92+
@Test(description = "prepend model import with ../model by default")
9193
public void defaultModelImportTest() {
92-
Assert.assertEquals(codegen.toModelImport("ApiResponse"), "model/apiResponse");
94+
Assert.assertEquals(codegen.toModelImport("ApiResponse"), "../model/apiResponse");
9395
}
9496

9597
@Test(description = "use mapped name for model import when provided")
@@ -134,4 +136,42 @@ public void mappedApiImportTest() {
134136
Assert.assertEquals(codegen.toApiImport("Category"), mappedName);
135137
}
136138

139+
@Test(description = "correctly produces imports without import mapping")
140+
public void postProcessOperationsWithModelsTestWithoutImportMapping() {
141+
final String importName = "../model/pet";
142+
Map<String, Object> operations = createPostProcessOperationsMapWithImportName(importName);
143+
144+
codegen.postProcessOperationsWithModels(operations, Collections.emptyList());
145+
List<Map<String, Object>> extractedImports = (List<Map<String, Object>>) operations.get("imports");
146+
Assert.assertEquals(extractedImports.get(0).get("filename"), importName);
147+
}
148+
149+
@Test(description = "correctly produces imports with import mapping")
150+
public void postProcessOperationsWithModelsTestWithImportMapping() {
151+
final String importName = "@namespace/dir/category";
152+
Map<String, Object> operations = createPostProcessOperationsMapWithImportName(importName);
153+
154+
codegen.postProcessOperationsWithModels(operations, Collections.emptyList());
155+
List<Map<String, Object>> extractedImports = (List<Map<String, Object>>) operations.get("imports");
156+
157+
Assert.assertEquals(extractedImports.get(0).get("filename"), importName);
158+
}
159+
160+
private Map<String, Object> createPostProcessOperationsMapWithImportName(String importName) {
161+
Map<String, Object> operations = new HashMap<String, Object>() {{
162+
put("operation", Collections.emptyList());
163+
put("classname", "Pet");
164+
}};
165+
166+
Map<String, Object> importList = new HashMap<String, Object>() {{
167+
put("import", importName);
168+
put("classname", "Pet");
169+
}};
170+
List<Map<String, Object>> imports = new ArrayList<>();
171+
imports.add(importList);
172+
return new HashMap<String, Object>() {{
173+
put("operations", operations);
174+
put("imports", imports);
175+
}};
176+
}
137177
}

0 commit comments

Comments
 (0)