forked from loafle/openapi-generator-original
typescript-node: handle additional properties (#4699)
* add handling additional properties into typescript node * additional tests * petscripts * Update modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java Co-Authored-By: Esteban Gehring <esteban.gehring@gmail.com> * Update modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNodeClientCodegen.java Co-Authored-By: Esteban Gehring <esteban.gehring@gmail.com>
This commit is contained in:
parent
d0dfe3e4a0
commit
f472020412
@ -18,8 +18,10 @@
|
|||||||
package org.openapitools.codegen.languages;
|
package org.openapitools.codegen.languages;
|
||||||
|
|
||||||
import io.swagger.v3.oas.models.Operation;
|
import io.swagger.v3.oas.models.Operation;
|
||||||
|
import io.swagger.v3.oas.models.media.ArraySchema;
|
||||||
import io.swagger.v3.oas.models.media.Schema;
|
import io.swagger.v3.oas.models.media.Schema;
|
||||||
import io.swagger.v3.oas.models.responses.ApiResponse;
|
import io.swagger.v3.oas.models.responses.ApiResponse;
|
||||||
|
|
||||||
import org.openapitools.codegen.*;
|
import org.openapitools.codegen.*;
|
||||||
import org.openapitools.codegen.utils.ModelUtils;
|
import org.openapitools.codegen.utils.ModelUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -189,8 +191,8 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
|
|||||||
// Loop over all the operations and pick out each unique auth method
|
// Loop over all the operations and pick out each unique auth method
|
||||||
Map<String, CodegenSecurity> authMethodsMap = new HashMap<>();
|
Map<String, CodegenSecurity> authMethodsMap = new HashMap<>();
|
||||||
for (CodegenOperation op : (List<CodegenOperation>) objs.get("operation")) {
|
for (CodegenOperation op : (List<CodegenOperation>) objs.get("operation")) {
|
||||||
if(op.hasAuthMethods){
|
if (op.hasAuthMethods) {
|
||||||
for(CodegenSecurity sec : op.authMethods){
|
for (CodegenSecurity sec : op.authMethods) {
|
||||||
authMethodsMap.put(sec.name, sec);
|
authMethodsMap.put(sec.name, sec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -299,4 +301,14 @@ public class TypeScriptNodeClientCodegen extends AbstractTypeScriptClientCodegen
|
|||||||
String name = filename.substring((modelPackage() + File.separator).length());
|
String name = filename.substring((modelPackage() + File.separator).length());
|
||||||
return camelize(name);
|
return camelize(name);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
protected void addAdditionPropertiesToCodeGenModel(CodegenModel codegenModel, Schema schema) {
|
||||||
|
super.addAdditionPropertiesToCodeGenModel(codegenModel, schema);
|
||||||
|
Schema additionalProperties = ModelUtils.getAdditionalProperties(schema);
|
||||||
|
codegenModel.additionalPropertiesType = getSchemaType(additionalProperties);
|
||||||
|
if ("array".equalsIgnoreCase(codegenModel.additionalPropertiesType)) {
|
||||||
|
codegenModel.additionalPropertiesType += '<' + getSchemaType(((ArraySchema) additionalProperties).getItems()) + '>';
|
||||||
|
}
|
||||||
|
addImport(codegenModel, codegenModel.additionalPropertiesType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,11 @@
|
|||||||
package org.openapitools.codegen.typescript.typescriptnode;
|
package org.openapitools.codegen.typescript.typescriptnode;
|
||||||
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import io.swagger.v3.oas.models.OpenAPI;
|
import io.swagger.v3.oas.models.OpenAPI;
|
||||||
import io.swagger.v3.oas.models.media.*;
|
import io.swagger.v3.oas.models.media.*;
|
||||||
import io.swagger.v3.parser.util.SchemaTypeUtil;
|
import io.swagger.v3.parser.util.SchemaTypeUtil;
|
||||||
|
|
||||||
import org.openapitools.codegen.CodegenModel;
|
import org.openapitools.codegen.CodegenModel;
|
||||||
import org.openapitools.codegen.CodegenProperty;
|
import org.openapitools.codegen.CodegenProperty;
|
||||||
import org.openapitools.codegen.DefaultCodegen;
|
import org.openapitools.codegen.DefaultCodegen;
|
||||||
@ -206,6 +208,54 @@ public class TypeScriptNodeModelTest {
|
|||||||
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Children")).size(), 1);
|
Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Children")).size(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(description = "convert an array additional properties model")
|
||||||
|
public void arrayModelAdditionalPropertiesArrayTest() {
|
||||||
|
final Schema schema = new Schema()
|
||||||
|
.description("a map model")
|
||||||
|
.additionalProperties(new ArraySchema().type("array").items(new Schema().type("string")));
|
||||||
|
final DefaultCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||||
|
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", schema);
|
||||||
|
codegen.setOpenAPI(openAPI);
|
||||||
|
final CodegenModel cm = codegen.fromModel("sample", schema);
|
||||||
|
|
||||||
|
Assert.assertEquals(cm.name, "sample");
|
||||||
|
Assert.assertEquals(cm.classname, "Sample");
|
||||||
|
Assert.assertEquals(cm.description, "a map model");
|
||||||
|
Assert.assertEquals(cm.additionalPropertiesType, "Array<string>");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "convert an string additional properties model")
|
||||||
|
public void arrayModelAdditionalPropertiesStringTest() {
|
||||||
|
final Schema schema = new Schema()
|
||||||
|
.description("a map model")
|
||||||
|
.additionalProperties(new Schema().type("string"));
|
||||||
|
final DefaultCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||||
|
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", schema);
|
||||||
|
codegen.setOpenAPI(openAPI);
|
||||||
|
final CodegenModel cm = codegen.fromModel("sample", schema);
|
||||||
|
|
||||||
|
Assert.assertEquals(cm.name, "sample");
|
||||||
|
Assert.assertEquals(cm.classname, "Sample");
|
||||||
|
Assert.assertEquals(cm.description, "a map model");
|
||||||
|
Assert.assertEquals(cm.additionalPropertiesType, "string");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "convert an complex additional properties model")
|
||||||
|
public void arrayModelAdditionalPropertiesComplexTest() {
|
||||||
|
final Schema schema = new Schema()
|
||||||
|
.description("a map model")
|
||||||
|
.additionalProperties(new Schema().type("object").$ref("#/definitions/Children"));
|
||||||
|
final DefaultCodegen codegen = new TypeScriptNodeClientCodegen();
|
||||||
|
OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("sample", schema);
|
||||||
|
codegen.setOpenAPI(openAPI);
|
||||||
|
final CodegenModel cm = codegen.fromModel("sample", schema);
|
||||||
|
|
||||||
|
Assert.assertEquals(cm.name, "sample");
|
||||||
|
Assert.assertEquals(cm.classname, "Sample");
|
||||||
|
Assert.assertEquals(cm.description, "a map model");
|
||||||
|
Assert.assertEquals(cm.additionalPropertiesType, "Children");
|
||||||
|
}
|
||||||
|
|
||||||
@Test(description = "prepend imports with ./ by default")
|
@Test(description = "prepend imports with ./ by default")
|
||||||
public void defaultFromModelTest() {
|
public void defaultFromModelTest() {
|
||||||
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml");
|
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml");
|
||||||
|
@ -1 +1 @@
|
|||||||
4.2.2-SNAPSHOT
|
4.2.3-SNAPSHOT
|
Loading…
x
Reference in New Issue
Block a user