{
  "version": 3,
  "sources": ["../../../../src/packages/resolve-dependencies/resolvePeers.ts"],
  "sourcesContent": ["import filenamify from 'filenamify';\nimport { analyzeGraph, type Graph } from 'graph-cycles';\nimport path from 'node:path';\nimport pDefer, { type DeferredPromise } from 'p-defer';\nimport semver from 'semver';\nimport { semverUtils } from '@yarnpkg/core';\nimport type {\n  DepPath,\n  GlobalPkgDir,\n  LockFileDir,\n  ParentPackages,\n  PeerDependencyIssues,\n  PeerDependencyIssuesByProjects,\n  PkgIdWithPatchHash,\n  ProjectRootDir,\n  ProjectRootDirRealPath,\n  WorkspaceDir,\n} from '../types/index.ts';\nimport {\n  depPathToFilename,\n  createPeersDirSuffix,\n  type PeerId,\n} from '../dependency-path/index.ts';\nimport partition from 'ramda/src/partition';\nimport pick from 'ramda/src/pick';\nimport type { NodeId } from './nextNodeId.ts';\nimport type {\n  ChildrenMap,\n  PeerDependencies,\n  DependenciesTree,\n  DependenciesTreeNode,\n  ResolvedPackage,\n} from './resolveDependencies.ts';\nimport type { ResolvedImporters } from './resolveDependencyTree.ts';\nimport { mergePeers } from './mergePeers.ts';\nimport { dedupeInjectedDeps } from './dedupeInjectedDeps.ts';\n\nexport type BaseGenericDependenciesGraphNode = {\n  // at this point the version is really needed only for logging\n  modules: string;\n  dir: string;\n  depPath: DepPath;\n  depth: number;\n  peerDependencies?: PeerDependencies | undefined;\n  optionalDependencies?: Set<string> | undefined;\n  transitivePeerDependencies: Set<string>;\n  installable: boolean;\n  isBuilt: boolean;\n  isPure: boolean;\n  resolvedPeerNames: Set<string>;\n  requiresBuild?: boolean | undefined;\n};\n\nexport interface GenericDependenciesGraphNode\n  extends BaseGenericDependenciesGraphNode {\n  children?: Record<string, DepPath> | undefined;\n  childrenNodeIds?: Record<string, NodeId> | undefined;\n}\n\nexport interface GenericDependenciesGraphNodeWithResolvedChildren\n  extends BaseGenericDependenciesGraphNode {\n  children: Record<string, DepPath>;\n}\n\nexport type PartialResolvedPackage = Pick<\n  ResolvedPackage,\n  'id' | 'pkgIdWithPatchHash' | 'name' | 'peerDependencies' | 'version'\n>;\n\nexport type GenericDependenciesGraph = {\n  [depPath: string]: PartialResolvedPackage & GenericDependenciesGraphNode;\n};\n\nexport type GenericDependenciesGraphWithResolvedChildren = {\n  [depPath: string]: ResolvedPackage &\n    GenericDependenciesGraphNodeWithResolvedChildren;\n};\n\nexport type ProjectToResolve = {\n  directNodeIdsByAlias: Map<string, NodeId>;\n  // only the top dependencies that were already installed\n  // to avoid warnings about unresolved peer dependencies\n  topParents: Array<{\n    name: string;\n    version: string;\n    alias?: string | undefined;\n    linkedDir?: NodeId | undefined;\n  }>;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir; // is only needed for logging\n  id: string;\n};\n\nexport type DependenciesByProjectId = Record<string, Map<string, DepPath>>;\n\nexport async function resolvePeers(opts: {\n  allPeerDepNames: Set<string>;\n  projects: ProjectToResolve[];\n  dependenciesTree: DependenciesTree;\n  virtualStoreDir: string;\n  virtualStoreDirMaxLength: number;\n  lockfileDir: string;\n  resolvePeersFromWorkspaceRoot?: boolean | undefined;\n  dedupePeerDependents?: boolean | undefined;\n  dedupeInjectedDeps?: boolean | undefined;\n  resolvedImporters: ResolvedImporters;\n  peersSuffixMaxLength: number;\n}): Promise<{\n  dependenciesGraph: GenericDependenciesGraphWithResolvedChildren;\n  dependenciesByProjectId: DependenciesByProjectId;\n  peerDependencyIssuesByProjects: PeerDependencyIssuesByProjects;\n}> {\n  const depGraph: GenericDependenciesGraph = {};\n\n  const pathsByNodeId = new Map<NodeId, DepPath>();\n\n  const pathsByNodeIdPromises = new Map<NodeId, DeferredPromise<DepPath>>();\n\n  const depPathsByPkgId = new Map<PkgIdWithPatchHash, Set<DepPath>>();\n\n  const _createPkgsByName = createPkgsByName.bind(null, opts.dependenciesTree);\n\n  const rootPkgsByName =\n    opts.resolvePeersFromWorkspaceRoot === true\n      ? getRootPkgsByName(opts.dependenciesTree, opts.projects)\n      : {};\n\n  const peerDependencyIssuesByProjects: PeerDependencyIssuesByProjects = {};\n\n  const finishingList: FinishingResolutionPromise[] = [];\n\n  const peersCache = new Map<PkgIdWithPatchHash, PeersCacheItem[]>();\n\n  const purePkgs = new Set<PkgIdWithPatchHash>();\n\n  for (const {\n    directNodeIdsByAlias,\n    topParents,\n    rootDir,\n    id,\n  } of opts.projects) {\n    const peerDependencyIssues: Pick<PeerDependencyIssues, 'bad' | 'missing'> =\n      { bad: {}, missing: {} };\n\n    const pkgsByName = Object.fromEntries(\n      Object.entries({\n        ...rootPkgsByName,\n        ..._createPkgsByName({ directNodeIdsByAlias, topParents }),\n      }).filter(([peerName]) => opts.allPeerDepNames.has(peerName))\n    );\n\n    for (const { nodeId } of Object.values(pkgsByName)) {\n      if (nodeId && !pathsByNodeIdPromises.has(nodeId)) {\n        pathsByNodeIdPromises.set(nodeId, pDefer());\n      }\n    }\n\n    const { finishing } = await resolvePeersOfChildren(\n      Object.fromEntries(directNodeIdsByAlias.entries()),\n      pkgsByName,\n      {\n        allPeerDepNames: opts.allPeerDepNames,\n        parentPkgsOfNode: new Map(),\n        dependenciesTree: opts.dependenciesTree,\n        depGraph,\n        lockfileDir: opts.lockfileDir,\n        parentNodeIds: [],\n        parentDepPathsChain: [],\n        pathsByNodeId,\n        pathsByNodeIdPromises,\n        depPathsByPkgId,\n        peersCache,\n        peerDependencyIssues,\n        purePkgs,\n        peersSuffixMaxLength: opts.peersSuffixMaxLength,\n        rootDir,\n        virtualStoreDir: opts.virtualStoreDir,\n        virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n      }\n    );\n\n    if (typeof finishing !== 'undefined') {\n      finishingList.push(finishing);\n    }\n\n    if (\n      Object.keys(peerDependencyIssues.bad).length > 0 ||\n      Object.keys(peerDependencyIssues.missing).length > 0\n    ) {\n      peerDependencyIssuesByProjects[id] = {\n        ...peerDependencyIssues,\n        ...mergePeers(peerDependencyIssues.missing),\n      };\n    }\n  }\n\n  await Promise.all(finishingList);\n\n  const depGraphWithResolvedChildren = resolveChildren(depGraph);\n\n  function resolveChildren(\n    depGraph: GenericDependenciesGraph\n  ): GenericDependenciesGraphWithResolvedChildren {\n    for (const node of Object.values(depGraph)) {\n      node.children = {};\n\n      for (const [alias, childNodeId] of Object.entries<NodeId>(\n        node.childrenNodeIds ?? {}\n      )) {\n        node.children[alias] =\n          pathsByNodeId.get(childNodeId) ?? (childNodeId as unknown as DepPath);\n      }\n\n      // biome-ignore lint/performance/noDelete: <explanation>\n      delete node.childrenNodeIds;\n    }\n\n    return depGraph as unknown as GenericDependenciesGraphWithResolvedChildren;\n  }\n\n  const dependenciesByProjectId: DependenciesByProjectId = {};\n\n  for (const { directNodeIdsByAlias, id } of opts.projects) {\n    dependenciesByProjectId[id] = new Map();\n\n    for (const [alias, nodeId] of directNodeIdsByAlias.entries()) {\n      const depPath = pathsByNodeId.get(nodeId);\n\n      if (typeof depPath === 'string') {\n        dependenciesByProjectId[id].set(alias, depPath);\n      }\n    }\n  }\n\n  if (opts.dedupeInjectedDeps === true) {\n    dedupeInjectedDeps({\n      dependenciesByProjectId,\n      projects: opts.projects,\n      depGraph: depGraphWithResolvedChildren,\n      pathsByNodeId,\n      lockfileDir: opts.lockfileDir,\n      resolvedImporters: opts.resolvedImporters,\n    });\n  }\n\n  if (opts.dedupePeerDependents === true) {\n    const duplicates = Array.from(depPathsByPkgId.values()).filter(\n      (item: Set<DepPath>): boolean => {\n        return item.size > 1;\n      }\n    );\n\n    const allDepPathsMap = deduplicateAll(\n      depGraphWithResolvedChildren,\n      duplicates\n    );\n\n    for (const { id } of opts.projects) {\n      for (const [alias, depPath] of dependenciesByProjectId[id]?.entries() ??\n        []) {\n        dependenciesByProjectId[id]?.set(\n          alias,\n          allDepPathsMap[depPath] ?? depPath\n        );\n      }\n    }\n  }\n\n  return {\n    dependenciesGraph: depGraphWithResolvedChildren,\n    dependenciesByProjectId,\n    peerDependencyIssuesByProjects,\n  };\n}\n\nfunction nodeDepsCount(\n  node: GenericDependenciesGraphNodeWithResolvedChildren\n): number {\n  return Object.keys(node.children).length + node.resolvedPeerNames.size;\n}\n\nfunction deduplicateAll(\n  depGraph: GenericDependenciesGraphWithResolvedChildren,\n  duplicates: Array<Set<DepPath>>\n): Record<DepPath, DepPath> {\n  const { depPathsMap, remainingDuplicates } = deduplicateDepPaths(\n    duplicates,\n    depGraph\n  );\n\n  if (remainingDuplicates.length === duplicates.length) {\n    return depPathsMap;\n  }\n\n  for (const node of Object.values(depGraph)) {\n    for (const [alias, childDepPath] of Object.entries<DepPath>(\n      node.children\n    )) {\n      if (depPathsMap[childDepPath]) {\n        node.children[alias] = depPathsMap[childDepPath];\n      }\n    }\n  }\n\n  if (Object.keys(depPathsMap).length > 0) {\n    return {\n      ...depPathsMap,\n      ...deduplicateAll(depGraph, remainingDuplicates),\n    };\n  }\n\n  return depPathsMap;\n}\n\ntype DeduplicateDepPathsResult = {\n  depPathsMap: Record<DepPath, DepPath>;\n  remainingDuplicates: Array<Set<DepPath>>;\n};\n\nfunction deduplicateDepPaths(\n  duplicates: Array<Set<DepPath>>,\n  depGraph: GenericDependenciesGraphWithResolvedChildren\n): DeduplicateDepPathsResult {\n  function depCountSorter(depPath1: DepPath, depPath2: DepPath): number {\n    const node1 = depGraph[depPath1];\n\n    const node2 = depGraph[depPath2];\n\n    if (typeof node1 === 'undefined' || typeof node2 === 'undefined') {\n      return 0;\n    }\n\n    return nodeDepsCount(node1) - nodeDepsCount(node2);\n  }\n\n  const depPathsMap: Record<DepPath, DepPath> = {};\n\n  const remainingDuplicates: Array<Set<DepPath>> = [];\n\n  for (const depPaths of duplicates) {\n    const unresolvedDepPaths = new Set(depPaths.values());\n\n    let currentDepPaths = [...depPaths].sort(depCountSorter);\n\n    while (currentDepPaths.length) {\n      const depPath1 = currentDepPaths.pop();\n\n      if (typeof depPath1 === 'undefined') {\n        continue;\n      }\n\n      const nextDepPaths = [];\n\n      while (currentDepPaths.length) {\n        const depPath2 = currentDepPaths.pop();\n\n        if (typeof depPath2 === 'undefined') {\n          continue;\n        }\n\n        if (isCompatibleAndHasMoreDeps(depGraph, depPath1, depPath2)) {\n          depPathsMap[depPath2] = depPath1;\n          unresolvedDepPaths.delete(depPath1);\n          unresolvedDepPaths.delete(depPath2);\n        } else {\n          nextDepPaths.push(depPath2);\n        }\n      }\n\n      nextDepPaths.push(...currentDepPaths);\n\n      currentDepPaths = nextDepPaths.sort(depCountSorter);\n    }\n\n    if (unresolvedDepPaths.size) {\n      remainingDuplicates.push(unresolvedDepPaths);\n    }\n  }\n\n  return {\n    depPathsMap,\n    remainingDuplicates,\n  };\n}\n\nfunction isCompatibleAndHasMoreDeps(\n  depGraph: GenericDependenciesGraphWithResolvedChildren,\n  depPath1: DepPath,\n  depPath2: DepPath\n): boolean {\n  const node1 = depGraph[depPath1];\n\n  const node2 = depGraph[depPath2];\n\n  if (typeof node1 === 'undefined' || typeof node2 === 'undefined') {\n    return false;\n  }\n\n  if (nodeDepsCount(node1) < nodeDepsCount(node2)) {\n    return false;\n  }\n\n  const node1DepPathsSet = new Set(Object.values(node1.children));\n\n  const node2DepPaths = Object.values(node2.children);\n\n  if (!node2DepPaths.every((depPath) => node1DepPathsSet.has(depPath))) {\n    return false;\n  }\n\n  for (const depPath of node2.resolvedPeerNames) {\n    if (!node1.resolvedPeerNames.has(depPath)) return false;\n  }\n\n  return true;\n}\n\nfunction getRootPkgsByName(\n  dependenciesTree: DependenciesTree,\n  projects: ProjectToResolve[]\n): ParentRefs {\n  const rootProject =\n    projects.length > 1 ? projects.find(({ id }) => id === '.') : null;\n  return rootProject == null\n    ? {}\n    : createPkgsByName(dependenciesTree, rootProject);\n}\n\nfunction createPkgsByName(\n  dependenciesTree: DependenciesTree,\n  {\n    directNodeIdsByAlias,\n    topParents,\n  }: {\n    directNodeIdsByAlias: Map<string, NodeId>;\n    topParents: Array<{\n      name: string;\n      version: string;\n      alias?: string | undefined;\n      linkedDir?: NodeId | undefined;\n    }>;\n  }\n): ParentRefs {\n  const parentRefs = toPkgByName(\n    Array.from(directNodeIdsByAlias.entries()).map(\n      ([alias, nodeId]: [string, NodeId]): {\n        alias: string;\n        node: DependenciesTreeNode | undefined;\n        nodeId: NodeId;\n        parentNodeIds: never[];\n      } => {\n        return {\n          alias,\n          node: dependenciesTree.get(nodeId),\n          nodeId,\n          parentNodeIds: [],\n        };\n      }\n    )\n  );\n\n  const _updateParentRefs = updateParentRefs.bind(null, parentRefs);\n\n  for (const { name, version, alias, linkedDir } of topParents) {\n    const pkg = {\n      occurrence: 0,\n      alias,\n      depth: 0,\n      version,\n      nodeId: linkedDir,\n      parentNodeIds: [],\n    };\n\n    _updateParentRefs(name, pkg);\n    if (typeof alias === 'string' && alias !== name) {\n      _updateParentRefs(alias, pkg);\n    }\n  }\n\n  return parentRefs;\n}\n\ntype MissingPeerInfo = {\n  range: string;\n  optional: boolean;\n};\n\ntype MissingPeers = Map<string, MissingPeerInfo>;\n\ntype PeersCacheItem = {\n  depPath: DeferredPromise<DepPath>;\n  resolvedPeers: Map<string, NodeId>;\n  missingPeers: MissingPeers;\n};\n\ntype PeersCache = Map<PkgIdWithPatchHash, PeersCacheItem[]>;\n\ntype PeersResolution = {\n  missingPeers: MissingPeers;\n  resolvedPeers: Map<string, NodeId>;\n};\n\n// type ResolvePeersContext = {\n//   pathsByNodeId: Map<NodeId, DepPath>;\n//   pathsByNodeIdPromises: Map<NodeId, DeferredPromise<DepPath>>;\n//   depPathsByPkgId?: Map<PkgIdWithPatchHash, Set<DepPath>> | undefined;\n// };\n\ntype CalculateDepPath = (cycles: string[][]) => Promise<void>;\ntype FinishingResolutionPromise = Promise<void>;\n\ntype ParentPkgInfo = {\n  pkgIdWithPatchHash?: PkgIdWithPatchHash | undefined;\n  version?: string | undefined;\n  depth?: number | undefined;\n  occurrence?: number | undefined;\n};\n\ntype ParentPkgsOfNode = Map<NodeId, Record<string, ParentPkgInfo>>;\n\nasync function resolvePeersOfNode(\n  currentAlias: string,\n  nodeId: NodeId,\n  parentParentPkgs: ParentRefs,\n  ctx: {\n    pathsByNodeId: Map<NodeId, DepPath>;\n    pathsByNodeIdPromises: Map<NodeId, DeferredPromise<DepPath>>;\n    depPathsByPkgId?: Map<PkgIdWithPatchHash, Set<DepPath>> | undefined;\n\n    allPeerDepNames: Set<string>;\n    parentPkgsOfNode: ParentPkgsOfNode;\n    parentNodeIds: NodeId[];\n    parentDepPathsChain: PkgIdWithPatchHash[];\n    dependenciesTree: DependenciesTree;\n    depGraph: GenericDependenciesGraph;\n    virtualStoreDir: string;\n    virtualStoreDirMaxLength: number;\n    peerDependencyIssues: Pick<PeerDependencyIssues, 'bad' | 'missing'>;\n    peersCache: PeersCache;\n    purePkgs: Set<PkgIdWithPatchHash>; // pure packages are those that don't rely on externally resolved peers\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n    lockfileDir: string;\n    peersSuffixMaxLength: number;\n  },\n  allResolvedPeers: Map<string, NodeId>\n): Promise<\n  | (PeersResolution & {\n      finishing?: FinishingResolutionPromise | undefined;\n      calculateDepPath?: CalculateDepPath | undefined;\n    })\n  | null\n> {\n  const node = ctx.dependenciesTree.get(nodeId);\n\n  if (typeof node === 'undefined' || node.depth === -1) {\n    return {\n      resolvedPeers: new Map<string, NodeId>(),\n      missingPeers: new Map<string, MissingPeerInfo>(),\n    };\n  }\n\n  const resolvedPackage = node.resolvedPackage;\n\n  if (\n    typeof resolvedPackage === 'undefined' ||\n    !('pkgIdWithPatchHash' in resolvedPackage)\n  ) {\n    return null;\n  }\n\n  if (\n    ctx.purePkgs.has(resolvedPackage.pkgIdWithPatchHash) &&\n    (ctx.depGraph[resolvedPackage.pkgIdWithPatchHash]?.depth ?? 0) <=\n      node.depth &&\n    Object.keys(resolvedPackage.peerDependencies).length === 0\n  ) {\n    ctx.pathsByNodeId.set(\n      nodeId,\n      resolvedPackage.pkgIdWithPatchHash as unknown as DepPath\n    );\n\n    ctx.pathsByNodeIdPromises\n      .get(nodeId)\n      ?.resolve(resolvedPackage.pkgIdWithPatchHash as unknown as DepPath);\n\n    return {\n      resolvedPeers: new Map<string, NodeId>(),\n      missingPeers: new Map<string, MissingPeerInfo>(),\n    };\n  }\n\n  if (typeof node.children === 'function') {\n    node.children = node.children();\n  }\n\n  const parentNodeIds = [...ctx.parentNodeIds, nodeId];\n\n  const children = node.children;\n\n  let parentPkgs: ParentRefs;\n\n  if (Object.keys(children).length === 0) {\n    parentPkgs = parentParentPkgs;\n  } else {\n    parentPkgs = { ...parentParentPkgs };\n\n    const parentPkgNodes: Array<ParentPkgNode> = [];\n\n    for (const [alias, nodeId] of Object.entries(children)) {\n      if (ctx.allPeerDepNames.has(alias)) {\n        parentPkgNodes.push({\n          alias,\n          node: ctx.dependenciesTree.get(nodeId),\n          nodeId,\n          parentNodeIds,\n        });\n      }\n    }\n\n    const newParentPkgs = toPkgByName(parentPkgNodes);\n\n    const _parentPkgsMatch = parentPkgsMatch.bind(null, ctx.dependenciesTree);\n\n    for (const [newParentPkgName, newParentPkg] of Object.entries(\n      newParentPkgs\n    )) {\n      if (parentPkgs[newParentPkgName]) {\n        if (!_parentPkgsMatch(parentPkgs[newParentPkgName], newParentPkg)) {\n          newParentPkg.occurrence = parentPkgs[newParentPkgName].occurrence + 1;\n\n          parentPkgs[newParentPkgName] = newParentPkg;\n        }\n      } else {\n        parentPkgs[newParentPkgName] = newParentPkg;\n      }\n    }\n  }\n\n  const hit = findHit(ctx, parentPkgs, resolvedPackage.pkgIdWithPatchHash);\n\n  if (typeof hit !== 'undefined') {\n    for (const [\n      peerName,\n      { range: wantedRange, optional },\n    ] of hit.missingPeers.entries()) {\n      if (ctx.peerDependencyIssues.missing[peerName] == null) {\n        ctx.peerDependencyIssues.missing[peerName] = [];\n      }\n\n      const { parents } = getLocationFromParentNodeIds({\n        dependenciesTree: ctx.dependenciesTree,\n        parentNodeIds,\n      });\n\n      ctx.peerDependencyIssues.missing[peerName].push({\n        optional,\n        parents,\n        wantedRange,\n      });\n    }\n\n    return {\n      missingPeers: hit.missingPeers,\n      finishing: (async (): Promise<void> => {\n        const depPath = await hit.depPath.promise;\n\n        ctx.pathsByNodeId.set(nodeId, depPath);\n\n        const depNode = ctx.depGraph[depPath];\n\n        if (typeof depNode !== 'undefined') {\n          depNode.depth = Math.min(depNode.depth, node.depth);\n        }\n        ctx.pathsByNodeIdPromises.get(nodeId)?.resolve(depPath);\n      })(),\n      resolvedPeers: hit.resolvedPeers,\n    };\n  }\n\n  const {\n    resolvedPeers: unknownResolvedPeersOfChildren,\n    missingPeers: missingPeersOfChildren,\n    finishing,\n  } = await resolvePeersOfChildren(children, parentPkgs, {\n    ...ctx,\n    parentNodeIds,\n    parentDepPathsChain: ctx.parentDepPathsChain.includes(\n      resolvedPackage.pkgIdWithPatchHash\n    )\n      ? ctx.parentDepPathsChain\n      : [...ctx.parentDepPathsChain, resolvedPackage.pkgIdWithPatchHash],\n  });\n\n  const { resolvedPeers, missingPeers } =\n    Object.keys(resolvedPackage.peerDependencies).length === 0\n      ? {\n          resolvedPeers: new Map<string, NodeId>(),\n          missingPeers: new Map<string, MissingPeerInfo>(),\n        }\n      : _resolvePeers({\n          currentDepth: node.depth,\n          dependenciesTree: ctx.dependenciesTree,\n          lockfileDir: ctx.lockfileDir,\n          nodeId,\n          parentPkgs,\n          peerDependencyIssues: ctx.peerDependencyIssues,\n          resolvedPackage,\n          rootDir: ctx.rootDir,\n          parentNodeIds,\n        });\n\n  for (const [k, v] of resolvedPeers) {\n    unknownResolvedPeersOfChildren.set(k, v);\n  }\n\n  if (typeof node.resolvedPackage.name === 'string') {\n    unknownResolvedPeersOfChildren.delete(node.resolvedPackage.name);\n  }\n\n  const allMissingPeers = new Map<string, MissingPeerInfo>();\n\n  for (const [peer, range] of missingPeersOfChildren.entries()) {\n    allMissingPeers.set(peer, range);\n  }\n\n  for (const [peer, range] of missingPeers.entries()) {\n    allMissingPeers.set(peer, range);\n  }\n\n  let cache: PeersCacheItem | undefined;\n\n  const isPure =\n    unknownResolvedPeersOfChildren.size === 0 && allMissingPeers.size === 0;\n\n  if (isPure) {\n    ctx.purePkgs.add(resolvedPackage.pkgIdWithPatchHash);\n  } else {\n    cache = {\n      missingPeers: allMissingPeers,\n      depPath: pDefer(),\n      resolvedPeers: unknownResolvedPeersOfChildren,\n    };\n\n    if (ctx.peersCache.has(resolvedPackage.pkgIdWithPatchHash)) {\n      ctx.peersCache.get(resolvedPackage.pkgIdWithPatchHash)?.push(cache);\n    } else {\n      ctx.peersCache.set(resolvedPackage.pkgIdWithPatchHash, [cache]);\n    }\n  }\n\n  let calculateDepPathIfNeeded: CalculateDepPath | undefined;\n\n  if (unknownResolvedPeersOfChildren.size === 0) {\n    addDepPathToGraph(\n      node,\n      resolvedPackage.pkgIdWithPatchHash as unknown as DepPath,\n      nodeId,\n      cache,\n      ctx,\n      resolvedPackage,\n      allResolvedPeers,\n      missingPeersOfChildren,\n      resolvedPeers,\n      children,\n      isPure\n    );\n  } else {\n    const peerIds: PeerId[] = [];\n\n    const pendingPeers: PendingPeer[] = [];\n\n    for (const [\n      alias,\n      peerNodeId,\n    ] of unknownResolvedPeersOfChildren.entries()) {\n      if (typeof peerNodeId === 'string' && peerNodeId.startsWith('link:')) {\n        const linkedDir = peerNodeId.slice(5);\n\n        peerIds.push({\n          name: alias,\n          version: filenamify(linkedDir, { replacement: '+' }),\n        });\n\n        continue;\n      }\n\n      const peerDepPath = ctx.pathsByNodeId.get(peerNodeId);\n\n      if (peerDepPath) {\n        peerIds.push(peerDepPath);\n\n        continue;\n      }\n\n      pendingPeers.push({ alias, nodeId: peerNodeId });\n    }\n\n    if (pendingPeers.length === 0) {\n      const peersDirSuffix = createPeersDirSuffix(\n        peerIds,\n        ctx.peersSuffixMaxLength\n      );\n\n      addDepPathToGraph(\n        node,\n        `${resolvedPackage.pkgIdWithPatchHash}${peersDirSuffix}` as DepPath,\n        nodeId,\n        cache,\n        ctx,\n        resolvedPackage,\n        allResolvedPeers,\n        missingPeersOfChildren,\n        resolvedPeers,\n        children,\n        isPure\n      );\n    } else {\n      calculateDepPathIfNeeded = calculateDepPath.bind(\n        null,\n        node,\n        peerIds,\n        pendingPeers,\n        resolvedPackage\n      );\n    }\n  }\n\n  return {\n    resolvedPeers: unknownResolvedPeersOfChildren,\n    missingPeers: allMissingPeers,\n    calculateDepPath: calculateDepPathIfNeeded,\n    finishing,\n  };\n\n  async function calculateDepPath(\n    node: DependenciesTreeNode,\n    peerIds: PeerId[],\n    pendingPeerNodes: PendingPeer[],\n    resolvedPackage: ResolvedPackage & {\n      name: string;\n      version: string;\n    },\n    cycles: string[][]\n  ): Promise<void> {\n    const cyclicPeerAliases = new Set();\n\n    for (const cycle of cycles) {\n      if (cycle.includes(currentAlias)) {\n        for (const peerAlias of cycle) {\n          cyclicPeerAliases.add(peerAlias);\n        }\n      }\n    }\n\n    const peersDirSuffix = createPeersDirSuffix(\n      [\n        ...peerIds,\n        ...(\n          await Promise.all(\n            pendingPeerNodes.map(\n              async (pendingPeer: PendingPeer): Promise<string | undefined> => {\n                if (cyclicPeerAliases.has(pendingPeer.alias)) {\n                  const resolvedPackage = ctx.dependenciesTree.get(\n                    pendingPeer.nodeId\n                  )?.resolvedPackage;\n\n                  if (typeof resolvedPackage !== 'undefined') {\n                    const { name, version } = resolvedPackage;\n\n                    const id = `${name}@${version}`;\n\n                    ctx.pathsByNodeIdPromises\n                      .get(pendingPeer.nodeId)\n                      ?.resolve(id as DepPath);\n\n                    return id;\n                  }\n                }\n\n                return ctx.pathsByNodeIdPromises.get(pendingPeer.nodeId)\n                  ?.promise;\n              }\n            )\n          )\n        ).filter(Boolean),\n      ],\n      ctx.peersSuffixMaxLength\n    );\n\n    addDepPathToGraph(\n      node,\n      `${resolvedPackage.pkgIdWithPatchHash}${peersDirSuffix}` as DepPath,\n      nodeId,\n      cache,\n      ctx,\n      resolvedPackage,\n      allResolvedPeers,\n      missingPeersOfChildren,\n      resolvedPeers,\n      children,\n      isPure\n    );\n  }\n}\n\nfunction addDepPathToGraph(\n  node: DependenciesTreeNode,\n  depPath: DepPath,\n  nodeId: NodeId,\n  cache: PeersCacheItem | undefined,\n  ctx: {\n    pathsByNodeId: Map<NodeId, DepPath>;\n    pathsByNodeIdPromises: Map<NodeId, DeferredPromise<DepPath>>;\n    depPathsByPkgId?: Map<PkgIdWithPatchHash, Set<DepPath>> | undefined;\n    allPeerDepNames: Set<string>;\n    parentPkgsOfNode: ParentPkgsOfNode;\n    parentNodeIds: NodeId[];\n    parentDepPathsChain: PkgIdWithPatchHash[];\n    dependenciesTree: DependenciesTree;\n    depGraph: GenericDependenciesGraph;\n    virtualStoreDir: string;\n    virtualStoreDirMaxLength: number;\n    peerDependencyIssues: Pick<PeerDependencyIssues, 'bad' | 'missing'>;\n    peersCache: PeersCache;\n    purePkgs: Set<PkgIdWithPatchHash>;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n    lockfileDir: string;\n    peersSuffixMaxLength: number;\n  },\n  resolvedPackage: ResolvedPackage,\n\n  allResolvedPeers: Map<string, NodeId>,\n  missingPeersOfChildren: MissingPeers,\n  resolvedPeers: Map<string, NodeId>,\n  children: {\n    [alias: string]: NodeId;\n  },\n  isPure: boolean\n): void {\n  cache?.depPath.resolve(depPath);\n\n  ctx.pathsByNodeId.set(nodeId, depPath);\n\n  ctx.pathsByNodeIdPromises.get(nodeId)?.resolve(depPath);\n\n  if (typeof ctx.depPathsByPkgId !== 'undefined') {\n    if (ctx.depPathsByPkgId.has(resolvedPackage.pkgIdWithPatchHash) === true) {\n      ctx.depPathsByPkgId.get(resolvedPackage.pkgIdWithPatchHash)?.add(depPath);\n    } else {\n      ctx.depPathsByPkgId.set(\n        resolvedPackage.pkgIdWithPatchHash,\n        new Set([depPath])\n      );\n    }\n  }\n\n  const peerDependencies = { ...resolvedPackage.peerDependencies };\n\n  if (!ctx.depGraph[depPath] || ctx.depGraph[depPath].depth > node.depth) {\n    const modules = path.join(\n      ctx.virtualStoreDir,\n      depPathToFilename(depPath, ctx.virtualStoreDirMaxLength),\n      'node_modules'\n    );\n\n    const dir = path.join(modules, resolvedPackage.name);\n\n    const transitivePeerDependencies = new Set<string>();\n\n    for (const unknownPeer of allResolvedPeers.keys()) {\n      if (!peerDependencies[unknownPeer]) {\n        transitivePeerDependencies.add(unknownPeer);\n      }\n    }\n\n    for (const unknownPeer of missingPeersOfChildren.keys()) {\n      if (!peerDependencies[unknownPeer]) {\n        transitivePeerDependencies.add(unknownPeer);\n      }\n    }\n\n    if ('id' in node.resolvedPackage) {\n      ctx.depGraph[depPath] = {\n        ...node.resolvedPackage,\n        isBuilt: false,\n        childrenNodeIds: Object.assign(\n          getPreviouslyResolvedChildren(\n            ctx,\n            node.resolvedPackage.pkgIdWithPatchHash\n          ),\n          children,\n          Object.fromEntries(resolvedPeers.entries())\n        ),\n        depPath,\n        depth: node.depth,\n        dir,\n        installable: node.installable ?? false,\n        isPure,\n        modules,\n        peerDependencies,\n        transitivePeerDependencies,\n        resolvedPeerNames: new Set(allResolvedPeers.keys()),\n      };\n    }\n  }\n}\n\ntype PendingPeer = {\n  alias: string;\n  nodeId: NodeId;\n};\n\nfunction parentPkgsMatch(\n  dependenciesTree: DependenciesTree,\n  currentParentPkg: ParentRef,\n  newParentPkg: ParentRef\n): boolean {\n  if (\n    currentParentPkg.version !== newParentPkg.version ||\n    currentParentPkg.alias !== newParentPkg.alias\n  ) {\n    return false;\n  }\n\n  const currentParentResolvedPkg =\n    currentParentPkg.nodeId &&\n    dependenciesTree.get(currentParentPkg.nodeId)?.resolvedPackage;\n\n  if (currentParentResolvedPkg == null) {\n    return true;\n  }\n\n  const newParentResolvedPkg =\n    newParentPkg.nodeId &&\n    dependenciesTree.get(newParentPkg.nodeId)?.resolvedPackage;\n\n  if (newParentResolvedPkg == null) {\n    return true;\n  }\n\n  return currentParentResolvedPkg.name === newParentResolvedPkg.name;\n}\n\nfunction findHit(\n  ctx: {\n    parentPkgsOfNode: ParentPkgsOfNode;\n    peersCache: PeersCache;\n    purePkgs: Set<PkgIdWithPatchHash>;\n    pathsByNodeId: Map<NodeId, DepPath>;\n    dependenciesTree: DependenciesTree;\n  },\n  parentPkgs: ParentRefs,\n  pkgIdWithPatchHash: PkgIdWithPatchHash\n): PeersCacheItem | undefined {\n  const cacheItems = ctx.peersCache.get(pkgIdWithPatchHash);\n\n  if (typeof cacheItems === 'undefined') {\n    return undefined;\n  }\n\n  return cacheItems.find((cache: PeersCacheItem): boolean => {\n    for (const [name, cachedNodeId] of cache.resolvedPeers) {\n      const parentPkgNodeId = parentPkgs[name]?.nodeId;\n\n      if (Boolean(parentPkgNodeId) !== Boolean(cachedNodeId)) {\n        return false;\n      }\n\n      if (parentPkgNodeId === cachedNodeId) {\n        continue;\n      }\n\n      if (!parentPkgNodeId) {\n        return false;\n      }\n\n      if (\n        ctx.pathsByNodeId.has(cachedNodeId) &&\n        ctx.pathsByNodeId.get(cachedNodeId) ===\n          ctx.pathsByNodeId.get(parentPkgNodeId)\n      ) {\n        continue;\n      }\n\n      if (\n        !ctx.dependenciesTree.has(parentPkgNodeId) &&\n        typeof parentPkgNodeId === 'string' &&\n        parentPkgNodeId.startsWith('link:')\n      ) {\n        return false;\n      }\n\n      const parent = ctx.dependenciesTree.get(parentPkgNodeId);\n\n      const cached = ctx.dependenciesTree.get(cachedNodeId);\n\n      if (typeof parent === 'undefined' || typeof cached === 'undefined') {\n        return false;\n      }\n\n      if (\n        'pkgIdWithPatchHash' in parent.resolvedPackage &&\n        'pkgIdWithPatchHash' in cached.resolvedPackage\n      ) {\n        const parentPkgId = parent.resolvedPackage.pkgIdWithPatchHash;\n\n        const cachedPkgId = cached.resolvedPackage.pkgIdWithPatchHash;\n\n        if (parentPkgId !== cachedPkgId) {\n          return false;\n        }\n\n        if (\n          !ctx.purePkgs.has(parentPkgId) &&\n          !parentPackagesMatch(ctx, cachedNodeId, parentPkgNodeId)\n        ) {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    for (const missingPeer of cache.missingPeers.keys()) {\n      if (parentPkgs[missingPeer]) return false;\n    }\n\n    return true;\n  });\n}\n\nfunction parentPackagesMatch(\n  ctx: {\n    parentPkgsOfNode: ParentPkgsOfNode;\n    purePkgs: Set<PkgIdWithPatchHash>;\n  },\n  cachedNodeId: NodeId,\n  checkedNodeId: NodeId\n): boolean {\n  const cachedParentPkgs = ctx.parentPkgsOfNode.get(cachedNodeId);\n\n  if (!cachedParentPkgs) {\n    return false;\n  }\n\n  const checkedParentPkgs = ctx.parentPkgsOfNode.get(checkedNodeId);\n\n  if (!checkedParentPkgs) {\n    return false;\n  }\n\n  if (\n    Object.keys(cachedParentPkgs).length !==\n    Object.keys(checkedParentPkgs).length\n  ) {\n    return false;\n  }\n\n  const maxDepth = Object.values(checkedParentPkgs).reduce(\n    (maxDepth, { depth }) => Math.max(depth ?? 0, maxDepth),\n    0\n  );\n\n  const peerDepsAreNotShadowed =\n    parentPkgsHaveSingleOccurrence(cachedParentPkgs) &&\n    parentPkgsHaveSingleOccurrence(checkedParentPkgs);\n\n  return Object.entries(cachedParentPkgs).every(\n    ([name, { version, pkgIdWithPatchHash }]: [\n      string,\n      ParentPkgInfo,\n    ]): boolean => {\n      const pp = checkedParentPkgs[name];\n\n      if (typeof pp === 'undefined') {\n        return false;\n      }\n\n      if (typeof version === 'string' && typeof pp.version === 'string') {\n        return version === pp.version;\n      }\n\n      return (\n        pkgIdWithPatchHash != null &&\n        pkgIdWithPatchHash === pp.pkgIdWithPatchHash &&\n        (peerDepsAreNotShadowed ||\n          // Peer dependencies that appear last we can consider valid.\n          // If they do depend on other peer dependencies then they must be those that we will check further.\n          pp.depth === maxDepth ||\n          ctx.purePkgs.has(pkgIdWithPatchHash))\n      );\n    }\n  );\n}\n\nfunction parentPkgsHaveSingleOccurrence(\n  parentPkgs: Record<string, ParentPkgInfo>\n): boolean {\n  return Object.values(parentPkgs).every(\n    ({ occurrence }: ParentPkgInfo): boolean => {\n      return occurrence === 0 || occurrence == null;\n    }\n  );\n}\n\n// When a package has itself in the subdependencies, so there's a cycle,\n// pnpm will break the cycle, when it first repeats itself.\n// However, when the cycle is broken up, the last repeated package is removed\n// from the dependencies of the parent package.\n// So we need to merge all the children of all the parent packages with same ID as the resolved package.\n// This way we get all the children that were removed, when ending cycles.\nfunction getPreviouslyResolvedChildren(\n  {\n    parentNodeIds,\n    parentDepPathsChain,\n    dependenciesTree,\n  }: {\n    parentNodeIds: NodeId[];\n    parentDepPathsChain: PkgIdWithPatchHash[];\n    dependenciesTree: DependenciesTree;\n  },\n  currentDepPath?: PkgIdWithPatchHash | undefined\n): ChildrenMap {\n  const allChildren: ChildrenMap = {};\n\n  if (!currentDepPath || !parentDepPathsChain.includes(currentDepPath))\n    return allChildren;\n\n  for (let i = parentNodeIds.length - 1; i >= 0; i--) {\n    const id = parentNodeIds[i];\n\n    if (typeof id === 'undefined') {\n      continue;\n    }\n\n    const parentNode = dependenciesTree.get(id);\n\n    if (typeof parentNode === 'undefined') {\n      continue;\n    }\n\n    if (!('pkgIdWithPatchHash' in parentNode.resolvedPackage)) {\n      continue;\n    }\n\n    if (parentNode.resolvedPackage.pkgIdWithPatchHash === currentDepPath) {\n      if (typeof parentNode.children === 'function') {\n        parentNode.children = parentNode.children();\n      }\n\n      Object.assign<ChildrenMap, ChildrenMap>(allChildren, parentNode.children);\n    }\n  }\n\n  return allChildren;\n}\n\nasync function resolvePeersOfChildren(\n  children: {\n    [alias: string]: NodeId;\n  },\n  parentPkgs: ParentRefs,\n  ctx: {\n    pathsByNodeId: Map<NodeId, DepPath>;\n    pathsByNodeIdPromises: Map<NodeId, DeferredPromise<DepPath>>;\n    depPathsByPkgId?: Map<PkgIdWithPatchHash, Set<DepPath>> | undefined;\n\n    allPeerDepNames: Set<string>;\n    parentPkgsOfNode: ParentPkgsOfNode;\n    parentNodeIds: NodeId[];\n    parentDepPathsChain: PkgIdWithPatchHash[];\n    peerDependencyIssues: Pick<PeerDependencyIssues, 'bad' | 'missing'>;\n    peersCache: PeersCache;\n    virtualStoreDir: string;\n    virtualStoreDirMaxLength: number;\n    purePkgs: Set<PkgIdWithPatchHash>;\n    depGraph: GenericDependenciesGraph;\n    dependenciesTree: DependenciesTree;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n    lockfileDir: string;\n    peersSuffixMaxLength: number;\n  }\n): Promise<PeersResolution & { finishing: Promise<void> }> {\n  const allResolvedPeers = new Map<string, NodeId>();\n\n  const allMissingPeers = new Map<string, MissingPeerInfo>();\n\n  // Partition children based on whether they're repeated in parentPkgs.\n  // This impacts the efficiency of graph traversal and prevents potential out-of-memory errors.\n  // We check repeated first as the peers resolution of those probably are cached already.\n  const [repeated, notRepeated] = partition.default(\n    ([alias]: [string, NodeId]): boolean => {\n      return parentPkgs[alias] != null;\n    },\n    Object.entries(children)\n  );\n\n  const nodeIds = Array.from(\n    new Set(\n      [...repeated, ...notRepeated].map(\n        ([_, nodeId]: [string, NodeId]): NodeId => {\n          return nodeId;\n        }\n      )\n    )\n  );\n\n  const aliasByNodeId = Object.fromEntries(\n    Object.entries(children).map(\n      ([alias, nodeId]: [string, NodeId]): [NodeId, string] => {\n        return [nodeId, alias];\n      }\n    )\n  );\n\n  for (const nodeId of nodeIds) {\n    if (!ctx.pathsByNodeIdPromises.has(nodeId)) {\n      ctx.pathsByNodeIdPromises.set(nodeId, pDefer());\n    }\n  }\n\n  // Resolving non-repeated nodes before repeated nodes proved to be slightly faster.\n  const calculateDepPaths: CalculateDepPath[] = [];\n\n  const graph = [];\n\n  const finishingList: FinishingResolutionPromise[] = [];\n\n  const parentDepPaths: Record<string, ParentPkgInfo> = {};\n\n  for (const [name, parentPkg] of Object.entries(parentPkgs)) {\n    if (!ctx.allPeerDepNames.has(name)) continue;\n\n    if (\n      parentPkg.nodeId &&\n      (typeof parentPkg.nodeId === 'number' ||\n        !parentPkg.nodeId.startsWith('link:'))\n    ) {\n      const dn = ctx.dependenciesTree.get(parentPkg.nodeId);\n\n      if (typeof dn !== 'undefined') {\n        parentDepPaths[name] = {\n          pkgIdWithPatchHash:\n            'pkgIdWithPatchHash' in dn.resolvedPackage\n              ? dn.resolvedPackage.pkgIdWithPatchHash\n              : undefined,\n          depth: parentPkg.depth,\n          occurrence: parentPkg.occurrence,\n        };\n      }\n    } else {\n      parentDepPaths[name] = { version: parentPkg.version };\n    }\n  }\n\n  for (const childNodeId of nodeIds) {\n    ctx.parentPkgsOfNode.set(childNodeId, parentDepPaths);\n  }\n\n  for (const childNodeId of nodeIds) {\n    const currentAlias = aliasByNodeId[childNodeId];\n\n    if (typeof currentAlias === 'undefined') {\n      continue;\n    }\n\n    const node = await resolvePeersOfNode(\n      currentAlias,\n      childNodeId,\n      parentPkgs,\n      ctx,\n      allResolvedPeers\n    );\n\n    if (node == null) {\n      continue;\n    }\n\n    const { resolvedPeers, missingPeers, calculateDepPath, finishing } = node;\n\n    if (finishing) {\n      finishingList.push(finishing);\n    }\n\n    if (calculateDepPath) {\n      calculateDepPaths.push(calculateDepPath);\n    }\n\n    const edges: string[] = [];\n\n    for (const [peerName, peerNodeId] of resolvedPeers) {\n      allResolvedPeers.set(peerName, peerNodeId);\n\n      edges.push(peerName);\n    }\n\n    graph.push([currentAlias, edges]);\n\n    for (const [missingPeer, range] of missingPeers.entries()) {\n      allMissingPeers.set(missingPeer, range);\n    }\n  }\n\n  if (calculateDepPaths.length) {\n    const { cycles } = analyzeGraph(graph as unknown as Graph) as unknown as {\n      cycles: string[][];\n    };\n\n    finishingList.push(\n      ...calculateDepPaths.map((calculateDepPath): Promise<void> => {\n        return calculateDepPath(cycles);\n      })\n    );\n  }\n\n  const finishing = Promise.all(finishingList).then(() => {});\n\n  const unknownResolvedPeersOfChildren = new Map<string, NodeId>();\n\n  for (const [alias, v] of allResolvedPeers) {\n    if (!children[alias]) {\n      unknownResolvedPeersOfChildren.set(alias, v);\n    }\n  }\n\n  return {\n    resolvedPeers: unknownResolvedPeersOfChildren,\n    missingPeers: allMissingPeers,\n    finishing,\n  };\n}\n\nfunction _resolvePeers(ctx: {\n  currentDepth: number;\n  lockfileDir: string;\n  nodeId: NodeId;\n  parentPkgs: ParentRefs;\n  parentNodeIds: NodeId[];\n  resolvedPackage: PartialResolvedPackage;\n  dependenciesTree: DependenciesTree;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n  peerDependencyIssues: Pick<PeerDependencyIssues, 'bad' | 'missing'>;\n}): PeersResolution {\n  const resolvedPeers = new Map<string, NodeId>();\n\n  const missingPeers = new Map<string, MissingPeerInfo>();\n\n  for (const [peerName, { version, optional }] of Object.entries(\n    ctx.resolvedPackage.peerDependencies\n  )) {\n    const peerVersionRange = version.replace(/^workspace:/, '');\n\n    const resolved = ctx.parentPkgs[peerName];\n\n    const optionalPeer = optional === true;\n\n    if (!resolved) {\n      missingPeers.set(peerName, { range: version, optional: optionalPeer });\n\n      const location = getLocationFromParentNodeIds(ctx);\n\n      if (!ctx.peerDependencyIssues.missing[peerName]) {\n        ctx.peerDependencyIssues.missing[peerName] = [];\n      }\n\n      ctx.peerDependencyIssues.missing[peerName].push({\n        parents: location.parents,\n        optional: optionalPeer,\n        wantedRange: peerVersionRange,\n      });\n\n      continue;\n    }\n\n    if (\n      semverUtils.satisfiesWithPrereleases(\n        resolved.version,\n        peerVersionRange,\n        true\n      ) !== true\n    ) {\n      const location = getLocationFromParentNodeIds(ctx);\n\n      if (!ctx.peerDependencyIssues.bad[peerName]) {\n        ctx.peerDependencyIssues.bad[peerName] = [];\n      }\n\n      const peerLocation =\n        resolved.nodeId == null\n          ? []\n          : getLocationFromParentNodeIds({\n              dependenciesTree: ctx.dependenciesTree,\n              parentNodeIds: resolved.parentNodeIds,\n            }).parents;\n\n      ctx.peerDependencyIssues.bad[peerName].push({\n        foundVersion: resolved.version,\n        resolvedFrom: peerLocation,\n        parents: location.parents,\n        optional: optionalPeer,\n        wantedRange: peerVersionRange,\n      });\n    }\n\n    if (resolved.nodeId) {\n      resolvedPeers.set(peerName, resolved.nodeId);\n    }\n  }\n\n  return { resolvedPeers, missingPeers };\n}\n\ntype Location = {\n  projectId: string;\n  parents: ParentPackages;\n};\n\nfunction getLocationFromParentNodeIds({\n  dependenciesTree,\n  parentNodeIds,\n}: {\n  dependenciesTree: DependenciesTree;\n  parentNodeIds: NodeId[];\n}): Location {\n  const parents = parentNodeIds.map(\n    (nid: NodeId): Pick<ResolvedPackage, 'name' | 'version'> => {\n      return pick.default(\n        ['name', 'version'],\n        dependenciesTree.get(nid)?.resolvedPackage as ResolvedPackage\n      );\n    }\n  );\n\n  return {\n    projectId: '.',\n    parents,\n  };\n}\n\ntype ParentRefs = {\n  [name: string]: ParentRef;\n};\n\ntype ParentRef = {\n  version: string;\n  depth: number;\n  // this is null only for already installed top dependencies\n  nodeId?: NodeId | undefined;\n  alias?: string | undefined;\n  occurrence: number;\n  parentNodeIds: NodeId[];\n};\n\ntype ParentPkgNode = {\n  alias: string;\n  nodeId: NodeId;\n  node?: DependenciesTreeNode | undefined;\n  parentNodeIds: NodeId[];\n};\n\nfunction toPkgByName(nodes: Array<ParentPkgNode>): ParentRefs {\n  const pkgsByName: ParentRefs = {};\n\n  const _updateParentRefs = updateParentRefs.bind(null, pkgsByName);\n\n  for (const { alias, node, nodeId, parentNodeIds } of nodes) {\n    if (\n      typeof node === 'undefined' ||\n      typeof node.resolvedPackage === 'undefined'\n    ) {\n      continue;\n    }\n\n    const pkg = {\n      alias,\n      depth: node.depth,\n      nodeId,\n      version: node.resolvedPackage.version,\n      occurrence: 0,\n      parentNodeIds,\n    };\n\n    _updateParentRefs(alias, pkg);\n\n    if (alias !== node.resolvedPackage.name) {\n      _updateParentRefs(node.resolvedPackage.name, pkg);\n    }\n  }\n\n  return pkgsByName;\n}\n\nfunction updateParentRefs(\n  parentRefs: ParentRefs,\n  newAlias: string,\n  pkg: ParentRef\n): void {\n  const existing = parentRefs[newAlias];\n\n  if (existing) {\n    const existingHasAlias =\n      existing.alias != null && existing.alias !== newAlias;\n\n    if (!existingHasAlias) {\n      return;\n    }\n\n    const newHasAlias = pkg.alias != null && pkg.alias !== newAlias;\n\n    if (newHasAlias && semver.gte(existing.version, pkg.version)) {\n      return;\n    }\n  }\n\n  parentRefs[newAlias] = pkg;\n}\n"],
  "mappings": "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",
  "names": ["depGraph", "nodeId", "node", "resolvedPackage", "maxDepth", "finishing"]
}
