diff --git a/app/composables/useRepositoryUrl.ts b/app/composables/useRepositoryUrl.ts index 6e3b4ee718..b916929600 100644 --- a/app/composables/useRepositoryUrl.ts +++ b/app/composables/useRepositoryUrl.ts @@ -19,8 +19,8 @@ export function useRepositoryUrl( let url = normalizeGitUrl(repo.url) // append `repository.directory` for monorepo packages - if (repo.directory) { - url = joinURL(`${url}/tree/HEAD`, repo.directory) + if (repo.directory && url) { + url = joinURL(url.replace(/\.git$/, ''), `/tree/HEAD`, repo.directory) } return url diff --git a/test/nuxt/composables/use-repository-url.spec.ts b/test/nuxt/composables/use-repository-url.spec.ts new file mode 100644 index 0000000000..9a828d8ebe --- /dev/null +++ b/test/nuxt/composables/use-repository-url.spec.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from 'vitest' + +const fakeRequestedVersion = ( + data: Partial, +): SlimPackument['requestedVersion'] => { + return { + _id: 'any', + _npmVersion: 'idk', + dist: { + shasum: '', + signatures: [], + tarball: '', + }, + name: 'any', + version: '0.0.1', + ...data, + } +} + +describe('useRepositoryUrl', () => { + it('should have valid github repository url', () => { + const test = fakeRequestedVersion({ + repository: { + type: 'git', + url: 'git+https://github.com/nuxt/nuxt.git', + directory: 'packages/nuxt', + }, + }) + + const result = useRepositoryUrl(test) + + expect(result.repositoryUrl.value).toEqual( + 'https://github.com/nuxt/nuxt/tree/HEAD/packages/nuxt', + ) + }) +})