Skip to content

shouldUpdateDependencyBasedOnConfig is called with workspace:... depVersionRanges #1886

@benjie

Description

@benjie

I'm using explicit workspace:^1.2.3-style versions for peerDependencies so as to comply with npm's recommendation to keep peerDependencies ranges as broad as possible - this way I can manually bump them when the change becomes significant.

However; here:

if (
!depCurrentVersion ||
depCurrentVersion.startsWith("file:") ||
depCurrentVersion.startsWith("link:") ||
!shouldUpdateDependencyBasedOnConfig(
{ version, type },
{
depVersionRange: depCurrentVersion,
depType,
},
{
minReleaseType: updateInternalDependencies,
onlyUpdatePeerDependentsWhenOutOfRange,
}
)
) {
continue;
}
const usesWorkspaceRange = depCurrentVersion.startsWith("workspace:");

The raw range (workspace:^1.2.3) is passed to shouldUpdateDependencyBasedOnConfig; which in turn passes it to semver:

): boolean {
if (!semverSatisfies(release.version, depVersionRange)) {
// Dependencies leaving semver range should always be updated
return true;
}

Semver seems to always see this as "unsatisfied" (presumably because it's "invalid").

You have explicit checks later for workspace:^-style (implicit) ranges:

if (usesWorkspaceRange) {
const workspaceDepVersion = depCurrentVersion.replace(
/^workspace:/,
""
);
if (
workspaceDepVersion === "*" ||
workspaceDepVersion === "^" ||
workspaceDepVersion === "~"
) {
continue;
}
depCurrentVersion = workspaceDepVersion;
}

so I don't think this is intentional.

I've worked around this by having shouldUpdateDependencyBasedOnConfig strip workspace: prefix before running semver comparison, but I'm not certain this is the right fix:

https://github.com/graphile/crystal/blob/2807c8e211b97302299029b88ecb5df7426994b4/.yarn/patches/%40changesets-apply-release-plan-npm-7.0.13-14603bf9e7.patch#L8-L16

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions