cmd/pkgserver: add size

This commit is contained in:
mae
2026-03-10 15:10:05 -05:00
parent 5e114f3932
commit c1c9ca7c57
4 changed files with 45 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
class PackageIndexEntry {
name;
size;
description;
website;
version;
@@ -7,6 +8,7 @@ class PackageIndexEntry {
}
function toHTML(entry) {
let v = entry.version != null ? `<span>${escapeHtml(entry.version)}</span>` : "";
let s = entry.size != null ? `<p>Size: ${toByteSizeString(entry.size)} (${entry.size})</p>` : "";
let d = entry.description != null ? `<p>${escapeHtml(entry.description)}</p>` : "";
let w = entry.website != null ? `<a href="${encodeURI(entry.website)}">Website</a>` : "";
let r = entry.report ? `Log (<a href=\"${encodeURI('/api/v1/status/' + entry.name)}\">View</a> | <a href=\"${encodeURI('/status/' + entry.name)}\">Download</a>)` : "";
@@ -14,11 +16,25 @@ function toHTML(entry) {
row.innerHTML = `<td>
<h2>${escapeHtml(entry.name)} ${v}</h2>
${d}
${s}
${w}
${r}
</td>`;
return row;
}
function toByteSizeString(bytes) {
if (bytes < 1024)
return `${bytes}B`;
if (bytes < Math.pow(1024, 2))
return `${(bytes / 1024).toFixed(2)}kiB`;
if (bytes < Math.pow(1024, 3))
return `${(bytes / Math.pow(1024, 2)).toFixed(2)}MiB`;
if (bytes < Math.pow(1024, 4))
return `${(bytes / Math.pow(1024, 3)).toFixed(2)}GiB`;
if (bytes < Math.pow(1024, 5))
return `${(bytes / Math.pow(1024, 4)).toFixed(2)}TiB`;
return "not only is it big, it's large";
}
const API_VERSION = 1;
const ENDPOINT = `/api/v${API_VERSION}`;
class InfoPayload {

View File

@@ -1,25 +1,37 @@
class PackageIndexEntry {
name: string
size: number | null
description: string | null
website: string | null
version: string | null
report: boolean
}
function toHTML(entry: PackageIndexEntry): HTMLTableRowElement {
let v = entry.version != null ? `<span>${escapeHtml(entry.version)}</span>` : ""
let d = entry.description != null ? `<p>${escapeHtml(entry.description)}</p>` : ""
let w = entry.website != null ? `<a href="${encodeURI(entry.website)}">Website</a>` : ""
let v = entry.version !== null ? `<span>${escapeHtml(entry.version)}</span>` : ""
let s = entry.size !== null ? `<p>Size: ${toByteSizeString(entry.size)} (${entry.size})</p>` : ""
let d = entry.description !== null ? `<p>${escapeHtml(entry.description)}</p>` : ""
let w = entry.website !== null ? `<a href="${encodeURI(entry.website)}">Website</a>` : ""
let r = entry.report ? `Log (<a href=\"${encodeURI('/api/v1/status/' + entry.name)}\">View</a> | <a href=\"${encodeURI('/status/' + entry.name)}\">Download</a>)` : ""
let row = <HTMLTableRowElement>(document.createElement('tr'))
row.innerHTML = `<td>
<h2>${escapeHtml(entry.name)} ${v}</h2>
${d}
${s}
${w}
${r}
</td>`
return row
}
function toByteSizeString(bytes: number): string {
if(bytes < 1024) return `${bytes}B`
if(bytes < Math.pow(1024, 2)) return `${(bytes/1024).toFixed(2)}kiB`
if(bytes < Math.pow(1024, 3)) return `${(bytes/Math.pow(1024, 2)).toFixed(2)}MiB`
if(bytes < Math.pow(1024, 4)) return `${(bytes/Math.pow(1024, 3)).toFixed(2)}GiB`
if(bytes < Math.pow(1024, 5)) return `${(bytes/Math.pow(1024, 4)).toFixed(2)}TiB`
return "not only is it big, it's large"
}
const API_VERSION = 1
const ENDPOINT = `/api/v${API_VERSION}`
class InfoPayload {