@@ -676,35 +676,35 @@ async function addOverrides(
676676 if ( spinner ) {
677677 spinner . text = `Adding overrides${ workspaceName ? ` to ${ workspaceName } ` : '' } ...`
678678 }
679- const depAliasMap = new Map < string , { id : string ; version : string } > ( )
679+ const depAliasMap = new Map < string , string > ( )
680680 // Chunk package names to process them in parallel 3 at a time.
681681 await pEach ( manifestEntries , 3 , async ( { 1 : data } ) => {
682- const { name : regPkgName , package : origPkgName , version } = data
682+ const { name : sockRegPkgName , package : origPkgName , version } = data
683683 const major = semver . major ( version )
684684 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+ }
702705 }
706+ depAliasMap . set ( pkgName , thisSpec )
703707 }
704- depAliasMap . set ( origPkgName , {
705- id : pkgSpec ,
706- version : thisVersion
707- } )
708708 }
709709 }
710710 if ( isRoot ) {
@@ -716,22 +716,24 @@ async function addOverrides(
716716 thingScanner ( thingToScan , origPkgName , lockBasename )
717717 ) {
718718 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 } @`
721723 let newSpec = `${ regSpecStartsLike } ${ pin ? version : `^${ major } ` } `
722724 let thisVersion = version
723- if ( depAlias && type === NPM ) {
725+ if ( type === NPM && depAlias ) {
724726 // With npm one may not set an override for a package that one directly
725727 // depends on unless both the dependency and the override itself share
726728 // the exact same spec. To make this limitation easier to deal with,
727729 // overrides may also be defined as a reference to a spec for a direct
728730 // dependency by prefixing the name of the package to match the version
729731 // of with a $.
730732 // https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides
731- newSpec = `$${ origPkgName } `
733+ newSpec = `$${ sockRegDepAlias ? sockRegPkgName : origPkgName } `
732734 } else if ( overrideExists ) {
733735 const thisSpec = oldSpec . startsWith ( '$' )
734- ? ( depAlias ?. id ?? newSpec )
736+ ? ( depAlias ?? newSpec )
735737 : ( oldSpec ?? newSpec )
736738 if ( thisSpec . startsWith ( regSpecStartsLike ) ) {
737739 if ( pin ) {
@@ -751,7 +753,7 @@ async function addOverrides(
751753 if ( newSpec !== oldSpec ) {
752754 overrides [ origPkgName ] = newSpec
753755 const addedOrUpdated = overrideExists ? 'updated' : 'added'
754- state [ addedOrUpdated ] . add ( regPkgName )
756+ state [ addedOrUpdated ] . add ( sockRegPkgName )
755757 }
756758 }
757759 } )
0 commit comments