mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 09:03:22 -05:00
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
28 lines
1.2 KiB
JavaScript
28 lines
1.2 KiB
JavaScript
export const MEMORY_LIMIT = 256 * 1024 * 1024;
|
|
|
|
function safeSize(value) {
|
|
if (!Number.isSafeInteger(value) || value < 0) throw new Error("ZIP contains an unsupported file size");
|
|
return value;
|
|
}
|
|
|
|
export function memoryEstimate(archiveBytes, selectedBytes, libraryBytes, entries) {
|
|
return safeSize(Math.ceil(archiveBytes * 1.02) + selectedBytes * 4 + libraryBytes + entries * 1024 + 8 * 1024 * 1024);
|
|
}
|
|
|
|
export function batchMemoryEstimate(summaries, target, libraryBytes) {
|
|
if (target !== "linux" && target !== "windows") throw new Error(`Unsupported conversion target: ${target}`);
|
|
return summaries.reduce((total, summary) => safeSize(total + memoryEstimate(
|
|
summary.totalBytes,
|
|
target === "windows" ? summary.windowsSelectedBytes : summary.selectedBytes,
|
|
libraryBytes,
|
|
summary.files
|
|
)), 0);
|
|
}
|
|
|
|
export function batchOutputDirectory(name, index) {
|
|
if (!Number.isSafeInteger(index) || index < 0) throw new Error("Invalid app index");
|
|
const stem = String(name).replace(/\.zip$/iu, "").normalize("NFKC")
|
|
.replace(/[^A-Za-z0-9._-]+/gu, "-").replace(/^[.-]+/u, "").slice(0, 80).replace(/[. -]+$/u, "");
|
|
return `${String(index + 1).padStart(2, "0")}-${stem || "app"}`;
|
|
}
|