@@ -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