feat: respect pnpm minimumReleaseAge from pnpm-workspace.yaml

When invoked as the pnpm/pnpx shim, walk up from cwd looking for
pnpm-workspace.yaml (or a pnpm field in package.json) and use its
minimumReleaseAge and minimumReleaseAgeExclude as the floor and
exclusion list. Existing CLI args, env vars, and ~/.safe-chain/config.json
still override, so the project's pnpm config can act as a single source
of truth without forcing users to duplicate settings across two systems.

Fixes #460

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ethan Setnik 2026-05-15 17:39:00 -04:00
parent 65a8075b0e
commit 8ac7c722b8
No known key found for this signature in database
GPG key ID: 0D4CC215CFFBCECB
7 changed files with 906 additions and 3 deletions

View file

@ -0,0 +1,23 @@
/**
* Tracks the package manager name (e.g. "pnpm", "npm", "yarn") that this
* invocation is shimming. Stored as a small standalone module so that
* lightweight config readers can branch on it without transitively importing
* the heavy package-manager creator graph.
*/
/** @type {{name: string | null}} */
const state = { name: null };
/**
* @param {string | null} name
*/
export function setPackageManagerName(name) {
state.name = name;
}
/**
* @returns {string | null}
*/
export function getPackageManagerName() {
return state.name;
}