Releases: statiqdev/Statiq.Framework
Releases · statiqdev/Statiq.Framework
1.0.0-beta.1
- Added Statiq.Handlebars and a
RenderHandlebars
module (#67, #90, thanks @mholo65). - Refactored the
OptimizeFileName
module and added some extra configuration methods. - Added
NormalizedPath.OptimizeFileName()
as both an instance method and static helper to clean up and optimize file names for the web. - Moved
ForEachDocument
andForAllDocuments
modules to Statiq.Common so they can be used as base module classes for extensions. - Fixed a bug with the
SetDestination
module when a string-based path is used that starts with a "." but isn't an extension. - Fixed an unusual edge-case bug when evaluating scripts with assemblies that have the same simple name (I.e. LINQPad queries).
- Added
IHtmlHelper.DocumentLink()
HTML helper extensions to Statiq.Razor. - Removed "theme" from the set of default input paths (added by default only in Statiq Web).
- Changed
CommandUtilities
in Statiq.App public. - Moved the serve command to Statiq Web.
- Moved the preview command to Statiq Web.
- Moved Statiq.Hosting to Statiq Web as Statiq.Web.Hosting.
- Moved Statiq.Aws to Statiq Web as Statiq.Web.Aws.
- Moved Statiq.Azure to Statiq Web as Statiq.Web.Azure.
- Moved Statiq.Netlify to Statiq Web as Statiq.Web.Netlify.
- Moved Statiq.GitHub to Statiq Web as Statiq.Web.GitHub.
- Moved
ActionFileSystemWatcher
to Statiq.Common and made it public. - Moved
InterlockedBool
to Statiq.Common and made it public. - Added
ShortcodeHelper
static class to Statiq.Common and moved shortcode argument parsing helper method there. - Moved HTML-based shortcodes to Statiq.Web.
- Removed the need to pass
IExecutionContext
to a bunch of different extension methods that can rely onIExecutionContext.Current
. - Added
IExecutionContext.HasCurrent
to check if a current execution context is available. - Changed
IExecutionContext.Current
to throw if no execution context is available. - Added
IDocument
extensions to clone documents from string orStream
content. - Added
IExecutionContext
extensions to create documents from string orStream
content. - Added
DocumentShortcode
andSyncDocumentShortcode
as base classes for single document-based shortcodes. - Added
ContentShortcode
andSyncContentShortcode
as base classes for simple string-based shortcodes. - Renamed
IMetadata.GetDocumentList()
toIMetadata.GetDocuments()
and added a newIMetadata.GetDocumentList()
that returns aDocumentList<IDocument>
. - Changed
IPipelineOutputs
andIEnumerable<IDocument>
extensions to returnDocumentList<TDocument>
. - Added
DocumentList<TDocument>
which wraps a set of documents, eliminating nulls, and provides an indexer for filtering destinations. - Added
IEnumerable<IDocument>.FirstOrDefaultSource()
andIEnumerable<IDocument>.FirstOrDefaultDestination()
extensions.
1.0.0-alpha.29
- Moved a bunch of
IBootstrapper
extensions to Statiq.Common so they're available from extension libraries in anIInitializer
. - Renamed
IConfigurableBootstrapper
toIBootstrapper
. - Added a new
IInitializer
interface that can be used for library/module initialization (but only when using theBootstrapper
). - Refactored the
RenderRazor
module to use the built-in service collection when possible. - Added a new
IServiceCollection.AddRazor()
extension to register Razor services out-of-band. - Refactored the
ClassCatalog
toStatiq.Common
and exposed it via theIExecutionState
interface. - Added
.WithSource()
to thePaginateDocuments
andGroupDocuments
modules. - Added a new
Keys.Order
key and made theOrderDocuments
module support it. - Added a
keepExisting
parameter to theGenerateExcerpt
module. - Removed some ambiguous
IShortcodeColletion.Add()
extensions. - Added a bunch of
Bootstrapper.AddShortcode()
extensions. - Added a new
ForAllDocuments
module that can act as a parent module to arbitrary child modules. - Added a new
If
shortcode (#789). - Added a new
ForEach
shortcode (#789). - Added a
TypeHelper.TryConvert()
method that takes a targetType
. - Added support for "script strings" to metadata get extensions (if the key starts with "=>" it will be treated as a script and evaluated instead of getting the metadata value directly).
- Refactored
IShortcode
to return multiple shortcode result documents and concatenates their content. - Modified
CreateTree
sort delegate to include theIExecutionContext
and to sort by input document order by default (instead of path/file name). - Added a
IDocument.IdEquals()
extension method. - Added a
IDocument.GetLink()
extension method that callsIExecutionContext.GetLink()
. - Added a
IDocument.HasChildren()
extension method. - Added an empty constructor to
OrderDocuments
that orders documents by theKeys.Index
value and then the file name by default. - Added a
IConfig.Cast<TValue>()
convenience extension method.
1.0.0-alpha.28
- Added
ctx
anddoc
shorthand properties to the scripted metadata script host. - Ensured that scripted metadata uses a strongly-typed property in the script host for metadata properties like
Source
andDestination
. - Added ".yml" to file extensions mapped to the "text/yaml" media type.
- Added ability to include all inputs in generated feeds from
GenerateFeeds
by setting maximum items to 0 - Refactored Statiq.Hosting usage of Newtonsoft.Json to System.Text.Json.
- Moved the
ParseJson
module into Statiq.Core, refactored it to use System.Text.Json, and removed theStatiq.Json
extension library. - Renamed
IMetadata.GetNestedMetadata()
toIMetadata.GetMetadata()
. - Added
TypeHelper.RegisterTypeConverter()
methods to register type converters at runtime. - Added a type converter that can convert
IMetadata
toIDocument
.
1.0.0-alpha.27
- Added support to
MergeDocuments
andMergeMetadata
for keeping existing metadata when merging. - Added a new
MergeContent
module that merges content from child modules to input documents. - Added an overload to the
SetContent
module that accepts a fullIContentProvider
. - Fixed a small bug with
MetadataDictionary
initialization when items contentIMetadataValue
orConfig<T>
values. - Added several new document metadata outputs to the
Paginate
module includePrevious
andNext
. - Added a new
LazyDocumentMetadataValue
that can be used to lazily find a given document as a metadata value (I.e. after cloning). - Renamed the "Transform" phase to "PostProcess" to better reflect the intended semantics and make it easier to explain.
1.0.0-alpha.26
- Added a phase timeline graphic to the execution summary output.
- Added some
Span<char>.Replace()
extension methods. - Added
NormalizedPath.ReplaceInvalidFileNameChars()
andNormalizedPath.ReplaceInvalidPathChars()
static methods. - Added
IMetadata.GetRawEnumerable()
and anIMetadata.GetRawEnumerable()
extension method to make enumerating raw key-value pairs easier. - Added a new
ExecuteBranch
module that can execute multiple branches of modules. - Added config overrides to the modules that operate on document sets.
- Fixes a bug with
MirrorResources
and files that contain "index" in their name. - Combines
FilePath
andDirectoryPath
into a single consolidated `NormalizedPath (#79). - Fixes a race condition in
Process.WaitForExit(int)
calls (thanks @duncanawoods).
1.0.0-alpha.25
- Added support for object-based settings to the bootstrapper (as opposed to just initial string-based configuration).
- Added support for
IConfig
metadata values. - Added
LastWriteTime
andCreationTime
toIFileSystemEntry
. - Fixed a race condition in
ScriptMetadataValue
. - Changed behavior of
SetDestination
when using a config value to makeDestinationPath
,DestinationFileName
, andDestinationExtension
take precedence (with an option to override). - Added a
Context
property for the currentIExecutionContext
to the available script properties (I.e., for use in metadata value scripts via "=>" notation).
1.0.0-alpha.24
- Added new
ProcessHtml
module for more flexible processing of DOM nodes. - Added new
IEnumerable<IDocument>.Flatten()
extension to flatten document trees. - Added new
IEnumerable<IDocument>.FilterSources()
andIEnumerable<IDocument>.FilterDestinations()
extension methods. - Added a new
FilterDestinations
module to filter documents by destination path. - Added a
Config.ContainsSettings(params string[] keys)
config factory to return whether the settings contain all the specified keys. - Refactored some methods from
IExecutionContext
intoIExecutionState
and moved implementation toEngine
. - Added new
EnumerateValues
module that will clone or create documents for each item in an enumeration. - Added
Keys.ExcludeFromEvaluation
that can exclude all or some metadata values from automatic script evaluation. - Added
IMetadata.GetNestedMetadata()
to get a nested metadata value (not calledIMetadata.GetMetadata()
to avoid conflicts with the old previous method of that name). - Renamed
IMetadata.GetMetadata()
toIMetadata.FilterMetadata()
which now returns aFilteredMetadata
instance. - Added new
FilteredMetadata
class to filter underlying metadata items by key(s). - Refactored a bunch of default interface implementations back to extension methods (turns out default interface implementations are a little awkward to maintain).
- Moved scripting support and the
CompileScript
andEvaluateScript
modules toStatiq.Core
. - Added
Microsoft.CodeAnalysis
toStatiq.Core
. - Metadata and configuration settings that are a string starting with "=>" are now considered "scripted" and the content to the right of the arrow will be lazily evaluated as C# code - this is a big deal and the use cases will become apparent over time (I have lots of big ideas around this feature).
- Removed the
InterpolateMetadata
module in favor of more robust built-in scripted metadata. - Removed the
Statiq.CodeAnalysis.IDocumentExtensions.Interpolate()
extension method in favor of more robust built-in scripted metadata. - Changed
CancellationTokenSource
uses inside the engine toCancellationToken
since the engine does not itself cancel execution. - Surfaced the
CancellationToken
for a given execution through theIExecutionState
. - Added a check to ensure the engine is only performing one execution at a time (the outer execution loop is not concurrently safe).
- Major refactoring involving engine and execution context interfaces, added a new
IExecutionState
interface that essentially represents a run-time engine. - Added a new
DocumentIdComparer
to compare documents by ID (#69, thanks @mholo65). - Removed
IParallelModule.WithSequentialExecution()
and standardized on.WithParallelExecution(false)
instead to make default behavior of running in parallel clearer (I.e., you have to turn it off). - Added additional configuration methods to
CacheDocuments
providing more control over when to invalidate cached documents (#78). - Added
IReadOnlyPipeline
for runtime access to pipeline data without changing modules. - Added
IExecutionContext.Pipeline
to get the currently executing pipeline from the execution context. - Removed
IBootstrapper
and refactored to the one trueBootstrapper
. - Added a
BootstrapperFactory
available viaBootstrapper.Factory
to create bootstrappers (this will make specialized creation extensions easier to discover).
1.0.0-alpha.23
1.0.0-alpha.22
1.0.0-alpha.21
- Fixes a bug with parallel modules when they return a null enumerable.
- Adds
AnalyzeCSharp.WithCompilationAssemblyName()
to set the name of the module compilation (#71). - Adds a metadata key "Compilation" to
AnalyzeCSharp
output documents to get the RoslynCompilation
from the module (#71). - Adds
IConfig.EnsureNonNull()
andIConfig.EnsureNonDocument()
extensions to simplify config parameter checks. - Refactors many of the configuration methods in
AnalyzeCSharp
to take configs instead of atomic values. - Ensures namespace documents from
AnalyzeCSharp
contain the "ContainingAssembly" metadata (#70). - Build script support for non-Windows platforms via a new
build.sh
(#65, thanks @khalidabuhakmeh). - Adds a
Config<TValue>.MakeEnumerable()
extension to transform a config into an enumerable value. - Adds a common
MultiConfigModuleBase
forMultiConfigModule
andParallelMultiConfigModule
. - Adds
CombineConfig
helper methods toMultiConfigModuleBase
to help with combining config values during configuration. - Refactors several of the
StartProcess
configuration methods to take configs.