@@ -4,41 +4,28 @@ import { packageRoute } from '~/utils/router'
44
55definePageMeta({
66 name: 'diff',
7+ path: '/diff/:org?/:packageName/v/:versionRange',
8+ alias: ['/diff/:packageName/v/:versionRange'],
79})
810
911const route = useRoute('diff')
1012
11- // Parse package name and version range from URL
12- // Patterns:
13- // - /diff/nuxt/v/4.0.0...4.2.0
14- // - /diff/@nuxt/kit/v/1.0.0...2.0.0
15- const parsedRoute = computed(() => {
16- const segments = route.params.path || []
17-
18- // Find the /v/ separator
19- const vIndex = segments.indexOf('v')
20- if (vIndex === -1 || vIndex >= segments.length - 1) {
21- return { packageName: segments.join('/'), range: null }
22- }
23-
24- const packageName = segments.slice(0, vIndex).join('/')
25- const rangeStr = segments[vIndex + 1] ?? ''
26-
27- // Parse version range (from...to)
28- const parts = rangeStr.split('...')
29- if (parts.length !== 2) {
30- return { packageName, range: null }
31- }
13+ // Derive package name from typed route params
14+ // /diff/nuxt/v/4.0.0...4.2.0 → org: undefined, packageName: "nuxt"
15+ // /diff/@nuxt/kit/v/1.0.0...2.0.0 → org: "@nuxt", packageName: "kit"
16+ const packageName = computed(() =>
17+ route.params.org ? `${route.params.org}/${route.params.packageName}` : route.params.packageName,
18+ )
3219
33- return {
34- packageName,
35- range: { from: parts[0]!, to: parts[1]! },
36- }
20+ // Parse version range from the typed param (from...to)
21+ const versionRange = computed(() => {
22+ const parts = route.params.versionRange.split('...')
23+ if (parts.length !== 2) return null
24+ return { from: parts[0]!, to: parts[1]! }
3725})
3826
39- const packageName = computed(() => parsedRoute.value.packageName)
40- const fromVersion = computed(() => parsedRoute.value.range?.from ?? '')
41- const toVersion = computed(() => parsedRoute.value.range?.to ?? '')
27+ const fromVersion = computed(() => versionRange.value?.from ?? '')
28+ const toVersion = computed(() => versionRange.value?.to ?? '')
4229
4330const router = useRouter()
4431const initializedFromQuery = ref(false)
@@ -47,7 +34,7 @@ const { data: pkg } = usePackage(packageName)
4734const { data: compare, status: compareStatus } = useFetch<CompareResponse>(
4835 () => `/api/registry/compare/${packageName.value}/v/${fromVersion.value}...${toVersion.value}`,
4936 {
50- immediate: !!parsedRoute .value.range ,
37+ immediate: !!versionRange .value,
5138 timeout: 15000,
5239 },
5340)
@@ -173,7 +160,7 @@ useSeoMeta({
173160 </header>
174161
175162 <!-- Error: invalid route -->
176- <div v-if="!parsedRoute.range " class="container py-20 text-center">
163+ <div v-if="!versionRange " class="container py-20 text-center">
177164 <p class="text-fg-muted mb-4">
178165 Invalid comparison URL. Use format: /diff/package/v/from...to
179166 </p>
0 commit comments