diff options
2 files changed, 22 insertions, 18 deletions
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 index 44bad46..68d1610 100644 --- 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 @@ -11,9 +11,7 @@ import org.zwobble.hobgoblin.compiler.util.Casing; import java.io.File; import java.io.IOException; import java.nio.file.Path; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.SequencedSet; +import java.util.*; import java.util.stream.Collectors; public class TypescriptGenerator { @@ -38,7 +36,7 @@ public class TypescriptGenerator { public record RequiredType(SimpleType type, TypescriptIdentifier importName) {} public static class Context { - private final SequencedSet<RequiredType> requiredTypes = new LinkedHashSet<>(); + private final SequencedMap<NamespaceName, SequencedSet<RequiredType>> requiredTypes = new LinkedHashMap<>(); private final NamespaceName namespaceName; private final TypesInfo typesInfo; @@ -52,10 +50,13 @@ public class TypescriptGenerator { } public void requireType(SimpleType type, TypescriptIdentifier importName) { - this.requiredTypes.add(new RequiredType(type, importName)); + this.requiredTypes.putIfAbsent(type.namespaceName(), new LinkedHashSet<>()); + this.requiredTypes + .get(type.namespaceName()) + .add(new RequiredType(type, importName)); } - public SequencedSet<RequiredType> requiredTypes() { + public SequencedMap<NamespaceName, SequencedSet<RequiredType>> requiredTypes() { return requiredTypes; } 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 ede1587..353f07b 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 @@ -101,25 +101,28 @@ public class TypescriptTypesGenerator implements Generator { .flatMap(statement -> generateNamespaceStatement(statement, context).stream()) .toList(); - // TODO: combine imports from same module - - var imports = context.requiredTypes().stream() - .map(requiredType -> { - var exportName = this.typescriptGenerator.generateTypeName(requiredType.type().name()); + var imports = context.requiredTypes().entrySet().stream() + .map(requiredTypesFromNamespace -> { + var namespaceName = requiredTypesFromNamespace.getKey(); + var requiredTypes = requiredTypesFromNamespace.getValue(); var moduleRoot = "./" + "../".repeat(namespace.namespaceName().parts().size() - 1); - var fromModule = moduleRoot + requiredType.type().namespaceName().parts().stream() + var fromModule = moduleRoot + namespaceName.parts().stream() .map(part -> this.typescriptGenerator.generateModuleName(part).value()) // TODO: handle extensions .collect(Collectors.joining("/")) + ".ts"; return new TypescriptImportDeclaration( - List.of( - new TypescriptNamedImport( - exportName, - requiredType.importName() - ) - ), + requiredTypes.stream() + .map(requiredType -> { + var exportName = this.typescriptGenerator.generateTypeName(requiredType.type().name()); + + return new TypescriptNamedImport( + exportName, + requiredType.importName() + ); + }) + .toList(), fromModule ); }) |
