From 654a08933265414a99f3c3d4e9636196a665c5ad Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Sun, 4 Jan 2026 18:16:03 -0600 Subject: [PATCH] Various bug fixes. --- .../ssg/DefaultPageContextFactory.groovy | 9 ++++----- .../com/jessebrault/ssg/DefaultPageRenderer.java | 3 ++- .../com/jessebrault/ssg/DefaultPageScanner.java | 13 +++++++------ .../groovy/com/jessebrault/ssg/FilePageWriter.java | 14 +++++++------- .../com/jessebrault/ssg/PageContextFactory.java | 3 ++- .../groovy/com/jessebrault/ssg/PageRenderer.java | 4 ++-- .../ssg/text/TextsDirMarkdownTextSupplier.java | 5 +++-- .../jessebrault/ssg/AbstractBuildCommand.groovy | 2 +- gradle/libs.versions.toml | 2 +- 9 files changed, 29 insertions(+), 26 deletions(-) diff --git a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy index e904972..22f267c 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy @@ -1,8 +1,7 @@ package com.jessebrault.ssg -import com.jessebrault.di.ObjectFactory +import com.jessebrault.di.RegistryObjectFactory import com.jessebrault.ssg.view.SkipTemplate -import com.jessebrault.ssg.view.WvcCompiler import com.jessebrault.ssg.view.WvcPageView import groowt.view.component.factory.ComponentFactories import groowt.view.component.web.DefaultWebViewComponentContext @@ -13,7 +12,7 @@ import groowt.view.component.web.WebViewComponentScope class DefaultPageContextFactory implements PageContextFactory { protected WebViewComponent makeComponent( - ObjectFactory objectFactory, + RegistryObjectFactory objectFactory, Class wvcClass, Map attr, Object[] args @@ -32,7 +31,7 @@ class DefaultPageContextFactory implements PageContextFactory { @Override WebViewComponentContext makeContext( WvcPageView wvcPageView, - ObjectFactory buildObjectFactory, + RegistryObjectFactory buildObjectFactory, Set> allWvcClasses ) { new DefaultWebViewComponentContext().tap { @@ -47,7 +46,7 @@ class DefaultPageContextFactory implements PageContextFactory { // set the template if (component.componentTemplate == null && !wvcClass.isAnnotationPresent(SkipTemplate)) { - def wvcCompilerFactory = buildObjectFactory.createInstance(WvcCompilerFactory) + def wvcCompilerFactory = buildObjectFactory.get(WvcCompilerFactory) def wvcCompiler = wvcCompilerFactory.getWvcCompiler() def compileResult = wvcCompiler.compileTemplate( wvcClass, diff --git a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageRenderer.java b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageRenderer.java index 1dd5c43..98b9f13 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageRenderer.java +++ b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageRenderer.java @@ -1,6 +1,7 @@ package com.jessebrault.ssg; import com.jessebrault.di.ObjectFactory; +import com.jessebrault.di.RegistryObjectFactory; import com.jessebrault.fp.either.Either; import com.jessebrault.ssg.page.Page; import com.jessebrault.ssg.util.Diagnostic; @@ -25,7 +26,7 @@ public class DefaultPageRenderer implements PageRenderer { public Either renderPage( Page page, String baseUrl, - ObjectFactory buildObjectFactory, + RegistryObjectFactory buildObjectFactory, Set> allWvcClasses ) { // create the view diff --git a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageScanner.java b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageScanner.java index 2a63f61..3e5aa79 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageScanner.java +++ b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageScanner.java @@ -6,24 +6,25 @@ import com.jessebrault.ssg.page.Page; import com.jessebrault.ssg.page.PageFactory; import com.jessebrault.ssg.page.PageSpec; import com.jessebrault.ssg.view.PageView; -import com.jessebrault.ssg.view.WvcCompiler; import io.github.classgraph.AnnotationInfo; import io.github.classgraph.ClassInfoList; import io.github.classgraph.ScanResult; import jakarta.inject.Inject; import java.util.*; -import java.util.concurrent.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; public class DefaultPageScanner implements PageScanner { private final ExecutorService executorService; - private final WvcCompiler wvcCompiler; + private final WvcCompilerFactory wvcCompilerFactory; @Inject - public DefaultPageScanner(ExecutorService executorService, WvcCompiler wvcCompiler) { + public DefaultPageScanner(ExecutorService executorService, WvcCompilerFactory wvcCompilerFactory) { this.executorService = executorService; - this.wvcCompiler = wvcCompiler; + this.wvcCompilerFactory = wvcCompilerFactory; } @Override @@ -47,7 +48,7 @@ public class DefaultPageScanner implements PageScanner { ? classInfo.getSimpleName() + "Template.wvc" : pageSpec.templateResource(), "objectFactory", buildObjectFactory, - "wvcCompiler", this.wvcCompiler + "wvcCompiler", this.wvcCompilerFactory.getWvcCompiler() ))); } }, this.executorService); diff --git a/api/src/main/groovy/com/jessebrault/ssg/FilePageWriter.java b/api/src/main/groovy/com/jessebrault/ssg/FilePageWriter.java index 6ba2604..9c8e76a 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/FilePageWriter.java +++ b/api/src/main/groovy/com/jessebrault/ssg/FilePageWriter.java @@ -6,6 +6,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.nio.file.Path; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -13,12 +14,11 @@ public class FilePageWriter implements PageWriter { @Override public void write(Page page, File outputDir, String renderedPage) { - if (!outputDir.mkdirs()) { - throw new RuntimeException("Could not make directories for outputDir " + outputDir); - }; + //noinspection ResultOfMethodCallIgnored + outputDir.mkdirs(); // calculate target path - final List pathParts = Arrays.asList(page.getPath().split("/")); + final List pathParts = new ArrayList<>(Arrays.asList(page.getPath().split("/"))); // because Arrays.asList returns immutable if (page.getPath().endsWith("/")) { pathParts.add("index"); } @@ -30,9 +30,9 @@ public class FilePageWriter implements PageWriter { final File outputFile = new File(outputDir, path + page.getFileExtension()); // make dirs and write - if (!outputFile.getParentFile().mkdirs()) { - throw new RuntimeException("Could not make parent directories for " + outputFile); - } + //noinspection ResultOfMethodCallIgnored + outputFile.getParentFile().mkdirs(); + try (final FileWriter writer = new FileWriter(outputFile)) { writer.write(renderedPage); } catch (IOException e) { diff --git a/api/src/main/groovy/com/jessebrault/ssg/PageContextFactory.java b/api/src/main/groovy/com/jessebrault/ssg/PageContextFactory.java index e7d68eb..9be9613 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/PageContextFactory.java +++ b/api/src/main/groovy/com/jessebrault/ssg/PageContextFactory.java @@ -1,6 +1,7 @@ package com.jessebrault.ssg; import com.jessebrault.di.ObjectFactory; +import com.jessebrault.di.RegistryObjectFactory; import com.jessebrault.ssg.view.WvcPageView; import groowt.view.component.web.WebViewComponent; import groowt.view.component.web.WebViewComponentContext; @@ -10,7 +11,7 @@ import java.util.Set; public interface PageContextFactory { WebViewComponentContext makeContext( WvcPageView wvcPageView, - ObjectFactory buildObjectFactory, + RegistryObjectFactory buildObjectFactory, Set> allWvcClasses ); } diff --git a/api/src/main/groovy/com/jessebrault/ssg/PageRenderer.java b/api/src/main/groovy/com/jessebrault/ssg/PageRenderer.java index 3bd3436..9000e1d 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/PageRenderer.java +++ b/api/src/main/groovy/com/jessebrault/ssg/PageRenderer.java @@ -1,6 +1,6 @@ package com.jessebrault.ssg; -import com.jessebrault.di.ObjectFactory; +import com.jessebrault.di.RegistryObjectFactory; import com.jessebrault.fp.either.Either; import com.jessebrault.ssg.page.Page; import com.jessebrault.ssg.util.Diagnostic; @@ -12,7 +12,7 @@ public interface PageRenderer { Either renderPage( Page page, String baseUrl, - ObjectFactory buildObjectFactory, + RegistryObjectFactory buildObjectFactory, Set> allWvcClasses ); } diff --git a/api/src/main/groovy/com/jessebrault/ssg/text/TextsDirMarkdownTextSupplier.java b/api/src/main/groovy/com/jessebrault/ssg/text/TextsDirMarkdownTextSupplier.java index 138af4c..be4c885 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/text/TextsDirMarkdownTextSupplier.java +++ b/api/src/main/groovy/com/jessebrault/ssg/text/TextsDirMarkdownTextSupplier.java @@ -1,6 +1,7 @@ package com.jessebrault.ssg.text; import jakarta.inject.Inject; +import jakarta.inject.Named; import java.io.File; import java.io.IOException; @@ -22,7 +23,7 @@ public class TextsDirMarkdownTextSupplier implements TextSupplier { @Inject public TextsDirMarkdownTextSupplier( - File projectDir, + @Named("projectDir") File projectDir, ExecutorService executorService, MarkdownTextConverter markdownTextConverter ) { @@ -40,7 +41,7 @@ public class TextsDirMarkdownTextSupplier implements TextSupplier { final List> textFutures = walkStream .map(path -> { return CompletableFuture.runAsync(() -> { - if (path.endsWith(".md")) { + if (path.toString().endsWith(".md")) { results.add(this.markdownTextConverter.convert(textsDir.toFile(), path.toFile())); } }, this.executorService); diff --git a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy index bd393c9..b23bc2b 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy @@ -128,7 +128,7 @@ abstract class AbstractBuildCommand extends AbstractSubCommand { bind(named('scriptBaseUrls', List), toSingleton(scriptBaseUrls)) bind(named('projectDir', File), toSingleton(projectDir)) bind(TextsGetter, toClass(DefaultTextsGetter)) - bind(WvcCompiler, toSelf()) + bind(WvcCompilerFactory, toClass(DefaultWvcCompilerFactory)) bind(ComponentTemplateClassFactory, toClass(SimpleComponentTemplateClassFactory)) bind(TextsDirMarkdownTextSupplier, toSelf()) bind(MarkdownTextConverter, toSelf()) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e955fa6..d2658c1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] classgraph = '4.8.184' commonmark = '0.24.0' -di = '0.1.0' +di = '0.2.0-SNAPSHOT' fp = '0.1.0' groovy = '4.0.27' groowt = '0.1.4'