summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
index 878824a..c737d1c 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java
@@ -6,15 +6,15 @@ import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition;
import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGenerator;
import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGeneratorConfig;
-import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassDeclaration;
-import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule;
-import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement;
+import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.*;
import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo;
import org.zwobble.json5.reader.Json5ObjectReader;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
public class TypescriptTypesGenerator implements Generator {
private static final String NAME = "typescript-types";
@@ -104,9 +104,40 @@ public class TypescriptTypesGenerator implements Generator {
}
private TypescriptStatement generateStructDefinition(TypedStructDefinitionNode structDefinition) {
+ var typescriptTypeName = this.typescriptGenerator.generateTypeName(structDefinition.name());
+
+ var body = new ArrayList<TypescriptClassElement>();
+
+ for (var field : structDefinition.fields().orElse(List.of())) {
+ body.add(new TypescriptClassFieldDeclaration(
+ this.typescriptGenerator.generateFieldName(field.name()),
+ Optional.of(this.typescriptGenerator.generateTypeExpression(field.type().value())),
+ Optional.empty()
+ ));
+ }
+
+ body.add(new TypescriptClassConstructor(
+ structDefinition.fields().orElse(List.of()).stream()
+ .map(field -> new TypescriptParam(
+ this.typescriptGenerator.generateFieldName(field.name()),
+ Optional.of(this.typescriptGenerator.generateTypeExpression(field.type().value()))
+ ))
+ .toList(),
+ structDefinition.fields().orElse(List.of()).stream()
+ .<TypescriptStatement>map(field -> new TypescriptExpressionStatement(new TypescriptBinaryOperation(
+ TypescriptBinaryOperator.ASSIGN,
+ new TypescriptFieldAccess(
+ new TypescriptRef(TypescriptIdentifier.of("this")),
+ this.typescriptGenerator.generateFieldName(field.name())
+ ),
+ new TypescriptRef(this.typescriptGenerator.generateFieldName(field.name()))
+ )))
+ .toList()
+ ));
+
return new TypescriptClassDeclaration(
- this.typescriptGenerator.generateTypeName(structDefinition.name()),
- List.of(),
+ typescriptTypeName,
+ body,
structDefinition.docComment()
);
}