Various bug fixes.

This commit is contained in:
Jesse Brault 2026-01-04 18:16:03 -06:00
parent e462c60646
commit 654a089332
9 changed files with 29 additions and 26 deletions

View File

@ -1,8 +1,7 @@
package com.jessebrault.ssg 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.SkipTemplate
import com.jessebrault.ssg.view.WvcCompiler
import com.jessebrault.ssg.view.WvcPageView import com.jessebrault.ssg.view.WvcPageView
import groowt.view.component.factory.ComponentFactories import groowt.view.component.factory.ComponentFactories
import groowt.view.component.web.DefaultWebViewComponentContext import groowt.view.component.web.DefaultWebViewComponentContext
@ -13,7 +12,7 @@ import groowt.view.component.web.WebViewComponentScope
class DefaultPageContextFactory implements PageContextFactory { class DefaultPageContextFactory implements PageContextFactory {
protected WebViewComponent makeComponent( protected WebViewComponent makeComponent(
ObjectFactory objectFactory, RegistryObjectFactory objectFactory,
Class<? extends WebViewComponent> wvcClass, Class<? extends WebViewComponent> wvcClass,
Map attr, Map attr,
Object[] args Object[] args
@ -32,7 +31,7 @@ class DefaultPageContextFactory implements PageContextFactory {
@Override @Override
WebViewComponentContext makeContext( WebViewComponentContext makeContext(
WvcPageView wvcPageView, WvcPageView wvcPageView,
ObjectFactory buildObjectFactory, RegistryObjectFactory buildObjectFactory,
Set<Class<? extends WebViewComponent>> allWvcClasses Set<Class<? extends WebViewComponent>> allWvcClasses
) { ) {
new DefaultWebViewComponentContext().tap { new DefaultWebViewComponentContext().tap {
@ -47,7 +46,7 @@ class DefaultPageContextFactory implements PageContextFactory {
// set the template // set the template
if (component.componentTemplate == null && !wvcClass.isAnnotationPresent(SkipTemplate)) { if (component.componentTemplate == null && !wvcClass.isAnnotationPresent(SkipTemplate)) {
def wvcCompilerFactory = buildObjectFactory.createInstance(WvcCompilerFactory) def wvcCompilerFactory = buildObjectFactory.get(WvcCompilerFactory)
def wvcCompiler = wvcCompilerFactory.getWvcCompiler() def wvcCompiler = wvcCompilerFactory.getWvcCompiler()
def compileResult = wvcCompiler.compileTemplate( def compileResult = wvcCompiler.compileTemplate(
wvcClass, wvcClass,

View File

@ -1,6 +1,7 @@
package com.jessebrault.ssg; package com.jessebrault.ssg;
import com.jessebrault.di.ObjectFactory; import com.jessebrault.di.ObjectFactory;
import com.jessebrault.di.RegistryObjectFactory;
import com.jessebrault.fp.either.Either; import com.jessebrault.fp.either.Either;
import com.jessebrault.ssg.page.Page; import com.jessebrault.ssg.page.Page;
import com.jessebrault.ssg.util.Diagnostic; import com.jessebrault.ssg.util.Diagnostic;
@ -25,7 +26,7 @@ public class DefaultPageRenderer implements PageRenderer {
public Either<Diagnostic, String> renderPage( public Either<Diagnostic, String> renderPage(
Page page, Page page,
String baseUrl, String baseUrl,
ObjectFactory buildObjectFactory, RegistryObjectFactory buildObjectFactory,
Set<Class<? extends WebViewComponent>> allWvcClasses Set<Class<? extends WebViewComponent>> allWvcClasses
) { ) {
// create the view // create the view

View File

@ -6,24 +6,25 @@ import com.jessebrault.ssg.page.Page;
import com.jessebrault.ssg.page.PageFactory; import com.jessebrault.ssg.page.PageFactory;
import com.jessebrault.ssg.page.PageSpec; import com.jessebrault.ssg.page.PageSpec;
import com.jessebrault.ssg.view.PageView; import com.jessebrault.ssg.view.PageView;
import com.jessebrault.ssg.view.WvcCompiler;
import io.github.classgraph.AnnotationInfo; import io.github.classgraph.AnnotationInfo;
import io.github.classgraph.ClassInfoList; import io.github.classgraph.ClassInfoList;
import io.github.classgraph.ScanResult; import io.github.classgraph.ScanResult;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import java.util.*; 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 { public class DefaultPageScanner implements PageScanner {
private final ExecutorService executorService; private final ExecutorService executorService;
private final WvcCompiler wvcCompiler; private final WvcCompilerFactory wvcCompilerFactory;
@Inject @Inject
public DefaultPageScanner(ExecutorService executorService, WvcCompiler wvcCompiler) { public DefaultPageScanner(ExecutorService executorService, WvcCompilerFactory wvcCompilerFactory) {
this.executorService = executorService; this.executorService = executorService;
this.wvcCompiler = wvcCompiler; this.wvcCompilerFactory = wvcCompilerFactory;
} }
@Override @Override
@ -47,7 +48,7 @@ public class DefaultPageScanner implements PageScanner {
? classInfo.getSimpleName() + "Template.wvc" ? classInfo.getSimpleName() + "Template.wvc"
: pageSpec.templateResource(), : pageSpec.templateResource(),
"objectFactory", buildObjectFactory, "objectFactory", buildObjectFactory,
"wvcCompiler", this.wvcCompiler "wvcCompiler", this.wvcCompilerFactory.getWvcCompiler()
))); )));
} }
}, this.executorService); }, this.executorService);

View File

@ -6,6 +6,7 @@ import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -13,12 +14,11 @@ public class FilePageWriter implements PageWriter {
@Override @Override
public void write(Page page, File outputDir, String renderedPage) { public void write(Page page, File outputDir, String renderedPage) {
if (!outputDir.mkdirs()) { //noinspection ResultOfMethodCallIgnored
throw new RuntimeException("Could not make directories for outputDir " + outputDir); outputDir.mkdirs();
};
// calculate target path // calculate target path
final List<String> pathParts = Arrays.asList(page.getPath().split("/")); final List<String> pathParts = new ArrayList<>(Arrays.asList(page.getPath().split("/"))); // because Arrays.asList returns immutable
if (page.getPath().endsWith("/")) { if (page.getPath().endsWith("/")) {
pathParts.add("index"); pathParts.add("index");
} }
@ -30,9 +30,9 @@ public class FilePageWriter implements PageWriter {
final File outputFile = new File(outputDir, path + page.getFileExtension()); final File outputFile = new File(outputDir, path + page.getFileExtension());
// make dirs and write // make dirs and write
if (!outputFile.getParentFile().mkdirs()) { //noinspection ResultOfMethodCallIgnored
throw new RuntimeException("Could not make parent directories for " + outputFile); outputFile.getParentFile().mkdirs();
}
try (final FileWriter writer = new FileWriter(outputFile)) { try (final FileWriter writer = new FileWriter(outputFile)) {
writer.write(renderedPage); writer.write(renderedPage);
} catch (IOException e) { } catch (IOException e) {

View File

@ -1,6 +1,7 @@
package com.jessebrault.ssg; package com.jessebrault.ssg;
import com.jessebrault.di.ObjectFactory; import com.jessebrault.di.ObjectFactory;
import com.jessebrault.di.RegistryObjectFactory;
import com.jessebrault.ssg.view.WvcPageView; import com.jessebrault.ssg.view.WvcPageView;
import groowt.view.component.web.WebViewComponent; import groowt.view.component.web.WebViewComponent;
import groowt.view.component.web.WebViewComponentContext; import groowt.view.component.web.WebViewComponentContext;
@ -10,7 +11,7 @@ import java.util.Set;
public interface PageContextFactory { public interface PageContextFactory {
WebViewComponentContext makeContext( WebViewComponentContext makeContext(
WvcPageView wvcPageView, WvcPageView wvcPageView,
ObjectFactory buildObjectFactory, RegistryObjectFactory buildObjectFactory,
Set<Class<? extends WebViewComponent>> allWvcClasses Set<Class<? extends WebViewComponent>> allWvcClasses
); );
} }

View File

@ -1,6 +1,6 @@
package com.jessebrault.ssg; package com.jessebrault.ssg;
import com.jessebrault.di.ObjectFactory; import com.jessebrault.di.RegistryObjectFactory;
import com.jessebrault.fp.either.Either; import com.jessebrault.fp.either.Either;
import com.jessebrault.ssg.page.Page; import com.jessebrault.ssg.page.Page;
import com.jessebrault.ssg.util.Diagnostic; import com.jessebrault.ssg.util.Diagnostic;
@ -12,7 +12,7 @@ public interface PageRenderer {
Either<Diagnostic, String> renderPage( Either<Diagnostic, String> renderPage(
Page page, Page page,
String baseUrl, String baseUrl,
ObjectFactory buildObjectFactory, RegistryObjectFactory buildObjectFactory,
Set<Class<? extends WebViewComponent>> allWvcClasses Set<Class<? extends WebViewComponent>> allWvcClasses
); );
} }

View File

@ -1,6 +1,7 @@
package com.jessebrault.ssg.text; package com.jessebrault.ssg.text;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -22,7 +23,7 @@ public class TextsDirMarkdownTextSupplier implements TextSupplier {
@Inject @Inject
public TextsDirMarkdownTextSupplier( public TextsDirMarkdownTextSupplier(
File projectDir, @Named("projectDir") File projectDir,
ExecutorService executorService, ExecutorService executorService,
MarkdownTextConverter markdownTextConverter MarkdownTextConverter markdownTextConverter
) { ) {
@ -40,7 +41,7 @@ public class TextsDirMarkdownTextSupplier implements TextSupplier {
final List<CompletableFuture<Void>> textFutures = walkStream final List<CompletableFuture<Void>> textFutures = walkStream
.map(path -> { .map(path -> {
return CompletableFuture.runAsync(() -> { return CompletableFuture.runAsync(() -> {
if (path.endsWith(".md")) { if (path.toString().endsWith(".md")) {
results.add(this.markdownTextConverter.convert(textsDir.toFile(), path.toFile())); results.add(this.markdownTextConverter.convert(textsDir.toFile(), path.toFile()));
} }
}, this.executorService); }, this.executorService);

View File

@ -128,7 +128,7 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
bind(named('scriptBaseUrls', List), toSingleton(scriptBaseUrls)) bind(named('scriptBaseUrls', List), toSingleton(scriptBaseUrls))
bind(named('projectDir', File), toSingleton(projectDir)) bind(named('projectDir', File), toSingleton(projectDir))
bind(TextsGetter, toClass(DefaultTextsGetter)) bind(TextsGetter, toClass(DefaultTextsGetter))
bind(WvcCompiler, toSelf()) bind(WvcCompilerFactory, toClass(DefaultWvcCompilerFactory))
bind(ComponentTemplateClassFactory, toClass(SimpleComponentTemplateClassFactory)) bind(ComponentTemplateClassFactory, toClass(SimpleComponentTemplateClassFactory))
bind(TextsDirMarkdownTextSupplier, toSelf()) bind(TextsDirMarkdownTextSupplier, toSelf())
bind(MarkdownTextConverter, toSelf()) bind(MarkdownTextConverter, toSelf())

View File

@ -1,7 +1,7 @@
[versions] [versions]
classgraph = '4.8.184' classgraph = '4.8.184'
commonmark = '0.24.0' commonmark = '0.24.0'
di = '0.1.0' di = '0.2.0-SNAPSHOT'
fp = '0.1.0' fp = '0.1.0'
groovy = '4.0.27' groovy = '4.0.27'
groowt = '0.1.4' groowt = '0.1.4'