Skip to content

Commit fa60e54

Browse files
committed
fix: correct links to deps versions
1 parent c3090e0 commit fa60e54

1 file changed

Lines changed: 46 additions & 29 deletions

File tree

app/components/Package/Dependencies.vue

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
22
import { SEVERITY_TEXT_COLORS, getHighestSeverity } from '#shared/utils/severity'
33
import { getOutdatedTooltip, getVersionClass } from '~/utils/npm/outdated-dependencies'
4+
import { clean } from 'semver'
45
56
const props = defineProps<{
67
packageName: string
@@ -40,30 +41,40 @@ const optionalDepsExpanded = shallowRef(false)
4041
// Sort dependencies alphabetically
4142
const sortedDependencies = computed(() => {
4243
if (!props.dependencies) return []
43-
return Object.entries(props.dependencies).sort(([a], [b]) => a.localeCompare(b))
44+
const cleanedEntries = Object.entries(props.dependencies).map(([name, version]) => ({
45+
name,
46+
origVersion: version,
47+
cleanVersion: clean(version),
48+
}))
49+
return cleanedEntries.sort((a, b) => a.name.localeCompare(b.name))
4450
})
4551
4652
// Sort peer dependencies alphabetically, with required first then optional
4753
const sortedPeerDependencies = computed(() => {
4854
if (!props.peerDependencies) return []
4955
50-
return Object.entries(props.peerDependencies)
51-
.map(([name, version]) => ({
52-
name,
53-
version,
54-
optional: props.peerDependenciesMeta?.[name]?.optional ?? false,
55-
}))
56-
.sort((a, b) => {
57-
// Required first, then optional
58-
if (a.optional !== b.optional) return a.optional ? 1 : -1
59-
return a.name.localeCompare(b.name)
60-
})
56+
const cleanedEntries = Object.entries(props.peerDependencies).map(([name, version]) => ({
57+
name,
58+
origVersion: version,
59+
cleanVersion: clean(version),
60+
optional: props.peerDependenciesMeta?.[name]?.optional ?? false,
61+
}))
62+
return cleanedEntries.sort((a, b) => {
63+
// Required first, then optional
64+
if (a.optional !== b.optional) return a.optional ? 1 : -1
65+
return a.name.localeCompare(b.name)
66+
})
6167
})
6268
6369
// Sort optional dependencies alphabetically
6470
const sortedOptionalDependencies = computed(() => {
6571
if (!props.optionalDependencies) return []
66-
return Object.entries(props.optionalDependencies).sort(([a], [b]) => a.localeCompare(b))
72+
const cleanedEntries = Object.entries(props.optionalDependencies).map(([name, version]) => ({
73+
name,
74+
origVersion: version,
75+
cleanVersion: clean(version),
76+
}))
77+
return cleanedEntries.sort((a, b) => a.name.localeCompare(b.name))
6778
})
6879
6980
const numberFormatter = useNumberFormatter()
@@ -87,7 +98,10 @@ const numberFormatter = useNumberFormatter()
8798
>
8899
<ul class="px-1 space-y-1 list-none m-0" :aria-label="$t('package.dependencies.list_label')">
89100
<li
90-
v-for="[dep, version] in sortedDependencies.slice(0, depsExpanded ? undefined : 10)"
101+
v-for="{ name: dep, origVersion, cleanVersion } in sortedDependencies.slice(
102+
0,
103+
depsExpanded ? undefined : 10,
104+
)"
91105
:key="dep"
92106
class="flex items-center justify-between py-1 text-sm gap-2"
93107
>
@@ -124,12 +138,12 @@ const numberFormatter = useNumberFormatter()
124138
<span class="sr-only">{{ $t('package.deprecated.label') }}</span>
125139
</LinkBase>
126140
<LinkBase
127-
:to="packageRoute(dep, version)"
141+
:to="packageRoute(dep, cleanVersion)"
128142
class="block truncate"
129143
:class="getVersionClass(outdatedDeps[dep])"
130-
:title="outdatedDeps[dep] ? getOutdatedTooltip(outdatedDeps[dep], $t) : version"
144+
:title="outdatedDeps[dep] ? getOutdatedTooltip(outdatedDeps[dep], $t) : origVersion"
131145
>
132-
{{ version }}
146+
{{ origVersion }}
133147
</LinkBase>
134148
<span v-if="outdatedDeps[dep]" class="sr-only">
135149
({{ getOutdatedTooltip(outdatedDeps[dep], $t) }})
@@ -173,25 +187,28 @@ const numberFormatter = useNumberFormatter()
173187
:aria-label="$t('package.peer_dependencies.list_label')"
174188
>
175189
<li
176-
v-for="peer in sortedPeerDependencies.slice(0, peerDepsExpanded ? undefined : 10)"
177-
:key="peer.name"
190+
v-for="{ name: dep, optional, origVersion, cleanVersion } in sortedPeerDependencies.slice(
191+
0,
192+
peerDepsExpanded ? undefined : 10,
193+
)"
194+
:key="dep"
178195
class="flex items-center justify-between py-1 text-sm gap-1 min-w-0"
179196
>
180197
<div class="flex items-center gap-1 min-w-0 flex-1">
181-
<LinkBase :to="packageRoute(peer.name)" class="block truncate" dir="ltr">
182-
{{ peer.name }}
198+
<LinkBase :to="packageRoute(dep)" class="block truncate" dir="ltr">
199+
{{ dep }}
183200
</LinkBase>
184-
<TagStatic v-if="peer.optional" :title="$t('package.dependencies.optional')">
201+
<TagStatic v-if="optional" :title="$t('package.dependencies.optional')">
185202
{{ $t('package.dependencies.optional') }}
186203
</TagStatic>
187204
</div>
188205
<LinkBase
189-
:to="packageRoute(peer.name, peer.version)"
206+
:to="packageRoute(dep, cleanVersion)"
190207
class="block truncate max-w-[40%]"
191-
:title="peer.version"
208+
:title="origVersion"
192209
dir="ltr"
193210
>
194-
{{ peer.version }}
211+
{{ origVersion }}
195212
</LinkBase>
196213
</li>
197214
</ul>
@@ -232,7 +249,7 @@ const numberFormatter = useNumberFormatter()
232249
:aria-label="$t('package.optional_dependencies.list_label')"
233250
>
234251
<li
235-
v-for="[dep, version] in sortedOptionalDependencies.slice(
252+
v-for="{ name: dep, origVersion, cleanVersion } in sortedOptionalDependencies.slice(
236253
0,
237254
optionalDepsExpanded ? undefined : 10,
238255
)"
@@ -243,12 +260,12 @@ const numberFormatter = useNumberFormatter()
243260
{{ dep }}
244261
</LinkBase>
245262
<LinkBase
246-
:to="packageRoute(dep, version)"
263+
:to="packageRoute(dep, cleanVersion)"
247264
class="block truncate"
248-
:title="version"
265+
:title="origVersion"
249266
dir="ltr"
250267
>
251-
{{ version }}
268+
{{ origVersion }}
252269
</LinkBase>
253270
</li>
254271
</ul>

0 commit comments

Comments
 (0)