Prepared tailwind system for plugin builds and exports via nuget. Removed obsolete old css bundling. Added helper scripts for building. Rewritten build scripts
This commit is contained in:
93
Resources/Scripts/Functions/StaticWebAssetsFunctions.cs
Normal file
93
Resources/Scripts/Functions/StaticWebAssetsFunctions.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using System.IO.Compression;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Scripts.Functions;
|
||||
|
||||
public static class StaticWebAssetsFunctions
|
||||
{
|
||||
public static async Task Run(string[] args)
|
||||
{
|
||||
if (args.Length < 2)
|
||||
{
|
||||
Console.WriteLine("Please provide the path to a nuget file and at least one regex expression");
|
||||
return;
|
||||
}
|
||||
|
||||
var nugetPath = args[0];
|
||||
|
||||
var regexs = args
|
||||
.Skip(1)
|
||||
.Select(x => new Regex(x))
|
||||
.ToArray();
|
||||
|
||||
if (!File.Exists(nugetPath))
|
||||
{
|
||||
Console.WriteLine("The provided file does not exist");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Modding nuget package...");
|
||||
using var zipFile = ZipFile.Open(nugetPath, ZipArchiveMode.Update);
|
||||
|
||||
Console.WriteLine("Searching for files to remove");
|
||||
var files = zipFile.Entries
|
||||
.Where(x => x.FullName.Trim('/').StartsWith("staticwebassets"))
|
||||
.Where(x =>
|
||||
{
|
||||
var name = x.FullName.Replace("staticwebassets/", "");
|
||||
|
||||
return regexs.Any(y => y.IsMatch(name));
|
||||
})
|
||||
.ToArray();
|
||||
|
||||
Console.WriteLine($"Found {files.Length} file(s) to remove");
|
||||
foreach (var file in files)
|
||||
file.Delete();
|
||||
|
||||
Console.WriteLine("Modifying static web assets build target");
|
||||
var oldBuildTargetEntry = zipFile
|
||||
.Entries
|
||||
.FirstOrDefault(x => x.FullName == "build/Microsoft.AspNetCore.StaticWebAssets.props");
|
||||
|
||||
if (oldBuildTargetEntry == null)
|
||||
{
|
||||
Console.WriteLine("Build target file not found in nuget packages");
|
||||
return;
|
||||
}
|
||||
|
||||
await using var oldBuildTargetStream = oldBuildTargetEntry.Open();
|
||||
|
||||
var contentXml = await XDocument.LoadAsync(
|
||||
oldBuildTargetStream,
|
||||
LoadOptions.None,
|
||||
CancellationToken.None
|
||||
);
|
||||
|
||||
oldBuildTargetStream.Close();
|
||||
oldBuildTargetEntry.Delete();
|
||||
|
||||
var assetRefsToRemove = contentXml
|
||||
.Descendants("StaticWebAsset")
|
||||
.Where(asset =>
|
||||
{
|
||||
var element = asset.Element("RelativePath");
|
||||
|
||||
if (element == null)
|
||||
return false;
|
||||
|
||||
return regexs.Any(y => y.IsMatch(element.Value));
|
||||
})
|
||||
.ToArray();
|
||||
|
||||
foreach (var asset in assetRefsToRemove)
|
||||
asset.Remove();
|
||||
|
||||
var newBuildTargetEntry = zipFile.CreateEntry("build/Microsoft.AspNetCore.StaticWebAssets.props");
|
||||
await using var newBuildTargetStream = newBuildTargetEntry.Open();
|
||||
|
||||
await contentXml.SaveAsync(newBuildTargetStream, SaveOptions.None, CancellationToken.None);
|
||||
|
||||
newBuildTargetStream.Close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user