mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-05-07 12:16:04 +00:00
Add JavaScript CDN servers
This commit is contained in:
parent
fb420d1116
commit
d362d852ad
|
@ -132,6 +132,24 @@ namespace WelsonJS.Launcher.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://esm.run/과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
internal static string EsmRunPrefix {
|
||||
get {
|
||||
return ResourceManager.GetString("EsmRunPrefix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://esm.sh/과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
internal static string EsmShPrefix {
|
||||
get {
|
||||
return ResourceManager.GetString("EsmShPrefix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// (아이콘)과(와) 유사한 System.Drawing.Icon 형식의 지역화된 리소스를 찾습니다.
|
||||
/// </summary>
|
||||
|
@ -232,6 +250,24 @@ namespace WelsonJS.Launcher.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://code.jquery.com/과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
internal static string JqueryCdnPrefix {
|
||||
get {
|
||||
return ResourceManager.GetString("JqueryCdnPrefix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://cdn.jsdelivr.net/과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
internal static string JsDeliverPrefix {
|
||||
get {
|
||||
return ResourceManager.GetString("JsDeliverPrefix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://github.com/gnh1201/welsonjs과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
|
@ -250,6 +286,24 @@ namespace WelsonJS.Launcher.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://www.skypack.dev/과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
internal static string SkypackPrefix {
|
||||
get {
|
||||
return ResourceManager.GetString("SkypackPrefix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// https://unpkg.com/과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
internal static string UnpkgPrefix {
|
||||
get {
|
||||
return ResourceManager.GetString("UnpkgPrefix", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 141.101.82.1과(와) 유사한 지역화된 문자열을 찾습니다.
|
||||
/// </summary>
|
||||
|
|
|
@ -187,4 +187,22 @@
|
|||
<data name="CdnJsPrefix" xml:space="preserve">
|
||||
<value>https://cdnjs.cloudflare.com/</value>
|
||||
</data>
|
||||
<data name="EsmRunPrefix" xml:space="preserve">
|
||||
<value>https://esm.run/</value>
|
||||
</data>
|
||||
<data name="EsmShPrefix" xml:space="preserve">
|
||||
<value>https://esm.sh/</value>
|
||||
</data>
|
||||
<data name="JqueryCdnPrefix" xml:space="preserve">
|
||||
<value>https://code.jquery.com/</value>
|
||||
</data>
|
||||
<data name="JsDeliverPrefix" xml:space="preserve">
|
||||
<value>https://cdn.jsdelivr.net/</value>
|
||||
</data>
|
||||
<data name="SkypackPrefix" xml:space="preserve">
|
||||
<value>https://www.skypack.dev/</value>
|
||||
</data>
|
||||
<data name="UnpkgPrefix" xml:space="preserve">
|
||||
<value>https://unpkg.com/</value>
|
||||
</data>
|
||||
</root>
|
|
@ -7,6 +7,7 @@ using System.Net.Http;
|
|||
using System.Reflection;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
@ -182,18 +183,42 @@ namespace WelsonJS.Launcher
|
|||
}
|
||||
}
|
||||
|
||||
// use the cdn-js
|
||||
if (path.StartsWith("ajax/libs/"))
|
||||
// use CDN sources
|
||||
if (await TryServeFromCdn(context, path))
|
||||
{
|
||||
if (await ServeBlob(context, path, Program.GetAppConfig("CdnJsPrefix"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private async Task<bool> TryServeFromCdn(HttpListenerContext context, string path)
|
||||
{
|
||||
bool isNodePackageExpression = Regex.IsMatch(path, @"^[^/@]+@[^/]+/");
|
||||
|
||||
var sources = new (bool isMatch, string configKey, Func<string, string> transform)[]
|
||||
{
|
||||
(path.StartsWith("ajax/libs/"), "CdnJsPrefix", p => p),
|
||||
(isNodePackageExpression, "UnpkgPrefix", p => p),
|
||||
(isNodePackageExpression, "SkypackPrefix", p => p),
|
||||
(isNodePackageExpression, "EsmShPrefix", p => p),
|
||||
(isNodePackageExpression, "EsmRunPrefix", p => p),
|
||||
(path.StartsWith("npm/") || path.StartsWith("gh/") || path.StartsWith("wp/"), "JsDeliverPrefix", p => p),
|
||||
(path.StartsWith("jquery/"), "JqueryCdnPrefix", p => p.Substring("jquery/".Length)),
|
||||
(true, "BlobStoragePrefix", p => p) // fallback
|
||||
};
|
||||
|
||||
foreach (var (isMatch, configKey, transform) in sources)
|
||||
{
|
||||
if (isMatch)
|
||||
{
|
||||
string prefix = Program.GetAppConfig(configKey);
|
||||
if (await ServeBlob(context, transform(path), prefix))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// use the blob stroage
|
||||
if (await ServeBlob(context, path, Program.GetAppConfig("BlobStoragePrefix"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
<add key="DnsServerAddress" value="1.1.1.1"/>
|
||||
<add key="BlobStoragePrefix" value="https://catswords.blob.core.windows.net/welsonjs/"/>
|
||||
<add key="CdnJsPrefix" value="https://cdnjs.cloudflare.com/"/>
|
||||
<add key="JsDeliverPrefix" value="https://cdn.jsdelivr.net/"/>
|
||||
<add key="UnpkgPrefix" value="https://unpkg.com/"/>
|
||||
<add key="SkypackPrefix" value="https://www.skypack.dev/"/>
|
||||
<add key="EsmShPrefix" value="https://esm.sh/"/>
|
||||
<add key="EsmRunPrefix" value="https://esm.run/"/>
|
||||
<add key="JqueryCdnPrefix" value="https://code.jquery.com/"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
|
||||
|
|
Loading…
Reference in New Issue
Block a user