@@ -676,35 +676,35 @@ async function addOverrides(
676
676
if ( spinner ) {
677
677
spinner . text = `Adding overrides${ workspaceName ? ` to ${ workspaceName } ` : '' } ...`
678
678
}
679
- const depAliasMap = new Map < string , { id : string ; version : string } > ( )
679
+ const depAliasMap = new Map < string , string > ( )
680
680
// Chunk package names to process them in parallel 3 at a time.
681
681
await pEach ( manifestEntries , 3 , async ( { 1 : data } ) => {
682
- const { name : regPkgName , package : origPkgName , version } = data
682
+ const { name : sockRegPkgName , package : origPkgName , version } = data
683
683
const major = semver . major ( version )
684
684
for ( const { 1 : depObj } of depEntries ) {
685
- let pkgSpec = depObj [ origPkgName ]
686
- if ( pkgSpec ) {
687
- let thisVersion = version
688
- // Add package aliases for direct dependencies to avoid npm EOVERRIDE errors.
689
- // https://docs.npmjs.com/cli/v8/using-npm/package-spec#aliases
690
- const regSpecStartsLike = `npm:${ regPkgName } @`
691
- const existingVersion = pkgSpec . startsWith ( regSpecStartsLike )
692
- ? ( semver . coerce ( npa ( pkgSpec ) . rawSpec ) ?. version ?? '' )
693
- : ''
694
- if ( existingVersion ) {
695
- thisVersion = existingVersion
696
- } else {
697
- pkgSpec = `${ regSpecStartsLike } ^${ version } `
698
- depObj [ origPkgName ] = pkgSpec
699
- state . added . add ( regPkgName )
700
- if ( workspaceName ) {
701
- state . addedInWorkspaces . add ( workspaceName )
685
+ for ( const pkgName of [ sockRegPkgName , origPkgName ] ) {
686
+ const pkgSpec = depObj [ pkgName ]
687
+ if ( pkgSpec ) {
688
+ let thisSpec = pkgSpec
689
+ // Add package aliases for direct dependencies to avoid npm EOVERRIDE errors.
690
+ // https://docs.npmjs.com/cli/v8/using-npm/package-spec#aliases
691
+ const sockRegSpecStartsLike = `npm:${ sockRegPkgName } @`
692
+ if (
693
+ pkgName !== sockRegPkgName &&
694
+ ! (
695
+ thisSpec . startsWith ( sockRegSpecStartsLike ) &&
696
+ semver . coerce ( npa ( thisSpec ) . rawSpec ) ?. version
697
+ )
698
+ ) {
699
+ thisSpec = `${ sockRegSpecStartsLike } ${ pin ? version : `^${ semver . major ( version ) } ` } `
700
+ depObj [ pkgName ] = thisSpec
701
+ state . added . add ( sockRegPkgName )
702
+ if ( workspaceName ) {
703
+ state . addedInWorkspaces . add ( workspaceName )
704
+ }
702
705
}
706
+ depAliasMap . set ( pkgName , thisSpec )
703
707
}
704
- depAliasMap . set ( origPkgName , {
705
- id : pkgSpec ,
706
- version : thisVersion
707
- } )
708
708
}
709
709
}
710
710
if ( isRoot ) {
@@ -716,22 +716,24 @@ async function addOverrides(
716
716
thingScanner ( thingToScan , origPkgName , lockBasename )
717
717
) {
718
718
const oldSpec = overrideExists ? overrides [ origPkgName ] : undefined
719
- const depAlias = depAliasMap . get ( origPkgName )
720
- const regSpecStartsLike = `${ NPM } :${ regPkgName } @`
719
+ const origDepAlias = depAliasMap . get ( origPkgName )
720
+ const sockRegDepAlias = depAliasMap . get ( sockRegPkgName )
721
+ const depAlias = sockRegDepAlias ?? origDepAlias
722
+ const regSpecStartsLike = `${ NPM } :${ sockRegPkgName } @`
721
723
let newSpec = `${ regSpecStartsLike } ${ pin ? version : `^${ major } ` } `
722
724
let thisVersion = version
723
- if ( depAlias && type === NPM ) {
725
+ if ( type === NPM && depAlias ) {
724
726
// With npm one may not set an override for a package that one directly
725
727
// depends on unless both the dependency and the override itself share
726
728
// the exact same spec. To make this limitation easier to deal with,
727
729
// overrides may also be defined as a reference to a spec for a direct
728
730
// dependency by prefixing the name of the package to match the version
729
731
// of with a $.
730
732
// https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides
731
- newSpec = `$${ origPkgName } `
733
+ newSpec = `$${ sockRegDepAlias ? sockRegPkgName : origPkgName } `
732
734
} else if ( overrideExists ) {
733
735
const thisSpec = oldSpec . startsWith ( '$' )
734
- ? ( depAlias ?. id ?? newSpec )
736
+ ? ( depAlias ?? newSpec )
735
737
: ( oldSpec ?? newSpec )
736
738
if ( thisSpec . startsWith ( regSpecStartsLike ) ) {
737
739
if ( pin ) {
@@ -751,7 +753,7 @@ async function addOverrides(
751
753
if ( newSpec !== oldSpec ) {
752
754
overrides [ origPkgName ] = newSpec
753
755
const addedOrUpdated = overrideExists ? 'updated' : 'added'
754
- state [ addedOrUpdated ] . add ( regPkgName )
756
+ state [ addedOrUpdated ] . add ( sockRegPkgName )
755
757
}
756
758
}
757
759
} )
0 commit comments