This commit is contained in:
@@ -79,6 +79,69 @@ public static class PackageUrlBuilder
|
||||
return $"pkg:generic/macos-app/{Escape(bundleId)}@{Escape(version)}";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a PURL for a Windows MSI package.
|
||||
/// Format: pkg:generic/windows-msi/{productName}@{version}?upgrade_code={upgradeCode}
|
||||
/// </summary>
|
||||
public static string BuildWindowsMsi(string productName, string version, string? upgradeCode = null)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(productName);
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(version);
|
||||
|
||||
var normalizedName = productName.Trim().ToLowerInvariant().Replace(' ', '-');
|
||||
var builder = new StringBuilder();
|
||||
builder.Append("pkg:generic/windows-msi/");
|
||||
builder.Append(Escape(normalizedName));
|
||||
builder.Append('@');
|
||||
builder.Append(Escape(version));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(upgradeCode))
|
||||
{
|
||||
builder.Append("?upgrade_code=");
|
||||
builder.Append(EscapeQuery(upgradeCode));
|
||||
}
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a PURL for a Windows WinSxS assembly.
|
||||
/// Format: pkg:generic/windows-winsxs/{assemblyName}@{version}?arch={arch}
|
||||
/// </summary>
|
||||
public static string BuildWindowsWinSxS(string assemblyName, string version, string? architecture = null)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(assemblyName);
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(version);
|
||||
|
||||
var normalizedName = assemblyName.Trim().ToLowerInvariant();
|
||||
var builder = new StringBuilder();
|
||||
builder.Append("pkg:generic/windows-winsxs/");
|
||||
builder.Append(Escape(normalizedName));
|
||||
builder.Append('@');
|
||||
builder.Append(Escape(version));
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(architecture))
|
||||
{
|
||||
builder.Append("?arch=");
|
||||
builder.Append(EscapeQuery(architecture));
|
||||
}
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds a PURL for a Windows Chocolatey package.
|
||||
/// Format: pkg:chocolatey/{packageId}@{version}
|
||||
/// </summary>
|
||||
public static string BuildChocolatey(string packageId, string version)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(packageId);
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(version);
|
||||
|
||||
var normalizedId = packageId.Trim().ToLowerInvariant();
|
||||
return $"pkg:chocolatey/{Escape(normalizedId)}@{Escape(version)}";
|
||||
}
|
||||
|
||||
private static string Escape(string value)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(value);
|
||||
|
||||
@@ -9,4 +9,7 @@ public enum PackageEvidenceSource
|
||||
HomebrewCellar,
|
||||
PkgutilReceipt,
|
||||
MacOsBundle,
|
||||
WindowsMsi,
|
||||
WindowsWinSxS,
|
||||
WindowsChocolatey,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user