@@ -1709,3 +1709,51 @@ describe(`handle integrity checks`, () => {
17091709 } ) ;
17101710 } ) ;
17111711} ) ;
1712+
1713+ describe ( `allow range versions in devEngines.packageManager.version when user specifies exact version` , ( ) => {
1714+ for ( const { name, versionRange, userProvidedVersion} of [
1715+ { name : `npm` , versionRange : `^10.7.0` , userProvidedVersion : `6.14.2` } ,
1716+ { name : `yarn` , versionRange : `^2.2.0` , userProvidedVersion : `2.2.2` } ,
1717+ { name : `pnpm` , versionRange : `^5.8.0` , userProvidedVersion : `5.8.0` } ,
1718+ ] ) {
1719+ it ( `should work with ${ name } ` , async ( ) => {
1720+ await xfs . mktempPromise ( async cwd => {
1721+ await xfs . writeJsonPromise ( ppath . join ( cwd , `package.json` as Filename ) , {
1722+ devEngines : {
1723+ packageManager : {
1724+ name,
1725+ version : versionRange ,
1726+ } ,
1727+ } ,
1728+ } ) ;
1729+
1730+ await expect ( runCli ( cwd , [ `${ name } @${ userProvidedVersion } ` , `--version` ] ) ) . resolves . toMatchObject ( {
1731+ exitCode : 0 ,
1732+ stderr : `` ,
1733+ stdout : `${ userProvidedVersion } \n` ,
1734+ } ) ;
1735+ } ) ;
1736+ } ) ;
1737+ }
1738+ } ) ;
1739+
1740+ it ( `should still validate devEngines.packageManager.version format when no user version specified` , async ( ) => {
1741+ await xfs . mktempPromise ( async cwd => {
1742+ // When no user version is specified, range versions in devEngines should still cause error
1743+ await xfs . writeJsonPromise ( ppath . join ( cwd , `package.json` as Filename ) , {
1744+ devEngines : {
1745+ packageManager : {
1746+ name : `npm` ,
1747+ version : `^6.14.2` ,
1748+ } ,
1749+ } ,
1750+ } ) ;
1751+
1752+ // Without user-specified version, should still fail due to range version in devEngines
1753+ await expect ( runCli ( cwd , [ `npm` , `--version` ] ) ) . resolves . toMatchObject ( {
1754+ exitCode : 1 ,
1755+ stderr : expect . stringContaining ( `Invalid package manager specification in package.json (npm@^6.14.2); expected a semver version` ) ,
1756+ stdout : `` ,
1757+ } ) ;
1758+ } ) ;
1759+ } ) ;
0 commit comments