Skip to content

Commit 84da48f

Browse files
Merge pull request #83 from vojtechhabarta/non-const-enums-extension
Extension for enums without const keyword
2 parents c270962 + 11c64c4 commit 84da48f

File tree

8 files changed

+85
-16
lines changed

8 files changed

+85
-16
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/Settings.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public void validate() {
101101
}
102102
if (outputFileType != TypeScriptFileType.implementationFile) {
103103
for (EmitterExtension emitterExtension : extensions) {
104-
if (emitterExtension.generatesRuntimeCode()) {
104+
if (emitterExtension.getFeatures().generatesRuntimeCode) {
105105
throw new RuntimeException(String.format("Extension '%s' generates runtime code but 'outputFileType' parameter is not set to 'implementationFile'.",
106106
emitterExtension.getClass().getSimpleName()));
107107
}
@@ -118,6 +118,15 @@ public void validateFileName(File outputFile) {
118118
}
119119
}
120120

121+
public boolean areDefaultStringEnumsOverriddenByExtension() {
122+
for (EmitterExtension extension : extensions) {
123+
if (extension.getFeatures().overridesStringEnums) {
124+
return true;
125+
}
126+
}
127+
return false;
128+
}
129+
121130
private String seeLink() {
122131
return "For more information see 'http://vojtechhabarta.github.io/typescript-generator/doc/ModulesAndNamespaces.html'.";
123132
}

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/compiler/ModelCompiler.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,13 @@ public TsModel javaToTypeScript(Model model) {
4646
tsModel = transformDates(symbolTable, tsModel);
4747

4848
// enums
49-
if (settings.mapEnum == null || settings.mapEnum == EnumMapping.asUnion || settings.mapEnum == EnumMapping.asInlineUnion) {
50-
tsModel = transformEnumsToUnions(tsModel);
51-
}
52-
if (settings.mapEnum == EnumMapping.asInlineUnion) {
53-
tsModel = inlineEnums(tsModel, symbolTable);
49+
if (!settings.areDefaultStringEnumsOverriddenByExtension()) {
50+
if (settings.mapEnum == null || settings.mapEnum == EnumMapping.asUnion || settings.mapEnum == EnumMapping.asInlineUnion) {
51+
tsModel = transformEnumsToUnions(tsModel);
52+
}
53+
if (settings.mapEnum == EnumMapping.asInlineUnion) {
54+
tsModel = inlineEnums(tsModel, symbolTable);
55+
}
5456
}
5557

5658
// tagged unions

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/emitter/EmitterExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
public abstract class EmitterExtension {
88

9-
public abstract boolean generatesRuntimeCode();
9+
public abstract EmitterExtensionFeatures getFeatures();
1010

1111
public void emitElements(Writer writer, Settings settings, boolean exportKeyword, TsModel model) {
1212
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
package cz.habarta.typescript.generator.emitter;
3+
4+
5+
public class EmitterExtensionFeatures {
6+
7+
public boolean generatesRuntimeCode = false;
8+
public boolean overridesStringEnums = false;
9+
10+
}

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/ext/EnumConstantsExtension.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11

22
package cz.habarta.typescript.generator.ext;
33

4-
import java.util.Collections;
5-
import java.util.List;
6-
74
import cz.habarta.typescript.generator.Settings;
85
import cz.habarta.typescript.generator.compiler.EnumKind;
96
import cz.habarta.typescript.generator.compiler.EnumMemberModel;
107
import cz.habarta.typescript.generator.emitter.EmitterExtension;
8+
import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures;
119
import cz.habarta.typescript.generator.emitter.TsEnumModel;
1210
import cz.habarta.typescript.generator.emitter.TsModel;
11+
import java.util.Collections;
12+
import java.util.List;
1313

1414

1515
public class EnumConstantsExtension extends EmitterExtension {
1616

1717
@Override
18-
public boolean generatesRuntimeCode() {
19-
return true;
18+
public EmitterExtensionFeatures getFeatures() {
19+
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
20+
features.generatesRuntimeCode = true;
21+
return features;
2022
}
2123

2224
@Override
@@ -33,4 +35,5 @@ public void emitElements(Writer writer, Settings settings, boolean exportKeyword
3335
writer.writeIndentedLine("}");
3436
}
3537
}
38+
3639
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
package cz.habarta.typescript.generator.ext;
3+
4+
import cz.habarta.typescript.generator.Settings;
5+
import cz.habarta.typescript.generator.compiler.EnumKind;
6+
import cz.habarta.typescript.generator.compiler.EnumMemberModel;
7+
import cz.habarta.typescript.generator.emitter.EmitterExtension;
8+
import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures;
9+
import cz.habarta.typescript.generator.emitter.TsEnumModel;
10+
import cz.habarta.typescript.generator.emitter.TsModel;
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
15+
public class NonConstEnumsExtension extends EmitterExtension {
16+
17+
@Override
18+
public EmitterExtensionFeatures getFeatures() {
19+
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
20+
features.generatesRuntimeCode = true;
21+
features.overridesStringEnums = true;
22+
return features;
23+
}
24+
25+
@Override
26+
public void emitElements(Writer writer, Settings settings, boolean exportKeyword, TsModel model) {
27+
String exportString = exportKeyword ? "export " : "";
28+
List<TsEnumModel<String>> enums = model.getEnums(EnumKind.StringBased);
29+
Collections.sort(enums);
30+
for (TsEnumModel<String> tsEnum : enums) {
31+
writer.writeIndentedLine("");
32+
writer.writeIndentedLine(exportString + "enum " + tsEnum.getName() + " {");
33+
for (EnumMemberModel<String> member : tsEnum.getMembers()) {
34+
writer.writeIndentedLine(settings.indentString + member.getPropertyName() + ",");
35+
}
36+
writer.writeIndentedLine("}");
37+
}
38+
}
39+
40+
}

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/ext/TypeGuardsForJackson2PolymorphismExtension.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
public class TypeGuardsForJackson2PolymorphismExtension extends EmitterExtension {
1010

1111
@Override
12-
public boolean generatesRuntimeCode() {
13-
return true;
12+
public EmitterExtensionFeatures getFeatures() {
13+
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
14+
features.generatesRuntimeCode = true;
15+
return features;
1416
}
1517

1618
@Override

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/ModulesAndNamespacesTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import com.fasterxml.jackson.annotation.JsonFormat;
55
import cz.habarta.typescript.generator.emitter.EmitterExtension;
6+
import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures;
67
import cz.habarta.typescript.generator.emitter.TsModel;
78
import java.io.File;
89
import org.junit.Test;
@@ -61,8 +62,10 @@ enum Align {
6162
private static class TestFunctionExtention extends EmitterExtension {
6263

6364
@Override
64-
public boolean generatesRuntimeCode() {
65-
return true;
65+
public EmitterExtensionFeatures getFeatures() {
66+
final EmitterExtensionFeatures features = new EmitterExtensionFeatures();
67+
features.generatesRuntimeCode = true;
68+
return features;
6669
}
6770

6871
@Override

0 commit comments

Comments
 (0)