mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-14 03:26:13 -04:00
feat: show available workspace versions on mismatch (#10466)
This commit is contained in:
@@ -217,6 +217,7 @@
|
||||
"proxied",
|
||||
"pwsh",
|
||||
"quux",
|
||||
"rcompare",
|
||||
"redownload",
|
||||
"refclone",
|
||||
"reflattened",
|
||||
|
||||
@@ -71,7 +71,7 @@ test('request package', async () => {
|
||||
})
|
||||
|
||||
const { files } = await pkgResponse.fetching!()
|
||||
expect(Array.from(files.filesMap.keys()).sort()).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort())
|
||||
expect(Array.from(files.filesMap.keys()).sort((a, b) => a.localeCompare(b))).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort((a, b) => a.localeCompare(b)))
|
||||
expect(files.resolvedFrom).toBe('remote')
|
||||
})
|
||||
|
||||
@@ -383,7 +383,7 @@ test('fetchPackageToStore()', async () => {
|
||||
|
||||
const { files, bundledManifest } = await fetchResult.fetching()
|
||||
expect(bundledManifest).toBeTruthy() // we always read the bundled manifest
|
||||
expect(Array.from(files.filesMap.keys()).sort()).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort())
|
||||
expect(Array.from(files.filesMap.keys()).sort((a, b) => a.localeCompare(b))).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort((a, b) => a.localeCompare(b)))
|
||||
expect(files.resolvedFrom).toBe('remote')
|
||||
|
||||
const indexFile = loadJsonFileSync<PackageFilesIndex>(fetchResult.filesIndexFile)
|
||||
@@ -473,7 +473,7 @@ test('fetchPackageToStore() concurrency check', async () => {
|
||||
|
||||
ino1 = fs.statSync(files.filesMap.get('package.json') as string).ino
|
||||
|
||||
expect(Array.from(files.filesMap.keys()).sort()).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort())
|
||||
expect(Array.from(files.filesMap.keys()).sort((a, b) => a.localeCompare(b))).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort((a, b) => a.localeCompare(b)))
|
||||
expect(files.resolvedFrom).toBe('remote')
|
||||
}
|
||||
|
||||
@@ -483,7 +483,7 @@ test('fetchPackageToStore() concurrency check', async () => {
|
||||
|
||||
ino2 = fs.statSync(files.filesMap.get('package.json') as string).ino
|
||||
|
||||
expect(Array.from(files.filesMap.keys()).sort()).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort())
|
||||
expect(Array.from(files.filesMap.keys()).sort((a, b) => a.localeCompare(b))).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort((a, b) => a.localeCompare(b)))
|
||||
expect(files.resolvedFrom).toBe('remote')
|
||||
}
|
||||
|
||||
@@ -551,7 +551,7 @@ test('fetchPackageToStore() does not cache errors', async () => {
|
||||
},
|
||||
})
|
||||
const { files } = await fetchResult.fetching()
|
||||
expect(Array.from(files.filesMap.keys()).sort()).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort())
|
||||
expect(Array.from(files.filesMap.keys()).sort((a, b) => a.localeCompare(b))).toStrictEqual(['package.json', 'index.js', 'license', 'readme.md'].sort((a, b) => a.localeCompare(b)))
|
||||
expect(files.resolvedFrom).toBe('remote')
|
||||
|
||||
expect(nock.isDone()).toBeTruthy()
|
||||
|
||||
@@ -639,9 +639,16 @@ function tryResolveFromWorkspacePackages (
|
||||
opts.update ? { name: spec.name, fetchSpec: '*', type: 'range' } : spec
|
||||
)
|
||||
if (!localVersion) {
|
||||
const availableVersions = Array.from(workspacePkgsMatchingName.keys()).sort((a, b) => semver.rcompare(a, b))
|
||||
throw new PnpmError(
|
||||
'NO_MATCHING_VERSION_INSIDE_WORKSPACE',
|
||||
`In ${path.relative(process.cwd(), opts.projectDir)}: No matching version found for ${opts.wantedDependency.alias ?? ''}@${opts.wantedDependency.bareSpecifier ?? ''} inside the workspace`
|
||||
`In ${path.relative(process.cwd(), opts.projectDir)}: No matching version found for ${opts.wantedDependency.alias ?? ''}@${opts.wantedDependency.bareSpecifier ?? ''} inside the workspace` +
|
||||
(availableVersions.length ? `. Available versions: ${availableVersions.join(', ')}` : ''),
|
||||
availableVersions.length
|
||||
? {
|
||||
hint: `Available workspace versions for "${spec.name}": ${availableVersions.join(', ')}`,
|
||||
}
|
||||
: undefined
|
||||
)
|
||||
}
|
||||
return resolveFromLocalPackage(workspacePkgsMatchingName.get(localVersion)!, spec, opts)
|
||||
|
||||
@@ -1767,7 +1767,7 @@ test('workspace protocol: resolution fails if there is no matching local package
|
||||
|
||||
expect(err).toBeTruthy()
|
||||
expect(err.code).toBe('ERR_PNPM_NO_MATCHING_VERSION_INSIDE_WORKSPACE')
|
||||
expect(err.message).toBe(`In ${path.relative(process.cwd(), projectDir)}: No matching version found for is-positive@workspace:^3.0.0 inside the workspace`)
|
||||
expect(err.message).toBe(`In ${path.relative(process.cwd(), projectDir)}: No matching version found for is-positive@workspace:^3.0.0 inside the workspace. Available versions: 2.0.0`)
|
||||
})
|
||||
|
||||
test('workspace protocol: resolution fails if there are no local packages', async () => {
|
||||
|
||||
Reference in New Issue
Block a user