{
  "version": 3,
  "sources": ["../../../../../src/packages/core/install/link.ts"],
  "sourcesContent": ["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport {\n  calcDepState,\n  type DepsStateCache,\n} from '../../calc-dep-state/index.ts';\nimport {\n  progressLogger,\n  stageLogger,\n  statsLogger,\n} from '../../core-loggers/index.ts';\nimport { filterLockfileByImporters } from '../../lockfile.filtering/index.ts';\nimport { linkDirectDeps } from '../../pkg-manager.direct-dep-linker/index.ts';\nimport type { InstallationResultStats } from '../../headless/index.ts';\nimport { hoist, type HoistedWorkspaceProject } from '../../hoist/index.ts';\nimport { logger } from '../../logger/index.ts';\nimport { prune } from '../../modules-cleaner/index.ts';\nimport type { IncludedDependencies } from '../../modules-yaml/index.ts';\nimport type {\n  DependenciesGraph,\n  DependenciesGraphNode,\n  LinkedDependency,\n  ResolvedPackage,\n} from '../../resolve-dependencies/index.ts';\nimport type {\n  PackageResponse,\n  StoreController,\n} from '../../store-controller-types/index.ts';\nimport { symlinkDependency } from '../../symlink-dependency/index.ts';\nimport type {\n  DepPath,\n  HoistedDependencies,\n  Registries,\n  ProjectId,\n  ProjectRootDir,\n  PkgResolutionId,\n  GlobalPkgDir,\n  ProjectRootDirRealPath,\n  ModulesDir,\n  LockFileDir,\n  WorkspaceDir,\n} from '../../types/index.ts';\nimport { symlinkAllModules } from '../../worker/index.ts';\nimport pLimit from 'p-limit';\nimport { pathExists } from 'path-exists';\nimport equals from 'ramda/src/equals';\nimport isEmpty from 'ramda/src/isEmpty';\nimport difference from 'ramda/src/difference';\nimport omit from 'ramda/src/omit';\nimport pick from 'ramda/src/pick';\nimport pickBy from 'ramda/src/pickBy';\nimport props from 'ramda/src/props';\nimport type { ImporterToUpdate } from './index.ts';\nimport type { GenericDependenciesGraphNodeWithResolvedChildren } from '../../resolve-dependencies/resolvePeers.ts';\nimport type {\n  LockfileObject,\n  ProjectSnapshot,\n} from '../../lockfile.types/index.ts';\n\nconst brokenModulesLogger = logger('_broken_node_modules');\n\nexport interface LinkPackagesOptions {\n  allowBuild?: ((pkgName: string) => boolean) | undefined;\n  currentLockfile: LockfileObject;\n  dedupeDirectDeps: boolean;\n  dependenciesByProjectId: Record<string, Map<string, DepPath>>;\n  disableRelinkLocalDirDeps?: boolean | undefined;\n  force: boolean;\n  depsStateCache: DepsStateCache;\n  extraNodePaths: string[];\n  hoistedDependencies: HoistedDependencies;\n  hoistedModulesDir: ModulesDir;\n  hoistPattern?: string[] | undefined;\n  ignoreScripts: boolean;\n  publicHoistPattern?: string[] | undefined;\n  include: IncludedDependencies;\n  linkedDependenciesByProjectId: Record<string, LinkedDependency[]>;\n  lockfileDir: string;\n  makePartialCurrentLockfile: boolean;\n  outdatedDependencies: Record<string, string>;\n  pruneStore: boolean;\n  pruneVirtualStore: boolean;\n  registries: Registries;\n  rootModulesDir: ModulesDir;\n  sideEffectsCacheRead: boolean;\n  symlink: boolean;\n  skipped: Set<DepPath>;\n  storeController: StoreController<\n    PackageResponse,\n    PackageResponse,\n    {\n      importMethod?: string | undefined;\n      isBuilt: boolean;\n    }\n  >;\n  virtualStoreDir: string;\n  virtualStoreDirMaxLength: number;\n  wantedLockfile: LockfileObject;\n  wantedToBeSkippedPackageIds: Set<string>;\n  hoistWorkspacePackages?: boolean | undefined;\n}\n\nexport type LinkPackagesResult = {\n  currentLockfile: LockfileObject;\n  newDepPaths: DepPath[];\n  newHoistedDependencies: HoistedDependencies;\n  removedDepPaths: Set<string>;\n  stats: InstallationResultStats;\n};\n\nexport async function linkPackages<WantedExtraProps>(\n  projects: ImporterToUpdate<WantedExtraProps>[],\n  depGraph: DependenciesGraph,\n  opts: LinkPackagesOptions\n): Promise<LinkPackagesResult> {\n  let depNodes = Object.values(depGraph).filter(\n    ({\n      depPath,\n      id,\n    }: ResolvedPackage &\n      GenericDependenciesGraphNodeWithResolvedChildren): boolean => {\n      if (\n        opts.wantedLockfile.packages?.[depPath] != null &&\n        opts.wantedLockfile.packages[depPath].optional !== true\n      ) {\n        opts.skipped.delete(depPath);\n\n        return true;\n      }\n\n      if (opts.wantedToBeSkippedPackageIds.has(id)) {\n        opts.skipped.add(depPath);\n\n        return false;\n      }\n\n      opts.skipped.delete(depPath);\n\n      return true;\n    }\n  );\n\n  if (!opts.include.dependencies) {\n    depNodes = depNodes.filter(\n      ({\n        dev,\n        optional,\n      }: ResolvedPackage &\n        GenericDependenciesGraphNodeWithResolvedChildren): boolean => {\n        return dev ?? optional;\n      }\n    );\n  }\n\n  if (opts.include.devDependencies !== true) {\n    depNodes = depNodes.filter(\n      ({\n        optional,\n        prod,\n      }: ResolvedPackage &\n        GenericDependenciesGraphNodeWithResolvedChildren): boolean => {\n        return prod || optional;\n      }\n    );\n  }\n\n  if (opts.include.optionalDependencies !== true) {\n    depNodes = depNodes.filter(\n      ({\n        optional,\n      }: ResolvedPackage &\n        GenericDependenciesGraphNodeWithResolvedChildren): boolean => {\n        return optional !== true;\n      }\n    );\n  }\n\n  const newDepGraph = Object.fromEntries(\n    depNodes.map(\n      (\n        depNode: ResolvedPackage &\n          GenericDependenciesGraphNodeWithResolvedChildren\n      ): [\n        DepPath,\n        ResolvedPackage & GenericDependenciesGraphNodeWithResolvedChildren,\n      ] => [depNode.depPath, depNode]\n    )\n  );\n\n  const removedDepPaths = await prune(projects, {\n    currentLockfile: opts.currentLockfile,\n    dedupeDirectDeps: opts.dedupeDirectDeps,\n    hoistedDependencies: opts.hoistedDependencies,\n    hoistedModulesDir:\n      opts.hoistPattern != null ? opts.hoistedModulesDir : undefined,\n    include: opts.include,\n    lockfileDir: opts.lockfileDir,\n    pruneStore: opts.pruneStore,\n    pruneVirtualStore: opts.pruneVirtualStore,\n    publicHoistedModulesDir:\n      typeof opts.publicHoistPattern !== 'undefined'\n        ? opts.rootModulesDir\n        : undefined,\n    skipped: opts.skipped,\n    storeController: opts.storeController,\n    virtualStoreDir: opts.virtualStoreDir,\n    virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n    wantedLockfile: opts.wantedLockfile,\n  });\n\n  stageLogger.debug({\n    prefix: opts.lockfileDir,\n    stage: 'importing_started',\n  });\n\n  const projectIds = projects.map(({ id }) => id);\n\n  const filterOpts = {\n    include: opts.include,\n    registries: opts.registries,\n    skipped: opts.skipped,\n  };\n\n  const newCurrentLockfile = filterLockfileByImporters(\n    opts.wantedLockfile,\n    projectIds,\n    {\n      ...filterOpts,\n      failOnMissingDependencies: true,\n      skipped: new Set(),\n    }\n  );\n\n  const { newDepPaths, added } = await linkNewPackages(\n    filterLockfileByImporters(opts.currentLockfile, projectIds, {\n      ...filterOpts,\n      failOnMissingDependencies: false,\n    }),\n    newCurrentLockfile,\n    newDepGraph,\n    {\n      allowBuild: opts.allowBuild,\n      disableRelinkLocalDirDeps: opts.disableRelinkLocalDirDeps,\n      force: opts.force,\n      depsStateCache: opts.depsStateCache,\n      ignoreScripts: opts.ignoreScripts,\n      lockfileDir: opts.lockfileDir,\n      optional: opts.include.optionalDependencies,\n      sideEffectsCacheRead: opts.sideEffectsCacheRead,\n      symlink: opts.symlink,\n      skipped: opts.skipped,\n      storeController: opts.storeController,\n      virtualStoreDir: opts.virtualStoreDir,\n    }\n  );\n\n  stageLogger.debug({\n    prefix: opts.lockfileDir,\n    stage: 'importing_done',\n  });\n\n  let currentLockfile: LockfileObject;\n\n  const allImportersIncluded = equals.default(\n    projectIds.sort(),\n    Object.keys(opts.wantedLockfile.importers ?? {}).sort()\n  );\n\n  if (opts.makePartialCurrentLockfile || !allImportersIncluded) {\n    const packages = opts.currentLockfile.packages ?? {};\n\n    if (opts.wantedLockfile.packages != null) {\n      for (const depPath in opts.wantedLockfile.packages) {\n        if (newDepGraph[depPath as DepPath]) {\n          const newPackages = opts.wantedLockfile.packages[depPath as DepPath];\n\n          if (typeof newPackages !== 'undefined') {\n            packages[depPath as DepPath] = newPackages;\n          }\n        }\n      }\n    }\n\n    const projects = {\n      ...opts.currentLockfile.importers,\n      ...pick.default<\n        Record<ProjectId, ProjectSnapshot> | undefined,\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore Type 'ProjectId[]' does not satisfy the constraint 'never'.ts(2344)\n        ProjectId[]\n      >(projectIds, opts.wantedLockfile.importers),\n    };\n\n    currentLockfile = filterLockfileByImporters(\n      {\n        ...opts.wantedLockfile,\n        importers: projects,\n        packages,\n      },\n      Object.keys(projects) as ProjectId[],\n      {\n        ...filterOpts,\n        failOnMissingDependencies: false,\n        skipped: new Set(),\n      }\n    );\n  } else if (\n    opts.include.dependencies &&\n    opts.include.devDependencies &&\n    opts.include.optionalDependencies &&\n    opts.skipped.size === 0\n  ) {\n    currentLockfile = opts.wantedLockfile;\n  } else {\n    currentLockfile = newCurrentLockfile;\n  }\n\n  let newHoistedDependencies: HoistedDependencies;\n\n  if (opts.hoistPattern == null && opts.publicHoistPattern == null) {\n    newHoistedDependencies = {};\n  } else if (newDepPaths.length > 0 || removedDepPaths.size > 0) {\n    // It is important to keep the skipped packages in the lockfile which will be saved as the \"current lockfile\".\n    // pnpm is comparing the current lockfile to the wanted one and they should match.\n    // But for hoisting, we need a version of the lockfile w/o the skipped packages, so we're making a copy.\n    const hoistLockfile = {\n      ...currentLockfile,\n      packages:\n        currentLockfile.packages != null\n          ? omit.default(Array.from(opts.skipped), currentLockfile.packages)\n          : {},\n    };\n\n    newHoistedDependencies = await hoist({\n      extraNodePath: opts.extraNodePaths,\n      lockfile: hoistLockfile,\n      importerIds: projectIds,\n      privateHoistedModulesDir: opts.hoistedModulesDir,\n      privateHoistPattern: opts.hoistPattern ?? [],\n      publicHoistedModulesDir: opts.rootModulesDir,\n      publicHoistPattern: opts.publicHoistPattern ?? [],\n      virtualStoreDir: opts.virtualStoreDir,\n      virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n      hoistedWorkspacePackages:\n        opts.hoistWorkspacePackages === true\n          ? projects.reduce(\n              (\n                hoistedWorkspacePackages: Record<\n                  string,\n                  HoistedWorkspaceProject\n                >,\n                project: ImporterToUpdate<WantedExtraProps>\n              ): Record<string, HoistedWorkspaceProject> => {\n                if (\n                  typeof project.manifest?.name === 'string' &&\n                  project.id !== '.'\n                ) {\n                  hoistedWorkspacePackages[project.id] = {\n                    dir: project.rootDir,\n                    name: project.manifest.name,\n                  };\n                }\n\n                return hoistedWorkspacePackages;\n              },\n              {}\n            )\n          : undefined,\n    });\n  } else {\n    newHoistedDependencies = opts.hoistedDependencies;\n  }\n\n  let linkedToRoot = 0;\n\n  if (opts.symlink) {\n    const projectsToLink = Object.fromEntries(\n      await Promise.all(\n        projects.map(\n          async ({\n            id,\n            manifest,\n            modulesDir,\n            rootDir,\n          }: ImporterToUpdate<WantedExtraProps>): Promise<\n            (\n              | ProjectId\n              | {\n                  dir:\n                    | ProjectRootDir\n                    | ProjectRootDirRealPath\n                    | GlobalPkgDir\n                    | WorkspaceDir\n                    | LockFileDir;\n                  modulesDir: ModulesDir;\n                  dependencies: (\n                    | {\n                        alias: string;\n                        name: string;\n                        version: string;\n                        dir: string;\n                        id: PkgResolutionId;\n                        dependencyType: 'dev' | 'optional' | 'prod';\n                        latest: string | undefined;\n                        isExternalLink: boolean;\n                      }\n                    | {\n                        alias: string;\n                        name: string;\n                        version: string;\n                        dir: string;\n                        id: string | undefined;\n                        dependencyType: 'dev' | 'optional' | 'prod';\n                        isExternalLink: boolean;\n                      }\n                  )[];\n                }\n            )[]\n          > => {\n            const deps = opts.dependenciesByProjectId[id];\n\n            const importerFromLockfile = newCurrentLockfile.importers?.[id];\n\n            return [\n              id,\n              {\n                dir: rootDir,\n                modulesDir,\n                dependencies: await Promise.all([\n                  ...Array.from(deps?.entries() ?? [])\n                    .filter(([rootAlias]: [string, DepPath]): boolean => {\n                      return (\n                        typeof importerFromLockfile?.specifiers[rootAlias] !==\n                        'undefined'\n                      );\n                    })\n                    .map(\n                      ([rootAlias, depPath]: [string, DepPath]): {\n                        rootAlias: string;\n                        depGraphNode:\n                          | (ResolvedPackage &\n                              GenericDependenciesGraphNodeWithResolvedChildren)\n                          | undefined;\n                      } => {\n                        return {\n                          rootAlias,\n                          depGraphNode: depGraph[depPath],\n                        };\n                      }\n                    )\n                    .filter(\n                      ({\n                        depGraphNode,\n                      }: {\n                        rootAlias: string;\n                        depGraphNode:\n                          | (ResolvedPackage &\n                              GenericDependenciesGraphNodeWithResolvedChildren)\n                          | undefined;\n                      }): boolean => {\n                        return typeof depGraphNode !== 'undefined';\n                      }\n                    )\n                    .map(\n                      async ({\n                        rootAlias,\n                        depGraphNode,\n                      }: {\n                        rootAlias: string;\n                        depGraphNode:\n                          | (ResolvedPackage &\n                              GenericDependenciesGraphNodeWithResolvedChildren)\n                          | undefined;\n                      }): Promise<{\n                        alias: string;\n                        name: string;\n                        version: string;\n                        dir: string;\n                        id: PkgResolutionId;\n                        dependencyType: 'dev' | 'optional' | 'prod';\n                        latest?: string | undefined;\n                        isExternalLink: boolean;\n                      }> => {\n                        const isDev = Boolean(\n                          manifest?.devDependencies?.[depGraphNode?.name ?? '']\n                        );\n\n                        const isOptional = Boolean(\n                          manifest?.optionalDependencies?.[\n                            depGraphNode?.name ?? ''\n                          ]\n                        );\n\n                        return {\n                          alias: rootAlias,\n                          name: depGraphNode?.name ?? '',\n                          version: depGraphNode?.version ?? '',\n                          dir: depGraphNode?.dir ?? '',\n                          id: depGraphNode?.id ?? ('' as PkgResolutionId),\n                          dependencyType: isDev\n                            ? 'dev'\n                            : isOptional\n                              ? 'optional'\n                              : 'prod',\n                          latest:\n                            opts.outdatedDependencies[depGraphNode?.id ?? ''],\n                          isExternalLink: false,\n                        };\n                      }\n                    ),\n                  ...(opts.linkedDependenciesByProjectId[id]?.map(\n                    async (\n                      linkedDependency: LinkedDependency\n                    ): Promise<{\n                      alias: string;\n                      name: string;\n                      version: string;\n                      dir: string;\n                      id: string;\n                      dependencyType: 'dev' | 'optional' | 'prod';\n                      isExternalLink: boolean;\n                    }> => {\n                      const dir = resolvePath(\n                        rootDir,\n                        linkedDependency.resolution.directory\n                      );\n\n                      return {\n                        alias: linkedDependency.alias,\n                        name: linkedDependency.name,\n                        version: linkedDependency.version,\n                        dir,\n                        id: linkedDependency.resolution.directory,\n                        dependencyType:\n                          linkedDependency.dev === true\n                            ? 'dev'\n                            : linkedDependency.optional === true\n                              ? 'optional'\n                              : 'prod',\n                        isExternalLink: true,\n                      };\n                    }\n                  ) ?? []),\n                ]),\n              },\n            ];\n          }\n        )\n      )\n    );\n    linkedToRoot = await linkDirectDeps(projectsToLink, {\n      dedupe: opts.dedupeDirectDeps,\n    });\n  }\n\n  return {\n    currentLockfile,\n    newDepPaths,\n    newHoistedDependencies,\n    removedDepPaths,\n    stats: {\n      added,\n      removed: removedDepPaths.size,\n      linkedToRoot,\n    },\n  };\n}\n\nconst isAbsolutePath = /^\\/|^[a-z]:/i;\n\n// This function is copied from @pnpm/local-resolver\nfunction resolvePath(where: string, spec: string): string {\n  if (isAbsolutePath.test(spec)) return spec;\n  return path.resolve(where, spec);\n}\n\ntype LinkNewPackagesOptions = {\n  allowBuild?: ((pkgName: string) => boolean) | undefined;\n  depsStateCache: DepsStateCache;\n  disableRelinkLocalDirDeps?: boolean | undefined;\n  force: boolean;\n  optional: boolean;\n  ignoreScripts: boolean;\n  lockfileDir: string;\n  sideEffectsCacheRead: boolean;\n  symlink: boolean;\n  skipped: Set<DepPath>;\n  storeController: StoreController<\n    PackageResponse,\n    PackageResponse,\n    {\n      importMethod?: string | undefined;\n      isBuilt: boolean;\n    }\n  >;\n  virtualStoreDir: string;\n};\n\ntype LinkNewPackagesResult = {\n  newDepPaths: DepPath[];\n  added: number;\n};\n\nasync function linkNewPackages(\n  currentLockfile: LockfileObject,\n  wantedLockfile: LockfileObject,\n  depGraph: DependenciesGraph,\n  opts: LinkNewPackagesOptions\n): Promise<LinkNewPackagesResult> {\n  const wantedRelDepPaths = difference.default(\n    Object.keys(wantedLockfile.packages ?? {}) as DepPath[],\n    Array.from(opts.skipped)\n  );\n\n  let newDepPathsSet: Set<DepPath>;\n  if (opts.force) {\n    newDepPathsSet = new Set(\n      wantedRelDepPaths\n        // when installing a new package, not all the nodes are analyzed\n        // just skip the ones that are in the lockfile but were not analyzed\n        .filter((depPath) => depGraph[depPath])\n    );\n  } else {\n    newDepPathsSet = await selectNewFromWantedDeps(\n      wantedRelDepPaths,\n      currentLockfile,\n      depGraph\n    );\n  }\n\n  const added = newDepPathsSet.size;\n  statsLogger.debug({\n    added,\n    prefix: opts.lockfileDir,\n  });\n\n  const existingWithUpdatedDeps = [];\n  if (\n    !opts.force &&\n    currentLockfile.packages != null &&\n    wantedLockfile.packages != null\n  ) {\n    // add subdependencies that have been updated\n    // TODO: no need to relink everything. Can be relinked only what was changed\n    for (const depPath of wantedRelDepPaths) {\n      if (\n        currentLockfile.packages[depPath] &&\n        (!equals.default(\n          currentLockfile.packages[depPath].dependencies,\n          wantedLockfile.packages[depPath]?.dependencies\n        ) ||\n          !isEmpty.default(\n            currentLockfile.packages[depPath].optionalDependencies ?? {}\n          ) ||\n          !isEmpty.default(\n            wantedLockfile.packages[depPath]?.optionalDependencies ?? {}\n          ))\n      ) {\n        // TODO: come up with a test that triggers the usecase of depGraph[depPath] undefined\n        // see related issue: https://github.com/pnpm/pnpm/issues/870\n        if (depGraph[depPath] && !newDepPathsSet.has(depPath)) {\n          existingWithUpdatedDeps.push(depGraph[depPath]);\n        }\n      }\n    }\n  }\n\n  if (!newDepPathsSet.size && existingWithUpdatedDeps.length === 0)\n    return { newDepPaths: [], added };\n\n  const newDepPaths = Array.from(newDepPathsSet);\n\n  const newPkgs = props.default<DepPath, DependenciesGraphNode>(\n    newDepPaths,\n    depGraph\n  );\n\n  await Promise.all(\n    newPkgs.map(\n      async (depNode: DependenciesGraphNode): Promise<string | undefined> => {\n        return fs.mkdir(depNode.modules, { recursive: true });\n      }\n    )\n  );\n\n  await Promise.all([\n    opts.symlink\n      ? linkAllModules([...newPkgs, ...existingWithUpdatedDeps], depGraph, {\n          lockfileDir: opts.lockfileDir,\n          optional: opts.optional,\n        })\n      : Promise.resolve(),\n    linkAllPkgs(opts.storeController, newPkgs, {\n      allowBuild: opts.allowBuild,\n      depGraph,\n      depsStateCache: opts.depsStateCache,\n      disableRelinkLocalDirDeps: opts.disableRelinkLocalDirDeps,\n      force: opts.force,\n      ignoreScripts: opts.ignoreScripts,\n      lockfileDir: opts.lockfileDir,\n      sideEffectsCacheRead: opts.sideEffectsCacheRead,\n    }),\n  ]);\n\n  return { newDepPaths, added };\n}\n\nasync function selectNewFromWantedDeps(\n  wantedRelDepPaths: DepPath[],\n  currentLockfile: LockfileObject,\n  depGraph: DependenciesGraph\n): Promise<Set<DepPath>> {\n  const newDeps = new Set<DepPath>();\n\n  const prevDeps = currentLockfile.packages ?? {};\n\n  await Promise.all(\n    wantedRelDepPaths.map(async (depPath: DepPath): Promise<void> => {\n      const depNode = depGraph[depPath];\n\n      if (!depNode) return;\n\n      const prevDep = prevDeps[depPath];\n\n      if (\n        typeof prevDep !== 'undefined' &&\n        typeof prevDep.resolution !== 'undefined' &&\n        'integrity' in prevDep.resolution &&\n        typeof prevDep.resolution.integrity === 'string' &&\n        typeof depNode.resolution !== 'undefined' &&\n        'type' in depNode.resolution &&\n        typeof depNode.resolution.integrity === 'string' &&\n        // Local file should always be treated as a new dependency\n        // https://github.com/pnpm/pnpm/issues/5381\n        depNode.resolution.type !== 'directory' &&\n        depNode.resolution.integrity === prevDep.resolution.integrity\n      ) {\n        if (await pathExists(depNode.dir)) {\n          return;\n        }\n\n        brokenModulesLogger.debug({\n          missing: depNode.dir,\n        });\n      }\n\n      newDeps.add(depPath);\n    })\n  );\n\n  return newDeps;\n}\n\nconst limitLinking = pLimit(16);\n\nasync function linkAllPkgs<RP, FP>(\n  storeController: StoreController<\n    RP,\n    FP,\n    {\n      importMethod?: string | undefined;\n      isBuilt: boolean;\n    }\n  >,\n  depNodes: DependenciesGraphNode[],\n  opts: {\n    allowBuild?: ((pkgName: string) => boolean) | undefined;\n    depGraph: DependenciesGraph;\n    depsStateCache: DepsStateCache;\n    disableRelinkLocalDirDeps?: boolean | undefined;\n    force: boolean;\n    ignoreScripts: boolean;\n    lockfileDir: string;\n    sideEffectsCacheRead: boolean;\n  }\n): Promise<void> {\n  await Promise.all(\n    depNodes.map(async (depNode): Promise<undefined> => {\n      if (!depNode.fetching) return;\n      const { files } = await depNode.fetching();\n\n      depNode.requiresBuild = files.requiresBuild;\n\n      let sideEffectsCacheKey: string | undefined;\n\n      if (\n        opts.sideEffectsCacheRead &&\n        files.sideEffects &&\n        !isEmpty.default(files.sideEffects)\n      ) {\n        if (opts.allowBuild?.(depNode.name) !== false) {\n          sideEffectsCacheKey = calcDepState(\n            opts.depGraph,\n            opts.depsStateCache,\n            depNode.depPath,\n            {\n              isBuilt: !opts.ignoreScripts && depNode.requiresBuild === true,\n              patchFileHash: depNode.patch?.file.hash,\n            }\n          );\n        }\n      }\n      const { importMethod, isBuilt } = await storeController.importPackage(\n        depNode.dir,\n        {\n          disableRelinkLocalDirDeps: opts.disableRelinkLocalDirDeps,\n          filesResponse: files,\n          force: opts.force,\n          sideEffectsCacheKey,\n          requiresBuild: depNode.patch != null || depNode.requiresBuild,\n        }\n      );\n\n      if (typeof importMethod === 'string') {\n        progressLogger.debug({\n          method: importMethod,\n          requester: opts.lockfileDir,\n          status: 'imported',\n          to: depNode.dir,\n        });\n      }\n\n      depNode.isBuilt = isBuilt;\n\n      const selfDep = depNode.children[depNode.name];\n\n      if (selfDep) {\n        const pkg = opts.depGraph[selfDep];\n\n        if (!pkg || (!pkg.installable && pkg.optional === true)) {\n          return;\n        }\n\n        const targetModulesDir = path.join(\n          depNode.modules,\n          depNode.name,\n          'node_modules'\n        );\n\n        await limitLinking(\n          async (): Promise<{\n            reused: boolean;\n            warn?: string | undefined;\n          }> => {\n            return symlinkDependency(pkg.dir, targetModulesDir, depNode.name);\n          }\n        );\n      }\n    })\n  );\n}\n\nasync function linkAllModules(\n  depNodes: DependenciesGraphNode[],\n  depGraph: DependenciesGraph,\n  opts: {\n    lockfileDir: string;\n    optional: boolean;\n  }\n): Promise<void> {\n  await symlinkAllModules({\n    deps: depNodes.map(\n      (\n        depNode: DependenciesGraphNode\n      ): {\n        children: Record<string, string>;\n        modules: string;\n        name: string;\n      } => {\n        const children = opts.optional\n          ? depNode.children\n          : pickBy.default((_, childAlias: string): boolean => {\n              return !depNode.optionalDependencies.has(childAlias);\n            }, depNode.children);\n\n        const childrenPaths: Record<string, string> = {};\n\n        for (const [alias, childDepPath] of Object.entries(children ?? {})) {\n          if (childDepPath.startsWith('link:') === true) {\n            childrenPaths[alias] = path.resolve(\n              opts.lockfileDir,\n              childDepPath.slice(5)\n            );\n          } else {\n            const pkg = depGraph[childDepPath];\n\n            if (\n              !pkg ||\n              (!pkg.installable && pkg.optional === true) ||\n              alias === depNode.name\n            ) {\n              continue;\n            }\n\n            childrenPaths[alias] = pkg.dir;\n          }\n        }\n\n        return {\n          children: childrenPaths,\n          modules: depNode.modules,\n          name: depNode.name,\n        };\n      }\n    ),\n  });\n}\n"],
  "mappings": "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",
  "names": ["projects"]
}
