refactor!: stricter Resolution type (#9582)

* refactor!: stricter `Resolution` type

* docs(changeset): don't leave it out

* fix: test

* fix: test

* refactor: replace `as` with `!`
This commit is contained in:
Khải authored and GitHub committed 2025-05-30 09:17:12 +02:00
1 parent e49b782168
commit 6acf819c69
5 files changed
+15 -14

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
---
"@pnpm/resolver-base": major
"@pnpm/pick-fetcher": patch
---
Remove the blanket variant from the `Resolution` type, making it stricter and more useful.
+2 -2
View File
@@ -2,7 +2,7 @@ import type { Resolution } from '@pnpm/resolver-base'
import type { Fetchers, FetchFunction, DirectoryFetcher, GitFetcher } from '@pnpm/fetcher-base'
export function pickFetcher (fetcherByHostingType: Partial<Fetchers>, resolution: Resolution): FetchFunction | DirectoryFetcher | GitFetcher {
let fetcherType = resolution.type
let fetcherType: keyof Fetchers | undefined = resolution.type
if (resolution.type == null) {
if (resolution.tarball.startsWith('file:')) {
@@ -14,7 +14,7 @@ export function pickFetcher (fetcherByHostingType: Partial<Fetchers>, resolution
}
}
const fetch = fetcherByHostingType[fetcherType! as keyof Fetchers]
const fetch = fetcherByHostingType[fetcherType!]
if (!fetch) {
throw new Error(`Fetching for dependency type "${resolution.type ?? 'undefined'}" is not supported`)
+1 -1
View File
@@ -24,6 +24,6 @@ test.each([
test('should fail to pick fetcher if the type is not defined', () => {
expect(() => {
pickFetcher({}, { type: 'directory' })
pickFetcher({}, { type: 'directory', directory: expect.anything() })
}).toThrow('Fetching for dependency type "directory" is not supported')
})
+3 -4
View File
@@ -33,10 +33,9 @@ export interface GitResolution {
}
export type Resolution =
TarballResolution |
DirectoryResolution |
GitResolution |
({ type: string } & object)
| TarballResolution
| DirectoryResolution
| GitResolution
export interface ResolveResult {
id: PkgResolutionId
+3 -7
View File
@@ -1,5 +1,5 @@
import { type ResolveFunction } from '@pnpm/client'
import { type PkgResolutionId } from '@pnpm/resolver-base'
import { type PkgResolutionId, type TarballResolution } from '@pnpm/resolver-base'
import { getManifest } from '../lib/createManifestGetter'
test('getManifest()', async () => {
@@ -17,9 +17,7 @@ test('getManifest()', async () => {
name: 'foo',
version: '1.0.0',
},
resolution: {
type: 'tarball',
},
resolution: {} as TarballResolution,
resolvedVia: 'npm-registry',
}
}
@@ -37,9 +35,7 @@ test('getManifest()', async () => {
name: 'foo',
version: '2.0.0',
},
resolution: {
type: 'tarball',
},
resolution: {} as TarballResolution,
resolvedVia: 'npm-registry',
}
}