summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-30 09:50:40 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-30 09:50:40 +0100
commit1ab92f34420bba4fa83da4ea518c862cab105273 (patch)
treef7369f30207bf175eb2991a67bb431d168c3d8db /src/main/java
parentb27ce73f66a025ce16d7158c0283fff7b3bf7f1a (diff)
Generate fields for structs in typescript-types
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()
);
}