Skip to content

Commit ec54f6e

Browse files
committed
refactor: use typed routes for diff + update icon name
1 parent 0167de8 commit ec54f6e

2 files changed

Lines changed: 20 additions & 36 deletions

File tree

app/pages/diff/[...path].vue renamed to app/pages/diff/[[org]]/[packageName]/v/[versionRange].vue

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,41 +4,28 @@ import { packageRoute } from '~/utils/router'
44

55
definePageMeta({
66
name: 'diff',
7+
path: '/diff/:org?/:packageName/v/:versionRange',
8+
alias: ['/diff/:packageName/v/:versionRange'],
79
})
810

911
const 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

4330
const router = useRouter()
4431
const initializedFromQuery = ref(false)
@@ -47,7 +34,7 @@ const { data: pkg } = usePackage(packageName)
4734
const { 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>

app/pages/package/[[org]]/[name].vue

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@ const showSkeleton = shallowRef(false)
884884
"
885885
variant="button-secondary"
886886
:to="`/diff/${pkg.name}/v/${displayVersion.version}...${latestVersion.version}`"
887-
classicon="i-carbon-text-align-mixed"
887+
classicon="i-carbon:text-align-mixed"
888888
>
889889
{{ $t('compare.compare_versions') }}
890890
</LinkBase>
@@ -1026,11 +1026,8 @@ const showSkeleton = shallowRef(false)
10261026
{{ $t('package.links.docs') }}
10271027
</LinkBase>
10281028
</li>
1029-
<li v-if="resolvedVersion" class="sm:hidden">
1030-
<LinkBase
1031-
:to="{ name: 'code', params: { path: [pkg.name, 'v', resolvedVersion] } }"
1032-
classicon="i-carbon:code"
1033-
>
1029+
<li v-if="resolvedVersion && codeLink" class="sm:hidden">
1030+
<LinkBase :to="codeLink" classicon="i-carbon:code">
10341031
{{ $t('package.links.code') }}
10351032
</LinkBase>
10361033
</li>

0 commit comments

Comments
 (0)