[DEV] manage native enum instead of String enum mode

This commit is contained in:
Edouard DUPIN 2024-03-12 23:13:07 +01:00
parent db6a20fa02
commit 151aa498e5

View File

@ -30,6 +30,7 @@ public class DataFactoryZod {
public String tsCheckType; public String tsCheckType;
public String declaration; public String declaration;
public String comment = null; public String comment = null;
public boolean isEnum = false;
public boolean nativeType; public boolean nativeType;
public ClassElement(final Class<?> model[], final String zodName, final String tsTypeName, final String tsCheckType, final String declaration, final boolean nativeType) { public ClassElement(final Class<?> model[], final String zodName, final String tsTypeName, final String tsCheckType, final String declaration, final boolean nativeType) {
@ -89,9 +90,9 @@ public class DataFactoryZod {
public static ClassElement convertTypeZodEnum(final Class<?> clazz, final GeneratedTypes previous) throws Exception { public static ClassElement convertTypeZodEnum(final Class<?> clazz, final GeneratedTypes previous) throws Exception {
final ClassElement element = new ClassElement(clazz); final ClassElement element = new ClassElement(clazz);
previous.add(element); previous.add(element);
final Object[] arr = clazz.getEnumConstants(); final Object[] arr = clazz.getEnumConstants();
final StringBuilder out = new StringBuilder(); final StringBuilder out = new StringBuilder();
if (System.getenv("ARCHIDATA_GENERATE_ZOD_ENUM") != null) {
boolean first = true; boolean first = true;
out.append("zod.enum(["); out.append("zod.enum([");
for (final Object elem : arr) { for (final Object elem : arr) {
@ -99,13 +100,31 @@ public class DataFactoryZod {
out.append(", \n\t"); out.append(", \n\t");
} else { } else {
out.append("\n\t"); out.append("\n\t");
}
first = false; first = false;
}
out.append("'"); out.append("'");
out.append(elem.toString()); out.append(elem.toString());
out.append("'"); out.append("'");
} }
out.append("\n\t]);"); out.append("\n\t])");
} else {
element.isEnum = true;
boolean first = true;
out.append("{");
for (final Object elem : arr) {
if (!first) {
out.append(", \n\t");
} else {
out.append("\n\t");
first = false;
}
out.append(elem.toString());
out.append(" = '");
out.append(elem.toString());
out.append("'");
}
out.append("}");
}
element.declaration = out.toString(); element.declaration = out.toString();
previous.addOrder(element); previous.addOrder(element);
return element; return element;
@ -255,11 +274,6 @@ public class DataFactoryZod {
if (data.comment != null) { if (data.comment != null) {
generatedData.append(data.comment); generatedData.append(data.comment);
} }
generatedData.append("export const ");
generatedData.append(data.zodName);
generatedData.append(" = ");
generatedData.append(data.declaration);
generatedData.append(";");
generatedData.append(createDeclaration(data)); generatedData.append(createDeclaration(data));
generatedData.append("\n\n"); generatedData.append("\n\n");
} }
@ -360,11 +374,29 @@ public class DataFactoryZod {
public static String createDeclaration(final ClassElement elem) { public static String createDeclaration(final ClassElement elem) {
final StringBuilder generatedData = new StringBuilder(); final StringBuilder generatedData = new StringBuilder();
if (elem.isEnum) {
generatedData.append("export enum ");
generatedData.append(elem.tsTypeName);
generatedData.append(" ");
generatedData.append(elem.declaration);
generatedData.append(";");
generatedData.append("\nexport const ");
generatedData.append(elem.zodName);
generatedData.append(" = zod.nativeEnum(");
generatedData.append(elem.tsTypeName);
generatedData.append(");");
} else {
generatedData.append("export const ");
generatedData.append(elem.zodName);
generatedData.append(" = ");
generatedData.append(elem.declaration);
generatedData.append(";");
generatedData.append("\nexport type "); generatedData.append("\nexport type ");
generatedData.append(elem.tsTypeName); generatedData.append(elem.tsTypeName);
generatedData.append(" = zod.infer<typeof "); generatedData.append(" = zod.infer<typeof ");
generatedData.append(elem.zodName); generatedData.append(elem.zodName);
generatedData.append(">;"); generatedData.append(">;");
}
// declare generic isXXX: // declare generic isXXX:
generatedData.append("\nexport function "); generatedData.append("\nexport function ");
generatedData.append(elem.tsCheckType); generatedData.append(elem.tsCheckType);