Skip to content

Commit f3e56c0

Browse files
committed
feature(typescript):增强枚举类型的展示
1 parent 77b93fc commit f3e56c0

File tree

9 files changed

+70
-55
lines changed

9 files changed

+70
-55
lines changed

core/src/main/java/com/wuxp/codegen/core/CodegenVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ private CodegenVersion() {
1111
/**
1212
* 项目版本号
1313
*/
14-
public static final String VERSION = "1.2.0-SNAPSHOT";
14+
public static final String VERSION = "1.1.2-SNAPSHOT";
1515
}

examples/swagger-2/src/main/java/com/wuxp/codegen/swagger2/example/controller/UserController.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import com.wuxp.codegen.swagger2.example.domain.Order;
55
import com.wuxp.codegen.swagger2.example.domain.User;
6+
import com.wuxp.codegen.swagger2.example.enums.ExampleEnum;
7+
import com.wuxp.codegen.swagger2.example.enums.Sex;
68
import io.swagger.annotations.Api;
79
import io.swagger.annotations.ApiImplicitParam;
810
import io.swagger.annotations.ApiImplicitParams;
@@ -111,12 +113,27 @@ public void uploadFile(@RequestParam(name = "file") CommonsMultipartFile commons
111113

112114
@ApiOperation(value = "test3", notes = "test3")
113115
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path")
114-
@RequestMapping(value = "/test", method = RequestMethod.GET)
116+
@RequestMapping(value = "/test3", method = RequestMethod.GET)
115117
public Map<String, Object> test3(Long id) {
116118
HashMap<String, Object> stringStringHashMap = new HashMap<>();
117119
stringStringHashMap.put("userName", "id");
118120
stringStringHashMap.put("aH2", "112");
119121
return stringStringHashMap;
120122
}
121123

124+
125+
@ApiOperation(value = "test4", notes = "test4")
126+
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path")
127+
@RequestMapping(value = "/test4", method = RequestMethod.GET)
128+
public Map<Sex, ExampleEnum> test4(Long id) {
129+
return Collections.emptyMap();
130+
}
131+
132+
@ApiOperation(value = "test5", notes = "test5")
133+
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path")
134+
@RequestMapping(value = "/test5", method = RequestMethod.GET)
135+
public Sex test5(Long id) {
136+
return Sex.MAN;
137+
}
138+
122139
}

examples/swagger-3/src/main/java/com/wuxp/codegen/swagger3/example/maven/controller/UserController.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ public Map<String, Object> test3(Long id) {
9696

9797

9898
@RequestMapping(value = "/test2", method = RequestMethod.GET)
99-
public ServiceResponse<List<PageInfo<User>>> test4(Long id) {
99+
public ServiceResponse<List<PageInfo<User>>> test2(Long id) {
100100

101101
return null;
102102
}
103103

104-
@RequestMapping(value = "/test5", method = RequestMethod.GET)
105-
public Map<PageInfo<User>, List<PageInfo<User>>> test5(Long id) {
104+
@RequestMapping(value = "/test4", method = RequestMethod.GET)
105+
public Map<PageInfo<User>, List<PageInfo<User>>> test4(Long id) {
106106
return null;
107107
}
108108

@@ -128,4 +128,9 @@ public Map<String[][], String[]>[][][] test9(Long id) {
128128

129129
return null;
130130
}
131+
132+
@RequestMapping(value = "/test5", method = RequestMethod.GET)
133+
public Sex test5(Long id) {
134+
return Sex.MAN;
135+
}
131136
}

languages/src/main/java/com/wuxp/codegen/languages/AbstractTypescriptParser.java

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package com.wuxp.codegen.languages;
22

3-
import com.wuxp.codegen.meta.annotations.factories.AnnotationMate;
4-
import com.wuxp.codegen.meta.annotations.factories.spring.RequestMappingMetaFactory;
53
import com.wuxp.codegen.core.CodeDetect;
64
import com.wuxp.codegen.core.exception.CodegenRuntimeException;
75
import com.wuxp.codegen.core.strategy.CodeGenMatchingStrategy;
86
import com.wuxp.codegen.core.strategy.PackageMapStrategy;
97
import com.wuxp.codegen.languages.factory.TypescriptLanguageMetaInstanceFactory;
8+
import com.wuxp.codegen.meta.annotations.factories.AnnotationMate;
9+
import com.wuxp.codegen.meta.annotations.factories.spring.RequestMappingMetaFactory;
10+
import com.wuxp.codegen.meta.util.RequestMappingUtils;
1011
import com.wuxp.codegen.model.CommonCodeGenAnnotation;
1112
import com.wuxp.codegen.model.CommonCodeGenClassMeta;
13+
import com.wuxp.codegen.model.CommonCodeGenFiledMeta;
1214
import com.wuxp.codegen.model.CommonCodeGenMethodMeta;
1315
import com.wuxp.codegen.model.constant.MappingAnnotationPropNameConstant;
1416
import com.wuxp.codegen.model.constant.TypescriptFeignMediaTypeConstant;
@@ -18,7 +20,6 @@
1820
import com.wuxp.codegen.model.languages.typescript.TypescriptClassMeta;
1921
import com.wuxp.codegen.model.languages.typescript.TypescriptFieldMate;
2022
import com.wuxp.codegen.model.util.JavaTypeUtils;
21-
import com.wuxp.codegen.meta.util.RequestMappingUtils;
2223
import lombok.extern.slf4j.Slf4j;
2324
import org.springframework.util.StringUtils;
2425
import org.springframework.web.bind.annotation.RequestBody;
@@ -54,6 +55,26 @@ public AbstractTypescriptParser(PackageMapStrategy packageMapStrategy,
5455
codeGenMatchers.add(clazz -> clazz.isEnum() || JavaTypeUtils.isNoneJdkComplex(clazz) || clazz.isAnnotation());
5556
}
5657

58+
@Override
59+
public TypescriptClassMeta parse(Class<?> source) {
60+
TypescriptClassMeta result = super.parse(source);
61+
if (result == null) {
62+
return null;
63+
}
64+
handleEnumTypes(result);
65+
return result;
66+
}
67+
68+
private void handleEnumTypes(TypescriptClassMeta result) {
69+
if (result.getEnumConstants() != null) {
70+
String enumTypes = Arrays.stream(result.getEnumConstants())
71+
.map(CommonCodeGenFiledMeta::getName)
72+
.map(name -> String.format("'%s'", name))
73+
.collect(Collectors.joining(" | "));
74+
result.setEnumTypes(enumTypes);
75+
result.setNeedImport(false);
76+
}
77+
}
5778

5879
@Override
5980
protected TypescriptFieldMate converterField(JavaFieldMeta javaFieldMeta, JavaClassMeta classMeta) {
@@ -138,18 +159,6 @@ protected CommonCodeGenMethodMeta converterMethod(JavaMethodMeta javaMethodMeta,
138159
return commonCodeGenMethodMeta;
139160
}
140161

141-
@Override
142-
protected void enhancedProcessingField(TypescriptFieldMate fieldMeta, JavaFieldMeta javaFieldMeta, JavaClassMeta classMeta) {
143-
if (javaFieldMeta == null) {
144-
return;
145-
}
146-
Class<?>[] types = javaFieldMeta.getTypes();
147-
boolean isEnumField = types != null && types.length > 0 && types[0].isEnum();
148-
if (isEnumField) {
149-
// 设置为字符串
150-
fieldMeta.setFiledTypes(new CommonCodeGenClassMeta[]{TypescriptClassMeta.STRING});
151-
}
152-
}
153162

154163
@Override
155164
protected void enhancedProcessingClass(TypescriptClassMeta methodMeta, JavaClassMeta classMeta) {

loong-codegen/src/main/java/com/wuxp/codegen/loong/AbstractCodeGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import com.wuxp.codegen.model.CommonCodeGenFiledMeta;
1414
import com.wuxp.codegen.model.CommonCodeGenMethodMeta;
1515
import com.wuxp.codegen.model.enums.ClassType;
16-
import com.wuxp.codegen.model.languages.java.codegen.JavaCodeGenClassMeta;
1716
import lombok.Setter;
1817
import lombok.extern.slf4j.Slf4j;
1918
import org.springframework.beans.factory.config.BeanDefinition;

loong-codegen/src/main/resources/clients/typescript_feign/api_request.ftl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ export interface ${finallyClassName}<#if superClass??> extends ${superClass.fin
3535
</#list>
3636
**/
3737
</#if>
38-
<#-- ${field.name}<#if field.required?string('true', 'false')=='false'>?</#if>: ${customizeMethod.combineType(field.filedTypes)};-->
39-
<#assign returnType=customizeMethod.combineType(field.filedTypes)/>
40-
<#if returnType?starts_with('Enum_Key_Record<')>
41-
${field.name}<#if !field.required!false>?</#if>: ${returnType?replace('Enum_Key_Record<','Omit<Partial<Record<keyof typeof ')+'>, "prototype">'};
42-
<#else >
43-
${field.name}<#if !field.required!false>?</#if>: ${returnType};
44-
</#if>
38+
${field.name}<#if field.required?string('true', 'false')=='false'>?</#if>: ${customizeMethod.combineType(field.filedTypes)};
39+
<#-- <#assign filedType=customizeMethod.combineType(field.filedTypes)/>-->
40+
<#-- <#if filedType?starts_with('Enum_Key_Record<')>-->
41+
<#-- ${field.name}<#if !field.required!false>?</#if>: ${filedType?replace('Enum_Key_Record<','Omit<Partial<Record<keyof typeof ')+'>, "prototype">'};-->
42+
<#-- <#else >-->
43+
<#-- ${field.name}<#if !field.required!false>?</#if>: ${filedType};-->
44+
<#-- </#if>-->
4545

4646
</#list>
4747
</#if>

model/src/main/java/com/wuxp/codegen/model/CommonCodeGenClassMeta.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,13 +151,13 @@ public String getFinallyGenericDescription() {
151151
String typeDesc = Arrays.stream(this.typeVariables)
152152
.map(CommonCodeGenClassMeta::getFinallyGenericDescription)
153153
.collect(Collectors.joining(","));
154-
return this.name + "<" + typeDesc + ">";
154+
return getTypeIdent() + "<" + typeDesc + ">";
155155
}
156156
if (StringUtils.hasText(genericDescription)) {
157157
return genericDescription;
158158
}
159159

160-
return name;
160+
return getTypeIdent();
161161
}
162162

163163
/**
@@ -167,6 +167,10 @@ public String getFinallyClassName() {
167167
if (this.typeVariables != null && this.typeVariables.length > 0) {
168168
return this.getFinallyGenericDescription();
169169
}
170+
return getTypeIdent();
171+
}
172+
173+
public String getTypeIdent() {
170174
return this.name;
171175
}
172176

model/src/main/java/com/wuxp/codegen/model/languages/typescript/TypescriptClassMeta.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,6 @@ public final class TypescriptClassMeta extends CommonCodeGenClassMeta {
8383
*/
8484
public static final TypescriptClassMeta RECORD = new TypescriptClassMeta("Record", "Record<K,V>", ClassType.CLASS, false, OBJECT);
8585

86-
/**
87-
* 枚举key的 record
88-
*/
89-
public static final TypescriptClassMeta ENUM_KEY_RECORD = new TypescriptClassMeta("Enum_Key_Record", "Enum_Key_Record<K,V>",
90-
ClassType.CLASS, false, OBJECT);
91-
9286
/**
9387
* 枚举类型
9488
*/
@@ -117,6 +111,8 @@ public final class TypescriptClassMeta extends CommonCodeGenClassMeta {
117111

118112
}
119113

114+
private String enumTypes;
115+
120116
public TypescriptClassMeta() {
121117
}
122118

@@ -145,5 +141,8 @@ private TypescriptClassMeta(String name,
145141
this.needImport = false;
146142
}
147143

148-
144+
@Override
145+
public String getTypeIdent() {
146+
return enumTypes == null ? name : enumTypes;
147+
}
149148
}

swagger3-codegen/src/main/java/com/wuxp/codegen/swagger3/languages/Swagger3FeignSdkTypescriptParser.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,6 @@ protected CommonCodeGenMethodMeta converterMethod(JavaMethodMeta javaMethodMeta,
6363
return super.converterMethod(javaMethodMeta, classMeta, codeGenClassMeta);
6464
}
6565

66-
@Override
67-
protected TypescriptFieldMate converterField(JavaFieldMeta javaFieldMeta, JavaClassMeta classMeta) {
68-
if (javaFieldMeta.existAnnotation(Hidden.class)) {
69-
return null;
70-
}
71-
TypescriptFieldMate typescriptFieldMate = super.converterField(javaFieldMeta, classMeta);
72-
Class<?>[] types = javaFieldMeta.getTypes();
73-
if (types.length > 2 && JavaTypeUtils.isMap(types[0])) {
74-
if (JavaTypeUtils.isEnum(types[1])) {
75-
// key 是枚举类型 重新设置key的类型
76-
// Omit<Partial<Record<keyof typeof GoodsStatus, T>>, "prototype">
77-
typescriptFieldMate.getFiledTypes()[0] = TypescriptClassMeta.ENUM_KEY_RECORD;
78-
}
79-
}
80-
81-
return typescriptFieldMate;
82-
}
83-
8466
@Override
8567
protected void enhancedProcessingMethod(CommonCodeGenMethodMeta methodMeta, JavaMethodMeta javaMethodMeta, JavaClassMeta classMeta) {
8668

0 commit comments

Comments
 (0)