feat: Add /version/{version} redirect (#7357)

feat: Add `/version/{version}` redirect to `{project_type}/{slug}/version/{version}` using global middleware
This commit is contained in:
Blodhgarm
2026-08-31 07:19:03 +00:00
committed by GitHub
parent 66c73755d6
commit 876308516e
2 changed files with 51 additions and 1 deletions
@@ -87,7 +87,7 @@ export default defineNuxtRouteMiddleware(async (to) => {
}
})
async function getProjectMiddlewareClient(route: RouteLocationNormalized) {
export async function getProjectMiddlewareClient(route: RouteLocationNormalized) {
if (import.meta.server) {
const authToken = useCookie('auth-token')
return useServerModrinthClient({ authToken: authToken.value || undefined })
@@ -0,0 +1,50 @@
import { projectQueryOptions } from '~/composables/queries/project.ts'
import { versionQueryOptions } from '~/composables/queries/version.ts'
import { useAppQueryClient } from '~/composables/query-client.ts'
import { getProjectTypeForUrl } from '~/helpers/projects'
import { getProjectMiddlewareClient } from '~/middleware/project.global.ts'
export default defineNuxtRouteMiddleware(async (to) => {
const match = to.path.match(/^\/version\/(\w+)\/?$/)
if (!match) return
const versionId = match[1]
try {
const client = await getProjectMiddlewareClient(to)
const queryClient = useAppQueryClient()
const version = await queryClient.fetchQuery(versionQueryOptions.v3(versionId, client))
if (version) {
const project = await queryClient.fetchQuery(
projectQueryOptions.v3(version.project_id, client),
)
const type =
project.minecraft_server == null
? getProjectTypeForUrl(project.project_types[0], project.loaders)
: 'server'
if (project) {
return navigateTo(
{
name: 'type-project-version-version',
params: {
type: type,
project: project.slug ? project.slug : project.id,
version: version.id,
},
},
{
redirectCode: 302,
replace: true,
},
)
}
}
} catch {
// Project or Version not found moment
}
return createError({ fatal: true, statusCode: 404, statusMessage: 'Version not found' })
})