diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-30 09:50:40 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-30 09:50:40 +0100 |
| commit | 1ab92f34420bba4fa83da4ea518c862cab105273 (patch) | |
| tree | f7369f30207bf175eb2991a67bb431d168c3d8db /src/main/java | |
| parent | b27ce73f66a025ce16d7158c0283fff7b3bf7f1a (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.java | 41 |
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() ); } |
