@@ -76,6 +76,9 @@ public TsModel javaToTypeScript(Model model) {
7676 if (settings .mapEnum == EnumMapping .asInlineUnion ) {
7777 tsModel = inlineEnums (tsModel , symbolTable );
7878 }
79+ if (settings .mapEnum == EnumMapping .asNumberBasedEnum ) {
80+ tsModel = transformEnumsToNumberBasedEnum (tsModel );
81+ }
7982 }
8083
8184 // tagged unions
@@ -89,7 +92,7 @@ public TsModel javaToTypeScript(Model model) {
8992 public TsType javaToTypeScript (Type type ) {
9093 final BeanModel beanModel = new BeanModel (Object .class , Object .class , null , null , null , Collections .<Type >emptyList (),
9194 Collections .singletonList (new PropertyModel ("property" , type , false , null , null , null )), null );
92- final Model model = new Model (Collections .singletonList (beanModel ), Collections .<EnumModel <?> >emptyList (), null );
95+ final Model model = new Model (Collections .singletonList (beanModel ), Collections .<EnumModel >emptyList (), null );
9396 final TsModel tsModel = javaToTypeScript (model );
9497 return tsModel .getBeans ().get (0 ).getProperties ().get (0 ).getTsType ();
9598 }
@@ -100,11 +103,16 @@ private TsModel processModel(SymbolTable symbolTable, Model model) {
100103 for (BeanModel bean : model .getBeans ()) {
101104 beans .add (processBean (symbolTable , model , children , bean ));
102105 }
103- final List <TsEnumModel <?>> enums = new ArrayList <>();
104- for (EnumModel <?> enumModel : model .getEnums ()) {
105- enums .add (processEnum (symbolTable , enumModel ));
106+ final List <TsEnumModel > enums = new ArrayList <>();
107+ final List <TsEnumModel > stringEnums = new ArrayList <>();
108+ for (EnumModel enumModel : model .getEnums ()) {
109+ final TsEnumModel tsEnumModel = processEnum (symbolTable , enumModel );
110+ enums .add (tsEnumModel );
111+ if (tsEnumModel .getKind () == EnumKind .StringBased ) {
112+ stringEnums .add (tsEnumModel );
113+ }
106114 }
107- return new TsModel ().setBeans (beans ).setEnums (enums );
115+ return new TsModel ().withBeans (beans ).withEnums (enums ). withOriginalStringEnums ( stringEnums );
108116 }
109117
110118 private Map <Type , List <BeanModel >> createChildrenMap (Model model ) {
@@ -205,7 +213,7 @@ private TsPropertyModel processProperty(SymbolTable symbolTable, BeanModel bean,
205213 return new TsPropertyModel (prefix + property .getName () + suffix , tsType , settings .declarePropertiesAsReadOnly , false , property .getComments ());
206214 }
207215
208- private TsEnumModel <?> processEnum (SymbolTable symbolTable , EnumModel <?> enumModel ) {
216+ private TsEnumModel processEnum (SymbolTable symbolTable , EnumModel enumModel ) {
209217 final Symbol beanIdentifier = symbolTable .getSymbol (enumModel .getOrigin ());
210218 return TsEnumModel .fromEnumModel (beanIdentifier , enumModel );
211219 }
@@ -244,7 +252,7 @@ private TsModel removeInheritedProperties(SymbolTable symbolTable, TsModel tsMod
244252 }
245253 beans .add (bean .withProperties (properties ));
246254 }
247- return tsModel .setBeans (beans );
255+ return tsModel .withBeans (beans );
248256 }
249257
250258 private TsModel addImplementedProperties (SymbolTable symbolTable , TsModel tsModel ) {
@@ -273,7 +281,7 @@ private TsModel addImplementedProperties(SymbolTable symbolTable, TsModel tsMode
273281 beans .add (bean );
274282 }
275283 }
276- return tsModel .setBeans (beans );
284+ return tsModel .withBeans (beans );
277285 }
278286
279287 private static Map <String , TsType > getInheritedProperties (SymbolTable symbolTable , TsModel tsModel , List <TsType > parents ) {
@@ -544,20 +552,21 @@ public TsType transform(TsType type) {
544552
545553 }
546554 });
547- return model .setTypeAliases (new ArrayList <>(typeAliases ));
555+ return model .withTypeAliases (new ArrayList <>(typeAliases ));
548556 }
549557
550558 private TsModel transformEnumsToUnions (TsModel tsModel ) {
559+ final List <TsEnumModel > stringEnums = tsModel .getEnums (EnumKind .StringBased );
551560 final LinkedHashSet <TsAliasModel > typeAliases = new LinkedHashSet <>(tsModel .getTypeAliases ());
552- for (TsEnumModel < String > enumModel : tsModel . getEnums ( EnumKind . StringBased ) ) {
561+ for (TsEnumModel enumModel : stringEnums ) {
553562 final List <TsType > values = new ArrayList <>();
554- for (EnumMemberModel < String > member : enumModel .getMembers ()) {
555- values .add (new TsType .StringLiteralType (member .getEnumValue ()));
563+ for (EnumMemberModel member : enumModel .getMembers ()) {
564+ values .add (new TsType .StringLiteralType (( String ) member .getEnumValue ()));
556565 }
557566 final TsType union = new TsType .UnionType (values );
558567 typeAliases .add (new TsAliasModel (enumModel .getOrigin (), enumModel .getName (), null , union , enumModel .getComments ()));
559568 }
560- return tsModel .setTypeAliases (new ArrayList <>(typeAliases ));
569+ return tsModel .withoutEnums ( stringEnums ). withTypeAliases (new ArrayList <>(typeAliases ));
561570 }
562571
563572 private TsModel inlineEnums (final TsModel tsModel , final SymbolTable symbolTable ) {
@@ -575,9 +584,20 @@ public TsType transform(TsType tsType) {
575584 return tsType ;
576585 }
577586 });
578- final ArrayList <TsAliasModel > aliases = new ArrayList <>(tsModel .getTypeAliases ());
579- aliases .removeAll (inlinedAliases );
580- return newTsModel .setTypeAliases (aliases );
587+ return newTsModel .withoutTypeAliases (new ArrayList <>(inlinedAliases ));
588+ }
589+
590+ private TsModel transformEnumsToNumberBasedEnum (TsModel tsModel ) {
591+ final List <TsEnumModel > stringEnums = tsModel .getEnums (EnumKind .StringBased );
592+ final LinkedHashSet <TsEnumModel > enums = new LinkedHashSet <>();
593+ for (TsEnumModel enumModel : stringEnums ) {
594+ final List <EnumMemberModel > members = new ArrayList <>();
595+ for (EnumMemberModel member : enumModel .getMembers ()) {
596+ members .add (new EnumMemberModel (member .getPropertyName (), (Number ) null , member .getComments ()));
597+ }
598+ enums .add (enumModel .withMembers (members ));
599+ }
600+ return tsModel .withoutEnums (stringEnums ).withEnums (new ArrayList <>(enums ));
581601 }
582602
583603 private TsModel createAndUseTaggedUnions (final SymbolTable symbolTable , TsModel tsModel ) {
@@ -612,13 +632,13 @@ public TsType transform(TsType tsType) {
612632 return tsType ;
613633 }
614634 });
615- return model .setTypeAliases (new ArrayList <>(typeAliases ));
635+ return model .withTypeAliases (new ArrayList <>(typeAliases ));
616636 }
617637
618638 private TsModel sortDeclarations (SymbolTable symbolTable , TsModel tsModel ) {
619639 final List <TsBeanModel > beans = tsModel .getBeans ();
620640 final List <TsAliasModel > aliases = tsModel .getTypeAliases ();
621- final List <TsEnumModel <?> > enums = tsModel .getEnums ();
641+ final List <TsEnumModel > enums = tsModel .getEnums ();
622642 if (settings .sortDeclarations ) {
623643 for (TsBeanModel bean : beans ) {
624644 Collections .sort (bean .getProperties ());
@@ -634,9 +654,9 @@ private TsModel sortDeclarations(SymbolTable symbolTable, TsModel tsModel) {
634654 addOrderedClass (symbolTable , tsModel , bean , orderedBeans );
635655 }
636656 return tsModel
637- .setBeans (new ArrayList <>(orderedBeans ))
638- .setTypeAliases (aliases )
639- .setEnums (enums );
657+ .withBeans (new ArrayList <>(orderedBeans ))
658+ .withTypeAliases (aliases )
659+ .withEnums (enums );
640660 }
641661
642662 private static void addOrderedClass (SymbolTable symbolTable , TsModel tsModel , TsBeanModel bean , LinkedHashSet <TsBeanModel > orderedBeans ) {
@@ -671,7 +691,7 @@ private static TsModel transformBeanPropertyTypes(TsModel tsModel, TsType.Transf
671691 }
672692 newBeans .add (bean .withProperties (newProperties ).withMethods (newMethods ));
673693 }
674- return tsModel .setBeans (newBeans );
694+ return tsModel .withBeans (newBeans );
675695 }
676696
677697 private static Class <?> getOriginClass (SymbolTable symbolTable , TsType type ) {
0 commit comments