{
  "version": 3,
  "sources": ["../../../../src/packages/resolve-dependencies/resolveDependencies.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport {\n  matchCatalogResolveResult,\n  type CatalogResolution,\n  type CatalogResolutionFound,\n  type CatalogResolutionMisconfiguration,\n  type CatalogResolver,\n} from '../catalogs.resolver/index.ts';\nimport {\n  deprecationLogger,\n  progressLogger,\n  skippedOptionalDependencyLogger,\n} from '../core-loggers/index.ts';\nimport { PnpmError } from '../error/index.ts';\nimport type {\n  LockfileObject,\n  PackageSnapshot,\n  ProjectSnapshot,\n  ResolvedDependencies,\n} from '../lockfile.types/index.ts';\nimport {\n  nameVerFromPkgSnapshot,\n  pkgSnapshotToResolution,\n} from '../lockfile.utils/index.ts';\nimport { logger } from '../logger/index.ts';\nimport { getPatchInfo } from '../patching.config/index.ts';\nimport { pickRegistryForPackage } from '../pick-registry-for-package/index.ts';\nimport {\n  type DirectoryResolution,\n  DIRECT_DEP_SELECTOR_WEIGHT,\n  type PreferredVersions,\n  type Resolution,\n  type WorkspacePackages,\n} from '../resolver-base/index.ts';\nimport type {\n  PkgRequestFetchResult,\n  PackageResponse,\n  StoreController,\n} from '../store-controller-types/index.ts';\nimport type {\n  DepPath,\n  SupportedArchitectures,\n  AllowedDeprecatedVersions,\n  PackageManifest,\n  ReadPackageHook,\n  Registries,\n  PkgIdWithPatchHash,\n  PkgResolutionId,\n  LockFileDir,\n  GlobalPkgDir,\n  ProjectRootDir,\n  ProjectRootDirRealPath,\n  WorkspaceDir,\n} from '../types/index.ts';\nimport * as dp from '../dependency-path/index.ts';\nimport { getPreferredVersionsFromLockfileAndManifests } from '../lockfile.preferred-versions/index.ts';\nimport type { PatchGroupRecord, PatchInfo } from '../patching.types/index.ts';\nimport normalizePath from 'normalize-path';\nimport { pathExists } from 'path-exists';\nimport pDefer from 'p-defer';\nimport pShare from 'promise-share';\nimport partition from 'ramda/src/partition';\nimport pickBy from 'ramda/src/pickBy';\nimport omit from 'ramda/src/omit';\nimport zipWith from 'ramda/src/zipWith';\nimport semver from 'semver';\nimport { getNonDevWantedDependencies } from './getNonDevWantedDependencies.ts';\nimport { safeIntersect } from './mergePeers.ts';\nimport { type NodeId, nextNodeId } from './nextNodeId.ts';\nimport { parentIdsContainSequence } from './parentIdsContainSequence.ts';\nimport { hoistPeers, getHoistableOptionalPeers } from './hoistPeers.ts';\nimport { wantedDepIsLocallyAvailable } from './wantedDepIsLocallyAvailable.ts';\nimport type { CatalogLookupMetadata } from './resolveDependencyTree.ts';\nimport { replaceVersionInPref } from './replaceVersionInPref.ts';\nimport type { WantedDependency } from './getWantedDependencies.ts';\n\nconst dependencyResolvedLogger = logger('_dependency_resolved');\n\nconst omitDepsFields = omit.default([\n  'dependencies',\n  'optionalDependencies',\n  'peerDependencies',\n  'peerDependenciesMeta',\n]);\n\nexport function getPkgsInfoFromIds(\n  ids: PkgResolutionId[],\n  resolvedPkgsById: ResolvedPkgsById\n): Array<{ id: PkgResolutionId; name: string; version: string }> {\n  return ids\n    .slice(1)\n    .map(\n      (\n        id: PkgResolutionId\n      ): { id: PkgResolutionId; name: string; version: string } | undefined => {\n        const pkg = resolvedPkgsById[id];\n\n        if (typeof pkg === 'undefined') {\n          return;\n        }\n\n        const { name, version } = pkg;\n\n        return { id, name, version };\n      }\n    )\n    .filter(Boolean);\n}\n\n// child nodeId by child alias name in case of non-linked deps\nexport type ChildrenMap = {\n  [alias: string]: NodeId;\n};\n\nexport type DependenciesTreeNode = {\n  children: (() => ChildrenMap) | ChildrenMap;\n  installable?: boolean | undefined;\n} & (\n  | {\n      resolvedPackage: ResolvedPackage & { name: string; version: string };\n      depth: number;\n    }\n  | {\n      resolvedPackage: { name: string; version: string };\n      depth: -1;\n    }\n);\n\nexport type DependenciesTree = Map<\n  // a node ID is the join of the package's keypath with a colon\n  // E.g., a subdeps node ID which parent is `foo` will be\n  // registry.npmjs.org/foo/1.0.0:registry.npmjs.org/bar/1.0.0\n  NodeId,\n  DependenciesTreeNode\n>;\n\nexport type ResolvedPkgsById = Record<PkgResolutionId, ResolvedPackage>;\n\nexport type LinkedDependency = {\n  isLinkedDependency: true;\n  optional?: boolean | undefined;\n  dev?: boolean | undefined;\n  resolution: DirectoryResolution;\n  pkgId: PkgResolutionId;\n  version: string;\n  name: string;\n  normalizedPref?: string | undefined;\n  alias: string;\n  catalogLookup?: CatalogLookupMetadata | undefined;\n};\n\nexport type PendingNode = {\n  alias: string;\n  nodeId: NodeId;\n  resolvedPackage: ResolvedPackage;\n  depth: number;\n  installable: boolean;\n  parentIds: PkgResolutionId[];\n};\n\nexport type ChildrenByParentId = {\n  [id: PkgResolutionId]: Array<{\n    alias: string;\n    id: PkgResolutionId;\n  }>;\n};\n\nexport type ResolutionContext = {\n  allPeerDepNames: Set<string>;\n  autoInstallPeers: boolean;\n  autoInstallPeersFromHighestMatch: boolean;\n  allowedDeprecatedVersions: AllowedDeprecatedVersions;\n  allPreferredVersions?: PreferredVersions | undefined;\n  appliedPatches: Set<string>;\n  updatedSet: Set<string>;\n  catalogResolver: CatalogResolver;\n  defaultTag: string;\n  dryRun: boolean;\n  forceFullResolution: boolean;\n  ignoreScripts?: boolean | undefined;\n  resolvedPkgsById: ResolvedPkgsById;\n  outdatedDependencies: Record<PkgResolutionId, string>;\n  childrenByParentId: ChildrenByParentId;\n  patchedDependencies?: PatchGroupRecord | undefined;\n  pendingNodes: PendingNode[];\n  wantedLockfile: LockfileObject;\n  currentLockfile: LockfileObject;\n  injectWorkspacePackages?: boolean | undefined;\n  linkWorkspacePackagesDepth: number;\n  lockfileDir: LockFileDir;\n  storeController: StoreController<\n    PackageResponse,\n    PackageResponse,\n    {\n      isBuilt: boolean;\n      importMethod?: string | undefined;\n    }\n  >;\n  // the IDs of packages that are not installable\n  skipped: Set<PkgResolutionId>;\n  dependenciesTree: DependenciesTree;\n  force: boolean;\n  preferWorkspacePackages?: boolean | undefined;\n  readPackageHook?: ReadPackageHook | undefined;\n  engineStrict: boolean;\n  nodeVersion?: string | undefined;\n  pnpmVersion: string;\n  registries: Registries;\n  resolutionMode?: 'highest' | 'time-based' | 'lowest-direct' | undefined;\n  virtualStoreDir: string;\n  virtualStoreDirMaxLength: number;\n  workspacePackages?: WorkspacePackages | undefined;\n  missingPeersOfChildrenByPkgId: Record<\n    PkgResolutionId,\n    { depth: number; missingPeersOfChildren: MissingPeersOfChildren }\n  >;\n  hoistPeers?: boolean | undefined;\n};\n\nexport type MissingPeers = Record<string, { range: string; optional: boolean }>;\n\nexport type ResolvedPeers = Record<string, PkgAddress>;\n\ntype MissingPeersOfChildren = {\n  resolve: (missingPeers: MissingPeers) => void;\n  reject: (err: Error) => void;\n  get: () => Promise<MissingPeers>;\n  resolved?: boolean | undefined;\n};\n\nexport type PkgAddress = {\n  alias: string;\n  depIsLinked: boolean;\n  isNew: boolean;\n  // isLinkedDependency?: false | undefined;\n  nodeId: NodeId;\n  pkgId: PkgResolutionId;\n  normalizedPref?: string | undefined; // is returned only for root dependencies\n  installable?: boolean | undefined;\n  pkg: PackageManifest;\n  // version?: string | undefined;\n  updated: boolean;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n  missingPeers: MissingPeers;\n  missingPeersOfChildren?: MissingPeersOfChildren | undefined;\n  publishedAt?: string | undefined;\n  catalogLookup?: CatalogLookupMetadata | undefined;\n  optional: boolean;\n  isLinkedDependency?: undefined;\n  version?: undefined;\n};\n\nexport type PeerDependency = {\n  version: string;\n  optional?: boolean | undefined;\n};\n\nexport type PeerDependencies = Record<string, PeerDependency>;\n\nexport type ResolvedPackage = {\n  id: PkgResolutionId;\n  isLeaf: boolean;\n  resolution?: Resolution | undefined;\n  prod: boolean;\n  dev?: boolean | undefined;\n  optional: boolean;\n  fetching?: (() => Promise<PkgRequestFetchResult<unknown>>) | undefined;\n  filesIndexFile?: string | undefined;\n  name: string;\n  version: string;\n  peerDependencies: PeerDependencies;\n  optionalDependencies: Set<string>;\n  hasBin: boolean;\n  hasBundledDependencies: boolean;\n  patch?: PatchInfo | undefined;\n  prepare: boolean;\n  pkgIdWithPatchHash: PkgIdWithPatchHash;\n  requiresBuild?: boolean | undefined;\n  transitivePeerDependencies: Set<string>;\n  additionalInfo: {\n    deprecated?: string | undefined;\n    bundleDependencies?: string[] | boolean | undefined;\n    bundledDependencies?: string[] | boolean | undefined;\n    engines?:\n      | {\n          node?: string | undefined;\n          npm?: string | undefined;\n        }\n      | undefined;\n    cpu?: string[] | undefined;\n    os?: string[] | undefined;\n    libc?: string[] | undefined;\n  };\n};\n\ntype ParentPkg = Pick<\n  PkgAddress,\n  'nodeId' | 'installable' | 'rootDir' | 'optional' | 'pkgId'\n>;\n\nexport type ParentPkgAliases = Record<string, PkgAddress | true>;\n\nexport type UpdateMatchingFunction = (pkgName: string) => boolean;\n\ntype ResolvedDependenciesOptions = {\n  currentDepth: number;\n  parentIds: PkgResolutionId[];\n  parentPkg: ParentPkg;\n  parentPkgAliases: ParentPkgAliases;\n  // If the package has been updated, the dependencies\n  // which were used by the previous version are passed\n  // via this option\n  preferredDependencies?: ResolvedDependencies | undefined;\n  proceed: boolean;\n  publishedBy?: Date | undefined;\n  pickLowestVersion?: boolean | undefined;\n  resolvedDependencies?: ResolvedDependencies | undefined;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  updateDepth: number;\n  prefix: string;\n  supportedArchitectures?: SupportedArchitectures | undefined;\n  updateToLatest?: boolean | undefined;\n};\n\ntype PostponedResolutionOpts = {\n  preferredVersions: PreferredVersions;\n  parentPkgAliases: ParentPkgAliases;\n  publishedBy?: Date | undefined;\n};\n\ntype PeersResolutionResult = {\n  missingPeers: MissingPeers;\n  resolvedPeers: ResolvedPeers;\n};\n\ntype PostponedResolutionFunction = (\n  opts: PostponedResolutionOpts\n) => Promise<PeersResolutionResult>;\ntype PostponedPeersResolutionFunction = (\n  parentPkgAliases: ParentPkgAliases\n) => Promise<PeersResolutionResult>;\n\ninterface ResolvedRootDependenciesResult {\n  pkgAddressesByImporters: Array<Array<PkgAddress | LinkedDependency>>;\n  time?: Record<string, string> | undefined;\n}\n\nexport async function resolveRootDependencies(\n  ctx: ResolutionContext,\n  importers: ImporterToResolve[]\n): Promise<ResolvedRootDependenciesResult> {\n  if (ctx.autoInstallPeers) {\n    ctx.allPreferredVersions = getPreferredVersionsFromLockfileAndManifests(\n      ctx.wantedLockfile.packages,\n      []\n    );\n  } else if (ctx.hoistPeers === true) {\n    ctx.allPreferredVersions = {};\n  }\n\n  const { pkgAddressesByImportersWithoutPeers, publishedBy, time } =\n    await resolveDependenciesOfImporters(ctx, importers);\n\n  if (ctx.hoistPeers !== true) {\n    return {\n      pkgAddressesByImporters: pkgAddressesByImportersWithoutPeers.map(\n        ({ pkgAddresses }) => pkgAddresses\n      ),\n      time,\n    };\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n  while (true) {\n    const allMissingOptionalPeersByImporters = (\n      await Promise.all(\n        pkgAddressesByImportersWithoutPeers.map(\n          async (\n            importerResolutionResult: PkgAddressesByImportersWithoutPeers,\n            index: number\n          ): Promise<Record<string, string[]> | null> => {\n            const importer = importers[index];\n\n            if (typeof importer === 'undefined') {\n              return null;\n            }\n\n            const { parentPkgAliases, preferredVersions, options } = importer;\n\n            const allMissingOptionalPeers: Record<string, string[]> = {};\n\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            while (true) {\n              for (const pkgAddress of importerResolutionResult.pkgAddresses) {\n                parentPkgAliases[pkgAddress.alias] = true;\n              }\n\n              const [missingOptionalPeers, missingRequiredPeers] =\n                partition.default(\n                  ([, { optional }]: [\n                    string,\n                    {\n                      range: string;\n                      optional: boolean;\n                    },\n                  ]): boolean => {\n                    return optional;\n                  },\n                  Object.entries(importerResolutionResult.missingPeers)\n                );\n\n              for (const missingPeerName of Object.keys(missingRequiredPeers)) {\n                parentPkgAliases[missingPeerName] = true;\n              }\n\n              if (ctx.autoInstallPeers) {\n                // All the missing peers should get installed in the root.\n                // Otherwise, pending nodes will not work.\n                // even those peers should be hoisted that are not autoinstalled\n                for (const [\n                  resolvedPeerName,\n                  resolvedPeerAddress,\n                ] of Object.entries(importerResolutionResult.resolvedPeers)) {\n                  if (\n                    typeof parentPkgAliases[resolvedPeerName] === 'undefined'\n                  ) {\n                    importerResolutionResult.pkgAddresses.push(\n                      resolvedPeerAddress\n                    );\n                  }\n                }\n              }\n\n              for (const [\n                missingOptionalPeerName,\n                { range: missingOptionalPeerRange },\n              ] of missingOptionalPeers) {\n                if (!allMissingOptionalPeers[missingOptionalPeerName]) {\n                  allMissingOptionalPeers[missingOptionalPeerName] = [\n                    missingOptionalPeerRange,\n                  ];\n                } else if (\n                  !allMissingOptionalPeers[missingOptionalPeerName].includes(\n                    missingOptionalPeerRange\n                  )\n                ) {\n                  allMissingOptionalPeers[missingOptionalPeerName].push(\n                    missingOptionalPeerRange\n                  );\n                }\n              }\n\n              if (!missingRequiredPeers.length) {\n                break;\n              }\n\n              const dependencies = hoistPeers(missingRequiredPeers, ctx);\n\n              if (!Object.keys(dependencies).length) {\n                break;\n              }\n\n              const wantedDependencies = getNonDevWantedDependencies({\n                dependencies,\n              });\n\n              const resolveDependenciesResult = await resolveDependencies(\n                ctx,\n                preferredVersions,\n                wantedDependencies,\n                {\n                  ...options,\n                  parentPkgAliases,\n                  publishedBy,\n                  updateToLatest: false,\n                }\n              );\n\n              importerResolutionResult.pkgAddresses.push(\n                ...resolveDependenciesResult.pkgAddresses\n              );\n\n              Object.assign<\n                PkgAddressesByImportersWithoutPeers,\n                PeersResolutionResult\n              >(\n                importerResolutionResult,\n                filterMissingPeers(\n                  await resolveDependenciesResult.resolvingPeers,\n                  parentPkgAliases\n                )\n              );\n            }\n\n            return allMissingOptionalPeers;\n          }\n        )\n      )\n    ).filter(Boolean);\n\n    let hasNewMissingPeers = false;\n\n    await Promise.all(\n      allMissingOptionalPeersByImporters.map(\n        async (\n          allMissingOptionalPeers: Record<string, string[]>,\n          index: number\n        ): Promise<void> => {\n          const importer = importers[index];\n\n          if (typeof importer === 'undefined') {\n            return;\n          }\n\n          const { preferredVersions, parentPkgAliases, options } = importer;\n\n          if (\n            Object.keys(allMissingOptionalPeers).length &&\n            ctx.allPreferredVersions\n          ) {\n            const optionalDependencies = getHoistableOptionalPeers(\n              allMissingOptionalPeers,\n              ctx.allPreferredVersions\n            );\n\n            if (Object.keys(optionalDependencies).length) {\n              hasNewMissingPeers = true;\n\n              const wantedDependencies = getNonDevWantedDependencies({\n                optionalDependencies,\n              });\n\n              const resolveDependenciesResult = await resolveDependencies(\n                ctx,\n                preferredVersions,\n                wantedDependencies,\n                {\n                  ...options,\n                  parentPkgAliases,\n                  publishedBy,\n                  updateToLatest: false,\n                }\n              );\n\n              const pkg = pkgAddressesByImportersWithoutPeers[index];\n\n              if (typeof pkg !== 'undefined') {\n                pkg.pkgAddresses.push(\n                  ...resolveDependenciesResult.pkgAddresses\n                );\n\n                Object.assign<\n                  PkgAddressesByImportersWithoutPeers,\n                  PeersResolutionResult\n                >(\n                  pkg,\n                  filterMissingPeers(\n                    await resolveDependenciesResult.resolvingPeers,\n                    parentPkgAliases\n                  )\n                );\n              }\n            }\n          }\n        }\n      )\n    );\n\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n    if (!hasNewMissingPeers) {\n      break;\n    }\n  }\n\n  return {\n    pkgAddressesByImporters: pkgAddressesByImportersWithoutPeers.map(\n      ({\n        pkgAddresses,\n      }: PkgAddressesByImportersWithoutPeers): (\n        | PkgAddress\n        | LinkedDependency\n      )[] => {\n        return pkgAddresses;\n      }\n    ),\n    time,\n  };\n}\n\ntype ResolvedDependenciesResult = {\n  pkgAddresses: Array<PkgAddress | LinkedDependency>;\n  resolvingPeers: Promise<PeersResolutionResult>;\n};\n\ninterface PkgAddressesByImportersWithoutPeers extends PeersResolutionResult {\n  pkgAddresses: Array<PkgAddress | LinkedDependency>;\n}\n\nexport type ImporterToResolveOptions = Omit<\n  ResolvedDependenciesOptions,\n  'parentPkgAliases' | 'publishedBy'\n>;\n\nexport type ImporterToResolve = {\n  updatePackageManifest: boolean;\n  preferredVersions: PreferredVersions;\n  parentPkgAliases: ParentPkgAliases;\n  wantedDependencies: Array<\n    WantedDependency & { updateDepth?: number | undefined }\n  >;\n  options: ImporterToResolveOptions;\n};\n\ntype ResolveDependenciesOfImportersResult = {\n  pkgAddressesByImportersWithoutPeers: PkgAddressesByImportersWithoutPeers[];\n  publishedBy?: Date | undefined;\n  time?: Record<string, string> | undefined;\n};\n\nasync function resolveDependenciesOfImporters(\n  ctx: ResolutionContext,\n  importers: ImporterToResolve[]\n): Promise<ResolveDependenciesOfImportersResult> {\n  const pickLowestVersion =\n    ctx.resolutionMode === 'time-based' ||\n    ctx.resolutionMode === 'lowest-direct';\n\n  const resolveResults = await Promise.all(\n    importers.map(\n      async (\n        importer: ImporterToResolve\n      ): Promise<{\n        pkgAddresses: PkgAddress[];\n        postponedResolutionsQueue: PostponedResolutionFunction[];\n        postponedPeersResolutionQueue: PostponedPeersResolutionFunction[];\n      }> => {\n        const extendedWantedDeps = getDepsToResolve(\n          importer.wantedDependencies,\n          ctx.wantedLockfile,\n          {\n            preferredDependencies: importer.options.preferredDependencies,\n            prefix: importer.options.prefix,\n            proceed: importer.options.proceed || ctx.forceFullResolution,\n            registries: ctx.registries,\n            resolvedDependencies: importer.options.resolvedDependencies,\n          }\n        );\n\n        const postponedResolutionsQueue: PostponedResolutionFunction[] = [];\n\n        const postponedPeersResolutionQueue: PostponedPeersResolutionFunction[] =\n          [];\n\n        const pkgAddresses: PkgAddress[] = [];\n\n        const resolveDependenciesOfImporterWantedDep =\n          resolveDependenciesOfImporterDependency.bind(null, {\n            ctx,\n            importer,\n            pickLowestVersion,\n          });\n\n        const resolvedDependenciesOfImporter = await Promise.all(\n          extendedWantedDeps.map(resolveDependenciesOfImporterWantedDep)\n        );\n\n        for (const {\n          resolveDependencyResult,\n          postponedPeersResolution,\n          postponedResolution,\n        } of resolvedDependenciesOfImporter) {\n          if (resolveDependencyResult) {\n            pkgAddresses.push(resolveDependencyResult as PkgAddress);\n          }\n\n          if (postponedResolution) {\n            postponedResolutionsQueue.push(postponedResolution);\n          }\n\n          if (postponedPeersResolution) {\n            postponedPeersResolutionQueue.push(postponedPeersResolution);\n          }\n        }\n\n        return {\n          pkgAddresses,\n          postponedResolutionsQueue,\n          postponedPeersResolutionQueue,\n        };\n      }\n    )\n  );\n\n  let publishedBy: Date | undefined;\n\n  let time: Record<string, string> | undefined;\n\n  if (ctx.resolutionMode === 'time-based') {\n    const result = getPublishedByDate(\n      resolveResults.flatMap(({ pkgAddresses }) => pkgAddresses),\n      ctx.wantedLockfile.time\n    );\n\n    if (result.publishedBy) {\n      publishedBy = new Date(result.publishedBy.getTime() + 60 * 60 * 1000); // adding 1 hour delta\n\n      time = result.newTime;\n    }\n  }\n\n  const pkgAddressesByImportersWithoutPeers = await Promise.all(\n    zipWith.default(\n      async (\n        importer,\n        {\n          pkgAddresses,\n          postponedResolutionsQueue,\n          postponedPeersResolutionQueue,\n        }\n      ) => {\n        const newPreferredVersions: PreferredVersions = Object.create(\n          importer.preferredVersions\n        );\n\n        const currentParentPkgAliases: Record<string, PkgAddress | true> = {};\n\n        for (const pkgAddress of pkgAddresses) {\n          if (currentParentPkgAliases[pkgAddress.alias] !== true) {\n            currentParentPkgAliases[pkgAddress.alias] = pkgAddress;\n          }\n\n          if (pkgAddress.updated) {\n            ctx.updatedSet.add(pkgAddress.alias);\n          }\n\n          const resolvedPackage = ctx.resolvedPkgsById[pkgAddress.pkgId];\n\n          // This will happen only with linked dependencies\n          if (typeof resolvedPackage === 'undefined') {\n            continue;\n          }\n\n          if (\n            !Object.prototype.hasOwnProperty.call(\n              newPreferredVersions,\n              resolvedPackage.name\n            )\n          ) {\n            newPreferredVersions[resolvedPackage.name] = {\n              ...importer.preferredVersions[resolvedPackage.name],\n            };\n          }\n\n          const nv = newPreferredVersions[resolvedPackage.name];\n\n          if (\n            typeof nv !== 'undefined' &&\n            typeof nv[resolvedPackage.version] === 'undefined'\n          ) {\n            nv[resolvedPackage.version] = {\n              selectorType: 'version',\n              weight: DIRECT_DEP_SELECTOR_WEIGHT,\n            };\n          }\n        }\n\n        const newParentPkgAliases = {\n          ...importer.parentPkgAliases,\n          ...currentParentPkgAliases,\n        };\n\n        const postponedResolutionOpts: PostponedResolutionOpts = {\n          preferredVersions: newPreferredVersions,\n          parentPkgAliases: newParentPkgAliases,\n          publishedBy,\n        };\n\n        const childrenResults = await Promise.all(\n          postponedResolutionsQueue.map((postponedResolution) =>\n            postponedResolution(postponedResolutionOpts)\n          )\n        );\n\n        if (ctx.hoistPeers !== true) {\n          return {\n            missingPeers: {},\n            pkgAddresses,\n            resolvedPeers: {},\n          };\n        }\n\n        const postponedPeersResolution = await Promise.all(\n          postponedPeersResolutionQueue.map(\n            (postponedMissingPeers): Promise<PeersResolutionResult> => {\n              return postponedMissingPeers(\n                postponedResolutionOpts.parentPkgAliases\n              );\n            }\n          )\n        );\n\n        const resolvedPeers = [\n          ...childrenResults,\n          ...postponedPeersResolution,\n        ].reduce(\n          (\n            acc: ResolvedPeers,\n            { resolvedPeers }: PeersResolutionResult\n          ): ResolvedPeers => {\n            return Object.assign<ResolvedPeers, ResolvedPeers>(\n              acc,\n              resolvedPeers\n            );\n          },\n          {}\n        );\n\n        const allMissingPeers = mergePkgsDeps(\n          [\n            ...filterMissingPeersFromPkgAddresses(\n              pkgAddresses,\n              currentParentPkgAliases,\n              resolvedPeers\n            ),\n            ...childrenResults,\n            ...postponedPeersResolution,\n          ]\n            .map(\n              ({\n                missingPeers,\n              }: PkgAddress | PeersResolutionResult): MissingPeers => {\n                return missingPeers;\n              }\n            )\n            .filter(Boolean),\n          {\n            autoInstallPeersFromHighestMatch:\n              ctx.autoInstallPeersFromHighestMatch,\n          }\n        );\n\n        return {\n          missingPeers: allMissingPeers,\n          pkgAddresses,\n          resolvedPeers,\n        };\n      },\n      importers,\n      resolveResults\n    )\n  );\n\n  return {\n    pkgAddressesByImportersWithoutPeers,\n    publishedBy,\n    time,\n  };\n}\n\nexport type ResolveDependenciesOfImporterDependencyOpts = {\n  readonly ctx: ResolutionContext;\n  readonly importer: ImporterToResolve;\n  readonly pickLowestVersion: boolean;\n};\n\nasync function resolveDependenciesOfImporterDependency(\n  {\n    ctx,\n    importer,\n    pickLowestVersion,\n  }: ResolveDependenciesOfImporterDependencyOpts,\n  extendedWantedDep: ExtendedWantedDependency\n): Promise<ResolveDependenciesOfDependency> {\n  // The catalog protocol is only usable in importers (i.e. packages in the\n  // workspace. Replacing catalog protocol while resolving importers here before\n  // resolving dependencies of packages outside of the workspace/monorepo.\n  const catalogLookup = matchCatalogResolveResult(\n    ctx.catalogResolver(extendedWantedDep.wantedDependency),\n    {\n      found: (result: CatalogResolutionFound): CatalogResolution => {\n        return result.resolution;\n      },\n      unused: (): undefined => undefined,\n      misconfiguration: (result: CatalogResolutionMisconfiguration): never => {\n        throw result.error;\n      },\n    }\n  );\n\n  const originalPref = extendedWantedDep.wantedDependency.pref;\n  const originalAlias = extendedWantedDep.wantedDependency.alias;\n\n  if (\n    typeof catalogLookup !== 'undefined' &&\n    typeof ctx.wantedLockfile.catalogs !== 'undefined' &&\n    typeof originalAlias === 'string'\n  ) {\n    // The lockfile from a previous installation may have already resolved this\n    // cataloged dependency. Reuse the exact version in the lockfile catalog\n    // snapshot to ensure all projects using the same cataloged dependency get\n    // the same version.\n    const existingCatalogResolution =\n      ctx.wantedLockfile.catalogs[catalogLookup.catalogName]?.[originalAlias];\n\n    const replacementPref =\n      existingCatalogResolution?.specifier === catalogLookup.specifier\n        ? replaceVersionInPref(\n            catalogLookup.specifier,\n            existingCatalogResolution.version\n          )\n        : catalogLookup.specifier;\n\n    extendedWantedDep.wantedDependency.pref = replacementPref;\n  }\n\n  const result = await resolveDependenciesOfDependency(\n    ctx,\n    importer.preferredVersions,\n    {\n      ...importer.options,\n      parentPkgAliases: importer.parentPkgAliases,\n      pickLowestVersion: pickLowestVersion && !importer.updatePackageManifest,\n      // Cataloged dependencies cannot be upgraded yet since they require\n      // updating the pnpm-workspace.yaml file. This will be handled in a future\n      // version of pnpm.\n      updateToLatest:\n        catalogLookup != null ? false : importer.options.updateToLatest,\n    },\n    extendedWantedDep\n  );\n\n  // If the catalog protocol was used, store metadata about the catalog\n  // lookup to use in the lockfile.\n  if (result.resolveDependencyResult != null && catalogLookup != null) {\n    result.resolveDependencyResult.catalogLookup = {\n      ...catalogLookup,\n      userSpecifiedPref: originalPref,\n    };\n  }\n\n  return result;\n}\n\nfunction filterMissingPeersFromPkgAddresses(\n  pkgAddresses: PkgAddress[],\n  currentParentPkgAliases: ParentPkgAliases,\n  resolvedPeers: ResolvedPeers\n): PkgAddress[] {\n  return pkgAddresses.map((pkgAddress: PkgAddress): PkgAddress => {\n    return {\n      ...pkgAddress,\n      missingPeers: pickBy.default((_, peerName: string): boolean => {\n        if (typeof currentParentPkgAliases[peerName] === 'undefined') {\n          return true;\n        }\n\n        if (currentParentPkgAliases[peerName] !== true) {\n          resolvedPeers[peerName] = currentParentPkgAliases[\n            peerName\n          ] as PkgAddress;\n        }\n\n        return false;\n      }, pkgAddress.missingPeers),\n    };\n  });\n}\n\nfunction getPublishedByDate(\n  pkgAddresses: PkgAddress[],\n  timeFromLockfile: Record<string, string> = {}\n): { publishedBy?: Date | undefined; newTime: Record<string, string> } {\n  const newTime: Record<string, string> = {};\n\n  for (const pkgAddress of pkgAddresses) {\n    const tf = timeFromLockfile[pkgAddress.pkgId];\n\n    if (typeof pkgAddress.publishedAt === 'string') {\n      newTime[pkgAddress.pkgId] = pkgAddress.publishedAt;\n    } else if (typeof tf !== 'undefined') {\n      newTime[pkgAddress.pkgId] = tf;\n    }\n  }\n\n  const sortedDates = Object.values(newTime)\n    .map((publishedAt: string): Date => {\n      return new Date(publishedAt);\n    })\n    .sort((d1: Date, d2: Date): number => {\n      return d1.getTime() - d2.getTime();\n    });\n\n  return { publishedBy: sortedDates[sortedDates.length - 1], newTime };\n}\n\nexport async function resolveDependencies(\n  ctx: ResolutionContext,\n  preferredVersions: PreferredVersions,\n  wantedDependencies: Array<\n    WantedDependency & { updateDepth?: number | undefined }\n  >,\n  options: ResolvedDependenciesOptions\n): Promise<ResolvedDependenciesResult> {\n  const extendedWantedDeps = getDepsToResolve(\n    wantedDependencies,\n    ctx.wantedLockfile,\n    {\n      preferredDependencies: options.preferredDependencies,\n      prefix: options.prefix,\n      proceed: options.proceed || ctx.forceFullResolution,\n      registries: ctx.registries,\n      resolvedDependencies: options.resolvedDependencies,\n    }\n  );\n\n  const postponedResolutionsQueue: PostponedResolutionFunction[] = [];\n\n  const postponedPeersResolutionQueue: PostponedPeersResolutionFunction[] = [];\n\n  const pkgAddresses: PkgAddress[] = [];\n\n  await Promise.all(\n    extendedWantedDeps.map(\n      async (extendedWantedDep: ExtendedWantedDependency): Promise<void> => {\n        const {\n          resolveDependencyResult,\n          postponedResolution,\n          postponedPeersResolution,\n        } = await resolveDependenciesOfDependency(\n          ctx,\n          preferredVersions,\n          options,\n          extendedWantedDep\n        );\n\n        if (resolveDependencyResult) {\n          pkgAddresses.push(resolveDependencyResult as PkgAddress);\n        }\n\n        if (postponedResolution) {\n          postponedResolutionsQueue.push(postponedResolution);\n        }\n\n        if (postponedPeersResolution) {\n          postponedPeersResolutionQueue.push(postponedPeersResolution);\n        }\n      }\n    )\n  );\n\n  const newPreferredVersions = Object.create(\n    preferredVersions\n  ) as PreferredVersions;\n\n  const currentParentPkgAliases: Record<string, PkgAddress | true> = {};\n\n  for (const pkgAddress of pkgAddresses) {\n    if (currentParentPkgAliases[pkgAddress.alias] !== true) {\n      currentParentPkgAliases[pkgAddress.alias] = pkgAddress;\n    }\n\n    if (pkgAddress.updated) {\n      ctx.updatedSet.add(pkgAddress.alias);\n    }\n\n    const resolvedPackage = ctx.resolvedPkgsById[pkgAddress.pkgId];\n\n    // This will happen only with linked dependencies\n    if (!resolvedPackage) {\n      continue;\n    }\n\n    if (\n      !Object.prototype.hasOwnProperty.call(\n        newPreferredVersions,\n        resolvedPackage.name\n      )\n    ) {\n      newPreferredVersions[resolvedPackage.name] = {\n        ...preferredVersions[resolvedPackage.name],\n      };\n    }\n\n    const nv = newPreferredVersions[resolvedPackage.name];\n\n    if (\n      typeof nv !== 'undefined' &&\n      typeof nv[resolvedPackage.version] === 'undefined'\n    ) {\n      nv[resolvedPackage.version] = 'version';\n    }\n  }\n\n  const newParentPkgAliases = {\n    ...options.parentPkgAliases,\n    ...currentParentPkgAliases,\n  };\n\n  const postponedResolutionOpts: PostponedResolutionOpts = {\n    preferredVersions: newPreferredVersions,\n    parentPkgAliases: newParentPkgAliases,\n    publishedBy: options.publishedBy,\n  };\n\n  const childrenResults = await Promise.all(\n    postponedResolutionsQueue.map(\n      (postponedResolution): Promise<PeersResolutionResult> => {\n        return postponedResolution(postponedResolutionOpts);\n      }\n    )\n  );\n\n  if (ctx.hoistPeers !== true) {\n    return {\n      resolvingPeers: Promise.resolve({\n        missingPeers: {},\n        resolvedPeers: {},\n      }),\n      pkgAddresses,\n    };\n  }\n\n  return {\n    pkgAddresses,\n    resolvingPeers: startResolvingPeers({\n      childrenResults,\n      pkgAddresses,\n      parentPkgAliases: options.parentPkgAliases,\n      currentParentPkgAliases,\n      postponedPeersResolutionQueue,\n      autoInstallPeersFromHighestMatch: ctx.autoInstallPeersFromHighestMatch,\n    }),\n  };\n}\n\nasync function startResolvingPeers({\n  childrenResults,\n  currentParentPkgAliases,\n  parentPkgAliases,\n  pkgAddresses,\n  postponedPeersResolutionQueue,\n  autoInstallPeersFromHighestMatch,\n}: {\n  childrenResults: PeersResolutionResult[];\n  currentParentPkgAliases: ParentPkgAliases;\n  parentPkgAliases: ParentPkgAliases;\n  pkgAddresses: PkgAddress[];\n  postponedPeersResolutionQueue: PostponedPeersResolutionFunction[];\n  autoInstallPeersFromHighestMatch: boolean;\n}): Promise<PeersResolutionResult> {\n  const results = await Promise.all(\n    postponedPeersResolutionQueue.map(\n      (postponedPeersResolution): Promise<PeersResolutionResult> => {\n        return postponedPeersResolution(parentPkgAliases);\n      }\n    )\n  );\n\n  const resolvedPeers = [...childrenResults, ...results].reduce(\n    (\n      acc: ResolvedPeers,\n      { resolvedPeers }: PeersResolutionResult\n    ): ResolvedPeers => {\n      return Object.assign<ResolvedPeers, ResolvedPeers>(acc, resolvedPeers);\n    },\n    {}\n  );\n\n  const allMissingPeers = mergePkgsDeps(\n    [\n      ...filterMissingPeersFromPkgAddresses(\n        pkgAddresses,\n        currentParentPkgAliases,\n        resolvedPeers\n      ),\n      ...childrenResults,\n      ...results,\n    ]\n      .map(\n        ({\n          missingPeers,\n        }:\n          | PkgAddress\n          | PeersResolutionResult\n          | PeersResolutionResult): MissingPeers => {\n          return missingPeers;\n        }\n      )\n      .filter(Boolean),\n    { autoInstallPeersFromHighestMatch }\n  );\n\n  return {\n    missingPeers: allMissingPeers,\n    resolvedPeers,\n  };\n}\n\nfunction mergePkgsDeps(\n  pkgsDeps: MissingPeers[],\n  opts: { autoInstallPeersFromHighestMatch: boolean }\n): MissingPeers {\n  const groupedRanges: Record<string, { ranges: string[]; optional: boolean }> =\n    {};\n\n  for (const deps of pkgsDeps) {\n    for (const [name, { range, optional }] of Object.entries(deps)) {\n      if (typeof groupedRanges[name] === 'undefined') {\n        groupedRanges[name] = { ranges: [], optional };\n      } else {\n        groupedRanges[name].optional &&= optional;\n      }\n\n      groupedRanges[name].ranges.push(range);\n    }\n  }\n\n  const mergedPkgDeps = {} as MissingPeers;\n\n  for (const [name, { ranges, optional }] of Object.entries(groupedRanges)) {\n    const intersection = safeIntersect(ranges);\n\n    if (intersection !== null) {\n      mergedPkgDeps[name] = { range: intersection, optional };\n    } else if (opts.autoInstallPeersFromHighestMatch) {\n      mergedPkgDeps[name] = { range: ranges.join(' || '), optional };\n    }\n  }\n\n  return mergedPkgDeps;\n}\n\ntype ExtendedWantedDependency = {\n  infoFromLockfile?: InfoFromLockfile | undefined;\n  proceed: boolean;\n  wantedDependency: WantedDependency & { updateDepth?: number | undefined };\n};\n\ntype ResolveDependenciesOfDependency = {\n  postponedResolution?: PostponedResolutionFunction | undefined;\n  postponedPeersResolution?: PostponedPeersResolutionFunction | undefined;\n  resolveDependencyResult: ResolveDependencyResult;\n};\n\nasync function resolveDependenciesOfDependency(\n  ctx: ResolutionContext,\n  preferredVersions: PreferredVersions,\n  options: ResolvedDependenciesOptions,\n  extendedWantedDep: ExtendedWantedDependency\n): Promise<ResolveDependenciesOfDependency> {\n  const updateDepth =\n    typeof extendedWantedDep.wantedDependency.updateDepth === 'number'\n      ? extendedWantedDep.wantedDependency.updateDepth\n      : options.updateDepth;\n\n  const updateShouldContinue = options.currentDepth <= updateDepth;\n\n  const update =\n    typeof extendedWantedDep.infoFromLockfile?.name === 'string' &&\n    (typeof extendedWantedDep.infoFromLockfile.dependencyLockfile ===\n      'undefined' ||\n      (updateShouldContinue &&\n        (typeof options.updateMatching === 'undefined' ||\n          options.updateMatching(extendedWantedDep.infoFromLockfile.name))) ||\n      Boolean(\n        ctx.workspacePackages != null &&\n          ctx.linkWorkspacePackagesDepth !== -1 &&\n          wantedDepIsLocallyAvailable(\n            ctx.workspacePackages,\n            extendedWantedDep.wantedDependency,\n            { defaultTag: ctx.defaultTag, registry: ctx.registries.default }\n          )\n      ) ||\n      ctx.updatedSet.has(extendedWantedDep.infoFromLockfile.name));\n\n  const resolveDependencyOpts: ResolveDependencyOptions = {\n    currentDepth: options.currentDepth,\n    parentPkg: options.parentPkg,\n    parentPkgAliases: options.parentPkgAliases,\n    preferredVersions,\n    currentPkg: extendedWantedDep.infoFromLockfile ?? undefined,\n    pickLowestVersion: options.pickLowestVersion,\n    prefix: options.prefix,\n    proceed:\n      extendedWantedDep.proceed ||\n      updateShouldContinue ||\n      ctx.updatedSet.size > 0,\n    publishedBy: options.publishedBy,\n    update: update\n      ? options.updateToLatest === true\n        ? 'latest'\n        : 'compatible'\n      : false,\n    updateDepth,\n    updateMatching: options.updateMatching,\n    supportedArchitectures: options.supportedArchitectures,\n    parentIds: options.parentIds,\n  };\n\n  const resolveDependencyResult = await resolveDependency(\n    extendedWantedDep.wantedDependency,\n    ctx,\n    resolveDependencyOpts\n  );\n\n  if (resolveDependencyResult == null) {\n    return { resolveDependencyResult: null };\n  }\n\n  if (resolveDependencyResult.isLinkedDependency) {\n    ctx.dependenciesTree.set(\n      createNodeIdForLinkedLocalPkg(\n        ctx.lockfileDir,\n        resolveDependencyResult.resolution.directory\n      ),\n      {\n        children: {},\n        depth: -1,\n        installable: true,\n        resolvedPackage: {\n          name: resolveDependencyResult.name,\n          version: resolveDependencyResult.version,\n        },\n      }\n    );\n\n    return { resolveDependencyResult };\n  }\n\n  if (resolveDependencyResult.isNew !== true) {\n    const mc = resolveDependencyResult.missingPeersOfChildren;\n\n    return {\n      resolveDependencyResult,\n      postponedPeersResolution:\n        typeof mc === 'undefined'\n          ? undefined\n          : async (\n              parentPkgAliases: ParentPkgAliases\n            ): Promise<PeersResolutionResult> => {\n              const missingPeers = await mc.get();\n\n              return filterMissingPeers(\n                { missingPeers, resolvedPeers: {} },\n                parentPkgAliases\n              );\n            },\n    };\n  }\n\n  const postponedResolution = resolveChildren.bind(null, ctx, {\n    parentPkg: resolveDependencyResult,\n    dependencyLockfile: extendedWantedDep.infoFromLockfile?.dependencyLockfile,\n    parentDepth: options.currentDepth,\n    parentIds: [...options.parentIds, resolveDependencyResult.pkgId],\n    updateDepth,\n    prefix: options.prefix,\n    updateMatching: options.updateMatching,\n    supportedArchitectures: options.supportedArchitectures,\n    updateToLatest: options.updateToLatest,\n  });\n\n  return {\n    resolveDependencyResult,\n    postponedResolution: async (\n      postponedResolutionOpts: PostponedResolutionOpts\n    ): Promise<PeersResolutionResult> => {\n      const { missingPeers, resolvedPeers } = await postponedResolution(\n        postponedResolutionOpts\n      );\n\n      if (resolveDependencyResult.missingPeersOfChildren) {\n        resolveDependencyResult.missingPeersOfChildren.resolved = true;\n\n        resolveDependencyResult.missingPeersOfChildren.resolve(missingPeers);\n      }\n\n      return filterMissingPeers(\n        { missingPeers, resolvedPeers },\n        postponedResolutionOpts.parentPkgAliases\n      );\n    },\n  };\n}\n\nexport function createNodeIdForLinkedLocalPkg(\n  lockfileDir: string,\n  pkgDir: string\n): NodeId {\n  return `link:${normalizePath(path.relative(lockfileDir, pkgDir))}` as NodeId;\n}\n\nfunction filterMissingPeers(\n  { missingPeers, resolvedPeers }: PeersResolutionResult,\n  parentPkgAliases: ParentPkgAliases\n): PeersResolutionResult {\n  const newMissing: MissingPeers = {};\n\n  for (const [peerName, peerVersion] of Object.entries(missingPeers)) {\n    if (typeof parentPkgAliases[peerName] === 'undefined') {\n      newMissing[peerName] = peerVersion;\n    } else if (parentPkgAliases[peerName] !== true) {\n      resolvedPeers[peerName] = parentPkgAliases[peerName]; // as PkgAddress;\n    }\n  }\n\n  return {\n    resolvedPeers,\n    missingPeers: newMissing,\n  };\n}\n\nasync function resolveChildren(\n  ctx: ResolutionContext,\n  {\n    parentPkg,\n    parentIds,\n    dependencyLockfile,\n    parentDepth,\n    updateDepth,\n    updateMatching,\n    prefix,\n    supportedArchitectures,\n  }: {\n    parentPkg: PkgAddress;\n    parentIds: PkgResolutionId[];\n    dependencyLockfile: PackageSnapshot | undefined;\n    parentDepth: number;\n    updateDepth: number;\n    prefix: string;\n    updateMatching?: UpdateMatchingFunction | undefined;\n    supportedArchitectures?: SupportedArchitectures | undefined;\n    updateToLatest?: boolean | undefined;\n  },\n  {\n    parentPkgAliases,\n    preferredVersions,\n    publishedBy,\n  }: {\n    parentPkgAliases: ParentPkgAliases;\n    preferredVersions: PreferredVersions;\n    publishedBy?: Date | undefined;\n  }\n): Promise<PeersResolutionResult> {\n  const currentResolvedDependencies =\n    dependencyLockfile != null\n      ? {\n          ...dependencyLockfile.dependencies,\n          ...dependencyLockfile.optionalDependencies,\n        }\n      : undefined;\n\n  const resolvedDependencies = parentPkg.updated\n    ? undefined\n    : currentResolvedDependencies;\n\n  const parentDependsOnPeer = Boolean(\n    Object.keys(\n      dependencyLockfile?.peerDependencies ??\n        parentPkg.pkg.peerDependencies ??\n        {}\n    ).length\n  );\n\n  const wantedDependencies = getNonDevWantedDependencies(parentPkg.pkg);\n\n  const { pkgAddresses, resolvingPeers } = await resolveDependencies(\n    ctx,\n    preferredVersions,\n    wantedDependencies,\n    {\n      currentDepth: parentDepth + 1,\n      parentPkg,\n      parentPkgAliases,\n      preferredDependencies: currentResolvedDependencies,\n      prefix,\n      // If the package is not linked, we should also gather information about its dependencies.\n      // After linking the package we'll need to symlink its dependencies.\n      proceed: !parentPkg.depIsLinked || parentDependsOnPeer,\n      publishedBy,\n      resolvedDependencies,\n      updateDepth,\n      updateMatching,\n      supportedArchitectures,\n      parentIds,\n    }\n  );\n\n  ctx.childrenByParentId[parentPkg.pkgId] = pkgAddresses.map((child) => ({\n    alias: child.alias,\n    id: child.pkgId,\n  }));\n\n  const resolvedPackage = ctx.resolvedPkgsById[parentPkg.pkgId];\n\n  if (typeof resolvedPackage !== 'undefined') {\n    ctx.dependenciesTree.set(parentPkg.nodeId, {\n      children: pkgAddresses.reduce(\n        (\n          chn: Record<string, NodeId>,\n          child: PkgAddress | LinkedDependency\n        ): Record<string, NodeId> => {\n          // PkgAddress\n          chn[child.alias] =\n            'nodeId' in child\n              ? child.nodeId\n              : (child.pkgId as unknown as NodeId);\n\n          return chn;\n        },\n        {}\n      ),\n      depth: parentDepth,\n      installable: parentPkg.installable,\n      resolvedPackage,\n    });\n  }\n\n  return resolvingPeers;\n}\n\nfunction getDepsToResolve(\n  wantedDependencies: Array<\n    WantedDependency & { updateDepth?: number | undefined }\n  >,\n  wantedLockfile: LockfileObject,\n  options: {\n    preferredDependencies?: ResolvedDependencies | undefined;\n    prefix: string;\n    proceed: boolean;\n    registries: Registries;\n    resolvedDependencies?: ResolvedDependencies | undefined;\n  }\n): ExtendedWantedDependency[] {\n  const resolvedDependencies = options.resolvedDependencies ?? {};\n\n  const preferredDependencies = options.preferredDependencies ?? {};\n\n  const extendedWantedDeps: ExtendedWantedDependency[] = [];\n\n  // The only reason we resolve children in case the package depends on peers\n  // is to get information about the existing dependencies, so that they can\n  // be merged with the resolved peers.\n  let proceedAll = options.proceed;\n\n  const satisfiesWanted2Args = referenceSatisfiesWantedSpec.bind(null, {\n    lockfile: wantedLockfile,\n    prefix: options.prefix,\n  });\n\n  for (const wantedDependency of wantedDependencies) {\n    let reference = undefined as undefined | string;\n\n    let proceed = proceedAll;\n\n    if (\n      typeof wantedDependency.alias === 'string' &&\n      typeof wantedDependency.pref === 'string'\n    ) {\n      const satisfiesWanted = satisfiesWanted2Args.bind(null, {\n        alias: wantedDependency.alias,\n        pref: wantedDependency.pref,\n      });\n\n      const rd = resolvedDependencies[wantedDependency.alias];\n\n      const pd = preferredDependencies[wantedDependency.alias];\n\n      if (\n        typeof rd === 'string' &&\n        (satisfiesWanted(rd) || rd.startsWith('file:'))\n      ) {\n        reference = rd;\n      } else if (\n        // If dependencies that were used by the previous version of the package\n        // satisfy the newer version's requirements, then pnpm tries to keep\n        // the previous dependency.\n        // So for example, if foo@1.0.0 had bar@1.0.0 as a dependency\n        // and foo was updated to 1.1.0 which depends on bar ^1.0.0\n        // then bar@1.0.0 can be reused for foo@1.1.0\n        semver.validRange(wantedDependency.pref) !== null &&\n        typeof pd === 'string' &&\n        satisfiesWanted(pd)\n      ) {\n        proceed = true;\n\n        reference = pd;\n      }\n    }\n\n    const infoFromLockfile = getInfoFromLockfile(\n      wantedLockfile,\n      options.registries,\n      reference,\n      wantedDependency.alias\n    );\n    if (\n      !proceedAll &&\n      (infoFromLockfile == null ||\n        (infoFromLockfile.dependencyLockfile != null &&\n          (typeof infoFromLockfile.dependencyLockfile.peerDependencies !==\n            'undefined' ||\n            (typeof infoFromLockfile.dependencyLockfile\n              .transitivePeerDependencies !== 'undefined' &&\n              infoFromLockfile.dependencyLockfile.transitivePeerDependencies\n                .length > 0))))\n    ) {\n      proceed = true;\n\n      proceedAll = true;\n\n      for (const extendedWantedDep of extendedWantedDeps) {\n        if (!extendedWantedDep.proceed) {\n          extendedWantedDep.proceed = true;\n        }\n      }\n    }\n\n    extendedWantedDeps.push({\n      infoFromLockfile,\n      proceed,\n      wantedDependency,\n    });\n  }\n\n  return extendedWantedDeps;\n}\n\nfunction referenceSatisfiesWantedSpec(\n  opts: {\n    lockfile: LockfileObject;\n    prefix: string;\n  },\n  wantedDep: { alias: string; pref: string },\n  preferredRef: string\n): boolean {\n  const depPath = dp.refToRelative(preferredRef, wantedDep.alias);\n\n  if (depPath === null) {\n    return false;\n  }\n\n  const pkgSnapshot = opts.lockfile.packages?.[depPath];\n\n  if (pkgSnapshot == null) {\n    logger.warn({\n      message: `Could not find preferred package ${depPath} in lockfile`,\n      prefix: opts.prefix,\n    });\n\n    return false;\n  }\n\n  const { version } = nameVerFromPkgSnapshot(depPath, pkgSnapshot);\n\n  if (\n    semver.validRange(wantedDep.pref) === null &&\n    Object.values(opts.lockfile.importers ?? {}).filter(\n      (importer: ProjectSnapshot): boolean => {\n        return importer.specifiers[wantedDep.alias] === wantedDep.pref;\n      }\n    ).length\n  ) {\n    return true;\n  }\n\n  return semver.satisfies(version, wantedDep.pref, true);\n}\n\ntype InfoFromLockfile = {\n  pkgId: PkgResolutionId;\n  dependencyLockfile?: PackageSnapshot | undefined;\n  name?: string | undefined;\n  version?: string | undefined;\n  resolution?: Resolution | undefined;\n} & (\n  | {\n      dependencyLockfile: PackageSnapshot;\n      name: string;\n      version: string;\n      resolution: Resolution;\n    }\n  | unknown\n);\n\nfunction getInfoFromLockfile(\n  lockfile: LockfileObject,\n  registries: Registries,\n  reference: string | undefined,\n  alias: string | undefined\n): InfoFromLockfile | undefined {\n  if (\n    typeof reference === 'undefined' ||\n    reference === '' ||\n    typeof alias === 'undefined' ||\n    alias === ''\n  ) {\n    return undefined;\n  }\n\n  const depPath = dp.refToRelative(reference, alias);\n\n  if (!depPath) {\n    return undefined;\n  }\n\n  let dependencyLockfile = lockfile.packages?.[depPath];\n\n  if (dependencyLockfile != null) {\n    if (\n      dependencyLockfile.peerDependencies != null &&\n      dependencyLockfile.dependencies != null\n    ) {\n      // This is done to guarantee that the dependency will be relinked with the\n      // up-to-date peer dependencies\n      // Covered by test: \"peer dependency is grouped with dependency when peer is resolved not from a top dependency\"\n      const dependencies: Record<string, string> = {};\n\n      for (const [depName, ref] of Object.entries(\n        dependencyLockfile.dependencies ?? {}\n      )) {\n        if (\n          typeof dependencyLockfile.peerDependencies[depName] !== 'undefined'\n        ) {\n          continue;\n        }\n\n        dependencies[depName] = ref;\n      }\n\n      dependencyLockfile = {\n        ...dependencyLockfile,\n        dependencies,\n      };\n    }\n\n    const { name, version, nonSemverVersion } = nameVerFromPkgSnapshot(\n      depPath,\n      dependencyLockfile\n    );\n    return {\n      name,\n      version,\n      dependencyLockfile,\n      pkgId: nonSemverVersion ?? (`${name}@${version}` as PkgResolutionId),\n      // resolution may not exist if lockfile is broken, and an unexpected error will be thrown\n      // if resolution does not exist, return undefined so it can be autofixed later\n      resolution:\n        dependencyLockfile.resolution &&\n        pkgSnapshotToResolution(depPath, dependencyLockfile, registries),\n    };\n  }\n\n  const parsed = dp.parse(depPath);\n\n  return {\n    pkgId:\n      parsed.nonSemverVersion ??\n      ((typeof parsed.name === 'string' && typeof parsed.version === 'string'\n        ? `${parsed.name}@${parsed.version}`\n        : depPath) as PkgResolutionId), // Does it make sense to set pkgId when we're not sure?\n  };\n}\n\ninterface ResolveDependencyOptions {\n  currentDepth: number;\n  currentPkg?:\n    | {\n        depPath?: DepPath | undefined;\n        name?: string | undefined;\n        version?: string | undefined;\n        pkgId?: PkgResolutionId | undefined;\n        resolution?: Resolution | undefined;\n        dependencyLockfile?: PackageSnapshot | undefined;\n      }\n    | undefined;\n  parentPkg: ParentPkg;\n  parentIds: PkgResolutionId[];\n  parentPkgAliases: ParentPkgAliases;\n  preferredVersions: PreferredVersions;\n  prefix: string;\n  proceed: boolean;\n  publishedBy?: Date | undefined;\n  pickLowestVersion?: boolean | undefined;\n  update: false | 'compatible' | 'latest';\n  updateDepth: number;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  supportedArchitectures?: SupportedArchitectures | undefined;\n}\n\ntype ResolveDependencyResult = PkgAddress | LinkedDependency | null;\n\nasync function resolveDependency(\n  wantedDependency: WantedDependency,\n  ctx: ResolutionContext,\n  options: ResolveDependencyOptions\n): Promise<ResolveDependencyResult> {\n  const currentPkg = options.currentPkg;\n\n  const currentLockfileContainsTheDep = currentPkg?.depPath\n    ? Boolean(ctx.currentLockfile.packages?.[currentPkg.depPath])\n    : undefined;\n\n  const depIsLinked = Boolean(\n    // if package is not in `node_modules/.pnpm-lock.yaml`\n    // we can safely assume that it doesn't exist in `node_modules`\n    currentLockfileContainsTheDep === true &&\n      currentPkg?.depPath &&\n      currentPkg.dependencyLockfile &&\n      typeof currentPkg.name === 'string' &&\n      (await pathExists(\n        path.join(\n          ctx.virtualStoreDir,\n          dp.depPathToFilename(\n            currentPkg.depPath,\n            ctx.virtualStoreDirMaxLength\n          ),\n          'node_modules',\n          currentPkg.name,\n          'package.json'\n        )\n      ))\n  );\n\n  if (\n    options.update === false &&\n    !options.proceed &&\n    typeof currentPkg?.resolution !== 'undefined' &&\n    depIsLinked\n  ) {\n    return null;\n  }\n\n  let pkgResponse: PackageResponse | undefined;\n\n  let newWantedDependency: WantedDependency = wantedDependency;\n\n  if (options.parentPkg.installable !== true) {\n    newWantedDependency = {\n      ...newWantedDependency,\n      optional: true,\n    };\n  }\n\n  try {\n    if (\n      options.update === false &&\n      typeof currentPkg?.pkgId === 'string' &&\n      typeof currentPkg.version === 'string' &&\n      typeof newWantedDependency.pref === 'string' &&\n      currentPkg.pkgId.endsWith(`@${currentPkg.version}`) === true\n    ) {\n      newWantedDependency.pref = replaceVersionInPref(\n        newWantedDependency.pref,\n        currentPkg.version\n      );\n    }\n\n    pkgResponse = await ctx.storeController.requestPackage(\n      newWantedDependency,\n      {\n        alwaysTryWorkspacePackages:\n          ctx.linkWorkspacePackagesDepth >= options.currentDepth,\n        currentPkg: currentPkg\n          ? {\n              id: currentPkg.pkgId,\n              resolution: currentPkg.resolution,\n            }\n          : undefined,\n        expectedPkg: currentPkg,\n        defaultTag: ctx.defaultTag,\n        ignoreScripts: ctx.ignoreScripts,\n        publishedBy: options.publishedBy,\n        pickLowestVersion: options.pickLowestVersion,\n        downloadPriority: -options.currentDepth,\n        lockfileDir: ctx.lockfileDir,\n        preferredVersions: options.preferredVersions,\n        preferWorkspacePackages: ctx.preferWorkspacePackages,\n        projectDir:\n          options.currentDepth > 0 &&\n          newWantedDependency.pref?.startsWith('file:') !== true\n            ? ctx.lockfileDir\n            : options.parentPkg.rootDir,\n        registry:\n          (typeof newWantedDependency.alias === 'string' &&\n            pickRegistryForPackage(\n              ctx.registries,\n              newWantedDependency.alias,\n              newWantedDependency.pref\n            )) ||\n          ctx.registries.default,\n        skipFetch: ctx.dryRun,\n        update: options.update,\n        workspacePackages: ctx.workspacePackages,\n        supportedArchitectures: options.supportedArchitectures,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        onFetchError: (err: any): any => {\n          err.prefix = options.prefix;\n\n          err.pkgsStack = getPkgsInfoFromIds(\n            options.parentIds,\n            ctx.resolvedPkgsById\n          );\n\n          return err;\n        },\n        injectWorkspacePackages: ctx.injectWorkspacePackages,\n      }\n    );\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    const wantedDependencyDetails = {\n      name: newWantedDependency.alias,\n      pref: newWantedDependency.pref,\n      version:\n        typeof newWantedDependency.alias === 'string'\n          ? newWantedDependency.pref\n          : undefined,\n    };\n\n    if (newWantedDependency.optional === true) {\n      skippedOptionalDependencyLogger.debug({\n        details: err.toString(),\n        package: wantedDependencyDetails,\n        parents: getPkgsInfoFromIds(options.parentIds, ctx.resolvedPkgsById),\n        prefix: options.prefix,\n        reason: 'resolution_failure',\n      });\n\n      return null;\n    }\n\n    err.package = wantedDependencyDetails;\n\n    err.prefix = options.prefix;\n\n    err.pkgsStack = getPkgsInfoFromIds(options.parentIds, ctx.resolvedPkgsById);\n\n    throw err;\n  }\n\n  if (typeof pkgResponse.body === 'undefined') {\n    throw new Error('pkgResponse.body is undefined');\n  }\n\n  dependencyResolvedLogger.debug({\n    resolution: pkgResponse.body.id,\n    wanted: {\n      dependentId: options.parentPkg.pkgId,\n      name: newWantedDependency.alias,\n      rawSpec: newWantedDependency.pref,\n    },\n  });\n\n  const mf = pkgResponse.body.manifest;\n\n  if (typeof mf !== 'undefined') {\n    const pvs = ctx.allPreferredVersions;\n\n    if (typeof pvs !== 'undefined' && typeof mf.version === 'string') {\n      const pv = pvs[mf.name];\n\n      if (typeof pv === 'undefined') {\n        pvs[mf.name] = {};\n      } else {\n        pv[mf.version] = 'version';\n      }\n    }\n  }\n\n  if (\n    pkgResponse.body.updated !== true &&\n    options.currentDepth === Math.max(0, options.updateDepth) &&\n    depIsLinked &&\n    !ctx.force &&\n    !options.proceed\n  ) {\n    return null;\n  }\n\n  if (pkgResponse.body.isLocal === true) {\n    if (typeof pkgResponse.body.manifest === 'undefined') {\n      // This should actually never happen because the local-resolver returns a manifest\n      // even if no real manifest exists in the filesystem.\n      throw new PnpmError(\n        'MISSING_PACKAGE_JSON',\n        `Can't install ${newWantedDependency.pref}: Missing package.json file`\n      );\n    }\n\n    return {\n      alias:\n        (newWantedDependency.alias ?? pkgResponse.body.manifest.name) ||\n        path.basename(pkgResponse.body.resolution.directory),\n      dev: newWantedDependency.dev ?? false,\n      isLinkedDependency: true,\n      name: pkgResponse.body.manifest.name,\n      normalizedPref: pkgResponse.body.normalizedPref,\n      optional: newWantedDependency.optional ?? false,\n      pkgId: pkgResponse.body.id,\n      resolution: pkgResponse.body.resolution,\n      version: pkgResponse.body.manifest.version,\n    };\n  }\n\n  let prepare = false;\n\n  let hasBin = false;\n\n  let pkg: PackageManifest | undefined = getManifestFromResponse(\n    pkgResponse,\n    newWantedDependency\n  );\n\n  if (!pkg.dependencies) {\n    pkg.dependencies = {};\n  }\n\n  if (ctx.readPackageHook != null) {\n    pkg = await ctx.readPackageHook(pkg);\n  }\n\n  if (pkg.peerDependencies && pkg.dependencies) {\n    pkg = ctx.autoInstallPeers\n      ? {\n          ...pkg,\n          dependencies: omit.default(\n            Object.keys(pkg.peerDependencies),\n            pkg.dependencies\n          ),\n        }\n      : {\n          ...pkg,\n          dependencies: omit.default(\n            Object.keys(pkg.peerDependencies).filter(\n              (peerDep: string): boolean => {\n                return typeof options.parentPkgAliases[peerDep] !== 'undefined';\n              }\n            ),\n            pkg.dependencies\n          ),\n        };\n  }\n\n  if (!pkg.name) {\n    // TODO: don't fail on optional dependencies\n    throw new PnpmError(\n      'MISSING_PACKAGE_NAME',\n      `Can't install ${newWantedDependency.pref}: Missing package name`\n    );\n  }\n\n  let pkgIdWithPatchHash: PkgIdWithPatchHash = (\n    pkgResponse.body.id.startsWith(`${pkg.name}@`)\n      ? pkgResponse.body.id\n      : `${pkg.name}@${pkgResponse.body.id}`\n  ) as PkgIdWithPatchHash;\n\n  const patch = getPatchInfo(ctx.patchedDependencies, pkg.name, pkg.version);\n\n  if (patch) {\n    ctx.appliedPatches.add(patch.key);\n\n    pkgIdWithPatchHash =\n      `${pkgIdWithPatchHash}(patch_hash=${patch.file.hash})` as PkgIdWithPatchHash;\n  }\n\n  // We are building the dependency tree only until there are new packages\n  // or the packages repeat in a unique order.\n  // This is needed later during peer dependencies resolution.\n  //\n  // So we resolve foo > bar > qar > foo\n  // But we stop on foo > bar > qar > foo > qar\n  // In the second example, there's no reason to walk qar again\n  // when qar is included the first time, the dependencies of foo\n  // are already resolved and included as parent dependencies of qar.\n  // So during peers resolution, qar cannot possibly get any new or different\n  // peers resolved, after the first occurrence.\n  //\n  // However, in the next example we would analyze the second qar as well,\n  // because zoo is a new parent package:\n  // foo > bar > qar > zoo > qar\n  if (\n    parentIdsContainSequence(\n      options.parentIds,\n      options.parentPkg.pkgId,\n      pkgResponse.body.id\n    ) ||\n    pkgResponse.body.id === options.parentPkg.pkgId\n  ) {\n    return null;\n  }\n\n  if (\n    options.update === false &&\n    typeof currentPkg?.dependencyLockfile !== 'undefined' &&\n    typeof currentPkg.depPath !== 'undefined' &&\n    pkgResponse.body.updated !== true &&\n    // peerDependencies field is also used for transitive peer dependencies which should not be linked\n    // That's why we cannot omit reading package.json of such dependencies.\n    // This can be removed if we implement something like peerDependenciesMeta.transitive: true\n    typeof currentPkg.dependencyLockfile.peerDependencies === 'undefined'\n  ) {\n    hasBin = currentPkg.dependencyLockfile.hasBin === true;\n\n    pkg = {\n      ...nameVerFromPkgSnapshot(\n        currentPkg.depPath,\n        currentPkg.dependencyLockfile\n      ),\n      ...omitDepsFields(currentPkg.dependencyLockfile),\n      ...pkg,\n    };\n  } else {\n    prepare = Boolean(\n      pkgResponse.body.resolvedVia === 'git-repository' &&\n        typeof pkg.scripts?.prepare === 'string'\n    );\n\n    if (\n      typeof currentPkg?.dependencyLockfile?.deprecated !== 'undefined' &&\n      !pkgResponse.body.updated &&\n      typeof pkg.deprecated === 'undefined'\n    ) {\n      pkg.deprecated = currentPkg.dependencyLockfile.deprecated;\n    }\n\n    hasBin = Boolean(\n      (typeof pkg.bin !== 'undefined' &&\n        !(pkg.bin === '' || Object.keys(pkg.bin).length === 0)) ||\n        pkg.directories?.bin\n    );\n  }\n\n  if (\n    options.currentDepth === 0 &&\n    typeof pkgResponse.body.latest !== 'undefined' &&\n    pkgResponse.body.latest !== pkg.version\n  ) {\n    ctx.outdatedDependencies[pkgResponse.body.id] = pkgResponse.body.latest;\n  }\n\n  if (typeof pkg.peerDependencies !== 'undefined') {\n    for (const name in pkg.peerDependencies) {\n      ctx.allPeerDepNames.add(name);\n    }\n  }\n\n  if (typeof pkg.peerDependenciesMeta !== 'undefined') {\n    for (const name in pkg.peerDependenciesMeta) {\n      ctx.allPeerDepNames.add(name);\n    }\n  }\n\n  // In case of leaf dependencies (dependencies that have no prod deps or peer deps),\n  // we only ever need to analyze one leaf dep in a graph, so the nodeId can be short and stateless.\n  const nodeId = pkgIsLeaf(pkg)\n    ? (pkgResponse.body.id as unknown as NodeId)\n    : nextNodeId();\n\n  const parentIsInstallable =\n    typeof options.parentPkg.installable === 'undefined' ||\n    options.parentPkg.installable;\n\n  const installable =\n    parentIsInstallable && pkgResponse.body.isInstallable !== false;\n\n  const isNew = !ctx.resolvedPkgsById[pkgResponse.body.id];\n\n  const parentImporterId = options.parentIds[0];\n\n  if (typeof parentImporterId === 'undefined') {\n    throw new Error('parentImporterId is undefined');\n  }\n\n  const currentIsOptional =\n    newWantedDependency.optional ?? options.parentPkg.optional;\n\n  if (isNew) {\n    const v = ctx.allowedDeprecatedVersions[pkg.name];\n\n    if (\n      typeof pkg.deprecated === 'string' &&\n      (typeof v === 'undefined' || !semver.satisfies(pkg.version, v))\n    ) {\n      // Report deprecated packages only on first occurrence.\n      deprecationLogger.debug({\n        deprecated: pkg.deprecated,\n        depth: options.currentDepth,\n        pkgId: pkgResponse.body.id,\n        pkgName: pkg.name,\n        pkgVersion: pkg.version,\n        prefix: options.prefix,\n      });\n    }\n\n    if (pkgResponse.body.isInstallable === false || !parentIsInstallable) {\n      ctx.skipped.add(pkgResponse.body.id);\n    }\n\n    progressLogger.debug({\n      packageId: pkgResponse.body.id,\n      requester: ctx.lockfileDir,\n      status: 'resolved',\n    });\n\n    // WARN: It is very important to keep this sync\n    // Otherwise, deprecation messages for the same package might get written several times\n    ctx.resolvedPkgsById[pkgResponse.body.id] = getResolvedPackage({\n      dependencyLockfile: currentPkg?.dependencyLockfile,\n      pkgIdWithPatchHash,\n      force: ctx.force,\n      hasBin,\n      patch,\n      pkg,\n      pkgResponse,\n      prepare,\n      wantedDependency: newWantedDependency,\n      parentImporterId,\n      optional: currentIsOptional,\n    });\n  } else {\n    const rp = ctx.resolvedPkgsById[pkgResponse.body.id];\n\n    if (typeof rp === 'undefined') {\n      throw new Error('resolvedPkgsById is undefined');\n    }\n\n    rp.prod =\n      rp.prod ||\n      (newWantedDependency.dev !== true &&\n        newWantedDependency.optional !== true);\n\n    rp.dev = rp.dev ?? newWantedDependency.dev;\n\n    rp.optional = rp.optional && currentIsOptional;\n\n    if (\n      typeof rp.fetching === 'undefined' &&\n      typeof pkgResponse.fetching !== 'undefined'\n    ) {\n      rp.fetching = pkgResponse.fetching;\n\n      if (typeof pkgResponse.filesIndexFile !== 'undefined') {\n        rp.filesIndexFile = pkgResponse.filesIndexFile;\n      }\n    }\n\n    if (ctx.dependenciesTree.has(nodeId)) {\n      const n = ctx.dependenciesTree.get(nodeId);\n\n      if (typeof n !== 'undefined') {\n        n.depth = Math.min(n.depth, options.currentDepth);\n      }\n    } else {\n      ctx.pendingNodes.push({\n        alias: newWantedDependency.alias ?? pkg.name,\n        depth: options.currentDepth,\n        parentIds: options.parentIds,\n        installable,\n        nodeId,\n        resolvedPackage: rp,\n      });\n    }\n  }\n\n  const rootDir =\n    typeof pkgResponse.body.resolution !== 'undefined' &&\n    'type' in pkgResponse.body.resolution &&\n    pkgResponse.body.resolution.type === 'directory'\n      ? (path.resolve(\n          ctx.lockfileDir,\n          (pkgResponse.body.resolution as DirectoryResolution).directory\n        ) as ProjectRootDir)\n      : (options.prefix as ProjectRootDir);\n\n  let missingPeersOfChildren!: MissingPeersOfChildren | undefined;\n\n  if (\n    ctx.hoistPeers === true &&\n    !options.parentIds.includes(pkgResponse.body.id)\n  ) {\n    if (ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id]) {\n      const mp = ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id];\n\n      // This if condition is used to avoid a dead lock.\n      // There might be a better way to hoist peer dependencies during resolution\n      // but it would probably require a big rewrite of the resolution algorithm.\n      if (\n        typeof mp !== 'undefined' &&\n        (mp.depth >= options.currentDepth ||\n          mp.missingPeersOfChildren.resolved === true)\n      ) {\n        missingPeersOfChildren = mp.missingPeersOfChildren;\n      }\n    } else {\n      const p = pDefer<MissingPeers>();\n\n      missingPeersOfChildren = {\n        resolve: p.resolve,\n        reject: p.reject,\n        get: pShare(p.promise),\n      };\n\n      ctx.missingPeersOfChildrenByPkgId[pkgResponse.body.id] = {\n        depth: options.currentDepth,\n        missingPeersOfChildren,\n      };\n    }\n  }\n\n  const p: PkgAddress = {\n    alias: newWantedDependency.alias ?? pkg.name,\n    depIsLinked,\n    isNew,\n    nodeId,\n    normalizedPref:\n      options.currentDepth === 0 ? pkgResponse.body.normalizedPref : undefined,\n    missingPeersOfChildren,\n    pkgId: pkgResponse.body.id,\n    rootDir,\n    missingPeers: getMissingPeers(pkg),\n    optional: ctx.resolvedPkgsById[pkgResponse.body.id]?.optional ?? false,\n\n    // Next fields are actually only needed when isNew = true\n    installable,\n    // isLinkedDependency: undefined,\n    pkg,\n    updated: pkgResponse.body.updated,\n    publishedAt: pkgResponse.body.publishedAt,\n  } satisfies PkgAddress;\n\n  return p;\n}\n\nfunction getManifestFromResponse(\n  pkgResponse: PackageResponse,\n  wantedDependency: WantedDependency\n): PackageManifest {\n  if (typeof pkgResponse.body?.manifest !== 'undefined') {\n    return pkgResponse.body.manifest;\n  }\n\n  return {\n    name: wantedDependency.pref?.split('/').pop() ?? '',\n    version: '0.0.0',\n  };\n}\n\nfunction getMissingPeers(pkg: PackageManifest): MissingPeers {\n  const missingPeers = {} as MissingPeers;\n\n  for (const [peerName, peerVersion] of Object.entries(\n    pkg.peerDependencies ?? {}\n  )) {\n    missingPeers[peerName] = {\n      range: peerVersion,\n      optional: pkg.peerDependenciesMeta?.[peerName]?.optional === true,\n    };\n  }\n\n  return missingPeers;\n}\n\nfunction pkgIsLeaf(pkg: PackageManifest): boolean {\n  return (\n    Object.keys(pkg.dependencies ?? {}).length === 0 &&\n    Object.keys(pkg.optionalDependencies ?? {}).length === 0 &&\n    Object.keys(pkg.peerDependencies ?? {}).length === 0 &&\n    // Package manifests can declare peerDependenciesMeta without declaring\n    // peerDependencies. peerDependenciesMeta implies the later.\n    Object.keys(pkg.peerDependenciesMeta ?? {}).length === 0\n  );\n}\n\nfunction getResolvedPackage(options: {\n  dependencyLockfile?: PackageSnapshot | undefined;\n  pkgIdWithPatchHash: PkgIdWithPatchHash;\n  force: boolean;\n  hasBin: boolean;\n  parentImporterId: string;\n  patch?: PatchInfo | undefined;\n  pkg: PackageManifest;\n  pkgResponse: PackageResponse;\n  prepare: boolean;\n  optional: boolean;\n  wantedDependency: WantedDependency;\n}): ResolvedPackage {\n  const peerDependencies = peerDependenciesWithoutOwn(options.pkg);\n\n  if (typeof options.pkgResponse.body === 'undefined') {\n    throw new Error('options.pkgResponse.body is undefined');\n  }\n\n  return {\n    additionalInfo: {\n      bundledDependencies: options.pkg.bundledDependencies,\n      bundleDependencies: options.pkg.bundleDependencies,\n      cpu: options.pkg.cpu,\n      deprecated: options.pkg.deprecated,\n      engines: options.pkg.engines,\n      os: options.pkg.os,\n      libc: options.pkg.libc,\n    },\n    transitivePeerDependencies: new Set<string>(),\n    isLeaf: pkgIsLeaf(options.pkg),\n    pkgIdWithPatchHash: options.pkgIdWithPatchHash,\n    dev: options.wantedDependency.dev,\n    fetching: options.pkgResponse.fetching,\n    filesIndexFile: options.pkgResponse.filesIndexFile,\n    hasBin: options.hasBin,\n    hasBundledDependencies: !(\n      (options.pkg.bundledDependencies ?? options.pkg.bundleDependencies) ==\n      null\n    ),\n    id: options.pkgResponse.body.id,\n    name: options.pkg.name,\n    optional: options.optional,\n    optionalDependencies: new Set(\n      Object.keys(options.pkg.optionalDependencies ?? {})\n    ),\n    patch: options.patch,\n    peerDependencies,\n    prepare: options.prepare,\n    prod:\n      options.wantedDependency.dev !== true &&\n      options.wantedDependency.optional !== true,\n    resolution: options.pkgResponse.body.resolution,\n    version: options.pkg.version,\n  };\n}\n\nfunction peerDependenciesWithoutOwn(pkg: PackageManifest): PeerDependencies {\n  if (pkg.peerDependencies == null && pkg.peerDependenciesMeta == null) {\n    return {};\n  }\n\n  const ownDeps = new Set([\n    pkg.name,\n    ...Object.keys(pkg.dependencies ?? {}),\n    ...Object.keys(pkg.optionalDependencies ?? {}),\n  ]);\n\n  const result: PeerDependencies = {};\n\n  if (pkg.peerDependencies != null) {\n    for (const [peerName, peerRange] of Object.entries(pkg.peerDependencies)) {\n      if (ownDeps.has(peerName)) {\n        continue;\n      }\n\n      result[peerName] = {\n        version: peerRange,\n      };\n    }\n  }\n\n  if (typeof pkg.peerDependenciesMeta !== 'undefined') {\n    for (const [peerName, peerMeta] of Object.entries(\n      pkg.peerDependenciesMeta\n    )) {\n      if (ownDeps.has(peerName) || peerMeta.optional !== true) {\n        continue;\n      }\n\n      if (!result[peerName]) {\n        result[peerName] = { version: '*' };\n      }\n\n      result[peerName].optional = true;\n    }\n  }\n\n  return result;\n}\n"],
  "mappings": "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",
  "names": ["resolvedPeers", "result", "p"]
}
