Skip to content

Commit b00c6be

Browse files
authored
chore(constraints): allow exceptions for dependency-range consistency (#4772)
1 parent 6ebd3c2 commit b00c6be

File tree

1 file changed

+47
-12
lines changed

1 file changed

+47
-12
lines changed

yarn.config.cjs

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,35 @@ function expectControllerDependenciesListedAsPeerDependencies(
714714
}
715715
}
716716

717+
/**
718+
* Filter out dependency ranges which are not to be considered in `expectConsistentDependenciesAndDevDependencies`.
719+
*
720+
* @param {string} dependencyIdent - The dependency being filtered for
721+
* @param {Map<string, Dependency>} dependenciesByRange - Dependencies by range
722+
* @returns {Map<string, Dependency>} The resulting map.
723+
*/
724+
function getInconsistentDependenciesAndDevDependencies(
725+
dependencyIdent,
726+
dependenciesByRange,
727+
) {
728+
const ALLOWED_INCONSISTENT_DEPENDENCIES = Object.entries({
729+
// '@metamask/foo': ['^1.0.0'],
730+
});
731+
for (const [
732+
allowedPackage,
733+
ignoredRange,
734+
] of ALLOWED_INCONSISTENT_DEPENDENCIES) {
735+
if (allowedPackage === dependencyIdent) {
736+
return new Map(
737+
Object.entries(dependenciesByRange).filter(
738+
([range]) => !ignoredRange.includes(range),
739+
),
740+
);
741+
}
742+
}
743+
return dependenciesByRange;
744+
}
745+
717746
/**
718747
* Expect that all version ranges in `dependencies` and `devDependencies` for
719748
* the same dependency across the entire monorepo are the same. As it is
@@ -732,18 +761,24 @@ function expectConsistentDependenciesAndDevDependencies(Yarn) {
732761
dependencyIdent,
733762
dependenciesByRange,
734763
] of nonPeerDependenciesByIdent.entries()) {
735-
const dependencyRanges = [...dependenciesByRange.keys()].sort();
736-
if (dependenciesByRange.size > 1) {
737-
for (const dependencies of dependenciesByRange.values()) {
738-
for (const dependency of dependencies) {
739-
dependency.error(
740-
`Expected version range for ${dependencyIdent} (in ${
741-
dependency.type
742-
}) to be consistent across monorepo. Pick one: ${inspect(
743-
dependencyRanges,
744-
)}`,
745-
);
746-
}
764+
if (dependenciesByRange.size <= 1) {
765+
continue;
766+
}
767+
const dependenciesToConsider =
768+
getInconsistentDependenciesAndDevDependencies(
769+
dependencyIdent,
770+
dependenciesByRange,
771+
);
772+
const dependencyRanges = [...dependenciesToConsider.keys()].sort();
773+
for (const dependencies of dependenciesToConsider.values()) {
774+
for (const dependency of dependencies) {
775+
dependency.error(
776+
`Expected version range for ${dependencyIdent} (in ${
777+
dependency.type
778+
}) to be consistent across monorepo. Pick one: ${inspect(
779+
dependencyRanges,
780+
)}`,
781+
);
747782
}
748783
}
749784
}

0 commit comments

Comments
 (0)