Example #1
0
    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();
        }));
    }
Example #2
0
 public async Task WriteToAsync(HtmlModuleContext ctx, Stream responseStream, CancellationToken token = default) =>
 await responseStream.WriteAsync(fn(ctx, Args), token).ConfigAwait();