diff --git a/.changeset/fair-ducks-mix.md b/.changeset/fair-ducks-mix.md new file mode 100644 index 0000000000..7f585d2ba2 --- /dev/null +++ b/.changeset/fair-ducks-mix.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +"pnpm": patch +--- + +Allow `workspace:` and `catalog:` to be part of wider version range in `peerDependencies`. diff --git a/pkg-manager/resolve-dependencies/src/validatePeerDependencies.ts b/pkg-manager/resolve-dependencies/src/validatePeerDependencies.ts index 60acd81d71..301d56de9f 100644 --- a/pkg-manager/resolve-dependencies/src/validatePeerDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/validatePeerDependencies.ts @@ -25,5 +25,6 @@ export function validatePeerDependencies (project: ProjectToValidate): void { } function isValidPeerVersion (version: string): boolean { - return typeof validRange(version) === 'string' || version.startsWith('workspace:') || version.startsWith('catalog:') + // we use `includes` instead of `startsWith` because `workspace:*` and `catalog:*` could be a part of a wider version range expression + return typeof validRange(version) === 'string' || version.includes('workspace:') || version.includes('catalog:') } diff --git a/pkg-manager/resolve-dependencies/test/validatePeerDependencies.test.ts b/pkg-manager/resolve-dependencies/test/validatePeerDependencies.test.ts index e07c0725c2..accf9ba534 100644 --- a/pkg-manager/resolve-dependencies/test/validatePeerDependencies.test.ts +++ b/pkg-manager/resolve-dependencies/test/validatePeerDependencies.test.ts @@ -8,6 +8,7 @@ test('accepts valid specifications that make sense for peerDependencies', () => 'semver-range': '>=1.2.3 || ^3.2.1', 'workspace-scheme': 'workspace:^', 'catalog-scheme': 'catalog:', + 'combine-all': '>=1.2.3 || ^3.2.1 || workspace:^ || catalog:', }, }, })