mirror of
https://github.com/pnpm/pnpm.git
synced 2025-12-24 23:58:07 -05:00
fix: cannot read properties of undefined (reading missingPeersOfChildren) (#8054)
close #8041
This commit is contained in:
7
.changeset/mighty-rats-suffer.md
Normal file
7
.changeset/mighty-rats-suffer.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
"@pnpm/resolve-dependencies": patch
|
||||
"@pnpm/lockfile-utils": patch
|
||||
"pnpm": patch
|
||||
---
|
||||
|
||||
Fix `Cannot read properties of undefined (reading 'missingPeersOfChildren')` exception that happens on install [#8041](https://github.com/pnpm/pnpm/issues/8041).
|
||||
@@ -5,6 +5,7 @@ export interface NameVer {
|
||||
name: string
|
||||
peersSuffix: string | undefined
|
||||
version: string
|
||||
nonSemverVersion?: string
|
||||
}
|
||||
|
||||
export function nameVerFromPkgSnapshot (
|
||||
@@ -16,5 +17,6 @@ export function nameVerFromPkgSnapshot (
|
||||
name: pkgInfo.name as string,
|
||||
peersSuffix: pkgInfo.peersSuffix,
|
||||
version: pkgSnapshot.version ?? pkgInfo.version as string,
|
||||
nonSemverVersion: pkgInfo.nonSemverVersion,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
/// <reference path="../../../__typings__/local.d.ts"/>
|
||||
import './nameVerFromPkgSnapshot'
|
||||
import './pkgSnapshotToResolution'
|
||||
import './satisfiesPackageManifest'
|
||||
@@ -11,6 +11,7 @@ test('nameVerFromPkgSnapshot()', () => {
|
||||
name: 'foo',
|
||||
peersSuffix: undefined,
|
||||
version: '1.0.0',
|
||||
nonSemverVersion: 'some-weird-path',
|
||||
})
|
||||
|
||||
expect(nameVerFromPkgSnapshot('foo@1.0.0', {
|
||||
|
||||
@@ -287,7 +287,7 @@ async function resolveAndFetch (
|
||||
isLocal: false as const,
|
||||
isInstallable: isInstallable ?? undefined,
|
||||
latest,
|
||||
manifest: manifest ?? (await fetchResult.fetching()).bundledManifest,
|
||||
manifest,
|
||||
normalizedPref,
|
||||
resolution,
|
||||
resolvedVia,
|
||||
|
||||
@@ -12,7 +12,6 @@ import {
|
||||
} from '@pnpm/lockfile-types'
|
||||
import {
|
||||
nameVerFromPkgSnapshot,
|
||||
packageIdFromSnapshot,
|
||||
pkgSnapshotToResolution,
|
||||
} from '@pnpm/lockfile-utils'
|
||||
import { logger } from '@pnpm/logger'
|
||||
@@ -1047,19 +1046,22 @@ function getInfoFromLockfile (
|
||||
}
|
||||
}
|
||||
|
||||
const { name, version, nonSemverVersion } = nameVerFromPkgSnapshot(depPath, dependencyLockfile)
|
||||
return {
|
||||
...nameVerFromPkgSnapshot(depPath, dependencyLockfile),
|
||||
name,
|
||||
version,
|
||||
dependencyLockfile,
|
||||
depPath,
|
||||
pkgId: packageIdFromSnapshot(depPath, dependencyLockfile),
|
||||
pkgId: nonSemverVersion ?? `${name}@${version}`,
|
||||
// resolution may not exist if lockfile is broken, and an unexpected error will be thrown
|
||||
// if resolution does not exist, return undefined so it can be autofixed later
|
||||
resolution: dependencyLockfile.resolution && pkgSnapshotToResolution(depPath, dependencyLockfile, registries),
|
||||
}
|
||||
} else {
|
||||
const parsed = dp.parse(depPath)
|
||||
return {
|
||||
depPath,
|
||||
pkgId: dp.tryGetPackageId(depPath) ?? depPath, // Does it make sense to set pkgId when we're not sure?
|
||||
pkgId: parsed.nonSemverVersion ?? (parsed.name && parsed.version ? `${parsed.name}@${parsed.version}` : depPath), // Does it make sense to set pkgId when we're not sure?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user