Skip to content

Commit 5db5dc6

Browse files
refactor: move duplicated repositoryUrl in composable (#2060)
1 parent adb3959 commit 5db5dc6

File tree

3 files changed

+34
-32
lines changed

3 files changed

+34
-32
lines changed

app/components/OgImage/Package.vue

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
<script setup lang="ts">
2-
import { joinURL } from 'ufo'
3-
42
const props = withDefaults(
53
defineProps<{
64
name: string
@@ -38,16 +36,7 @@ const { data: pkg, refresh: refreshPkg } = usePackage(
3836
)
3937
const displayVersion = computed(() => pkg.value?.requestedVersion ?? null)
4038
41-
const repositoryUrl = computed(() => {
42-
const repo = displayVersion.value?.repository
43-
if (!repo?.url) return null
44-
let url = normalizeGitUrl(repo.url)
45-
// append `repository.directory` for monorepo packages
46-
if (repo.directory) {
47-
url = joinURL(`${url}/tree/HEAD`, repo.directory)
48-
}
49-
return url
50-
})
39+
const { repositoryUrl } = useRepositoryUrl(displayVersion)
5140
5241
const { data: likes, refresh: refreshLikes } = useFetch(() => `/api/social/likes/${name.value}`, {
5342
default: () => ({ totalLikes: 0, userHasLiked: false }),
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { joinURL } from 'ufo'
2+
3+
type RequestedVersion = SlimPackument['requestedVersion'] | null
4+
5+
type UseRepositoryUrlReturn = {
6+
repositoryUrl: ComputedRef<string | null>
7+
}
8+
9+
export function useRepositoryUrl(
10+
requestedVersion: MaybeRefOrGetter<RequestedVersion>,
11+
): UseRepositoryUrlReturn {
12+
const repositoryUrl = computed<string | null>(() => {
13+
const repo = toValue(requestedVersion)?.repository
14+
15+
if (!repo?.url) {
16+
return null
17+
}
18+
19+
let url = normalizeGitUrl(repo.url)
20+
21+
// append `repository.directory` for monorepo packages
22+
if (repo.directory) {
23+
url = joinURL(`${url}/tree/HEAD`, repo.directory)
24+
}
25+
26+
return url
27+
})
28+
29+
return {
30+
repositoryUrl,
31+
}
32+
}

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

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import type { JsrPackageInfo } from '#shared/types/jsr'
33
import type { IconClass } from '~/types'
44
import { assertValidPackageName } from '#shared/utils/npm'
5-
import { joinURL } from 'ufo'
65
import { areUrlsEquivalent } from '#shared/utils/url'
76
import { getDependencyCount } from '~/utils/npm/dependency-count'
87
import { detectPublishSecurityDowngradeForVersion } from '~/utils/publish-security'
@@ -389,16 +388,7 @@ const totalDepsCount = computed(() => {
389388
return null
390389
})
391390
392-
const repositoryUrl = computed(() => {
393-
const repo = displayVersion.value?.repository
394-
if (!repo?.url) return null
395-
let url = normalizeGitUrl(repo.url)
396-
// append `repository.directory` for monorepo packages
397-
if (repo.directory) {
398-
url = joinURL(`${url}/tree/HEAD`, repo.directory)
399-
}
400-
return url
401-
})
391+
const { repositoryUrl } = useRepositoryUrl(displayVersion)
402392
403393
const { meta: repoMeta, repoRef, stars, starsLink, forks, forksLink } = useRepoMeta(repositoryUrl)
404394
@@ -444,15 +434,6 @@ const fundingUrl = computed(() => {
444434
return typeof funding === 'string' ? funding : funding.url
445435
})
446436
447-
function normalizeGitUrl(url: string): string {
448-
return url
449-
.replace(/^git\+/, '')
450-
.replace(/^git:\/\//, 'https://')
451-
.replace(/\.git$/, '')
452-
.replace(/^ssh:\/\/git@github\.com/, 'https://github.com')
453-
.replace(/^git@github\.com:/, 'https://github.com/')
454-
}
455-
456437
// Check if a version has provenance/attestations
457438
// The dist object may have attestations that aren't in the base type
458439
function hasProvenance(version: PackumentVersion | null): boolean {

0 commit comments

Comments
 (0)