Skip to content

Releases: statiqdev/Statiq.Framework

1.0.0-beta.1

09 Apr 03:11
Compare
Choose a tag to compare
1.0.0-beta.1 Pre-release
Pre-release
  • 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 and ForAllDocuments 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 on IExecutionContext.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 or Stream content.
  • Added IExecutionContext extensions to create documents from string or Stream content.
  • Added DocumentShortcode and SyncDocumentShortcode as base classes for single document-based shortcodes.
  • Added ContentShortcode and SyncContentShortcode as base classes for simple string-based shortcodes.
  • Renamed IMetadata.GetDocumentList() to IMetadata.GetDocuments() and added a new IMetadata.GetDocumentList() that returns a DocumentList<IDocument>.
  • Changed IPipelineOutputs and IEnumerable<IDocument> extensions to return DocumentList<TDocument>.
  • Added DocumentList<TDocument> which wraps a set of documents, eliminating nulls, and provides an indexer for filtering destinations.
  • Added IEnumerable<IDocument>.FirstOrDefaultSource() and IEnumerable<IDocument>.FirstOrDefaultDestination() extensions.

1.0.0-alpha.29

27 Mar 02:39
Compare
Choose a tag to compare
1.0.0-alpha.29 Pre-release
Pre-release
  • Moved a bunch of IBootstrapper extensions to Statiq.Common so they're available from extension libraries in an IInitializer.
  • Renamed IConfigurableBootstrapper to IBootstrapper.
  • Added a new IInitializer interface that can be used for library/module initialization (but only when using the Bootstrapper).
  • 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 to Statiq.Common and exposed it via the IExecutionState interface.
  • Added .WithSource() to the PaginateDocuments and GroupDocuments modules.
  • Added a new Keys.Order key and made the OrderDocuments module support it.
  • Added a keepExisting parameter to the GenerateExcerpt 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 target Type.
  • 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 the IExecutionContext 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 calls IExecutionContext.GetLink().
  • Added a IDocument.HasChildren() extension method.
  • Added an empty constructor to OrderDocuments that orders documents by the Keys.Index value and then the file name by default.
  • Added a IConfig.Cast<TValue>() convenience extension method.

1.0.0-alpha.28

08 Mar 21:13
Compare
Choose a tag to compare
1.0.0-alpha.28 Pre-release
Pre-release
  • Added ctx and doc 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 and Destination.
  • 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 the Statiq.Json extension library.
  • Renamed IMetadata.GetNestedMetadata() to IMetadata.GetMetadata().
  • Added TypeHelper.RegisterTypeConverter() methods to register type converters at runtime.
  • Added a type converter that can convert IMetadata to IDocument.

1.0.0-alpha.27

29 Feb 01:06
Compare
Choose a tag to compare
1.0.0-alpha.27 Pre-release
Pre-release
  • Added support to MergeDocuments and MergeMetadata 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 full IContentProvider.
  • Fixed a small bug with MetadataDictionary initialization when items content IMetadataValue or Config<T> values.
  • Added several new document metadata outputs to the Paginate module include Previous and Next.
  • 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

25 Feb 03:15
Compare
Choose a tag to compare
1.0.0-alpha.26 Pre-release
Pre-release
  • Added a phase timeline graphic to the execution summary output.
  • Added some Span<char>.Replace() extension methods.
  • Added NormalizedPath.ReplaceInvalidFileNameChars() and NormalizedPath.ReplaceInvalidPathChars() static methods.
  • Added IMetadata.GetRawEnumerable() and an IMetadata.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 and DirectoryPath into a single consolidated `NormalizedPath (#79).
  • Fixes a race condition in Process.WaitForExit(int) calls (thanks @duncanawoods).

1.0.0-alpha.25

12 Feb 03:42
Compare
Choose a tag to compare
1.0.0-alpha.25 Pre-release
Pre-release
  • 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 and CreationTime to IFileSystemEntry.
  • Fixed a race condition in ScriptMetadataValue.
  • Changed behavior of SetDestination when using a config value to make DestinationPath, DestinationFileName, and DestinationExtension take precedence (with an option to override).
  • Added a Context property for the current IExecutionContext to the available script properties (I.e., for use in metadata value scripts via "=>" notation).

1.0.0-alpha.24

10 Feb 15:36
Compare
Choose a tag to compare
1.0.0-alpha.24 Pre-release
Pre-release
  • 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() and IEnumerable<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 into IExecutionState and moved implementation to Engine.
  • 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 called IMetadata.GetMetadata() to avoid conflicts with the old previous method of that name).
  • Renamed IMetadata.GetMetadata() to IMetadata.FilterMetadata() which now returns a FilteredMetadata 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 and EvaluateScript modules to Statiq.Core.
  • Added Microsoft.CodeAnalysis to Statiq.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 to CancellationToken since the engine does not itself cancel execution.
  • Surfaced the CancellationToken for a given execution through the IExecutionState.
  • 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 true Bootstrapper.
  • Added a BootstrapperFactory available via Bootstrapper.Factory to create bootstrappers (this will make specialized creation extensions easier to discover).

1.0.0-alpha.23

13 Jan 17:23
Compare
Choose a tag to compare
1.0.0-alpha.23 Pre-release
Pre-release
  • Changing target for all projects to .NET Core 3.1 LTS
  • New Eval shortcode (#37, #68, thanks @ProH4Ck)
  • Fixes the CacheDocuments module and excludes IDocument.Id from hash calculation (#74, thanks @mholo65)

1.0.0-alpha.22

13 Dec 04:35
Compare
Choose a tag to compare
1.0.0-alpha.22 Pre-release
Pre-release
  • Fixes a bug with MirrorResources and relative links (#72, thanks @dafergu2)
  • The PhaseOutputs collection now returns output documents from the most recent available phase or an empty result set if no phases were defined.
  • Adds .wasm as a supported media type (required for WebAssembly streaming).

1.0.0-alpha.21

05 Dec 19:33
Compare
Choose a tag to compare
1.0.0-alpha.21 Pre-release
Pre-release
  • 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 Roslyn Compilation from the module (#71).
  • Adds IConfig.EnsureNonNull() and IConfig.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 for MultiConfigModule and ParallelMultiConfigModule.
  • Adds CombineConfig helper methods to MultiConfigModuleBase to help with combining config values during configuration.
  • Refactors several of the StartProcess configuration methods to take configs.