public ReadOnlyMemory <byte> Execute(HtmlModuleContext ctx, string files) { return(ctx.Cache($"{Name}:{SharedDir}/{files}", _ => { var sb = StringBuilderCache.Allocate(); var paths = files.Split(',').Map(file => SharedDir.CombineWith(file + (file.IndexOf('.') == -1 ? DefaultExt : ""))); foreach (var path in paths) { if (path.IndexOf('*') >= 0) { var files = ctx.VirtualFiles.GetAllMatchingFiles(path) .OrderBy(file => file.VirtualPath).ToList(); foreach (var file in files) { sb.AppendLine(ctx.FileContentsResolver(file)); } } else { var file = ctx.VirtualFiles.GetFile(path); if (file == null) { throw new FileNotFoundException($"File '{path}' does not exist in {ctx.VirtualFiles}", path); } sb.AppendLine(ctx.FileContentsResolver(file)); } } return StringBuilderCache.ReturnAndFree(sb).AsMemory().ToUtf8(); })); }
public async Task WriteToAsync(HtmlModuleContext ctx, Stream responseStream, CancellationToken token = default) => await responseStream.WriteAsync(fn(ctx, Args), token).ConfigAwait();