fix: neoforge not existing for 26.1 breaking vers picker (#5674)

* fix: neoforge for 26.1 -> other vers being picked not existing causing version picker to break

* fix: lint
This commit is contained in:
Calum H.
2026-03-26 17:53:27 +00:00
committed by GitHub
parent 3c3cde1908
commit f1648298c4

View File

@@ -254,6 +254,14 @@ async function fetchLoaderManifest(loader: string) {
let apiLoader = loader let apiLoader = loader
if (apiLoader === 'neoforge') apiLoader = 'neo' if (apiLoader === 'neoforge') apiLoader = 'neo'
debug(
'fetchLoaderManifest:',
loader,
'apiLoader:',
apiLoader,
'cached:',
!!loaderVersionsCache.value[apiLoader],
)
if (loaderVersionsCache.value[apiLoader]) return if (loaderVersionsCache.value[apiLoader]) return
try { try {
@@ -262,7 +270,9 @@ async function fetchLoaderManifest(loader: string) {
gameVersions: { id: string; loaders: LoaderVersionEntry[] }[] gameVersions: { id: string; loaders: LoaderVersionEntry[] }[]
} }
loaderVersionsCache.value[apiLoader] = data.gameVersions loaderVersionsCache.value[apiLoader] = data.gameVersions
} catch { debug('fetchLoaderManifest: loaded', apiLoader, 'gameVersions:', data.gameVersions.length)
} catch (e) {
debug('fetchLoaderManifest: FAILED', apiLoader, e)
loaderVersionsCache.value[apiLoader] = [] loaderVersionsCache.value[apiLoader] = []
} }
} }
@@ -319,13 +329,32 @@ function getLoaderVersionsForGameVersion(
if (apiLoader === 'neoforge') apiLoader = 'neo' if (apiLoader === 'neoforge') apiLoader = 'neo'
const manifest = loaderVersionsCache.value[apiLoader] const manifest = loaderVersionsCache.value[apiLoader]
debug('getLoaderVersionsForGameVersion:', {
loader,
apiLoader,
gameVersion,
hasManifest: !!manifest,
manifestLength: manifest?.length,
})
if (!manifest) return [] if (!manifest) return []
// Some loaders (e.g. Fabric) list all versions under a placeholder entry // Some loaders (e.g. Fabric) list all versions under a placeholder entry
const placeholder = manifest.find((x) => x.id === '${modrinth.gameVersion}') const placeholder = manifest.find((x) => x.id === '${modrinth.gameVersion}')
if (placeholder) return placeholder.loaders if (placeholder) {
debug(
'getLoaderVersionsForGameVersion: using placeholder, loaders:',
placeholder.loaders.length,
)
return placeholder.loaders
}
const entry = manifest.find((x) => x.id === gameVersion) const entry = manifest.find((x) => x.id === gameVersion)
debug(
'getLoaderVersionsForGameVersion: entry for',
gameVersion,
':',
entry ? entry.loaders.length + ' loaders' : 'NOT FOUND',
)
return entry?.loaders ?? [] return entry?.loaders ?? []
} }
@@ -348,9 +377,12 @@ watch(
) )
// Watch loader + game version to resolve loader versions // Watch loader + game version to resolve loader versions
let loaderVersionWatchId = 0
watch( watch(
[() => selectedLoader.value, () => selectedGameVersion.value], [() => selectedLoader.value, () => selectedGameVersion.value],
async ([loader, gameVersion]) => { async ([loader, gameVersion]) => {
const watchId = ++loaderVersionWatchId
debug('watch [loader, gameVersion] fired:', { loader, gameVersion, watchId })
loaderVersionsData.value = [] loaderVersionsData.value = []
selectedLoaderVersion.value = null selectedLoaderVersion.value = null
@@ -360,8 +392,8 @@ watch(
if (loader === 'paper') { if (loader === 'paper') {
await fetchPaperVersions(gameVersion) await fetchPaperVersions(gameVersion)
if (watchId !== loaderVersionWatchId) return
loaderVersionsLoading.value = false loaderVersionsLoading.value = false
// Auto-select latest build
const builds = paperVersions.value[gameVersion] const builds = paperVersions.value[gameVersion]
if (builds?.length) { if (builds?.length) {
selectedLoaderVersion.value = `${builds[0]}` selectedLoaderVersion.value = `${builds[0]}`
@@ -371,8 +403,8 @@ watch(
if (loader === 'purpur') { if (loader === 'purpur') {
await fetchPurpurVersions(gameVersion) await fetchPurpurVersions(gameVersion)
if (watchId !== loaderVersionWatchId) return
loaderVersionsLoading.value = false loaderVersionsLoading.value = false
// Auto-select latest build
const builds = purpurVersions.value[gameVersion] const builds = purpurVersions.value[gameVersion]
if (builds?.length) { if (builds?.length) {
selectedLoaderVersion.value = builds[0] selectedLoaderVersion.value = builds[0]
@@ -381,7 +413,18 @@ watch(
} }
await fetchLoaderManifest(loader) await fetchLoaderManifest(loader)
if (watchId !== loaderVersionWatchId) {
debug('watch [loader, gameVersion]: stale execution, skipping', {
watchId,
current: loaderVersionWatchId,
})
return
}
loaderVersionsData.value = getLoaderVersionsForGameVersion(loader, gameVersion) loaderVersionsData.value = getLoaderVersionsForGameVersion(loader, gameVersion)
debug(
'watch [loader, gameVersion]: loaderVersionsData set, count:',
loaderVersionsData.value.length,
)
loaderVersionsLoading.value = false loaderVersionsLoading.value = false
// Auto-select based on loaderVersionType // Auto-select based on loaderVersionType
@@ -395,6 +438,16 @@ watch(
) )
function autoSelectLoaderVersion() { function autoSelectLoaderVersion() {
debug(
'autoSelectLoaderVersion: type:',
loaderVersionType.value,
'dataCount:',
loaderVersionsData.value.length,
'stableCount:',
loaderVersionsData.value.filter((v) => v.stable).length,
'first:',
loaderVersionsData.value[0]?.id,
)
if (loaderVersionType.value === 'stable') { if (loaderVersionType.value === 'stable') {
const stable = loaderVersionsData.value.find((v) => v.stable) const stable = loaderVersionsData.value.find((v) => v.stable)
selectedLoaderVersion.value = stable?.id ?? loaderVersionsData.value[0]?.id ?? null selectedLoaderVersion.value = stable?.id ?? loaderVersionsData.value[0]?.id ?? null
@@ -403,7 +456,7 @@ function autoSelectLoaderVersion() {
} else if (loaderVersionType.value === 'other' && !selectedLoaderVersion.value) { } else if (loaderVersionType.value === 'other' && !selectedLoaderVersion.value) {
selectedLoaderVersion.value = loaderVersionsData.value[0]?.id ?? null selectedLoaderVersion.value = loaderVersionsData.value[0]?.id ?? null
} }
debug('autoSelectLoaderVersion:', selectedLoaderVersion.value, 'type:', loaderVersionType.value) debug('autoSelectLoaderVersion: result:', selectedLoaderVersion.value)
} }
const loaderVersionOptions = computed<ComboboxOption<string>[]>(() => { const loaderVersionOptions = computed<ComboboxOption<string>[]>(() => {