diff --git a/.changeset/fair-nights-grow.md b/.changeset/fair-nights-grow.md new file mode 100644 index 0000000000..cc7ed2774d --- /dev/null +++ b/.changeset/fair-nights-grow.md @@ -0,0 +1,8 @@ +--- +"@pnpm/resolve-dependencies": patch +"@pnpm/npm-resolver": patch +"@pnpm/default-reporter": patch +"@pnpm/outdated": patch +--- + +Don't silently skip an optional dependency if it cannot be resolved from a version that satisfies the `minimumReleaseAge` setting [#10270](https://github.com/pnpm/pnpm/issues/10270). diff --git a/.changeset/flat-clowns-type.md b/.changeset/flat-clowns-type.md new file mode 100644 index 0000000000..a06e94c7d9 --- /dev/null +++ b/.changeset/flat-clowns-type.md @@ -0,0 +1,5 @@ +--- +"@pnpm/npm-resolver": major +--- + +Changed the error code for no matching version that satisfies the maturity configuration. diff --git a/cli/default-reporter/src/reportError.ts b/cli/default-reporter/src/reportError.ts index a83892cfe6..8b2c053462 100644 --- a/cli/default-reporter/src/reportError.ts +++ b/cli/default-reporter/src/reportError.ts @@ -70,6 +70,7 @@ function getErrorInfo (logObj: Log, config?: Config): ErrorInfo | null { case 'ERR_PNPM_MISSING_TIME': return { title: err.message, body: 'If you cannot fix this registry issue, then set "resolution-mode" to "highest".' } case 'ERR_PNPM_NO_MATCHING_VERSION': + case 'ERR_PNPM_NO_MATURE_MATCHING_VERSION': return formatNoMatchingVersion(err, logObj as unknown as { packageMeta: PackageMeta, immatureVersion?: string }) case 'ERR_PNPM_RECURSIVE_FAIL': return formatRecursiveCommandSummary(logObj as any) // eslint-disable-line @typescript-eslint/no-explicit-any diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts index 45ba0a7040..579545b62e 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts @@ -1359,7 +1359,7 @@ async function resolveDependency ( bareSpecifier: wantedDependency.bareSpecifier, version: wantedDependency.alias ? wantedDependency.bareSpecifier : undefined, } - if (wantedDependency.optional && err.code !== 'ERR_PNPM_TRUST_DOWNGRADE') { + if (wantedDependency.optional && err.code !== 'ERR_PNPM_TRUST_DOWNGRADE' && err.code !== 'ERR_PNPM_NO_MATURE_MATCHING_VERSION') { skippedOptionalDependencyLogger.debug({ details: err.toString(), package: wantedDependencyDetails, diff --git a/resolving/npm-resolver/src/index.ts b/resolving/npm-resolver/src/index.ts index ad1a8cf2a0..ebd44ea045 100644 --- a/resolving/npm-resolver/src/index.ts +++ b/resolving/npm-resolver/src/index.ts @@ -73,7 +73,7 @@ export class NoMatchingVersionError extends PnpmError { } else { errorMessage = `No matching version found for ${dep} while fetching it from ${opts.registry}` } - super('NO_MATCHING_VERSION', errorMessage) + super(opts.publishedBy ? 'NO_MATURE_MATCHING_VERSION' : 'NO_MATCHING_VERSION', errorMessage) this.packageMeta = opts.packageMeta this.immatureVersion = opts.immatureVersion } diff --git a/reviewing/outdated/src/createManifestGetter.ts b/reviewing/outdated/src/createManifestGetter.ts index 483de32856..c0a8dd263d 100644 --- a/reviewing/outdated/src/createManifestGetter.ts +++ b/reviewing/outdated/src/createManifestGetter.ts @@ -63,7 +63,7 @@ export async function getManifest ( }) return resolution?.manifest ?? null } catch (err) { - if ((err as { code?: string }).code === 'ERR_PNPM_NO_MATCHING_VERSION' && opts.publishedBy) { + if ((err as { code?: string }).code === 'ERR_PNPM_NO_MATURE_MATCHING_VERSION' && opts.publishedBy) { // No versions found that meet the minimumReleaseAge requirement return null } diff --git a/reviewing/outdated/test/getManifest.spec.ts b/reviewing/outdated/test/getManifest.spec.ts index 623901fa3c..bbb378652b 100644 --- a/reviewing/outdated/test/getManifest.spec.ts +++ b/reviewing/outdated/test/getManifest.spec.ts @@ -62,7 +62,7 @@ test('getManifest() with minimumReleaseAge filters latest when too new', async ( // Simulate latest version being too new const error = new Error('No matching version found') as Error & { code?: string } - error.code = 'ERR_PNPM_NO_MATCHING_VERSION' + error.code = 'ERR_PNPM_NO_MATURE_MATCHING_VERSION' throw error }) @@ -109,7 +109,7 @@ test('getManifest() handles NO_MATCHING_VERSION error gracefully', async () => { const resolve: ResolveFunction = jest.fn(async function () { const error = new Error('No matching version found') as Error & { code?: string } - error.code = 'ERR_PNPM_NO_MATCHING_VERSION' + error.code = 'ERR_PNPM_NO_MATURE_MATCHING_VERSION' throw error })