-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJavascriptTranslationMiddlewareConfigurator.cs
More file actions
84 lines (70 loc) · 3.47 KB
/
JavascriptTranslationMiddlewareConfigurator.cs
File metadata and controls
84 lines (70 loc) · 3.47 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
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace MN.L10n.JavascriptTranslationMiddleware
{
public interface IJavascriptTranslationMiddlewareConfigurator
{
IJavascriptTranslationMiddlewareConfigurator AddPathPrefix(PathString prefix);
IJavascriptTranslationMiddlewareConfigurator EnableCacheWhen(Func<HttpContext, Task<bool>> predicate);
IJavascriptTranslationMiddlewareConfigurator TranslateWhen(
Func<HttpContext, FileHandle, Task<bool>>? predicate);
IJavascriptTranslationMiddlewareConfigurator EnableVersionedFileRedirect(Action<VersionedFileRedirectConfig>? configure = null);
IJavascriptTranslationMiddlewareConfigurator DisableVersionedFileRedirect();
}
internal class JavascriptTranslationMiddlewareConfigurator : IJavascriptTranslationMiddlewareConfigurator
{
private readonly List<PathString> _pathPrefixes = new();
private readonly string _compiledFolder;
private Func<HttpContext, FileHandle, Task<bool>>? _shouldTranslateAsync;
private Func<HttpContext, Task<bool>>? _shouldEnableCacheAsync;
private VersionedFileRedirectConfig? _versionedFileRedirectConfig = new();
public JavascriptTranslationMiddlewareConfigurator(string compiledFolder)
{
_compiledFolder = compiledFolder;
}
public IJavascriptTranslationMiddlewareConfigurator AddPathPrefix(PathString prefix)
{
_pathPrefixes.Add(prefix);
return this;
}
public IJavascriptTranslationMiddlewareConfigurator EnableCacheWhen(Func<HttpContext, Task<bool>> predicate)
{
_shouldEnableCacheAsync = predicate;
return this;
}
public IJavascriptTranslationMiddlewareConfigurator TranslateWhen(
Func<HttpContext, FileHandle, Task<bool>>? predicate)
{
_shouldTranslateAsync = predicate;
return this;
}
public IJavascriptTranslationMiddlewareConfigurator EnableVersionedFileRedirect(Action<VersionedFileRedirectConfig>? configure = null)
{
_versionedFileRedirectConfig = new VersionedFileRedirectConfig();
configure?.Invoke(_versionedFileRedirectConfig);
return this;
}
public IJavascriptTranslationMiddlewareConfigurator DisableVersionedFileRedirect()
{
_versionedFileRedirectConfig = null;
return this;
}
public IJavascriptTranslationMiddlewareConfiguration Build()
{
if (string.IsNullOrWhiteSpace(_compiledFolder)) throw new ArgumentException("Missing compiled folder");
if (_pathPrefixes.Count == 0)
throw new ArgumentException(
$"At least one pathPrefix must be provided, plase call {nameof(AddPathPrefix)} while configuring the {nameof(JavascriptTranslationMiddleware)}");
var config =
new JavascriptTranslationMiddlewareConfiguration(_pathPrefixes.ToArray(), _compiledFolder.Trim())
{
VersionedFileRedirectConfig = _versionedFileRedirectConfig
};
if (_shouldTranslateAsync is not null) config.ShouldTranslateAsync = _shouldTranslateAsync;
if (_shouldEnableCacheAsync is not null) config.EnableCacheAsync = _shouldEnableCacheAsync;
return config;
}
}
}