diff --git a/api/src/main/groovy/com/jessebrault/ssg/DefaultObjectFactoryConfigurator.java b/api/src/main/groovy/com/jessebrault/ssg/DefaultObjectFactoryConfigurator.java index 68aa1eb..01d7c1a 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/DefaultObjectFactoryConfigurator.java +++ b/api/src/main/groovy/com/jessebrault/ssg/DefaultObjectFactoryConfigurator.java @@ -53,6 +53,10 @@ public class DefaultObjectFactoryConfigurator implements ObjectFactoryConfigurat new SsgException("the baseUrl Property in " + buildSpec.getName() + " must be set.") ))); + registry.bind(WvcCompilerFactory.class, toSingleton(buildSpec.getWvcCompilerFactory().get(() -> + new SsgException("the wvcCompilerFactory Property in " + buildSpec.getName() + " must be set.") + ))); + // self binding registry.bind(ObjectFactory.class, toSingleton(registryObjectFactory)); }); diff --git a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy index 852cc7f..e904972 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/DefaultPageContextFactory.groovy @@ -47,7 +47,9 @@ class DefaultPageContextFactory implements PageContextFactory { // set the template if (component.componentTemplate == null && !wvcClass.isAnnotationPresent(SkipTemplate)) { - def compileResult = buildObjectFactory.createInstance(WvcCompiler).compileTemplate( + def wvcCompilerFactory = buildObjectFactory.createInstance(WvcCompilerFactory) + def wvcCompiler = wvcCompilerFactory.getWvcCompiler() + def compileResult = wvcCompiler.compileTemplate( wvcClass, wvcClass.simpleName + 'Template.wvc' ) diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy index 6da8d1c..ea8b274 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildScriptBase.groovy @@ -1,6 +1,5 @@ package com.jessebrault.ssg.buildscript -import com.jessebrault.di.ObjectFactory import com.jessebrault.ssg.buildscript.delegates.BuildDelegate import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.Nullable diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildSpec.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildSpec.groovy index d39d8b6..3a30668 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildSpec.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/BuildSpec.groovy @@ -2,6 +2,7 @@ package com.jessebrault.ssg.buildscript import com.jessebrault.di.RegistryObjectFactory import com.jessebrault.fp.provider.Provider +import com.jessebrault.ssg.WvcCompilerFactory import com.jessebrault.ssg.model.Model import com.jessebrault.ssg.text.TextSupplier import groovy.transform.EqualsAndHashCode @@ -23,6 +24,7 @@ final class BuildSpec { final Provider> models final Provider> textSuppliers final Provider objectFactory + final Provider wvcCompilerFactory @SuppressWarnings('GroovyAssignabilityCheck') BuildSpec(Map args) { @@ -35,6 +37,7 @@ final class BuildSpec { this.models = requireProvider(args.models) this.textSuppliers = requireProvider(args.textSuppliers) this.objectFactory = requireProvider(args.objectFactory) + this.wvcCompilerFactory = requireProvider(args.wvcCompilerFactory) } @Override diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy index 2907600..027f0b0 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/BuildDelegate.groovy @@ -5,6 +5,7 @@ import com.jessebrault.fp.property.DefaultProperty import com.jessebrault.fp.property.Property import com.jessebrault.fp.provider.NamedProvider import com.jessebrault.fp.provider.Provider +import com.jessebrault.ssg.WvcCompilerFactory import com.jessebrault.ssg.model.Model import com.jessebrault.ssg.model.Models import com.jessebrault.ssg.text.TextSupplier @@ -23,6 +24,7 @@ final class BuildDelegate { final Property> models = DefaultProperty.>empty(Set) final Property> textSuppliers = DefaultProperty.>empty(Set) final Property objectFactory = DefaultProperty.empty(RegistryObjectFactory) + final Property wvcCompilerFactory = DefaultProperty.empty(WvcCompilerFactory) BuildDelegate(File projectDir) { this.projectDir = projectDir diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConfigurator.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConfigurator.groovy index a25168d..1ea233c 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConfigurator.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConfigurator.groovy @@ -1,6 +1,7 @@ package com.jessebrault.ssg.buildscript.delegates import com.jessebrault.di.DefaultRegistryObjectFactory +import com.jessebrault.ssg.WvcCompilerFactory import com.jessebrault.ssg.model.Model import com.jessebrault.ssg.text.TextSupplier import com.jessebrault.ssg.text.TextsDirMarkdownTextSupplier @@ -14,14 +15,17 @@ class DefaultBuildDelegateConfigurator implements BuildDelegateConfigurator { private final File projectDir private final TextsDirMarkdownTextSupplier textsDirMarkdownTextSupplier + private final WvcCompilerFactory wvcCompilerFactory @Inject DefaultBuildDelegateConfigurator( @Named('projectDir') File projectDir, - TextsDirMarkdownTextSupplier textsDirMarkdownTextSupplier + TextsDirMarkdownTextSupplier textsDirMarkdownTextSupplier, + WvcCompilerFactory wvcCompilerFactory ) { this.projectDir = projectDir this.textsDirMarkdownTextSupplier = textsDirMarkdownTextSupplier + this.wvcCompilerFactory = wvcCompilerFactory } @Override @@ -33,6 +37,7 @@ class DefaultBuildDelegateConfigurator implements BuildDelegateConfigurator { models.convention = [] as Set textSuppliers.convention = [this.textsDirMarkdownTextSupplier] as Set objectFactory.convention = DefaultRegistryObjectFactory.Builder.withDefaults().build() + wvcCompilerFactory.convention = this.wvcCompilerFactory } } diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConverter.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConverter.groovy index dee641e..1a8e2a8 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConverter.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/delegates/DefaultBuildDelegateConverter.groovy @@ -15,7 +15,8 @@ class DefaultBuildDelegateConverter implements BuildDelegateConverter { globals: delegate.globals, models: delegate.models, textSuppliers: delegate.textSuppliers, - objectFactory: delegate.objectFactory + objectFactory: delegate.objectFactory, + wvcCompilerFactory: delegate.wvcCompilerFactory ) } 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 6c16b41..138af4c 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/text/TextsDirMarkdownTextSupplier.java +++ b/api/src/main/groovy/com/jessebrault/ssg/text/TextsDirMarkdownTextSupplier.java @@ -1,7 +1,6 @@ package com.jessebrault.ssg.text; import jakarta.inject.Inject; -import jakarta.inject.Named; import java.io.File; import java.io.IOException; @@ -23,7 +22,7 @@ public class TextsDirMarkdownTextSupplier implements TextSupplier { @Inject public TextsDirMarkdownTextSupplier( - @Named("projectDir") File projectDir, + File projectDir, ExecutorService executorService, MarkdownTextConverter markdownTextConverter ) {