Skip to content

Commit 642f2b8

Browse files
committed
Fix aliases for npm overrides
1 parent cacfcdf commit 642f2b8

File tree

4 files changed

+108
-42
lines changed

4 files changed

+108
-42
lines changed

Diff for: .dep-stats.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"@socketregistry/is-unicode-supported": "^1.0.0",
1111
"@socketregistry/packageurl-js": "^1.0.2",
1212
"@socketsecurity/config": "^2.1.3",
13-
"@socketsecurity/registry": "^1.0.83",
13+
"@socketsecurity/registry": "^1.0.84",
1414
"@socketsecurity/sdk": "^1.4.5",
1515
"blessed": "^0.1.81",
1616
"blessed-contrib": "^4.11.0",

Diff for: package-lock.json

+75-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@
171171
"has-proto": "npm:@socketregistry/has-proto@^1",
172172
"has-symbols": "npm:@socketregistry/has-symbols@^1",
173173
"hasown": "npm:@socketregistry/hasown@^1",
174-
"indent-string": "npm:@socketregistry/indent-string@^1",
174+
"indent-string": "$@socketregistry/indent-string",
175175
"is-core-module": "npm:@socketregistry/is-core-module@^1",
176176
"isarray": "npm:@socketregistry/isarray@^1",
177177
"npm-package-arg": "$npm-package-arg",

Diff for: src/commands/optimize.ts

+31-29
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)