fix: version upload failing to detect mrpack loader (#7063)

This commit is contained in:
Truman Gao
2026-08-08 17:18:58 +00:00
committed by GitHub
parent b78dd9bf1b
commit f38d351d32
3 changed files with 38 additions and 1 deletions
+1
View File
@@ -53,6 +53,7 @@
"@vue-email/components": "^0.0.21",
"@vue-email/render": "^0.0.9",
"@vueuse/core": "^11.1.0",
"@zip.js/zip.js": "^2.8.34",
"ace-builds": "^1.36.2",
"ansi-to-html": "^0.7.2",
"chart.js": "^4.5.1",
+28 -1
View File
@@ -19,6 +19,26 @@ export interface InferredVersionInfo {
game_versions?: string[]
}
async function readMrpackManifest(rawFile: RawFile): Promise<string> {
const { BlobReader, TextWriter, ZipReader } = await import('@zip.js/zip.js')
const reader = new ZipReader(new BlobReader(rawFile))
try {
const entries = await reader.getEntries()
const manifest = entries.find(
(entry) => !entry.directory && entry.filename === 'modrinth.index.json',
)
if (!manifest || manifest.directory) {
throw new Error('Missing modrinth.index.json')
}
return await manifest.getData(new TextWriter())
} finally {
await reader.close()
}
}
/**
* Fills in missing version information from the filename if not already present.
*/
@@ -56,11 +76,18 @@ export const inferVersionInfo = async function (
const simplifiedGameVersions = gameVersions
.filter((it) => it.version_type === 'release')
.map((it) => it.version)
const loaderParsers = createLoaderParsers(project, gameVersions, simplifiedGameVersions)
const fileName = rawFile.name.toLowerCase()
if (fileName.endsWith('.mrpack') || fileName.endsWith('.mrpack-primary')) {
const manifest = await readMrpackManifest(rawFile)
const result = loaderParsers['modrinth.index.json'](manifest)
return fillMissingFromFilename(result, rawFile.name, project.title)
}
const zipReader = new JSZip()
const zip = await zipReader.loadAsync(rawFile)
const loaderParsers = createLoaderParsers(project, gameVersions, simplifiedGameVersions)
const packParser = createPackParser(project, gameVersions, rawFile)
const multiFileDetectors = createMultiFileDetectors(project, gameVersions, rawFile)