refactor!: relDepPath=>depPath

This commit is contained in:
Zoltan Kochan
2020-05-22 23:28:36 +03:00
parent 9b1b520d99
commit 142f8caf7b
17 changed files with 133 additions and 129 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/lockfile-walker": major
---
Rename `relDepPath` to `depPath`.

View File

@@ -51,8 +51,8 @@ export default function lockfileToAuditTree (
function lockfileToAuditNode (step: LockfileWalkerStep) {
const dependencies = {}
for (const { relDepPath, pkgSnapshot, next } of step.dependencies) {
const { name, version } = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
for (const { depPath, pkgSnapshot, next } of step.dependencies) {
const { name, version } = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
const subdeps = lockfileToAuditNode(next())
const dep: AuditNode = {
dev: pkgSnapshot.dev === true,

View File

@@ -353,18 +353,18 @@ function getPkgInfo (
let optional: true | undefined = undefined
let isSkipped: boolean = false
let isMissing: boolean = false
const relDepPath = refToRelative(opts.ref, opts.alias)
if (relDepPath) {
const depPath = refToRelative(opts.ref, opts.alias)
if (depPath) {
let pkgSnapshot!: PackageSnapshot
if (opts.currentPackages[relDepPath]) {
pkgSnapshot = opts.currentPackages[relDepPath]
const parsed = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
if (opts.currentPackages[depPath]) {
pkgSnapshot = opts.currentPackages[depPath]
const parsed = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
name = parsed.name
version = parsed.version
} else {
pkgSnapshot = opts.wantedPackages[relDepPath]
pkgSnapshot = opts.wantedPackages[depPath]
if (pkgSnapshot) {
const parsed = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
const parsed = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
name = parsed.name
version = parsed.version
} else {
@@ -372,9 +372,9 @@ function getPkgInfo (
version = opts.ref
}
isMissing = true
isSkipped = opts.skipped.has(relDepPath)
isSkipped = opts.skipped.has(depPath)
}
resolved = pkgSnapshotToResolution(relDepPath, pkgSnapshot, opts.registries)['tarball']
resolved = pkgSnapshotToResolution(depPath, pkgSnapshot, opts.registries)['tarball']
dev = pkgSnapshot.dev
optional = pkgSnapshot.optional
} else {

View File

@@ -2,8 +2,8 @@ import { WANTED_LOCKFILE } from '@pnpm/constants'
import PnpmError from '@pnpm/error'
export default class LockfileMissingDependencyError extends PnpmError {
constructor (relDepPath: string) {
const message = `Broken lockfile: no entry for '${relDepPath}' in ${WANTED_LOCKFILE}`
constructor (depPath: string) {
const message = `Broken lockfile: no entry for '${depPath}' in ${WANTED_LOCKFILE}`
super('LOCKFILE_MISSING_DEPENDENCY', message, {
hint: 'This issue is probably caused by a badly resolved merge conflict.\n' +
'To fix the lockfile, run \'pnpm install --no-frozen-lockfile\'.',

View File

@@ -11,15 +11,15 @@ export default function filterLockfile (
}
): Lockfile {
let pairs = R.toPairs(lockfile.packages || {})
.filter(([relDepPath, pkg]) => !opts.skipped.has(relDepPath))
.filter(([depPath, pkg]) => !opts.skipped.has(depPath))
if (!opts.include.dependencies) {
pairs = pairs.filter(([relDepPath, pkg]) => pkg.dev !== false || pkg.optional)
pairs = pairs.filter(([depPath, pkg]) => pkg.dev !== false || pkg.optional)
}
if (!opts.include.devDependencies) {
pairs = pairs.filter(([relDepPath, pkg]) => pkg.dev !== true)
pairs = pairs.filter(([depPath, pkg]) => pkg.dev !== true)
}
if (!opts.include.optionalDependencies) {
pairs = pairs.filter(([relDepPath, pkg]) => !pkg.optional)
pairs = pairs.filter(([depPath, pkg]) => !pkg.optional)
}
return {
importers: Object.keys(lockfile.importers).reduce((acc, importerId) => {

View File

@@ -55,14 +55,14 @@ function pkgAllDeps (
failOnMissingDependencies: boolean,
}
) {
for (const { pkgSnapshot, relDepPath, next } of step.dependencies) {
pickedPackages[relDepPath] = pkgSnapshot
for (const { pkgSnapshot, depPath, next } of step.dependencies) {
pickedPackages[depPath] = pkgSnapshot
pkgAllDeps(next(), pickedPackages, opts)
}
for (const relDepPath of step.missing) {
for (const depPath of step.missing) {
if (opts.failOnMissingDependencies) {
throw new LockfileMissingDependencyError(relDepPath)
throw new LockfileMissingDependencyError(depPath)
}
logger.debug(`No entry for "${relDepPath}" in ${WANTED_LOCKFILE}`)
logger.debug(`No entry for "${depPath}" in ${WANTED_LOCKFILE}`)
}
}

View File

@@ -57,8 +57,8 @@ export default function filterByImportersAndEngine (
acc[importerId] = filterImporter(lockfile.importers[importerId], opts.include)
if (acc[importerId].optionalDependencies) {
for (const depName of Object.keys(acc[importerId].optionalDependencies || {})) {
const relDepPath = dp.refToRelative(acc[importerId].optionalDependencies![depName], depName)
if (relDepPath && !packages[relDepPath]) {
const depPath = dp.refToRelative(acc[importerId].optionalDependencies![depName], depName)
if (depPath && !packages[depPath]) {
delete acc[importerId].optionalDependencies![depName]
}
}
@@ -75,7 +75,7 @@ export default function filterByImportersAndEngine (
function pickPkgsWithAllDeps (
pkgSnapshots: PackageSnapshots,
relDepPaths: string[],
depPaths: string[],
opts: {
currentEngine: {
nodeVersion: string,
@@ -90,7 +90,7 @@ function pickPkgsWithAllDeps (
}
) {
const pickedPackages = {} as PackageSnapshots
pkgAllDeps({ pkgSnapshots, pickedPackages }, relDepPaths, true, opts)
pkgAllDeps({ pkgSnapshots, pickedPackages }, depPaths, true, opts)
return pickedPackages
}
@@ -99,7 +99,7 @@ function pkgAllDeps (
pkgSnapshots: PackageSnapshots,
pickedPackages: PackageSnapshots,
},
relDepPaths: string[],
depPaths: string[],
parentIsInstallable: boolean,
opts: {
currentEngine: {
@@ -114,31 +114,31 @@ function pkgAllDeps (
skipped: Set<string>,
}
) {
for (const relDepPath of relDepPaths) {
if (ctx.pickedPackages[relDepPath]) continue
const pkgSnapshot = ctx.pkgSnapshots[relDepPath]
if (!pkgSnapshot && !relDepPath.startsWith('link:')) {
for (const depPath of depPaths) {
if (ctx.pickedPackages[depPath]) continue
const pkgSnapshot = ctx.pkgSnapshots[depPath]
if (!pkgSnapshot && !depPath.startsWith('link:')) {
if (opts.failOnMissingDependencies) {
throw new LockfileMissingDependencyError(relDepPath)
throw new LockfileMissingDependencyError(depPath)
}
logger.debug(`No entry for "${relDepPath}" in ${WANTED_LOCKFILE}`)
logger.debug(`No entry for "${depPath}" in ${WANTED_LOCKFILE}`)
continue
}
let installable!: boolean
if (!parentIsInstallable) {
installable = false
if (!ctx.pickedPackages[relDepPath] && pkgSnapshot.optional === true) {
opts.skipped.add(relDepPath)
if (!ctx.pickedPackages[depPath] && pkgSnapshot.optional === true) {
opts.skipped.add(depPath)
}
} else {
const pkg = {
...nameVerFromPkgSnapshot(relDepPath, pkgSnapshot),
...nameVerFromPkgSnapshot(depPath, pkgSnapshot),
cpu: pkgSnapshot.cpu,
engines: pkgSnapshot.engines,
os: pkgSnapshot.os,
}
// TODO: relDepPath is not the package ID. Should be fixed
installable = opts.includeIncompatiblePackages || packageIsInstallable(pkgSnapshot.id || relDepPath, pkg, {
// TODO: depPath is not the package ID. Should be fixed
installable = opts.includeIncompatiblePackages || packageIsInstallable(pkgSnapshot.id || depPath, pkg, {
engineStrict: opts.engineStrict,
lockfileDir: opts.lockfileDir,
nodeVersion: opts.currentEngine.nodeVersion,
@@ -146,14 +146,14 @@ function pkgAllDeps (
pnpmVersion: opts.currentEngine.pnpmVersion,
}) !== false
if (!installable) {
if (!ctx.pickedPackages[relDepPath] && pkgSnapshot.optional === true) {
opts.skipped.add(relDepPath)
if (!ctx.pickedPackages[depPath] && pkgSnapshot.optional === true) {
opts.skipped.add(depPath)
}
} else {
opts.skipped.delete(relDepPath)
opts.skipped.delete(depPath)
}
}
ctx.pickedPackages[relDepPath] = pkgSnapshot
ctx.pickedPackages[depPath] = pkgSnapshot
const nextRelDepPaths = R.toPairs(
{
...pkgSnapshot.dependencies,

View File

@@ -32,9 +32,9 @@ export default async function hoistByLockfile (
const deps = [
{
children: directDeps
.reduce((acc, { alias, relDepPath }) => {
.reduce((acc, { alias, depPath }) => {
if (!acc[alias]) {
acc[alias] = relDepPath
acc[alias] = depPath
}
return acc
}, {}),
@@ -87,9 +87,9 @@ async function getDependencies (
): Promise<Dependency[]> {
const deps: Dependency[] = []
const nextSteps: LockfileWalkerStep[] = []
for (const { pkgSnapshot, relDepPath, next } of step.dependencies) {
const pkgName = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot).name
const modules = path.join(opts.virtualStoreDir, pkgIdToFilename(relDepPath, opts.lockfileDir), 'node_modules')
for (const { pkgSnapshot, depPath, next } of step.dependencies) {
const pkgName = nameVerFromPkgSnapshot(depPath, pkgSnapshot).name
const modules = path.join(opts.virtualStoreDir, pkgIdToFilename(depPath, opts.lockfileDir), 'node_modules')
const allDeps = {
...pkgSnapshot.dependencies,
...pkgSnapshot.optionalDependencies,
@@ -99,7 +99,7 @@ async function getDependencies (
children[alias] = dp.refToRelative(allDeps[alias], alias)
return children
}, {}),
depPath: relDepPath,
depPath,
depth,
location: path.join(modules, pkgName),
})
@@ -107,10 +107,10 @@ async function getDependencies (
nextSteps.push(next())
}
for (const relDepPath of step.missing) {
for (const depPath of step.missing) {
// It might make sense to fail if the depPath is not in the skipped list from .modules.yaml
// However, the skipped list currently contains package IDs, not dep paths.
logger.debug({ message: `No entry for "${relDepPath}" in ${WANTED_LOCKFILE}` })
logger.debug({ message: `No entry for "${depPath}" in ${WANTED_LOCKFILE}` })
}
return (

View File

@@ -2,11 +2,11 @@ import { PackageSnapshot } from '@pnpm/lockfile-types'
import * as dp from 'dependency-path'
export default (
relDepPath: string,
depPath: string,
pkgSnapshot: PackageSnapshot
) => {
if (!pkgSnapshot.name) {
const pkgInfo = dp.parse(relDepPath)
const pkgInfo = dp.parse(depPath)
return {
name: pkgInfo.name as string,
peersSuffix: pkgInfo.peersSuffix,

View File

@@ -3,10 +3,10 @@ import { Registries } from '@pnpm/types'
import * as dp from 'dependency-path'
export default (
relDepPath: string,
depPath: string,
pkgSnapshot: PackageSnapshot,
registries: Registries
) => {
if (pkgSnapshot.id) return pkgSnapshot.id
return dp.tryGetPackageId(registries, relDepPath) || relDepPath
return dp.tryGetPackageId(registries, depPath) || depPath
}

View File

@@ -7,7 +7,7 @@ import url = require('url')
import nameVerFromPkgSnapshot from './nameVerFromPkgSnapshot'
export default (
relDepPath: string,
depPath: string,
pkgSnapshot: PackageSnapshot,
registries: Registries
): Resolution => {
@@ -16,7 +16,7 @@ export default (
return pkgSnapshot.resolution as Resolution
}
if (!pkgSnapshot.resolution['tarball']) {
const { name } = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
const { name } = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
const registry = name[0] === '@' && registries[name.split('/')[0]] || registries.default
return {
...pkgSnapshot.resolution,
@@ -27,7 +27,7 @@ export default (
if (pkgSnapshot.resolution['tarball'].startsWith('file:')) {
return pkgSnapshot.resolution as Resolution
}
const { name } = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
const { name } = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
const registry = name[0] === '@' && registries[name.split('/')[0]] || registries.default
return {
...pkgSnapshot.resolution,
@@ -36,9 +36,9 @@ export default (
} as Resolution
function getTarball (registry: string) {
const { name, version } = dp.parse(relDepPath)
const { name, version } = dp.parse(depPath)
if (!name || !version) {
throw new Error(`Couldn't get tarball URL from dependency path ${relDepPath}`)
throw new Error(`Couldn't get tarball URL from dependency path ${depPath}`)
}
return getNpmTarballUrl(name, version, { registry })
}

View File

@@ -4,7 +4,7 @@ import * as dp from 'dependency-path'
import R = require('ramda')
export type LockedDependency = {
relDepPath: string,
depPath: string,
pkgSnapshot: PackageSnapshot,
next: () => LockfileWalkerStep,
}
@@ -55,7 +55,7 @@ export default function lockfileWalker (
) {
const walked = new Set<string>(opts?.skipped ? Array.from(opts?.skipped) : [])
const entryNodes = [] as string[]
const directDeps = [] as Array<{ alias: string, relDepPath: string }>
const directDeps = [] as Array<{ alias: string, depPath: string }>
importerIds.forEach((importerId) => {
const projectSnapshot = lockfile.importers[importerId]
@@ -65,10 +65,10 @@ export default function lockfileWalker (
...(opts?.include?.optionalDependencies === false ? {} : projectSnapshot.optionalDependencies),
})
.forEach(([ pkgName, reference ]) => {
const relDepPath = dp.refToRelative(reference, pkgName)
if (relDepPath === null) return
entryNodes.push(relDepPath as string)
directDeps.push({ alias: pkgName, relDepPath })
const depPath = dp.refToRelative(reference, pkgName)
if (depPath === null) return
entryNodes.push(depPath as string)
directDeps.push({ alias: pkgName, depPath })
})
})
return {
@@ -87,29 +87,29 @@ function step (
lockfile: Lockfile,
walked: Set<string>,
},
nextRelDepPaths: string[]
nextDepPaths: string[]
) {
const result: LockfileWalkerStep = {
dependencies: [],
links: [],
missing: [],
}
for (let relDepPath of nextRelDepPaths) {
if (ctx.walked.has(relDepPath)) continue
ctx.walked.add(relDepPath)
const pkgSnapshot = ctx.lockfile.packages?.[relDepPath]
for (let depPath of nextDepPaths) {
if (ctx.walked.has(depPath)) continue
ctx.walked.add(depPath)
const pkgSnapshot = ctx.lockfile.packages?.[depPath]
if (!pkgSnapshot) {
if (relDepPath.startsWith('link:')) {
result.links.push(relDepPath)
if (depPath.startsWith('link:')) {
result.links.push(depPath)
continue
}
result.missing.push(relDepPath)
result.missing.push(depPath)
continue
}
result.dependencies.push({
depPath,
next: () => step(ctx, next({ includeOptionalDependencies: ctx.includeOptionalDependencies }, pkgSnapshot)),
pkgSnapshot,
relDepPath,
})
}
return result

View File

@@ -164,11 +164,11 @@ function getPkgsDepPaths (
registries: Registries,
packages: PackageSnapshots,
skipped: Set<string>
): {[relDepPath: string]: string} {
): {[depPath: string]: string} {
const pkgIdsByDepPath = {}
for (const relDepPath of Object.keys(packages)) {
if (skipped.has(relDepPath)) continue
pkgIdsByDepPath[relDepPath] = packageIdFromSnapshot(relDepPath, packages[relDepPath], registries)
for (const depPath of Object.keys(packages)) {
if (skipped.has(depPath)) continue
pkgIdsByDepPath[depPath] = packageIdFromSnapshot(depPath, packages[depPath], registries)
}
return pkgIdsByDepPath
}

View File

@@ -151,7 +151,7 @@ export async function rebuild (
opts
)
ctx.pendingBuilds = ctx.pendingBuilds.filter((relDepPath) => !pkgsThatWereRebuilt.has(relDepPath))
ctx.pendingBuilds = ctx.pendingBuilds.filter((depPath) => !pkgsThatWereRebuilt.has(depPath))
const scriptsOpts = {
extraBinPaths: ctx.extraBinPaths,
@@ -194,22 +194,22 @@ function getSubgraphToBuild (
}
) {
let currentShouldBeBuilt = false
for (const { relDepPath, next } of step.dependencies) {
if (nodesToBuildAndTransitive.has(relDepPath)) {
for (const { depPath, next } of step.dependencies) {
if (nodesToBuildAndTransitive.has(depPath)) {
currentShouldBeBuilt = true
}
const childShouldBeBuilt = getSubgraphToBuild(next(), nodesToBuildAndTransitive, opts)
|| opts.pkgsToRebuild.has(relDepPath)
|| opts.pkgsToRebuild.has(depPath)
if (childShouldBeBuilt) {
nodesToBuildAndTransitive.add(relDepPath)
nodesToBuildAndTransitive.add(depPath)
currentShouldBeBuilt = true
}
}
for (const relDepPath of step.missing) {
for (const depPath of step.missing) {
// It might make sense to fail if the depPath is not in the skipped list from .modules.yaml
// However, the skipped list currently contains package IDs, not dep paths.
logger.debug({ message: `No entry for "${relDepPath}" in ${WANTED_LOCKFILE}` })
logger.debug({ message: `No entry for "${depPath}" in ${WANTED_LOCKFILE}` })
}
return currentShouldBeBuilt
}
@@ -249,9 +249,9 @@ async function _rebuild (
)
const nodesToBuildAndTransitiveArray = Array.from(nodesToBuildAndTransitive)
for (const relDepPath of nodesToBuildAndTransitiveArray) {
const pkgSnapshot = pkgSnapshots[relDepPath]
graph.set(relDepPath, R.toPairs({ ...pkgSnapshot.dependencies, ...pkgSnapshot.optionalDependencies })
for (const depPath of nodesToBuildAndTransitiveArray) {
const pkgSnapshot = pkgSnapshots[depPath]
graph.set(depPath, R.toPairs({ ...pkgSnapshot.dependencies, ...pkgSnapshot.optionalDependencies })
.map(([ pkgName, reference ]) => dp.refToRelative(reference, pkgName))
.filter((childRelDepPath) => childRelDepPath && nodesToBuildAndTransitive.has(childRelDepPath)))
}
@@ -261,14 +261,13 @@ async function _rebuild (
})
const chunks = graphSequencerResult.chunks as string[][]
const warn = (message: string) => logger.warn({ message, prefix: opts.dir })
const groups = chunks.map((chunk) => chunk.filter((relDepPath) => ctx.pkgsToRebuild.has(relDepPath)).map((relDepPath) =>
const groups = chunks.map((chunk) => chunk.filter((depPath) => ctx.pkgsToRebuild.has(depPath)).map((depPath) =>
async () => {
const pkgSnapshot = pkgSnapshots[relDepPath]
const depPath = dp.resolve(opts.registries, relDepPath)
const pkgInfo = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
const pkgRoot = path.join(ctx.virtualStoreDir, pkgIdToFilename(relDepPath, opts.lockfileDir), 'node_modules', pkgInfo.name)
const pkgSnapshot = pkgSnapshots[depPath]
const pkgInfo = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
const pkgRoot = path.join(ctx.virtualStoreDir, pkgIdToFilename(depPath, opts.lockfileDir), 'node_modules', pkgInfo.name)
try {
const modules = path.join(ctx.virtualStoreDir, pkgIdToFilename(relDepPath, opts.lockfileDir), 'node_modules')
const modules = path.join(ctx.virtualStoreDir, pkgIdToFilename(depPath, opts.lockfileDir), 'node_modules')
const binPath = path.join(pkgRoot, 'node_modules', '.bin')
await linkBins(modules, binPath, { warn })
await runPostinstallHooks({
@@ -281,7 +280,7 @@ async function _rebuild (
rootModulesDir: ctx.rootModulesDir,
unsafePerm: opts.unsafePerm || false,
})
pkgsThatWereRebuilt.add(relDepPath)
pkgsThatWereRebuilt.add(depPath)
} catch (err) {
if (pkgSnapshot.optional) {
// TODO: add parents field to the log
@@ -308,11 +307,11 @@ async function _rebuild (
await Promise.all(
Object
.keys(pkgSnapshots)
.filter((relDepPath) => !packageIsIndependent(pkgSnapshots[relDepPath]))
.map((relDepPath) => limitLinking(() => {
const pkgSnapshot = pkgSnapshots[relDepPath]
const pkgInfo = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
const modules = path.join(ctx.virtualStoreDir, pkgIdToFilename(relDepPath, opts.lockfileDir), 'node_modules')
.filter((depPath) => !packageIsIndependent(pkgSnapshots[depPath]))
.map((depPath) => limitLinking(() => {
const pkgSnapshot = pkgSnapshots[depPath]
const pkgInfo = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
const modules = path.join(ctx.virtualStoreDir, pkgIdToFilename(depPath, opts.lockfileDir), 'node_modules')
const binPath = path.join(modules, pkgInfo.name, 'node_modules', '.bin')
return linkBins(modules, binPath, { warn })
}))

View File

@@ -31,24 +31,24 @@ export default async function (maybeOpts: StoreStatusOptions) {
if (!wantedLockfile) return []
const pkgs = Object.keys(wantedLockfile.packages || {})
.filter((relDepPath) => !skipped.has(relDepPath))
.map((relDepPath) => {
const pkg = wantedLockfile.packages![relDepPath]
.filter((depPath) => !skipped.has(depPath))
.map((depPath) => {
const pkg = wantedLockfile.packages![depPath]
return {
depPath,
integrity: pkg.resolution['integrity'],
pkgPath: dp.resolve(registries, relDepPath),
relDepPath,
...nameVerFromPkgSnapshot(relDepPath, pkg),
pkgPath: dp.resolve(registries, depPath),
...nameVerFromPkgSnapshot(depPath, pkg),
}
})
const cafsDir = path.join(storeDir, 'files')
const modified = await pFilter(pkgs, async ({ integrity, pkgPath, relDepPath, name }) => {
const modified = await pFilter(pkgs, async ({ integrity, pkgPath, depPath, name }) => {
const pkgIndexFilePath = integrity
? getFilePathInCafs(cafsDir, integrity, 'index')
: path.join(storeDir, pkgPath, 'integrity.json')
const { files } = await loadJsonFile(pkgIndexFilePath)
return (await dint.check(path.join(virtualStoreDir, pkgIdToFilename(relDepPath, opts.dir), 'node_modules', name), files)) === false
return (await dint.check(path.join(virtualStoreDir, pkgIdToFilename(depPath, opts.dir), 'node_modules', name), files)) === false
})
if (reporter) {

View File

@@ -430,17 +430,17 @@ function preferedSatisfiesWanted (
prefix: string,
}
) {
const relDepPath = dp.refToRelative(preferredRef, wantedDep.alias)
if (relDepPath === null) return false
const pkgSnapshot = lockfile.packages?.[relDepPath]
const depPath = dp.refToRelative(preferredRef, wantedDep.alias)
if (depPath === null) return false
const pkgSnapshot = lockfile.packages?.[depPath]
if (!pkgSnapshot) {
logger.warn({
message: `Could not find preferred package ${relDepPath} in lockfile`,
message: `Could not find preferred package ${depPath} in lockfile`,
prefix: opts.prefix,
})
return false
}
const { version } = nameVerFromPkgSnapshot(relDepPath, pkgSnapshot)
const { version } = nameVerFromPkgSnapshot(depPath, pkgSnapshot)
return semver.satisfies(version, wantedDep.pref, true)
}
@@ -454,13 +454,13 @@ function getInfoFromLockfile (
return null
}
const relDepPath = dp.refToRelative(reference, pkgName)
const depPath = dp.refToRelative(reference, pkgName)
if (!relDepPath) {
if (!depPath) {
return null
}
const dependencyLockfile = lockfile.packages?.[relDepPath]
const dependencyLockfile = lockfile.packages?.[depPath]
if (dependencyLockfile) {
if (dependencyLockfile.peerDependencies && dependencyLockfile.dependencies) {
@@ -473,11 +473,11 @@ function getInfoFromLockfile (
}
return {
currentResolution: pkgSnapshotToResolution(relDepPath, dependencyLockfile, registries),
currentResolution: pkgSnapshotToResolution(depPath, dependencyLockfile, registries),
dependencyLockfile,
depPath,
optionalDependencyNames: R.keys(dependencyLockfile.optionalDependencies),
pkgId: packageIdFromSnapshot(relDepPath, dependencyLockfile, registries),
relDepPath,
pkgId: packageIdFromSnapshot(depPath, dependencyLockfile, registries),
resolvedDependencies: {
...dependencyLockfile.dependencies,
...dependencyLockfile.optionalDependencies,
@@ -485,8 +485,8 @@ function getInfoFromLockfile (
}
} else {
return {
pkgId: dp.tryGetPackageId(registries, relDepPath) || relDepPath, // Does it make sense to set pkgId when we're not sure?
relDepPath,
depPath,
pkgId: dp.tryGetPackageId(registries, depPath) || depPath, // Does it make sense to set pkgId when we're not sure?
}
}
}
@@ -495,7 +495,7 @@ type ResolveDependencyOptions = {
alwaysTryWorkspacePackages?: boolean,
pkgId?: string,
dependentId?: string,
relDepPath?: string,
depPath?: string,
parentDependsOnPeer: boolean,
parentNodeId: string,
currentDepth: number,
@@ -521,13 +521,13 @@ async function resolveDependency (
const proceed = update || options.proceed || !options.currentResolution
const parentIsInstallable = options.parentIsInstallable === undefined || options.parentIsInstallable
const currentLockfileContainsTheDep = options.relDepPath ? Boolean(ctx.currentLockfile.packages?.[options.relDepPath]) : undefined
const currentLockfileContainsTheDep = options.depPath ? Boolean(ctx.currentLockfile.packages?.[options.depPath]) : undefined
const depIsLinked = Boolean(
// if package is not in `node_modules/.pnpm-lock.yaml`
// we can safely assume that it doesn't exist in `node_modules`
currentLockfileContainsTheDep &&
options.relDepPath && options.dependencyLockfile &&
await exists(path.join(ctx.virtualStoreDir, `${pkgIdToFilename(options.relDepPath, ctx.prefix)}/node_modules/${nameVerFromPkgSnapshot(options.relDepPath, options.dependencyLockfile).name}/package.json`)) &&
options.depPath && options.dependencyLockfile &&
await exists(path.join(ctx.virtualStoreDir, `${pkgIdToFilename(options.depPath, ctx.prefix)}/node_modules/${nameVerFromPkgSnapshot(options.depPath, options.dependencyLockfile).name}/package.json`)) &&
(options.currentDepth > 0 || wantedDependency.alias && await exists(path.join(ctx.modulesDir, wantedDependency.alias))))
if (!proceed && depIsLinked) {
@@ -616,7 +616,7 @@ async function resolveDependency (
let prepare!: boolean
let hasBin!: boolean
if (
!options.update && options.dependencyLockfile && options.relDepPath &&
!options.update && options.dependencyLockfile && options.depPath &&
!pkgResponse.body.updated &&
// peerDependencies field is also used for transitive peer dependencies which should not be linked
// That's why we cannot omit reading package.json of such dependencies.
@@ -627,7 +627,7 @@ async function resolveDependency (
prepare = options.dependencyLockfile.prepare === true
hasBin = options.dependencyLockfile.hasBin === true
pkg = Object.assign(
nameVerFromPkgSnapshot(options.relDepPath, options.dependencyLockfile),
nameVerFromPkgSnapshot(options.depPath, options.dependencyLockfile),
options.dependencyLockfile
)
} else {

View File

@@ -36,8 +36,8 @@ function getVersionSpecsByRealNames (deps: Dependencies) {
export function getPreferredVersionsFromLockfile (snapshots: PackageSnapshots): PreferredVersions {
const preferredVersions: PreferredVersions = {}
for (const [relDepPath, snapshot] of Object.entries(snapshots)) {
const { name, version } = nameVerFromPkgSnapshot(relDepPath, snapshot)
for (const [depPath, snapshot] of Object.entries(snapshots)) {
const { name, version } = nameVerFromPkgSnapshot(depPath, snapshot)
if (!preferredVersions[name]) {
preferredVersions[name] = { [version]: 'version' }
} else {