-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathConfigure.Ssg.cs
More file actions
86 lines (76 loc) · 3.64 KB
/
Copy pathConfigure.Ssg.cs
File metadata and controls
86 lines (76 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using ServiceStack.IO;
[assembly: HostingStartup(typeof(MyApp.ConfigureSsg))]
namespace MyApp;
public class ConfigureSsg : IHostingStartup
{
public void Configure(IWebHostBuilder builder) => builder
.ConfigureServices(services =>
{
services.AddSingleton<RazorPagesEngine>();
services.AddSingleton<MarkdownIncludes>();
services.AddSingleton<MarkdownPages>();
services.AddSingleton<MarkdownWhatsNew>();
services.AddSingleton<MarkdownVideos>();
services.AddSingleton<MarkdownBlog>();
services.AddSingleton<MarkdownPodcasts>();
services.AddSingleton<MarkdownMeta>();
})
.ConfigureAppHost(
appHost => appHost.Plugins.Add(new CleanUrlsFeature()),
afterPluginsLoaded: appHost =>
{
MarkdigConfig.Set(new MarkdigConfig
{
ConfigurePipeline = pipeline =>
{
// Extend Markdig Pipeline
},
ConfigureContainers = config =>
{
config.AddBuiltInContainers();
// Add Custom Block or Inline containers
}
});
var includes = appHost.Resolve<MarkdownIncludes>();
var pages = appHost.Resolve<MarkdownPages>();
var whatsNew = appHost.Resolve<MarkdownWhatsNew>();
var videos = appHost.Resolve<MarkdownVideos>();
var blogPosts = appHost.Resolve<MarkdownBlog>();
var podcasts = appHost.Resolve<MarkdownPodcasts>();
var meta = appHost.Resolve<MarkdownMeta>();
//blogPosts.Authors = BlogConfig.Instance.Authors;
meta.Features = [pages, whatsNew, videos, blogPosts, podcasts];
includes.LoadFrom("_includes");
pages.LoadFrom("_pages");
whatsNew.LoadFrom("_whatsnew");
videos.LoadFrom("_videos");
blogPosts.LoadFrom("_posts");
podcasts.LoadFrom("_podcasts");
AppConfig.Instance.Init(appHost.ContentRootDirectory);
},
afterAppHostInit: appHost =>
{
// prerender with: `$ npm run prerender`
AppTasks.Register("prerender", args =>
{
appHost.Resolve<MarkdownMeta>().RenderToAsync(
metaDir: appHost.ContentRootDirectory.RealPath.CombineWith("wwwroot/meta"),
baseUrl: HtmlHelpers.ToAbsoluteContentUrl("")).GetAwaiter().GetResult();
var distDir = appHost.ContentRootDirectory.RealPath.CombineWith("dist");
if (Directory.Exists(distDir))
FileSystemVirtualFiles.DeleteDirectory(distDir);
FileSystemVirtualFiles.CopyAll(
new DirectoryInfo(appHost.ContentRootDirectory.RealPath.CombineWith("wwwroot")),
new DirectoryInfo(distDir));
// Render .html redirect files
RazorSsg.PrerenderRedirectsAsync(appHost.ContentRootDirectory.GetFile("redirects.json"), distDir)
.GetAwaiter().GetResult();
var razorFiles = appHost.VirtualFiles.GetAllMatchingFiles("*.cshtml");
RazorSsg.PrerenderAsync(appHost, razorFiles, distDir).GetAwaiter().GetResult();
});
});
}
// Add additional frontmatter info to include
public class MarkdownFileInfo : MarkdownFileBase
{
}