{
  "version": 3,
  "sources": ["../../../../../src/packages/core/install/index.ts"],
  "sourcesContent": ["import path from 'node:path';\nimport {\n  buildModules,\n  type DepsStateCache,\n  linkBinsOfDependencies,\n} from '../../build-modules/index.ts';\nimport { createAllowBuildFunction } from '@pnpm/builder.policy';\nimport { parseCatalogProtocol } from '../../catalogs.protocol-parser/index.ts';\nimport type { Catalogs } from '../../catalogs.types/index.ts';\nimport {\n  LAYOUT_VERSION,\n  LOCKFILE_VERSION,\n  LOCKFILE_MAJOR_VERSION,\n  WANTED_LOCKFILE,\n} from '../../constants/index.ts';\nimport { stageLogger, summaryLogger } from '../../core-loggers/index.ts';\nimport { hashObjectNullableWithPrefix } from '../../crypto.object-hasher/index.ts';\nimport {\n  calcPatchHashes,\n  createOverridesMapFromParsed,\n  getOutdatedLockfileSetting,\n} from '../../lockfile.settings-checker/index.ts';\nimport { PnpmError } from '../../error/index.ts';\nimport {\n  getContext,\n  type HookOptions,\n  type PnpmContext,\n  type ProjectOptions,\n} from '../../get-context/index.ts';\nimport {\n  headlessInstall,\n  type InstallationResultStats,\n} from '../../headless/index.ts';\nimport {\n  makeNodeRequireOption,\n  runLifecycleHook,\n  runLifecycleHooksConcurrently,\n  type RunLifecycleHooksConcurrentlyOptions,\n} from '../../lifecycle/index.ts';\nimport { linkBins, linkBinsOfPackages } from '../../link-bins/index.ts';\nimport {\n  writeCurrentLockfile,\n  writeLockfiles,\n  writeWantedLockfile,\n  cleanGitBranchLockfiles,\n} from '../../lockfile.fs/index.ts';\nimport { writePnpFile } from '../../lockfile-to-pnp/index.ts';\nimport { extendProjectsWithTargetDirs } from '../../lockfile.utils/index.ts';\nimport {\n  allProjectsAreUpToDate,\n  satisfiesPackageManifest,\n} from '../../lockfile.verification/index.ts';\nimport { getPreferredVersionsFromLockfileAndManifests } from '../../lockfile.preferred-versions/index.ts';\nimport { logger, globalInfo, streamParser } from '../../logger/index.ts';\nimport {\n  getAllDependenciesFromManifest,\n  getAllUniqueSpecs,\n} from '../../manifest-utils/index.ts';\nimport { writeModulesManifest } from '../../modules-yaml/index.ts';\nimport { safeReadProjectManifestOnly } from '../../read-project-manifest/index.ts';\nimport {\n  getWantedDependencies,\n  type DependenciesGraph,\n  type DependenciesGraphNode,\n  type PinnedVersion,\n  resolveDependencies,\n  type UpdateMatchingFunction,\n  type WantedDependency,\n  type LinkedDependency,\n  type ResolvedPackage,\n} from '../../resolve-dependencies/index.ts';\nimport type {\n  PreferredVersions,\n  Resolution,\n} from '../../resolver-base/index.ts';\nimport type {\n  DepPath,\n  DependenciesField,\n  PeerDependencyIssues,\n  ProjectId,\n  ProjectManifest,\n  ReadPackageHook,\n  ProjectRootDir,\n  ProjectRootDirRealPath,\n  DependenciesMeta,\n  GlobalPkgDir,\n  ModulesDir,\n  WorkspaceDir,\n  LockFileDir,\n} from '../../types/index.ts';\nimport isSubdir from 'is-subdir';\nimport pLimit from 'p-limit';\nimport mapValues from 'ramda/src/map';\nimport clone from 'ramda/src/clone';\nimport isEmpty from 'ramda/src/isEmpty';\nimport pipeWith from 'ramda/src/pipeWith';\nimport props from 'ramda/src/props';\nimport { parseWantedDependencies } from '../parseWantedDependencies.ts';\nimport { removeDeps } from '../uninstall/removeDeps.ts';\nimport {\n  extendOptions,\n  type InstallOptions,\n  type ProcessedInstallOptions as StrictInstallOptions,\n} from './extendInstallOptions.ts';\nimport { linkPackages } from './link.ts';\nimport { reportPeerDependencyIssues } from './reportPeerDependencyIssues.ts';\nimport { validateModules } from './validateModules.ts';\nimport { isCI } from 'ci-info';\nimport type { BundledManifest } from '../../store-controller-types/index.ts';\nimport type { GenericDependenciesGraphNodeWithResolvedChildren } from '../../resolve-dependencies/resolvePeers.ts';\nimport type {\n  ProjectSnapshot,\n  LockfileObject,\n  ResolvedDependencies,\n  CatalogSnapshots,\n} from '../../lockfile.types/index.ts';\nimport type {\n  PatchFile,\n  PatchGroupRecord,\n} from '../../patching.types/index.ts';\nimport { groupPatchedDependencies } from 'src/packages/patching.config/groupPatchedDependencies.ts';\n\nclass LockfileConfigMismatchError extends PnpmError {\n  constructor(outdatedLockfileSettingName: string) {\n    super(\n      'LOCKFILE_CONFIG_MISMATCH',\n      `Cannot proceed with the frozen installation. The current \"${outdatedLockfileSettingName}\" configuration doesn't match the value found in the lockfile`,\n      {\n        hint: 'Update your lockfile using \"pnpm install --no-frozen-lockfile\"',\n      }\n    );\n  }\n}\n\nconst BROKEN_LOCKFILE_INTEGRITY_ERRORS = new Set([\n  'ERR_PNPM_UNEXPECTED_PKG_CONTENT_IN_STORE',\n  'ERR_PNPM_TARBALL_INTEGRITY',\n]);\n\nconst DEV_PREINSTALL = 'pnpm:devPreinstall';\n\n// type InstallMutationOptions = {\n//   update?: boolean | undefined;\n//   updateToLatest?: boolean | undefined;\n//   updateMatching?: UpdateMatchingFunction | undefined;\n//   updatePackageManifest?: boolean | undefined;\n// };\n\n// type InstallDepsMutation = {\n//   mutation: 'install';\n//   pruneDirectDependencies?: boolean | undefined;\n//   update?: boolean | undefined;\n//   updateToLatest?: boolean | undefined;\n//   updateMatching?: UpdateMatchingFunction | undefined;\n//   updatePackageManifest?: boolean | undefined;\n// };\n\n// type InstallSomeDepsMutation = {\n//   allowNew?: boolean | undefined;\n//   dependencySelectors: string[];\n//   mutation: 'installSome';\n//   peer?: boolean | undefined;\n//   pruneDirectDependencies?: boolean | undefined;\n//   pinnedVersion?: PinnedVersion | undefined;\n//   targetDependenciesField?: DependenciesField | undefined;\n//   update?: boolean | undefined;\n//   updateToLatest?: boolean | undefined;\n//   updateMatching?: UpdateMatchingFunction | undefined;\n//   updatePackageManifest?: boolean | undefined;\n// };\n\n// type UninstallSomeDepsMutation = {\n//   mutation: 'uninstallSome';\n//   dependencyNames: string[];\n//   targetDependenciesField?: DependenciesField | undefined;\n// };\n\n// type DependenciesMutation =\n//   | InstallDepsMutation\n//   | InstallSomeDepsMutation\n//   | UninstallSomeDepsMutation;\n\ntype Opts = Omit<InstallOptions, 'allProjects'> & {\n  preferredVersions?: PreferredVersions | undefined;\n  pruneDirectDependencies?: boolean | undefined;\n  binsDir: string;\n  update?: boolean | undefined;\n  updateToLatest?: boolean | undefined;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  updatePackageManifest?: boolean | undefined;\n};\n\nexport async function install(\n  manifest: ProjectManifest,\n  opts: Opts\n): Promise<{\n  updatedManifest?: ProjectManifest | undefined;\n  ignoredBuilds: string[] | undefined;\n}> {\n  const rootDir = (opts.dir ?? process.cwd()) as ProjectRootDir;\n\n  const modulesDir = opts.modulesDir ?? ('node_modules' as ModulesDir);\n\n  const mutatedProjectInstall: MutatedProjectInstall = {\n    mutation: 'install',\n    pruneDirectDependencies: opts.pruneDirectDependencies,\n    rootDir,\n    update: opts.update,\n    updateMatching: opts.updateMatching,\n    updateToLatest: opts.updateToLatest,\n    updatePackageManifest: opts.updatePackageManifest,\n  };\n\n  const { updatedProjects: projects, ignoredBuilds } = await mutateModules(\n    [mutatedProjectInstall],\n    {\n      ...opts,\n      bin: '',\n      update: opts.update ?? false,\n      allProjects: [\n        {\n          // TODO: fix id\n          id: '' as ProjectId,\n          // TODO: fix binsDir\n          binsDir: '',\n          // TODO: fix rootDirRealPath\n          rootDirRealPath: '' as ProjectRootDirRealPath,\n          buildIndex: 0,\n          manifest,\n          rootDir,\n          modulesDir,\n        },\n      ],\n    }\n  );\n\n  return { updatedManifest: projects[0]?.manifest, ignoredBuilds };\n}\n\ntype ProjectToBeInstalled = {\n  id: string;\n  buildIndex: number;\n  manifest?: ProjectManifest | undefined;\n  modulesDir: ModulesDir;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n};\n\nexport type MutatedProjectInstall = {\n  mutation: 'install';\n  pruneDirectDependencies?: boolean | undefined;\n  update?: boolean | undefined;\n  updateToLatest?: boolean | undefined;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  updatePackageManifest?: boolean | undefined;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n};\n\nexport type MutatedProjectInstallSome = {\n  allowNew?: boolean | undefined;\n  dependencySelectors: string[];\n  mutation: 'installSome';\n  peer?: boolean | undefined;\n  pruneDirectDependencies?: boolean | undefined;\n  pinnedVersion?: PinnedVersion | undefined;\n  targetDependenciesField?: DependenciesField | undefined;\n  update?: boolean | undefined;\n  updateToLatest?: boolean | undefined;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  updatePackageManifest?: boolean | undefined;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n};\n\nexport type MutatedProjectUninstallSome = {\n  mutation: 'uninstallSome';\n  dependencyNames: string[];\n  targetDependenciesField?: DependenciesField | undefined;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n};\n\nexport type MutatedProject =\n  | MutatedProjectInstall\n  | MutatedProjectInstallSome\n  | MutatedProjectUninstallSome;\n\nexport type MutateModulesOptions = InstallOptions & {\n  bin: string;\n  update: boolean;\n  preferredVersions?: PreferredVersions | undefined;\n  hooks?:\n    | {\n        readPackage?: ReadPackageHook[] | ReadPackageHook | undefined;\n      }\n    | InstallOptions['hooks']\n    | undefined;\n};\n\nexport async function mutateModulesInSingleProject(\n  project: MutatedProject & {\n    binsDir: string;\n    manifest: ProjectManifest;\n    modulesDir?: ModulesDir | undefined;\n  },\n  maybeOpts: Omit<MutateModulesOptions, 'allProjects'> & {\n    update?: boolean | undefined;\n    updateToLatest?: boolean | undefined;\n    updateMatching?: UpdateMatchingFunction | undefined;\n    updatePackageManifest?: boolean | undefined;\n  }\n): Promise<{\n  ignoredBuilds?: string[] | undefined;\n  updatedProject?: UpdatedProject | undefined;\n}> {\n  const mutatedProject: {\n    allowNew?: boolean | undefined;\n    dependencySelectors: string[];\n    mutation: 'installSome';\n    peer?: boolean | undefined;\n    pruneDirectDependencies?: boolean | undefined;\n    pinnedVersion?: PinnedVersion | undefined;\n    targetDependenciesField?: DependenciesField | undefined;\n    update?: boolean | undefined;\n    updateToLatest?: boolean | undefined;\n    updateMatching?: UpdateMatchingFunction | undefined;\n    updatePackageManifest?: boolean | undefined;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n  } = {\n    ...project,\n    mutation: project.mutation as 'installSome',\n    update: maybeOpts.update,\n    dependencySelectors: [],\n    updateToLatest: maybeOpts.updateToLatest,\n    updateMatching: maybeOpts.updateMatching,\n    updatePackageManifest: maybeOpts.updatePackageManifest,\n  };\n\n  const projectOptions: ProjectOptions & HookOptions & { binsDir: string } = {\n    ...project,\n    // TODO: fix id\n    id: '' as ProjectId,\n    // TODO: fix binsDir\n    binsDir: '',\n    // TODO: fix rootDirRealPath\n    rootDirRealPath: '' as ProjectRootDirRealPath,\n    buildIndex: 0,\n    modulesDir: project.modulesDir ?? ('node_modules' as ModulesDir),\n  };\n\n  const result = await mutateModules([mutatedProject], {\n    ...maybeOpts,\n    allProjects: [projectOptions],\n  });\n\n  return {\n    updatedProject: result.updatedProjects[0],\n    ignoredBuilds: result.ignoredBuilds,\n  };\n}\n\nexport type MutateModulesResult = {\n  updatedProjects: UpdatedProject[];\n  stats: InstallationResultStats;\n  depsRequiringBuild?: DepPath[] | undefined;\n  ignoredBuilds?: string[] | undefined;\n};\n\ntype InnerInstallResult = {\n  readonly updatedProjects: UpdatedProject[];\n  readonly stats?: InstallationResultStats | undefined;\n  readonly depsRequiringBuild?: DepPath[] | undefined;\n  readonly ignoredBuilds: string[] | undefined;\n};\n\nconst installInContext: InstallFunction = async (\n  projects: Array<\n    ImporterToUpdate<{\n      isNew?: boolean | undefined;\n      updateSpec?: boolean | undefined;\n      preserveNonSemverVersionSpec?: boolean | undefined;\n    }>\n  >,\n  ctx: PnpmContext,\n  opts: Omit<StrictInstallOptions, 'patchedDependencies'> & {\n    patchedDependencies?: PatchGroupRecord | undefined;\n    makePartialCurrentLockfile: boolean;\n    needsFullResolution: boolean;\n    neverBuiltDependencies?: string[] | undefined;\n    onlyBuiltDependencies?: string[] | undefined;\n    overrides?: Record<string, string> | undefined;\n    updateLockfileMinorVersion: boolean;\n    preferredVersions?: PreferredVersions | undefined;\n    pruneVirtualStore: boolean;\n    scriptsOpts: RunLifecycleHooksConcurrentlyOptions;\n    currentLockfileIsUpToDate: boolean;\n    hoistWorkspacePackages?: boolean | undefined;\n  }\n) => {\n  try {\n    const isPathInsideWorkspace = isSubdir.bind(null, opts.lockfileDir);\n\n    if (opts.frozenLockfile !== true && opts.useLockfile) {\n      const allProjectsLocatedInsideWorkspace = Object.values(\n        ctx.projects\n      ).filter(\n        (\n          project: ProjectOptions &\n            HookOptions & {\n              binsDir: string;\n            }\n        ): boolean => {\n          return isPathInsideWorkspace(\n            project.rootDirRealPath || project.rootDir\n          );\n        }\n      );\n\n      if (allProjectsLocatedInsideWorkspace.length > projects.length) {\n        const newProjects = [...projects];\n\n        const getWantedDepsOpts = {\n          autoInstallPeers: opts.autoInstallPeers,\n          includeDirect: opts.includeDirect,\n          updateWorkspaceDependencies: false,\n          nodeExecPath: opts.nodeExecPath,\n          injectWorkspacePackages: opts.injectWorkspacePackages,\n        };\n\n        const _isWantedDepPrefSame = isWantedDepPrefSame.bind(\n          null,\n          ctx.wantedLockfile.catalogs,\n          opts.catalogs\n        );\n\n        for (const project of allProjectsLocatedInsideWorkspace) {\n          if (\n            typeof project.manifest !== 'undefined' &&\n            !newProjects.some(\n              ({\n                rootDir,\n              }: ImporterToUpdate<{\n                isNew?: boolean | undefined;\n                updateSpec?: boolean | undefined;\n                preserveNonSemverVersionSpec?: boolean | undefined;\n              }>): boolean => {\n                return rootDir === project.rootDir;\n              }\n            )\n          ) {\n            // This code block mirrors the installCase() function in\n            // mutateModules(). Consider a refactor that combines this logic to\n            // deduplicate code.\n            const wantedDependencies = getWantedDependencies(\n              project.manifest,\n              getWantedDepsOpts\n            ).map(\n              (\n                wantedDependency: WantedDependency\n              ): WantedDependency & {\n                preserveNonSemverVersionSpec: boolean;\n              } => {\n                return {\n                  ...wantedDependency,\n                  updateSpec: true,\n                  preserveNonSemverVersionSpec: true,\n                };\n              }\n            );\n\n            const importers = ctx.wantedLockfile.importers;\n\n            if (typeof importers !== 'undefined') {\n              const importer = importers[project.id];\n\n              if (typeof importer !== 'undefined') {\n                forgetResolutionsOfPrevWantedDeps(\n                  importer,\n                  wantedDependencies,\n                  _isWantedDepPrefSame\n                );\n              }\n            }\n\n            newProjects.push({\n              mutation: 'install',\n              ...project,\n              wantedDependencies,\n              pruneDirectDependencies: false,\n              updatePackageManifest: false,\n              update: false,\n            });\n          }\n        }\n\n        const result = await installInContext(newProjects, ctx, {\n          ...opts,\n          lockfileOnly: true,\n        });\n\n        const mo = {\n          ...ctx,\n          ...opts,\n          currentEngine: {\n            nodeVersion: opts.nodeVersion,\n            pnpmVersion:\n              opts.packageManager.name === 'pnpm'\n                ? opts.packageManager.version\n                : '',\n          },\n          currentHoistedLocations: ctx.modulesFile?.hoistedLocations,\n          selectedProjectDirs: projects.map(\n            (\n              project: ImporterToUpdate<{\n                isNew?: boolean | undefined;\n                updateSpec?: boolean | undefined;\n                preserveNonSemverVersionSpec?: boolean | undefined;\n              }>\n            ):\n              | ProjectRootDir\n              | ProjectRootDirRealPath\n              | GlobalPkgDir\n              | WorkspaceDir\n              | LockFileDir => {\n              return project.rootDir;\n            }\n          ),\n          allProjects: ctx.projects,\n          prunedAt: ctx.modulesFile?.prunedAt,\n          wantedLockfile: result.newLockfile,\n          useLockfile:\n            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n            opts.useLockfile === true && ctx.wantedLockfileIsModified,\n          hoistWorkspacePackages: opts.hoistWorkspacePackages,\n        };\n\n        const { stats, ignoredBuilds } = await headlessInstall(mo);\n\n        return {\n          ...result,\n          stats,\n          ignoredBuilds,\n        };\n      }\n    }\n    if (opts.nodeLinker === 'hoisted' && !opts.lockfileOnly) {\n      const result = await _installInContext(projects, ctx, {\n        ...opts,\n        lockfileOnly: true,\n      });\n\n      const { stats, ignoredBuilds } = await headlessInstall({\n        ...ctx,\n        ...opts,\n        currentEngine: {\n          nodeVersion: opts.nodeVersion,\n          pnpmVersion:\n            opts.packageManager.name === 'pnpm'\n              ? opts.packageManager.version\n              : '',\n        },\n        currentHoistedLocations: ctx.modulesFile?.hoistedLocations,\n        selectedProjectDirs: projects.map(\n          (\n            project: ImporterToUpdate<{\n              isNew?: boolean | undefined;\n              updateSpec?: boolean | undefined;\n              preserveNonSemverVersionSpec?: boolean | undefined;\n            }>\n          ):\n            | ProjectRootDir\n            | ProjectRootDirRealPath\n            | GlobalPkgDir\n            | WorkspaceDir\n            | LockFileDir => {\n            return project.rootDir;\n          }\n        ),\n        allProjects: ctx.projects,\n        prunedAt: ctx.modulesFile?.prunedAt,\n        wantedLockfile: result.newLockfile,\n        useLockfile: opts.useLockfile && ctx.wantedLockfileIsModified,\n        hoistWorkspacePackages: opts.hoistWorkspacePackages,\n      });\n\n      return {\n        ...result,\n        stats,\n        ignoredBuilds,\n      };\n    }\n\n    if (opts.lockfileOnly && ctx.existsCurrentLockfile) {\n      logger.warn({\n        message:\n          '`node_modules` is present. Lockfile only installation will make it out-of-date',\n        prefix: ctx.lockfileDir ?? '',\n      });\n    }\n\n    return await _installInContext(projects, ctx, opts);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (error: any) {\n    if (\n      !BROKEN_LOCKFILE_INTEGRITY_ERRORS.has(error.code) ||\n      (!ctx.existsNonEmptyWantedLockfile && !ctx.existsCurrentLockfile)\n    ) {\n      throw error;\n    }\n\n    opts.needsFullResolution = true;\n\n    // Ideally, we would not update but currently there is no other way to redownload the integrity of the package\n    for (const project of projects) {\n      if ('update' in project) {\n        project.update = true; // InstallMutationOptions\n      }\n    }\n\n    logger.warn({\n      error,\n      message: error.message,\n      prefix: ctx.lockfileDir ?? '',\n    });\n\n    logger.error(\n      new PnpmError(\n        error.code,\n        'The lockfile is broken! A full installation will be performed in an attempt to fix it.'\n      )\n    );\n\n    return _installInContext(projects, ctx, opts);\n  } finally {\n    await opts.storeController.close();\n  }\n};\n\nexport async function mutateModules(\n  projects: MutatedProject[],\n  maybeOpts: MutateModulesOptions\n): Promise<MutateModulesResult> {\n  const reporter = maybeOpts.reporter;\n\n  if (typeof reporter !== 'undefined' && typeof reporter === 'function') {\n    streamParser.on('data', reporter);\n  }\n\n  const opts = extendOptions(maybeOpts);\n\n  if (!opts.include.dependencies && opts.include.optionalDependencies) {\n    throw new PnpmError(\n      'OPTIONAL_DEPS_REQUIRE_PROD_DEPS',\n      'Optional dependencies cannot be installed without production dependencies'\n    );\n  }\n\n  const installsOnly = allMutationsAreInstalls(projects);\n\n  if (!installsOnly) {\n    opts.strictPeerDependencies = false;\n  }\n\n  const rootProjectManifest =\n    opts.allProjects.find(({ rootDir }: ProjectOptions): boolean => {\n      return rootDir === opts.lockfileDir;\n    })?.manifest ??\n    // When running install/update on a subset of projects, the root project might not be included,\n    // so reading its manifest explicitly here.\n    (await safeReadProjectManifestOnly(opts.lockfileDir));\n\n  let ctx = await getContext(opts);\n\n  if (opts.lockfileOnly !== true && ctx.modulesFile !== null) {\n    const { purged } = await validateModules(\n      ctx.modulesFile,\n      Object.values(ctx.projects),\n      {\n        forceNewModules: installsOnly,\n        include: opts.include,\n        lockfileDir: opts.lockfileDir,\n        modulesDir: opts.modulesDir,\n        registries: opts.registries,\n        storeDir: opts.storeDir,\n        virtualStoreDir: ctx.virtualStoreDir,\n        virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n        confirmModulesPurge: opts.confirmModulesPurge && !isCI,\n\n        forceHoistPattern: opts.forceHoistPattern,\n        hoistPattern: opts.hoistPattern,\n        currentHoistPattern: ctx.currentHoistPattern,\n\n        forcePublicHoistPattern: opts.forcePublicHoistPattern,\n        publicHoistPattern: opts.publicHoistPattern,\n        currentPublicHoistPattern: ctx.currentPublicHoistPattern,\n        global: opts.global,\n      }\n    );\n\n    if (purged) {\n      ctx = await getContext(opts);\n    }\n  }\n\n  if (opts.hooks.preResolution) {\n    await opts.hooks.preResolution({\n      currentLockfile: ctx.currentLockfile,\n      wantedLockfile: ctx.wantedLockfile,\n      existsCurrentLockfile: ctx.existsCurrentLockfile,\n      existsNonEmptyWantedLockfile: ctx.existsNonEmptyWantedLockfile,\n      lockfileDir: ctx.lockfileDir,\n      storeDir: ctx.storeDir,\n      registries: ctx.registries,\n    });\n  }\n\n  const pruneVirtualStore =\n    typeof ctx.modulesFile?.prunedAt === 'string' && opts.modulesCacheMaxAge > 0\n      ? cacheExpired(ctx.modulesFile.prunedAt, opts.modulesCacheMaxAge)\n      : true;\n\n  if (maybeOpts.ignorePackageManifest !== true) {\n    for (const { manifest, rootDir } of Object.values(ctx.projects)) {\n      if (typeof manifest === 'undefined') {\n        throw new Error(`No package.json found in \"${rootDir}\"`);\n      }\n    }\n  }\n\n  const result = await _install();\n\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-expect-error\n  if (global['verifiedFileIntegrity'] > 1000) {\n    globalInfo(\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-expect-error\n      `The integrity of ${global['verifiedFileIntegrity']} files was checked. This might have caused installation to take longer.`\n    );\n  }\n\n  if (reporter != null && typeof reporter === 'function') {\n    streamParser.removeListener('data', reporter);\n  }\n\n  if (opts.mergeGitBranchLockfiles && typeof ctx.lockfileDir === 'string') {\n    await cleanGitBranchLockfiles(ctx.lockfileDir);\n  }\n\n  return {\n    updatedProjects: result.updatedProjects,\n    stats: result.stats ?? { added: 0, removed: 0, linkedToRoot: 0 },\n    depsRequiringBuild: result.depsRequiringBuild,\n    ignoredBuilds: result.ignoredBuilds,\n  };\n\n  async function _install(): Promise<InnerInstallResult> {\n    const scriptsOpts: RunLifecycleHooksConcurrentlyOptions = {\n      extraBinPaths: opts.extraBinPaths,\n      extraNodePaths: ctx.extraNodePaths,\n      extraEnv: opts.extraEnv,\n      preferSymlinkedExecutables: opts.preferSymlinkedExecutables,\n      rawConfig: opts.rawConfig,\n      resolveSymlinksInInjectedDirs: opts.resolveSymlinksInInjectedDirs,\n      scriptsPrependNodePath: opts.scriptsPrependNodePath,\n      scriptShell: opts.scriptShell,\n      shellEmulator: opts.shellEmulator,\n      stdio: opts.ownLifecycleHooksStdio,\n      storeController: opts.storeController,\n      unsafePerm: opts.unsafePerm || false,\n      prepareExecutionEnv: opts.prepareExecutionEnv,\n    };\n\n    if (\n      !opts.ignoreScripts &&\n      !opts.ignorePackageManifest &&\n      typeof rootProjectManifest?.scripts?.[DEV_PREINSTALL] !== 'undefined'\n    ) {\n      await runLifecycleHook(DEV_PREINSTALL, rootProjectManifest, {\n        ...scriptsOpts,\n        depPath: opts.lockfileDir,\n        pkgRoot: opts.lockfileDir,\n        rootModulesDir: ctx.rootModulesDir,\n      });\n    }\n\n    const packageExtensionsChecksum = hashObjectNullableWithPrefix(\n      opts.packageExtensions\n    );\n\n    const pnpmfileChecksum = await opts.hooks.calculatePnpmfileChecksum?.();\n\n    const patchedDependencies = opts.ignorePackageManifest\n      ? ctx.wantedLockfile.patchedDependencies\n      : opts.patchedDependencies\n        ? await calcPatchHashes(opts.patchedDependencies, opts.lockfileDir)\n        : {};\n\n    const patchedDependenciesWithResolvedPath =\n      typeof patchedDependencies === 'undefined'\n        ? undefined\n        : mapValues.default(\n            (\n              patchFile: PatchFile\n            ): {\n              hash: string;\n              path: string;\n            } => {\n              return {\n                hash: patchFile.hash,\n                path: path.join(opts.lockfileDir, patchFile.path),\n              };\n            },\n            patchedDependencies\n          );\n\n    const patchGroups =\n      patchedDependenciesWithResolvedPath &&\n      groupPatchedDependencies(patchedDependenciesWithResolvedPath);\n\n    const frozenLockfile =\n      opts.frozenLockfile ||\n      (opts.frozenLockfileIfExists && ctx.existsNonEmptyWantedLockfile);\n\n    let outdatedLockfileSettings = false;\n\n    const overridesMap = createOverridesMapFromParsed(opts.parsedOverrides);\n\n    if (opts.ignorePackageManifest !== true) {\n      const outdatedLockfileSettingName = getOutdatedLockfileSetting(\n        ctx.wantedLockfile,\n        {\n          autoInstallPeers: opts.autoInstallPeers,\n          injectWorkspacePackages: opts.injectWorkspacePackages,\n          excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n          peersSuffixMaxLength: opts.peersSuffixMaxLength,\n          overrides: overridesMap,\n          ignoredOptionalDependencies: opts.ignoredOptionalDependencies.sort(),\n          packageExtensionsChecksum,\n          patchedDependencies,\n          pnpmfileChecksum,\n        }\n      );\n\n      outdatedLockfileSettings = outdatedLockfileSettingName !== null;\n\n      if (frozenLockfile && outdatedLockfileSettingName !== null) {\n        throw new LockfileConfigMismatchError(outdatedLockfileSettingName);\n      }\n    }\n\n    const _isWantedDepPrefSame = isWantedDepPrefSame.bind(\n      null,\n      ctx.wantedLockfile.catalogs,\n      opts.catalogs\n    );\n\n    const upToDateLockfileMajorVersion = ctx.wantedLockfile.lockfileVersion\n      .toString()\n      .startsWith(`${LOCKFILE_MAJOR_VERSION}.`);\n\n    let needsFullResolution =\n      outdatedLockfileSettings ||\n      opts.fixLockfile ||\n      !upToDateLockfileMajorVersion ||\n      opts.forceFullResolution;\n\n    if (needsFullResolution) {\n      ctx.wantedLockfile.settings = {\n        autoInstallPeers: opts.autoInstallPeers,\n        excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n        peersSuffixMaxLength: opts.peersSuffixMaxLength,\n        injectWorkspacePackages: opts.injectWorkspacePackages,\n      };\n\n      ctx.wantedLockfile.overrides = overridesMap;\n\n      ctx.wantedLockfile.packageExtensionsChecksum = packageExtensionsChecksum;\n\n      ctx.wantedLockfile.ignoredOptionalDependencies =\n        opts.ignoredOptionalDependencies;\n\n      ctx.wantedLockfile.pnpmfileChecksum = pnpmfileChecksum;\n\n      ctx.wantedLockfile.patchedDependencies = patchedDependencies;\n    } else if (!frozenLockfile) {\n      ctx.wantedLockfile.settings = {\n        autoInstallPeers: opts.autoInstallPeers,\n        excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n        peersSuffixMaxLength: opts.peersSuffixMaxLength,\n        injectWorkspacePackages: opts.injectWorkspacePackages,\n      };\n    }\n\n    const frozenInstallResult = await tryFrozenInstall({\n      frozenLockfile,\n      needsFullResolution,\n      patchedDependenciesWithResolvedPath,\n      upToDateLockfileMajorVersion,\n    });\n\n    if (frozenInstallResult !== null) {\n      if ('needsFullResolution' in frozenInstallResult) {\n        needsFullResolution = frozenInstallResult.needsFullResolution;\n      } else {\n        return frozenInstallResult;\n      }\n    }\n\n    const projectsToInstall: ImporterToUpdate<{\n      pruneDirectDependencies?: boolean | undefined;\n    }>[] = [];\n\n    let preferredSpecs: Record<string, string> | null = null;\n\n    // TODO: make it concurrent\n    for (const project of projects) {\n      switch (project.mutation) {\n        case 'uninstallSome': {\n          const prj = ctx.projects[project.rootDir];\n\n          if (typeof prj === 'undefined') {\n            continue;\n          }\n\n          const projectOpts = {\n            ...project,\n            ...prj,\n          };\n\n          const p: UninstallSomeImporterToUpdate<{\n            pruneDirectDependencies?: boolean | undefined;\n          }> = {\n            ...projectOpts,\n            mutation: 'uninstallSome',\n            pruneDirectDependencies: false,\n            removePackages: project.dependencyNames,\n            updatePackageManifest: true,\n            wantedDependencies: [],\n            dependencyNames: [],\n          };\n\n          projectsToInstall.push(p);\n\n          break;\n        }\n\n        case 'install': {\n          const prj = ctx.projects[project.rootDir];\n\n          if (typeof prj === 'undefined') {\n            continue;\n          }\n\n          const projectOpts = {\n            ...project,\n            ...prj,\n          };\n\n          const p: InstallImporterToUpdate<{\n            pruneDirectDependencies?: boolean | undefined;\n          }> = {\n            ...projectOpts,\n            mutation: 'install',\n            updatePackageManifest:\n              project.updatePackageManifest ?? project.update,\n            wantedDependencies: [],\n            buildIndex: 0,\n          };\n\n          await installCase(p);\n\n          break;\n        }\n\n        case 'installSome': {\n          const prj = ctx.projects[project.rootDir];\n\n          if (typeof prj === 'undefined') {\n            continue;\n          }\n\n          const projectOpts = {\n            ...project,\n            ...prj,\n          };\n\n          const p: InstallSomeImporterToUpdate<{\n            pruneDirectDependencies?: boolean | undefined;\n          }> = {\n            ...projectOpts,\n            updatePackageManifest: projectOpts.updatePackageManifest !== false,\n          };\n\n          await installSome(p);\n\n          break;\n        }\n      }\n    }\n\n    async function installCase(project: {\n      manifest?: ProjectManifest | undefined;\n      id: ProjectId;\n      update?: boolean | undefined;\n    }): Promise<void> {\n      if (typeof project.manifest === 'undefined') {\n        return;\n      }\n\n      const wantedDependencies = getWantedDependencies(project.manifest, {\n        autoInstallPeers: opts.autoInstallPeers,\n        includeDirect: opts.includeDirect,\n        updateWorkspaceDependencies: project.update,\n        nodeExecPath: opts.nodeExecPath,\n      }).map(\n        (\n          wantedDependency: WantedDependency\n        ): {\n          updateSpec: boolean;\n          preserveNonSemverVersionSpec: boolean;\n          alias?: string | undefined;\n          pref?: string | undefined;\n          dev?: boolean | undefined;\n          optional?: boolean | undefined;\n          raw?: string | undefined;\n          injected?: boolean | undefined;\n          pinnedVersion?: PinnedVersion | undefined;\n          nodeExecPath?: string | undefined;\n        } => {\n          return {\n            ...wantedDependency,\n            updateSpec: true,\n            preserveNonSemverVersionSpec: true,\n          };\n        }\n      );\n\n      const importer = ctx.wantedLockfile.importers?.[project.id];\n\n      if (typeof importer !== 'undefined') {\n        forgetResolutionsOfPrevWantedDeps(\n          importer,\n          wantedDependencies,\n          _isWantedDepPrefSame\n        );\n      }\n\n      if (\n        opts.ignoreScripts &&\n        project.manifest.scripts &&\n        (typeof project.manifest.scripts.preinstall === 'string' ||\n          typeof project.manifest.scripts.install === 'string' ||\n          typeof project.manifest.scripts.postinstall === 'string' ||\n          typeof project.manifest.scripts.prepare === 'string')\n      ) {\n        ctx.pendingBuilds.push(project.id);\n      }\n\n      const p: InstallImporterToUpdate<{\n        pruneDirectDependencies?: boolean | undefined;\n      }> = {\n        ...project,\n        pruneDirectDependencies: false,\n        wantedDependencies,\n        buildIndex: 0,\n        binsDir: '',\n        modulesDir: 'node_modules' as ModulesDir,\n        rootDir: '' as ProjectRootDir,\n        updatePackageManifest: false,\n        mutation: 'install',\n      };\n\n      projectsToInstall.push(p);\n    }\n\n    async function installSome(\n      project: InstallSomeImporterToUpdate<{\n        pruneDirectDependencies?: boolean | undefined;\n      }>\n    ): Promise<void> {\n      const currentPrefs = opts.ignoreCurrentPrefs\n        ? {}\n        : getAllDependenciesFromManifest(project.manifest);\n\n      const optionalDependencies = project.targetDependenciesField\n        ? {}\n        : (project.manifest?.optionalDependencies ?? {});\n\n      const devDependencies = project.targetDependenciesField\n        ? {}\n        : project.manifest?.devDependencies || {};\n\n      if (preferredSpecs == null) {\n        const manifests = [];\n\n        for (const versions of ctx.workspacePackages.values()) {\n          for (const { manifest } of versions.values()) {\n            manifests.push(manifest);\n          }\n        }\n\n        preferredSpecs = getAllUniqueSpecs(manifests);\n      }\n\n      const wantedDeps = parseWantedDependencies(project.dependencySelectors, {\n        allowNew: project.allowNew !== false,\n        currentPrefs,\n        defaultTag: opts.tag,\n        dev: project.targetDependenciesField === 'devDependencies',\n        devDependencies,\n        optional: project.targetDependenciesField === 'optionalDependencies',\n        optionalDependencies,\n        updateWorkspaceDependencies: project.update,\n        preferredSpecs,\n        overrides: opts.overrides,\n        defaultCatalog: opts.catalogs.default,\n      });\n\n      const p = {\n        ...project,\n        pruneDirectDependencies: false,\n        wantedDependencies: wantedDeps.map(\n          (\n            wantedDep: WantedDependency\n          ): WantedDependency & {\n            isNew: boolean;\n            updateSpec: boolean;\n            nodeExecPath?: string | undefined;\n          } => {\n            return {\n              ...wantedDep,\n              isNew: typeof currentPrefs[wantedDep.alias ?? ''] === 'undefined',\n              updateSpec: true,\n              nodeExecPath: opts.nodeExecPath,\n            };\n          }\n        ),\n      };\n\n      projectsToInstall.push(p);\n    }\n\n    // Unfortunately, the private lockfile may differ from the public one.\n    // A user might run named installations on a project that has a pnpm-lock.yaml file before running a noop install\n    const makePartialCurrentLockfile =\n      !installsOnly &&\n      ((ctx.existsNonEmptyWantedLockfile && !ctx.existsCurrentLockfile) ||\n        !ctx.currentLockfileIsUpToDate);\n\n    const result = await installInContext(projectsToInstall, ctx, {\n      ...opts,\n      currentLockfileIsUpToDate:\n        !ctx.existsNonEmptyWantedLockfile || ctx.currentLockfileIsUpToDate,\n      makePartialCurrentLockfile,\n      needsFullResolution,\n      pruneVirtualStore,\n      scriptsOpts,\n      updateLockfileMinorVersion: true,\n      patchedDependencies: patchGroups,\n    });\n\n    return {\n      updatedProjects: result.projects,\n      stats: result.stats,\n      depsRequiringBuild: result.depsRequiringBuild,\n      ignoredBuilds: result.ignoredBuilds,\n    };\n  }\n\n  /**\n   * Attempt to perform a \"frozen install\".\n   *\n   * A \"frozen install\" will be performed if:\n   *\n   *   1. The --frozen-lockfile flag was explicitly specified or evaluates to\n   *      true based on conditions like running on CI.\n   *   2. No workspace modifications have been made that would invalidate the\n   *      pnpm-lock.yaml file. In other words, the pnpm-lock.yaml file is\n   *      known to be \"up-to-date\".\n   *\n   * A frozen install is significantly faster since the pnpm-lock.yaml file\n   * can treated as immutable, skipping expensive lookups to acquire new\n   * dependencies. For this reason, a frozen install should be performed even\n   * if --frozen-lockfile wasn't explicitly specified. This allows users to\n   * benefit from the increased performance of a frozen install automatically.\n   *\n   * If a frozen install is not possible, this function will return null.\n   * This indicates a standard mutable install needs to be performed.\n   *\n   * Note this function may update the pnpm-lock.yaml file if the lockfile was\n   * on a different major version, needs to be merged due to git conflicts,\n   * etc. These changes update the format of the pnpm-lock.yaml file, but do\n   * not change recorded dependency resolutions.\n   */\n  async function tryFrozenInstall({\n    frozenLockfile,\n    needsFullResolution,\n    patchedDependenciesWithResolvedPath,\n    upToDateLockfileMajorVersion,\n  }: {\n    frozenLockfile: boolean;\n    needsFullResolution: boolean;\n    patchedDependenciesWithResolvedPath?:\n      | Record<\n          string,\n          {\n            hash: string;\n            path: string;\n          }\n        >\n      | undefined;\n    upToDateLockfileMajorVersion: boolean;\n  }): Promise<InnerInstallResult | { needsFullResolution: boolean } | null> {\n    const isFrozenInstallPossible =\n      // A frozen install is never possible when any of these are true:\n      !ctx.lockfileHadConflicts &&\n      !opts.fixLockfile &&\n      !opts.dedupe &&\n      installsOnly &&\n      // If the user explicitly requested a frozen lockfile install, attempt\n      // to perform one. An error will be thrown if updates are required.\n      (frozenLockfile ||\n        // Otherwise, check if a frozen-like install is possible for\n        // performance. This will be the case if all projects are up-to-date.\n        opts.ignorePackageManifest ||\n        (!needsFullResolution &&\n          opts.preferFrozenLockfile &&\n          (!opts.pruneLockfileImporters ||\n            Object.keys(ctx.wantedLockfile.importers ?? {}).length ===\n              Object.keys(ctx.projects).length) &&\n          ctx.existsNonEmptyWantedLockfile &&\n          ctx.wantedLockfile.lockfileVersion === LOCKFILE_VERSION &&\n          (await allProjectsAreUpToDate(Object.values(ctx.projects), {\n            catalogs: opts.catalogs,\n            autoInstallPeers: opts.autoInstallPeers,\n            excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n            linkWorkspacePackages: opts.linkWorkspacePackagesDepth >= 0,\n            wantedLockfile: ctx.wantedLockfile,\n            workspacePackages: ctx.workspacePackages,\n            lockfileDir: opts.lockfileDir,\n          }))));\n\n    const patchGroups =\n      patchedDependenciesWithResolvedPath &&\n      groupPatchedDependencies(patchedDependenciesWithResolvedPath);\n\n    if (!isFrozenInstallPossible) {\n      return null;\n    }\n\n    if (needsFullResolution) {\n      throw new PnpmError(\n        'FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE',\n        'Cannot perform a frozen installation because the version of the lockfile is incompatible with this version of pnpm',\n        {\n          hint: `Try either:\n1. Aligning the version of pnpm that generated the lockfile with the version that installs from it, or\n2. Migrating the lockfile so that it is compatible with the newer version of pnpm, or\n3. Using \"pnpm install --no-frozen-lockfile\".\nNote that in CI environments, this setting is enabled by default.`,\n        }\n      );\n    }\n\n    if (!opts.ignorePackageManifest) {\n      const _satisfiesPackageManifest = satisfiesPackageManifest.bind(null, {\n        autoInstallPeers: opts.autoInstallPeers,\n        excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n      });\n\n      for (const { id, manifest, rootDir } of Object.values(ctx.projects)) {\n        if (typeof manifest === 'undefined') {\n          continue;\n        }\n\n        const { satisfies, detailedReason } = _satisfiesPackageManifest(\n          ctx.wantedLockfile.importers?.[id],\n          manifest\n        );\n\n        if (!satisfies) {\n          if (!ctx.existsWantedLockfile) {\n            throw new PnpmError(\n              'NO_LOCKFILE',\n              `Cannot install with \"frozen-lockfile\" because ${WANTED_LOCKFILE} is absent`,\n              {\n                hint: 'Note that in CI environments this setting is true by default. If you still need to run install in such cases, use \"pnpm install --no-frozen-lockfile\"',\n              }\n            );\n          }\n\n          throw new PnpmError(\n            'OUTDATED_LOCKFILE',\n            `Cannot install with \"frozen-lockfile\" because ${WANTED_LOCKFILE} is not up to date with ${path.join(\n              '<ROOT>',\n              path.relative(\n                opts.lockfileDir,\n                path.join(rootDir, 'package.json')\n              )\n            )}`,\n            {\n              hint: `Note that in CI environments this setting is true by default. If you still need to run install in such cases, use \"pnpm install --no-frozen-lockfile\"\n\n  Failure reason:\n  ${detailedReason ?? ''}`,\n            }\n          );\n        }\n      }\n    }\n\n    if (opts.lockfileOnly) {\n      // The lockfile will only be changed if the workspace will have new projects with no dependencies.\n      await writeWantedLockfile(ctx.lockfileDir ?? '', ctx.wantedLockfile);\n\n      return {\n        updatedProjects: projects\n          .map(\n            (\n              mutatedProject: MutatedProject\n            ): (ProjectOptions & HookOptions) | undefined => {\n              return ctx.projects[mutatedProject.rootDir];\n            }\n          )\n          .filter(Boolean),\n        ignoredBuilds: undefined,\n      };\n    }\n\n    if (!ctx.existsNonEmptyWantedLockfile) {\n      if (\n        Object.values(ctx.projects).some(\n          (\n            project: ProjectOptions &\n              HookOptions & {\n                binsDir: string;\n              }\n          ): boolean => {\n            return (\n              typeof project.manifest !== 'undefined' &&\n              pkgHasDependencies(project.manifest)\n            );\n          }\n        )\n      ) {\n        throw new Error(\n          `Headless installation requires a ${WANTED_LOCKFILE} file`\n        );\n      }\n\n      return null;\n    }\n\n    if (maybeOpts.ignorePackageManifest === true) {\n      logger.info({\n        message: 'Importing packages to virtual store',\n        prefix: opts.lockfileDir,\n      });\n    } else {\n      logger.info({\n        message: 'Lockfile is up to date, resolution step is skipped',\n        prefix: opts.lockfileDir,\n      });\n    }\n\n    try {\n      const { stats, ignoredBuilds } = await headlessInstall({\n        ...ctx,\n        ...opts,\n        currentEngine: {\n          nodeVersion: opts.nodeVersion,\n          pnpmVersion:\n            opts.packageManager.name === 'pnpm'\n              ? opts.packageManager.version\n              : '',\n        },\n        currentHoistedLocations: ctx.modulesFile?.hoistedLocations,\n        patchedDependencies: patchGroups,\n        selectedProjectDirs: projects.map(\n          (\n            project: MutatedProject\n          ):\n            | ProjectRootDir\n            | ProjectRootDirRealPath\n            | GlobalPkgDir\n            | WorkspaceDir\n            | LockFileDir => {\n            return project.rootDir;\n          }\n        ),\n        allProjects: ctx.projects,\n        prunedAt: ctx.modulesFile?.prunedAt,\n        pruneVirtualStore,\n        wantedLockfile:\n          maybeOpts.ignorePackageManifest === true\n            ? undefined\n            : ctx.wantedLockfile,\n        useLockfile: opts.useLockfile && ctx.wantedLockfileIsModified,\n      });\n\n      if (\n        (opts.useLockfile &&\n          opts.saveLockfile &&\n          opts.mergeGitBranchLockfiles) ||\n        (!upToDateLockfileMajorVersion && !opts.frozenLockfile)\n      ) {\n        await writeLockfiles({\n          currentLockfile: ctx.currentLockfile,\n          currentLockfileDir: ctx.virtualStoreDir,\n          wantedLockfile: ctx.wantedLockfile,\n          wantedLockfileDir: ctx.lockfileDir ?? '',\n          useGitBranchLockfile: opts.useGitBranchLockfile,\n          mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles,\n        });\n      }\n\n      return {\n        updatedProjects: projects\n          .map(\n            (\n              mutatedProject: MutatedProject\n            ): {\n              manifest?: ProjectManifest | undefined;\n              modulesDir?: string | undefined;\n              id?:\n                | (string & {\n                    __brand: 'ProjectId';\n                  })\n                | undefined;\n              originalManifest?: ProjectManifest | undefined;\n              buildIndex: number;\n              binsDir: string;\n              rootDir:\n                | ProjectRootDir\n                | ProjectRootDirRealPath\n                | GlobalPkgDir\n                | WorkspaceDir\n                | LockFileDir;\n              rootDirRealPath?: ProjectRootDirRealPath | undefined;\n            } | null => {\n              const project = ctx.projects[mutatedProject.rootDir];\n\n              if (typeof project === 'undefined') {\n                return null;\n              }\n\n              return {\n                ...project,\n                manifest: project.originalManifest ?? project.manifest,\n              };\n            }\n          )\n          .filter(Boolean),\n        stats,\n        ignoredBuilds,\n      };\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    } catch (error: any) {\n      if (\n        frozenLockfile ||\n        (error.code !== 'ERR_PNPM_LOCKFILE_MISSING_DEPENDENCY' &&\n          !BROKEN_LOCKFILE_INTEGRITY_ERRORS.has(error.code)) ||\n        // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n        (ctx.existsNonEmptyWantedLockfile !== true &&\n          !ctx.existsCurrentLockfile)\n      ) {\n        throw error;\n      }\n\n      if (BROKEN_LOCKFILE_INTEGRITY_ERRORS.has(error.code)) {\n        needsFullResolution = true;\n\n        // Ideally, we would not update but currently there is no other way to redownload the integrity of the package\n        for (const project of projects) {\n          if ('update' in project) {\n            project.update = true; // InstallMutationOptions\n          }\n        }\n      }\n\n      // A broken lockfile may be caused by a badly resolved Git conflict\n      logger.warn({\n        error,\n        message: error.message,\n        prefix: ctx.lockfileDir ?? '',\n      });\n\n      logger.error(\n        new PnpmError(\n          error.code,\n          'The lockfile is broken! Resolution step will be performed to fix it.'\n        )\n      );\n\n      return { needsFullResolution };\n    }\n  }\n}\n\nfunction cacheExpired(prunedAt: string, maxAgeInMinutes: number): boolean {\n  return (\n    (Date.now() - new Date(prunedAt).valueOf()) / (1000 * 60) > maxAgeInMinutes\n  );\n}\n\nfunction pkgHasDependencies(manifest: ProjectManifest): boolean {\n  return Boolean(\n    Object.keys(manifest.dependencies ?? {}).length > 0 ||\n      Object.keys(manifest.devDependencies ?? {}).length ||\n      Object.keys(manifest.optionalDependencies ?? {}).length\n  );\n}\n\n// If the specifier is new, the old resolution probably does not satisfy it anymore.\n// By removing these resolutions we ensure that they are resolved again using the new specs.\nfunction forgetResolutionsOfPrevWantedDeps(\n  importer: ProjectSnapshot,\n  wantedDeps: WantedDependency[],\n  isWantedDepPrefSame: (\n    alias: string,\n    prevPref: string | undefined,\n    nextPref: string\n  ) => boolean\n): void {\n  if (typeof importer.specifiers === 'undefined') {\n    return;\n  }\n\n  importer.dependencies = importer.dependencies ?? {};\n  importer.devDependencies = importer.devDependencies ?? {};\n  importer.optionalDependencies = importer.optionalDependencies ?? {};\n\n  for (const { alias, pref } of wantedDeps) {\n    if (\n      typeof alias === 'string' &&\n      typeof pref === 'string' &&\n      !isWantedDepPrefSame(alias, importer.specifiers[alias], pref)\n    ) {\n      if (importer.dependencies[alias]?.startsWith('link:') !== true) {\n        delete importer.dependencies[alias];\n      }\n\n      delete importer.devDependencies[alias];\n      delete importer.optionalDependencies[alias];\n    }\n  }\n}\n\nfunction forgetResolutionsOfAllPrevWantedDeps(\n  wantedLockfile?: LockfileObject | undefined\n): void {\n  // Similar to the forgetResolutionsOfPrevWantedDeps function above, we can\n  // delete existing resolutions in importers to make sure they're resolved\n  // again.\n  if (\n    typeof wantedLockfile?.importers !== 'undefined' &&\n    !isEmpty.default(wantedLockfile.importers)\n  ) {\n    wantedLockfile.importers = mapValues.default(\n      ({\n        dependencies: _,\n        devDependencies: __,\n        optionalDependencies: ___,\n        ...rest\n      }): {\n        specifiers: ResolvedDependencies;\n        dependenciesMeta?: DependenciesMeta | undefined;\n        publishDirectory?: string | undefined;\n      } => {\n        return rest;\n      },\n      wantedLockfile.importers\n    );\n  }\n\n  // The resolveDependencies function looks at previous PackageSnapshot\n  // dependencies/optionalDependencies blocks and merges them with new resolved\n  // deps. Clear the previous PackageSnapshot fields so the newly resolved deps\n  // are always used.\n  if (\n    typeof wantedLockfile?.packages !== 'undefined' &&\n    !isEmpty.default(wantedLockfile.packages)\n  ) {\n    wantedLockfile.packages = mapValues.default(\n      ({\n        dependencies: _,\n        optionalDependencies: __,\n        ...rest\n      }): {\n        id?: string | undefined;\n        patched?: boolean | undefined;\n        hasBin?: boolean | undefined;\n        name?: string | undefined;\n        version?: string | undefined;\n        resolution?: Resolution | undefined;\n        peerDependencies?: Record<string, string> | undefined;\n        peerDependenciesMeta?:\n          | { [name: string]: { optional: boolean | undefined } }\n          | undefined;\n        bundledDependencies?: string[] | boolean | undefined;\n        engines?:\n          | (Record<string, string> & { node?: string | undefined })\n          | undefined;\n        os?: string[] | undefined;\n        cpu?: string[] | undefined;\n        libc?: string[] | undefined;\n        deprecated?: string | undefined;\n        optional?: boolean | undefined;\n        transitivePeerDependencies?: string[] | undefined;\n      } => {\n        return rest;\n      },\n      wantedLockfile.packages\n    );\n  }\n}\n\n/**\n * Check if a wanted pref is the same.\n *\n * It would be different if the user modified a dependency in package.json or a\n * catalog entry in pnpm-workspace.yaml. This is normally a simple check to see\n * if the specifier strings match, but catalogs make this more involved since we\n * also have to check if the catalog config in pnpm-workspace.yaml is the same.\n */\nfunction isWantedDepPrefSame(\n  prevCatalogs: CatalogSnapshots | undefined,\n  catalogsConfig: Catalogs | undefined,\n  alias: string,\n  prevPref: string | undefined,\n  nextPref: string\n): boolean {\n  if (prevPref !== nextPref) {\n    return false;\n  }\n\n  // When pnpm catalogs are used, the specifiers can be the same (e.g.\n  // \"catalog:default\"), but the wanted versions for the dependency can be\n  // different after resolution if the catalog config was just edited.\n  const catalogName = parseCatalogProtocol(prevPref);\n\n  // If there's no catalog name, the catalog protocol was not used and we\n  // can assume the pref is the same since prevPref and nextPref match.\n  if (catalogName === null) {\n    return true;\n  }\n\n  const prevCatalogEntrySpec = prevCatalogs?.[catalogName]?.[alias]?.specifier;\n  const nextCatalogEntrySpec = catalogsConfig?.[catalogName]?.[alias];\n\n  return prevCatalogEntrySpec === nextCatalogEntrySpec;\n}\n\nexport async function addDependenciesToPackage(\n  manifest: ProjectManifest,\n  dependencySelectors: string[],\n  opts: Omit<InstallOptions, 'allProjects'> & {\n    bin: string;\n    allowNew?: boolean | undefined;\n    peer?: boolean | undefined;\n    pinnedVersion?: 'major' | 'minor' | 'patch' | undefined;\n    targetDependenciesField?: DependenciesField | undefined;\n    update?: boolean | undefined;\n    updateToLatest?: boolean | undefined;\n    updateMatching?: UpdateMatchingFunction | undefined;\n    updatePackageManifest?: boolean | undefined;\n  }\n): Promise<{\n  updatedManifest?: ProjectManifest | undefined;\n  ignoredBuilds?: string[] | undefined;\n}> {\n  const rootDir = (opts.dir ?? process.cwd()) as ProjectRootDir;\n\n  const { updatedProjects: projects, ignoredBuilds } = await mutateModules(\n    [\n      {\n        allowNew: opts.allowNew,\n        dependencySelectors,\n        mutation: 'installSome',\n        peer: opts.peer,\n        pinnedVersion: opts.pinnedVersion,\n        rootDir,\n        targetDependenciesField: opts.targetDependenciesField,\n        update: opts.update,\n        updateMatching: opts.updateMatching,\n        updatePackageManifest: opts.updatePackageManifest,\n        updateToLatest: opts.updateToLatest,\n      },\n    ],\n    {\n      ...opts,\n      update: opts.update ?? false,\n      lockfileDir: opts.lockfileDir,\n      allProjects: [\n        {\n          // TODO: fix id\n          id: '' as ProjectId,\n          // TODO: fix rootDirRealPath\n          rootDirRealPath: '' as ProjectRootDirRealPath,\n          modulesDir: opts.modulesDir ?? ('node_modules' as ModulesDir),\n          buildIndex: 0,\n          binsDir: opts.bin,\n          manifest,\n          rootDir,\n        },\n      ],\n    }\n  );\n\n  return { updatedManifest: projects[0]?.manifest, ignoredBuilds };\n}\n\nexport type InstallImporterToUpdate<WantedExtraProps> = {\n  mutation: 'install';\n  pruneDirectDependencies?: boolean | undefined;\n  update?: boolean | undefined;\n  updateToLatest?: boolean | undefined;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  updatePackageManifest?: boolean | undefined;\n\n  buildIndex: number;\n  binsDir: string;\n  id: ProjectId;\n  manifest?: ProjectManifest | undefined;\n  originalManifest?: ProjectManifest | undefined;\n  modulesDir: ModulesDir;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n  removePackages?: string[] | undefined;\n  wantedDependencies?: Array<WantedDependency & WantedExtraProps> | undefined;\n};\n\nexport type InstallSomeImporterToUpdate<WantedExtraProps> = {\n  allowNew?: boolean | undefined;\n  dependencySelectors: string[];\n  mutation: 'installSome';\n  peer?: boolean | undefined;\n  pruneDirectDependencies?: boolean | undefined;\n  pinnedVersion?: PinnedVersion | undefined;\n  targetDependenciesField?: DependenciesField | undefined;\n  update?: boolean | undefined;\n  updateToLatest?: boolean | undefined;\n  updateMatching?: UpdateMatchingFunction | undefined;\n  updatePackageManifest?: boolean | undefined;\n\n  buildIndex: number;\n  binsDir: string;\n  id: ProjectId;\n  manifest?: ProjectManifest | undefined;\n  originalManifest?: ProjectManifest | undefined;\n  modulesDir: ModulesDir;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n  removePackages?: string[] | undefined;\n  wantedDependencies?: Array<WantedDependency & WantedExtraProps> | undefined;\n};\n\nexport type UninstallSomeImporterToUpdate<WantedExtraProps> = {\n  mutation: 'uninstallSome';\n  dependencyNames: string[];\n  targetDependenciesField?: DependenciesField | undefined;\n\n  buildIndex: number;\n  binsDir: string;\n  id: ProjectId;\n  manifest?: ProjectManifest | undefined;\n  originalManifest?: ProjectManifest | undefined;\n  modulesDir: ModulesDir;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n  pruneDirectDependencies: boolean;\n  removePackages?: string[] | undefined;\n  updatePackageManifest?: boolean | undefined;\n  wantedDependencies?: Array<WantedDependency & WantedExtraProps> | undefined;\n};\n\nexport type ImporterToUpdate<WantedExtraProps> =\n  | InstallImporterToUpdate<WantedExtraProps>\n  | InstallSomeImporterToUpdate<WantedExtraProps>\n  | UninstallSomeImporterToUpdate<WantedExtraProps>;\n\nexport type UpdatedProject = {\n  originalManifest?: ProjectManifest | undefined;\n  manifest?: ProjectManifest | undefined;\n  peerDependencyIssues?: PeerDependencyIssues | undefined;\n  rootDir:\n    | ProjectRootDir\n    | ProjectRootDirRealPath\n    | GlobalPkgDir\n    | WorkspaceDir\n    | LockFileDir;\n};\n\ntype InstallFunctionResult = {\n  newLockfile: LockfileObject;\n  projects: UpdatedProject[];\n  stats?: InstallationResultStats | undefined;\n  depsRequiringBuild: DepPath[];\n  ignoredBuilds?: string[] | undefined;\n};\n\ntype InstallFunction = (\n  projects: ImporterToUpdate<{\n    isNew?: boolean | undefined;\n    updateSpec?: boolean | undefined;\n    preserveNonSemverVersionSpec?: boolean | undefined;\n  }>[],\n  ctx: PnpmContext,\n  opts: Omit<StrictInstallOptions, 'patchedDependencies'> & {\n    patchedDependencies?: PatchGroupRecord | undefined;\n    makePartialCurrentLockfile: boolean;\n    needsFullResolution: boolean;\n    neverBuiltDependencies?: string[] | undefined;\n    onlyBuiltDependencies?: string[] | undefined;\n    overrides?: Record<string, string> | undefined;\n    updateLockfileMinorVersion: boolean;\n    preferredVersions?: PreferredVersions | undefined;\n    pruneVirtualStore: boolean;\n    scriptsOpts: RunLifecycleHooksConcurrentlyOptions;\n    currentLockfileIsUpToDate: boolean;\n    hoistWorkspacePackages?: boolean | undefined;\n  }\n) => Promise<InstallFunctionResult>;\n\nasync function _installInContext(\n  projects: ImporterToUpdate<{\n    isNew?: boolean | undefined;\n    updateSpec?: boolean | undefined;\n    preserveNonSemverVersionSpec?: boolean | undefined;\n  }>[],\n  ctx: PnpmContext,\n  opts: Omit<StrictInstallOptions, 'patchedDependencies'> & {\n    patchedDependencies?: PatchGroupRecord | undefined;\n    makePartialCurrentLockfile: boolean;\n    needsFullResolution: boolean;\n    neverBuiltDependencies?: string[] | undefined;\n    onlyBuiltDependencies?: string[] | undefined;\n    overrides?: Record<string, string> | undefined;\n    updateLockfileMinorVersion: boolean;\n    preferredVersions?: PreferredVersions | undefined;\n    pruneVirtualStore: boolean;\n    scriptsOpts: RunLifecycleHooksConcurrentlyOptions;\n    currentLockfileIsUpToDate: boolean;\n    hoistWorkspacePackages?: boolean | undefined;\n  }\n): Promise<{\n  newLockfile: LockfileObject;\n  projects: {\n    manifest?: ProjectManifest | undefined;\n    peerDependencyIssues?: PeerDependencyIssues | undefined;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n  }[];\n  stats?: InstallationResultStats | undefined;\n  depsRequiringBuild: DepPath[];\n  ignoredBuilds?: string[] | undefined;\n}> {\n  // The wanted lockfile is mutated during installation. To compare changes, a\n  // deep copy before installation is needed. This copy should represent the\n  // original wanted lockfile on disk as close as possible.\n  //\n  // This object can be quite large. Intentionally avoiding an expensive copy\n  // if no lockfileCheck option was passed in.\n  const originalLockfileForCheck =\n    opts.lockfileCheck != null ? clone.default(ctx.wantedLockfile) : null;\n\n  // Aliasing for clarity in boolean expressions below.\n  const isInstallationOnlyForLockfileCheck = opts.lockfileCheck != null;\n\n  ctx.wantedLockfile.importers = ctx.wantedLockfile.importers || {};\n\n  for (const { id } of projects) {\n    if (!ctx.wantedLockfile.importers[id]) {\n      ctx.wantedLockfile.importers[id] = { specifiers: {} };\n    }\n  }\n\n  if (opts.pruneLockfileImporters) {\n    const projectIds = new Set(\n      projects.map(\n        ({\n          id,\n        }: ImporterToUpdate<{\n          isNew?: boolean | undefined;\n          updateSpec?: boolean | undefined;\n          preserveNonSemverVersionSpec?: boolean | undefined;\n        }>): ProjectId => {\n          return id;\n        }\n      )\n    );\n\n    for (const wantedImporter of Object.keys(\n      ctx.wantedLockfile.importers\n    ) as ProjectId[]) {\n      if (projectIds.has(wantedImporter) !== true) {\n        delete ctx.wantedLockfile.importers[wantedImporter];\n      }\n    }\n  }\n\n  await Promise.all(\n    projects.map(\n      async (\n        project: ImporterToUpdate<{\n          isNew?: boolean | undefined;\n          updateSpec?: boolean | undefined;\n          preserveNonSemverVersionSpec?: boolean | undefined;\n        }>\n      ): Promise<void> => {\n        if (project.mutation !== 'uninstallSome') {\n          return;\n        }\n\n        const _removeDeps = async (\n          manifest: ProjectManifest\n        ): Promise<ProjectManifest> => {\n          return removeDeps(manifest, project.dependencyNames, {\n            prefix: project.rootDir,\n            saveType: project.targetDependenciesField,\n          });\n        };\n\n        if (typeof project.manifest !== 'undefined') {\n          project.manifest = await _removeDeps(project.manifest);\n        }\n\n        if (typeof project.originalManifest !== 'undefined') {\n          project.originalManifest = await _removeDeps(\n            project.originalManifest\n          );\n        }\n      }\n    )\n  );\n\n  stageLogger.debug({\n    prefix: ctx.lockfileDir ?? '',\n    stage: 'resolution_started',\n  });\n\n  const update = projects.some(\n    (\n      project: ImporterToUpdate<{\n        isNew?: boolean | undefined;\n        updateSpec?: boolean | undefined;\n        preserveNonSemverVersionSpec?: boolean | undefined;\n      }>\n    ): boolean => {\n      return 'update' in project && project.update === true; // as InstallMutationOptions\n    }\n  );\n\n  const preferredVersions =\n    opts.preferredVersions ??\n    (update\n      ? undefined\n      : getPreferredVersionsFromLockfileAndManifests(\n          ctx.wantedLockfile.packages,\n          Object.values(ctx.projects)\n            .map(\n              ({\n                manifest,\n              }: ProjectOptions &\n                HookOptions & {\n                  binsDir: string;\n                }): ProjectManifest | undefined => {\n                return manifest;\n              }\n            )\n            .filter(Boolean)\n        ));\n\n  const forceFullResolution =\n    ctx.wantedLockfile.lockfileVersion !== LOCKFILE_VERSION ||\n    !opts.currentLockfileIsUpToDate ||\n    opts.force ||\n    opts.needsFullResolution ||\n    ctx.lockfileHadConflicts ||\n    opts.dedupePeerDependents;\n\n  // Ignore some fields when fixing lockfile, so these fields can be regenerated\n  // and make sure it's up to date\n  if (\n    opts.fixLockfile &&\n    typeof ctx.wantedLockfile.packages !== 'undefined' &&\n    !isEmpty.default(ctx.wantedLockfile.packages)\n  ) {\n    ctx.wantedLockfile.packages = mapValues.default(\n      ({\n        dependencies,\n        optionalDependencies,\n        resolution,\n      }): {\n        dependencies?: ResolvedDependencies | undefined;\n        optionalDependencies?: ResolvedDependencies | undefined;\n        resolution?: Resolution | undefined;\n      } => {\n        return {\n          // These fields are needed to avoid losing information of the locked dependencies if these fields are not broken\n          // If these fields are broken, they will also be regenerated\n          dependencies,\n          optionalDependencies,\n          resolution,\n        };\n      },\n      ctx.wantedLockfile.packages\n    );\n  }\n\n  if (opts.dedupe) {\n    // Deleting recorded version resolutions from importers and packages. These\n    // fields will be regenerated using the preferred versions computed above.\n    //\n    // This is a bit different from a \"full resolution\", which completely\n    // ignores preferred versions from the lockfile.\n    forgetResolutionsOfAllPrevWantedDeps(ctx.wantedLockfile);\n  }\n\n  let {\n    dependenciesGraph,\n    dependenciesByProjectId,\n    linkedDependenciesByProjectId,\n    newLockfile,\n    outdatedDependencies,\n    peerDependencyIssuesByProjects,\n    wantedToBeSkippedPackageIds,\n    waitTillAllFetchingsFinish,\n  } = await resolveDependencies(projects, {\n    allowUnusedPatches: false,\n    allowedDeprecatedVersions: opts.allowedDeprecatedVersions,\n    allowNonAppliedPatches: opts.allowNonAppliedPatches,\n    autoInstallPeers: opts.autoInstallPeers,\n    autoInstallPeersFromHighestMatch: opts.autoInstallPeersFromHighestMatch,\n    catalogs: opts.catalogs,\n    currentLockfile: ctx.currentLockfile,\n    defaultUpdateDepth: opts.depth,\n    dedupeDirectDeps: opts.dedupeDirectDeps,\n    dedupeInjectedDeps: opts.dedupeInjectedDeps,\n    dedupePeerDependents: opts.dedupePeerDependents,\n    dryRun: opts.lockfileOnly,\n    engineStrict: opts.engineStrict,\n    excludeLinksFromLockfile: opts.excludeLinksFromLockfile,\n    force: opts.force,\n    forceFullResolution,\n    ignoreScripts: opts.ignoreScripts,\n    hooks: {\n      readPackage: opts.readPackageHook,\n    },\n    linkWorkspacePackagesDepth:\n      opts.linkWorkspacePackagesDepth ||\n      (opts.saveWorkspaceProtocol === false ? -1 : 0),\n    lockfileDir: opts.lockfileDir,\n    nodeVersion: opts.nodeVersion,\n    pnpmVersion:\n      opts.packageManager.name === 'pnpm' ? opts.packageManager.version : '',\n    preferWorkspacePackages: opts.preferWorkspacePackages,\n    preferredVersions,\n    preserveWorkspaceProtocol: opts.preserveWorkspaceProtocol,\n    registries: ctx.registries,\n    resolutionMode: opts.resolutionMode,\n    saveWorkspaceProtocol: opts.saveWorkspaceProtocol,\n    storeController: opts.storeController,\n    tag: opts.tag,\n    virtualStoreDir: ctx.virtualStoreDir,\n    virtualStoreDirMaxLength: ctx.virtualStoreDirMaxLength,\n    wantedLockfile: ctx.wantedLockfile,\n    workspacePackages: ctx.workspacePackages,\n    patchedDependencies: opts.patchedDependencies,\n    lockfileIncludeTarballUrl: opts.lockfileIncludeTarballUrl,\n    resolvePeersFromWorkspaceRoot: opts.resolvePeersFromWorkspaceRoot,\n    supportedArchitectures: opts.supportedArchitectures,\n    peersSuffixMaxLength: opts.peersSuffixMaxLength,\n    injectWorkspacePackages: opts.injectWorkspacePackages,\n  });\n\n  if (\n    !opts.include.optionalDependencies ||\n    !opts.include.devDependencies ||\n    !opts.include.dependencies\n  ) {\n    linkedDependenciesByProjectId = mapValues.default(\n      (linkedDeps: LinkedDependency[]): LinkedDependency[] => {\n        return linkedDeps.filter((linkedDep: LinkedDependency): boolean => {\n          return !(\n            (linkedDep.dev === true && !opts.include.devDependencies) ||\n            (linkedDep.optional === true &&\n              !opts.include.optionalDependencies) ||\n            (linkedDep.dev !== true &&\n              linkedDep.optional !== true &&\n              opts.include.dependencies !== true)\n          );\n        });\n      },\n      linkedDependenciesByProjectId\n    );\n\n    for (const { id, manifest } of projects) {\n      for (const [alias, depPath] of dependenciesByProjectId[id]?.entries() ??\n        []) {\n        let include = false;\n\n        const dep = dependenciesGraph[depPath];\n\n        if (typeof dep === 'undefined') {\n          include = false;\n        } else {\n          const isDev = Boolean(manifest?.devDependencies?.[dep.name]);\n\n          const isOptional = Boolean(\n            manifest?.optionalDependencies?.[dep.name]\n          );\n\n          include = !(\n            (isDev && !opts.include.devDependencies) ||\n            (isOptional && !opts.include.optionalDependencies) ||\n            (!isDev && !isOptional && !opts.include.dependencies)\n          );\n        }\n\n        if (!include) {\n          dependenciesByProjectId[id]?.delete(alias);\n        }\n      }\n    }\n  }\n\n  stageLogger.debug({\n    prefix: ctx.lockfileDir ?? '',\n    stage: 'resolution_done',\n  });\n\n  newLockfile =\n    typeof opts.hooks.afterAllResolved === 'undefined'\n      ? newLockfile\n      : pipeWith.default<Array<LockfileObject>, LockfileObject>(\n          async (f, res) => {\n            return f(await res);\n          },\n          // TODO: fix this\n          opts.hooks.afterAllResolved as [\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            (...args: LockfileObject[]) => any,\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            ...((args: any) => any)[],\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            (...args: any[]) => LockfileObject,\n          ]\n        )(newLockfile);\n\n  if (opts.updateLockfileMinorVersion) {\n    newLockfile.lockfileVersion = LOCKFILE_VERSION;\n  }\n\n  const depsStateCache: DepsStateCache = {};\n\n  const lockfileOpts = {\n    useGitBranchLockfile: opts.useGitBranchLockfile,\n    mergeGitBranchLockfiles: opts.mergeGitBranchLockfiles,\n  };\n\n  let stats: InstallationResultStats | undefined;\n\n  const allowBuild = createAllowBuildFunction({\n    neverBuiltDependencies: opts.neverBuiltDependencies as string[],\n    onlyBuiltDependencies: opts.onlyBuiltDependencies as string[],\n    onlyBuiltDependenciesFile: opts.onlyBuiltDependenciesFile as string,\n  });\n\n  let ignoredBuilds: string[] | undefined;\n\n  if (\n    !opts.lockfileOnly &&\n    !isInstallationOnlyForLockfileCheck &&\n    opts.enableModulesDir\n  ) {\n    const result = await linkPackages(projects, dependenciesGraph, {\n      allowBuild,\n      currentLockfile: ctx.currentLockfile,\n      dedupeDirectDeps: opts.dedupeDirectDeps,\n      dependenciesByProjectId,\n      depsStateCache,\n      disableRelinkLocalDirDeps: opts.disableRelinkLocalDirDeps,\n      extraNodePaths: ctx.extraNodePaths,\n      force: opts.force,\n      hoistedDependencies: ctx.hoistedDependencies,\n      hoistedModulesDir: ctx.hoistedModulesDir,\n      hoistPattern: ctx.hoistPattern,\n      ignoreScripts: opts.ignoreScripts,\n      include: opts.include,\n      linkedDependenciesByProjectId,\n      lockfileDir: opts.lockfileDir,\n      makePartialCurrentLockfile: opts.makePartialCurrentLockfile,\n      outdatedDependencies,\n      pruneStore: opts.pruneStore,\n      pruneVirtualStore: opts.pruneVirtualStore,\n      publicHoistPattern: ctx.publicHoistPattern,\n      registries: ctx.registries,\n      rootModulesDir: ctx.rootModulesDir,\n      sideEffectsCacheRead: opts.sideEffectsCacheRead,\n      symlink: opts.symlink,\n      skipped: ctx.skipped,\n      storeController: opts.storeController,\n      virtualStoreDir: ctx.virtualStoreDir,\n      virtualStoreDirMaxLength: ctx.virtualStoreDirMaxLength,\n      wantedLockfile: newLockfile,\n      wantedToBeSkippedPackageIds,\n      hoistWorkspacePackages: opts.hoistWorkspacePackages,\n    });\n\n    stats = result.stats;\n\n    if (opts.enablePnp) {\n      const importerNames = Object.fromEntries(\n        projects.map(\n          ({\n            manifest,\n            id,\n          }: ImporterToUpdate<{\n            isNew?: boolean | undefined;\n            updateSpec?: boolean | undefined;\n            preserveNonSemverVersionSpec?: boolean | undefined;\n          }>): [ProjectId, string] => {\n            return [id, manifest?.name ?? id];\n          }\n        )\n      );\n      await writePnpFile(result.currentLockfile, {\n        importerNames,\n        lockfileDir: ctx.lockfileDir ?? '',\n        virtualStoreDir: ctx.virtualStoreDir,\n        virtualStoreDirMaxLength: ctx.virtualStoreDirMaxLength,\n        registries: ctx.registries,\n      });\n    }\n\n    ctx.pendingBuilds = ctx.pendingBuilds.filter(\n      (relDepPath: string): boolean => {\n        return !result.removedDepPaths.has(relDepPath);\n      }\n    );\n\n    if (result.newDepPaths.length) {\n      if (opts.ignoreScripts) {\n        // we can use concat here because we always only append new packages, which are guaranteed to not be there by definition\n        ctx.pendingBuilds = ctx.pendingBuilds.concat(\n          result.newDepPaths.filter((depPath: DepPath): boolean => {\n            return dependenciesGraph[depPath]?.requiresBuild === true;\n          })\n        );\n      }\n\n      if (\n        !opts.ignoreScripts ||\n        Object.keys(opts.patchedDependencies ?? {}).length > 0\n      ) {\n        // postinstall hooks\n        const depPaths = Object.keys(dependenciesGraph) as DepPath[];\n\n        const rootNodes = depPaths.filter((depPath: DepPath): boolean => {\n          return dependenciesGraph[depPath]?.depth === 0;\n        });\n\n        let extraEnv: Record<string, string> | undefined =\n          opts.scriptsOpts.extraEnv;\n        if (opts.enablePnp) {\n          extraEnv = {\n            ...extraEnv,\n            ...makeNodeRequireOption(path.join(opts.lockfileDir, '.pnp.cjs')),\n          };\n        }\n\n        ignoredBuilds = (\n          await buildModules(dependenciesGraph, rootNodes, {\n            allowBuild,\n            ignoredBuiltDependencies: opts.ignoredBuiltDependencies,\n            childConcurrency: opts.childConcurrency,\n            depsStateCache,\n            depsToBuild: new Set(result.newDepPaths),\n            extraBinPaths: ctx.extraBinPaths,\n            extraNodePaths: ctx.extraNodePaths,\n            extraEnv,\n            ignoreScripts: opts.ignoreScripts || opts.ignoreDepScripts,\n            lockfileDir: ctx.lockfileDir ?? '',\n            optional: opts.include.optionalDependencies,\n            preferSymlinkedExecutables: opts.preferSymlinkedExecutables,\n            rawConfig: opts.rawConfig,\n            rootModulesDir: ctx.virtualStoreDir,\n            scriptsPrependNodePath: opts.scriptsPrependNodePath,\n            scriptShell: opts.scriptShell,\n            shellEmulator: opts.shellEmulator,\n            sideEffectsCacheWrite: opts.sideEffectsCacheWrite,\n            storeController: opts.storeController,\n            unsafePerm: opts.unsafePerm,\n            userAgent: opts.userAgent,\n          })\n        ).ignoredBuilds;\n      }\n    }\n\n    function binWarn(prefix: string, message: string): void {\n      logger.info({ message, prefix });\n    }\n\n    if (result.newDepPaths.length) {\n      const newPkgs = props.default<DepPath, DependenciesGraphNode>(\n        result.newDepPaths,\n        dependenciesGraph\n      );\n\n      await linkAllBins(newPkgs, dependenciesGraph, {\n        extraNodePaths: ctx.extraNodePaths,\n        optional: opts.include.optionalDependencies,\n        warn: binWarn.bind(null, opts.lockfileDir),\n      });\n    }\n\n    await Promise.all(\n      projects.map(\n        async (\n          project: ImporterToUpdate<{\n            isNew?: boolean | undefined;\n            updateSpec?: boolean | undefined;\n            preserveNonSemverVersionSpec?: boolean | undefined;\n          }>,\n          index: number\n        ): Promise<void> => {\n          let linkedPackages!: string[];\n\n          if (\n            typeof ctx.publicHoistPattern?.length === 'number' &&\n            ctx.publicHoistPattern.length > 0 &&\n            path.relative(project.rootDir, opts.lockfileDir) === ''\n          ) {\n            const nodeExecPathByAlias: Record<string, string> = {};\n\n            for (const alias in project.manifest?.dependenciesMeta) {\n              const dm = project.manifest.dependenciesMeta[alias];\n\n              if (typeof dm === 'undefined') {\n                continue;\n              }\n\n              if (typeof dm.node === 'string') {\n                nodeExecPathByAlias[alias] = dm.node;\n              }\n            }\n\n            if (typeof project.binsDir === 'undefined') {\n              project.binsDir = path.join(\n                project.rootDir,\n                'node_modules',\n                '.bin'\n              );\n            }\n\n            linkedPackages = await linkBins(\n              project.modulesDir,\n              project.binsDir,\n              {\n                allowExoticManifests: true,\n                preferSymlinkedExecutables: opts.preferSymlinkedExecutables,\n                projectManifest: project.manifest,\n                nodeExecPathByAlias,\n                extraNodePaths: ctx.extraNodePaths,\n                warn: binWarn.bind(null, project.rootDir),\n              }\n            );\n          } else {\n            const directPkgs = [\n              ...props.default<DepPath, DependenciesGraphNode>(\n                Array.from(\n                  dependenciesByProjectId[project.id]?.values() ?? []\n                ).filter((depPath: DepPath): boolean => {\n                  return ctx.skipped.has(depPath) !== true;\n                }),\n                dependenciesGraph\n              ),\n              ...(linkedDependenciesByProjectId[project.id]?.map(\n                ({\n                  pkgId,\n                }: LinkedDependency): {\n                  dir: string;\n                  fetching: undefined;\n                } => {\n                  return {\n                    dir: path.join(project.rootDir, pkgId.substring(5)),\n                    fetching: undefined,\n                  };\n                }\n              ) ?? []),\n            ];\n\n            linkedPackages = await linkBinsOfPackages(\n              (\n                await Promise.all(\n                  directPkgs.map(\n                    async (\n                      dep:\n                        | DependenciesGraphNode\n                        | {\n                            dir: string;\n                            fetching: undefined;\n                          }\n                    ): Promise<{\n                      location: string;\n                      manifest: BundledManifest | null;\n                      nodeExecPath: string | undefined;\n                    }> => {\n                      const manifest =\n                        (await dep.fetching?.())?.bundledManifest ??\n                        (await safeReadProjectManifestOnly(dep.dir));\n\n                      let nodeExecPath: string | undefined;\n\n                      if (typeof manifest?.name === 'string') {\n                        nodeExecPath =\n                          project.manifest?.dependenciesMeta?.[manifest.name]\n                            ?.node;\n                      }\n\n                      return {\n                        location: dep.dir,\n                        manifest,\n                        nodeExecPath,\n                      };\n                    }\n                  )\n                )\n              ).filter(\n                ({\n                  manifest,\n                }: {\n                  location: string;\n                  manifest: BundledManifest | null;\n                  nodeExecPath: string | undefined;\n                }): boolean => {\n                  return manifest !== null;\n                }\n              ) as Array<{\n                location: string;\n                // filtered out null manifests\n                manifest: BundledManifest;\n                nodeExecPath: string | undefined;\n              }>,\n              project.binsDir,\n              {\n                extraNodePaths: ctx.extraNodePaths,\n                preferSymlinkedExecutables: opts.preferSymlinkedExecutables,\n              }\n            );\n          }\n\n          const projectToInstall = projects[index];\n\n          if (\n            opts.global &&\n            projectToInstall?.mutation.includes('install') === true\n          ) {\n            for (const pkg of projectToInstall.wantedDependencies ?? []) {\n              // This warning is never printed currently during \"pnpm link --global\"\n              // due to the following issue: https://github.com/pnpm/pnpm/issues/4761\n              if (\n                typeof pkg.alias === 'string' &&\n                !linkedPackages.includes(pkg.alias)\n              ) {\n                logger.warn({\n                  message: `${pkg.alias} has no binaries`,\n                  prefix: opts.lockfileDir,\n                });\n              }\n            }\n          }\n        }\n      )\n    );\n\n    const projectsWithTargetDirs = extendProjectsWithTargetDirs(\n      projects,\n      newLockfile,\n      {\n        virtualStoreDir: ctx.virtualStoreDir,\n        virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n      }\n    );\n\n    await Promise.all([\n      opts.useLockfile && opts.saveLockfile\n        ? writeLockfiles({\n            currentLockfile: result.currentLockfile,\n            currentLockfileDir: ctx.virtualStoreDir,\n            wantedLockfile: newLockfile,\n            wantedLockfileDir: ctx.lockfileDir ?? '',\n            ...lockfileOpts,\n          })\n        : writeCurrentLockfile(ctx.virtualStoreDir, result.currentLockfile),\n      (async (): Promise<void> => {\n        if (\n          result.currentLockfile.packages === undefined &&\n          result.removedDepPaths.size === 0\n        ) {\n          return Promise.resolve();\n        }\n\n        const injectedDeps: Record<string, string[]> = {};\n\n        for (const project of projectsWithTargetDirs) {\n          if (project.targetDirs.length > 0) {\n            injectedDeps[project.id] = project.targetDirs.map(\n              (targetDir: string): string => {\n                return path.relative(opts.lockfileDir, targetDir);\n              }\n            );\n          }\n        }\n\n        return writeModulesManifest(\n          ctx.rootModulesDir,\n          {\n            ...ctx.modulesFile,\n            hoistedDependencies: result.newHoistedDependencies,\n            hoistPattern: ctx.hoistPattern,\n            included: ctx.include,\n            injectedDeps,\n            ignoredBuilds,\n            layoutVersion: LAYOUT_VERSION,\n            nodeLinker: opts.nodeLinker,\n            packageManager: `${opts.packageManager.name}@${opts.packageManager.version}`,\n            pendingBuilds: ctx.pendingBuilds,\n            publicHoistPattern: ctx.publicHoistPattern,\n            prunedAt:\n              opts.pruneVirtualStore || ctx.modulesFile == null\n                ? new Date().toUTCString()\n                : ctx.modulesFile.prunedAt,\n            registries: ctx.registries,\n            skipped: Array.from(ctx.skipped),\n            storeDir: ctx.storeDir,\n            virtualStoreDir: ctx.virtualStoreDir,\n            virtualStoreDirMaxLength: ctx.virtualStoreDirMaxLength,\n          },\n          {\n            makeModulesDir:\n              Object.keys(result.currentLockfile.packages ?? {}).length > 0,\n          }\n        );\n      })(),\n    ]);\n\n    if (!opts.ignoreScripts) {\n      if (opts.enablePnp) {\n        opts.scriptsOpts.extraEnv = {\n          ...opts.scriptsOpts.extraEnv,\n          ...makeNodeRequireOption(path.join(opts.lockfileDir, '.pnp.cjs')),\n        };\n      }\n\n      const projectsToBeBuilt: ProjectToBeInstalled[] =\n        projectsWithTargetDirs.filter(\n          ({\n            mutation,\n          }: ImporterToUpdate<{\n            isNew?: boolean | undefined;\n            updateSpec?: boolean | undefined;\n            preserveNonSemverVersionSpec?: boolean | undefined;\n          }> & {\n            id: ProjectId;\n            stages: string[];\n            targetDirs: string[];\n          }): boolean => {\n            return mutation === 'install';\n          }\n        ); //  as ProjectToBeInstalled[]\n\n      await runLifecycleHooksConcurrently(\n        [\n          'preinstall',\n          'install',\n          'postinstall',\n          'preprepare',\n          'prepare',\n          'postprepare',\n        ],\n        projectsToBeBuilt,\n        opts.childConcurrency,\n        opts.scriptsOpts\n      );\n    }\n  } else {\n    if (\n      opts.useLockfile &&\n      opts.saveLockfile &&\n      !isInstallationOnlyForLockfileCheck\n    ) {\n      await writeWantedLockfile(\n        ctx.lockfileDir ?? '',\n        newLockfile,\n        lockfileOpts\n      );\n    }\n\n    if (opts.nodeLinker !== 'hoisted') {\n      // This is only needed because otherwise the reporter will hang\n      stageLogger.debug({\n        prefix: opts.lockfileDir,\n        stage: 'importing_done',\n      });\n    }\n  }\n\n  await waitTillAllFetchingsFinish();\n\n  const depsRequiringBuild: DepPath[] = [];\n\n  if (opts.returnListOfDepsRequiringBuild === true) {\n    await Promise.all(\n      Object.entries(dependenciesGraph).map(\n        async ([depPath, node]: [\n          string,\n          ResolvedPackage & GenericDependenciesGraphNodeWithResolvedChildren,\n        ]): Promise<void> => {\n          // We cannot detect if a skipped optional dependency requires build\n          if (typeof node.fetching === 'undefined') {\n            return;\n          }\n\n          const { files } = await node.fetching();\n\n          if (files.requiresBuild) {\n            depsRequiringBuild.push(depPath as DepPath);\n          }\n        }\n      )\n    );\n  }\n\n  reportPeerDependencyIssues(peerDependencyIssuesByProjects, {\n    lockfileDir: opts.lockfileDir,\n    strictPeerDependencies: opts.strictPeerDependencies,\n  });\n\n  summaryLogger.debug({ prefix: opts.lockfileDir });\n\n  // Similar to the sequencing for when the original wanted lockfile is\n  // copied, the new lockfile passed here should be as close as possible to\n  // what will eventually be written to disk. Ex: peers should be resolved,\n  // the afterAllResolved hook has been applied, etc.\n  if (originalLockfileForCheck != null) {\n    opts.lockfileCheck?.(originalLockfileForCheck, newLockfile);\n  }\n\n  return {\n    newLockfile,\n    projects: projects.map(\n      ({\n        id,\n        manifest,\n        rootDir,\n      }): {\n        manifest?: ProjectManifest | undefined;\n        peerDependencyIssues: PeerDependencyIssues | undefined;\n        rootDir:\n          | ProjectRootDir\n          | ProjectRootDirRealPath\n          | GlobalPkgDir\n          | WorkspaceDir\n          | LockFileDir;\n      } => {\n        return {\n          manifest,\n          peerDependencyIssues: peerDependencyIssuesByProjects[id],\n          rootDir,\n        };\n      }\n    ),\n    stats,\n    depsRequiringBuild,\n    ignoredBuilds,\n  };\n}\n\nfunction allMutationsAreInstalls(projects: MutatedProject[]): boolean {\n  return projects.every((project: MutatedProject): boolean => {\n    return (\n      project.mutation === 'install' &&\n      project.update !== true &&\n      !project.updateMatching\n    );\n  });\n}\n\nconst limitLinking = pLimit(16);\n\nasync function linkAllBins(\n  depNodes: DependenciesGraphNode[],\n  depGraph: DependenciesGraph,\n  opts: {\n    extraNodePaths?: string[] | undefined;\n    preferSymlinkedExecutables?: boolean | undefined;\n    optional: boolean;\n    warn: (message: string) => void;\n  }\n): Promise<void> {\n  await Promise.all(\n    depNodes.map(async (depNode: DependenciesGraphNode): Promise<void> => {\n      return limitLinking(async (): Promise<void> => {\n        return linkBinsOfDependencies(depNode, depGraph, opts);\n      });\n    })\n  );\n}\n"],
  "mappings": "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",
  "names": ["result", "isWantedDepPrefSame", "binWarn"]
}
