From a0c7aa1008f31e969fe868edf1f5408f3eaa959a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 29 Aug 2026 10:07:04 +0100 Subject: Add stubbed generator for TypeScript types --- .../hobgoblin/compiler/config/ProjectConfig.java | 4 ++ .../generators/typescript/TypescriptGenerator.java | 9 +++++ .../typescript/TypescriptGeneratorConfig.java | 11 +++++ .../typescripttypes/TypescriptTypesGenerator.java | 47 ++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java index 2373626..9af101e 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java @@ -7,6 +7,7 @@ import org.zwobble.hobgoblin.compiler.output.generators.javatransient0.JavaTrans import org.zwobble.hobgoblin.compiler.output.generators.javatypes.JavaTypesGenerator; import org.zwobble.hobgoblin.compiler.output.generators.rusttransient0.RustTransient0Generator; import org.zwobble.hobgoblin.compiler.output.generators.rusttypes.RustTypesGenerator; +import org.zwobble.hobgoblin.compiler.output.generators.typescripttypes.TypescriptTypesGenerator; import org.zwobble.hobgoblin.compiler.sources.FileFragmentSource; import org.zwobble.json5.reader.Json5ObjectReader; import org.zwobble.sourcetext.SourceText; @@ -56,6 +57,9 @@ public record ProjectConfig( case RustTransient0Generator.NAME -> RustTransient0Generator.parseGeneratorConfig(projectRoot, generatorJson, langsJson); + case TypescriptTypesGenerator.NAME -> + TypescriptTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson); + default -> throw new UnknownGeneratorError( generatorName.value(), diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java new file mode 100644 index 0000000..ebc7166 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java @@ -0,0 +1,9 @@ +package org.zwobble.hobgoblin.compiler.output.generators.typescript; + +public class TypescriptGenerator { + private final TypescriptGeneratorConfig config; + + public TypescriptGenerator(TypescriptGeneratorConfig config) { + this.config = config; + } +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java new file mode 100644 index 0000000..4026c14 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java @@ -0,0 +1,11 @@ +package org.zwobble.hobgoblin.compiler.output.generators.typescript; + +import org.zwobble.json5.reader.Json5ObjectReader; + +public record TypescriptGeneratorConfig() { + public static TypescriptGeneratorConfig parseLangsConfig(Json5ObjectReader langsJson) { + var output = langsJson.getObject("typescript"); + + return new TypescriptGeneratorConfig(); + } +} 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 new file mode 100644 index 0000000..04278ea --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java @@ -0,0 +1,47 @@ +package org.zwobble.hobgoblin.compiler.output.generators.typescripttypes; + +import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; +import org.zwobble.hobgoblin.compiler.config.OutputConfig; +import org.zwobble.hobgoblin.compiler.output.generators.Generator; +import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGenerator; +import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGeneratorConfig; +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.List; + +public class TypescriptTypesGenerator implements Generator { + public static final String NAME = "typescript-types"; + + public static OutputConfig parseGeneratorConfig( + Path projectRoot, + Json5ObjectReader generatorJson, + Json5ObjectReader langsJson + ) { + return () -> { + var relativeOutputPath = generatorJson.getString("path").value(); + var outputPath = projectRoot.resolve(relativeOutputPath); + + var typescriptConfig = TypescriptGeneratorConfig.parseLangsConfig(langsJson); + + var typescriptGenerator = new TypescriptGenerator(typescriptConfig); + + return new TypescriptTypesGenerator(outputPath, typescriptGenerator); + }; + } + + private final Path outputPath; + private final TypescriptGenerator typescriptGenerator; + + public TypescriptTypesGenerator(Path outputPath, TypescriptGenerator typescriptGenerator) { + this.outputPath = outputPath; + this.typescriptGenerator = typescriptGenerator; + } + + @Override + public void generate(List namespaces, TypesInfo typesInfo) throws IOException { + + } +} -- cgit v1.2.3