{
  "version": 3,
  "sources": ["../../../../src/packages/modules-cleaner/prune.ts"],
  "sourcesContent": ["import { promises as fs } from 'node:fs';\nimport path from 'node:path';\nimport { removalLogger, statsLogger } from '../core-loggers/index.ts';\nimport {\n  filterLockfile,\n  filterLockfileByImporters,\n} from '../lockfile.filtering/index.ts';\nimport type {\n  LockfileObject,\n  PackageSnapshots,\n  ProjectSnapshot,\n  ResolvedDependencies,\n} from '../lockfile.types/index.ts';\nimport { packageIdFromSnapshot } from '../lockfile.utils/index.ts';\nimport { logger } from '../logger/index.ts';\nimport { readModulesDir } from '../read-modules-dir/index.ts';\nimport type {\n  PackageResponse,\n  StoreController,\n} from '../store-controller-types/index.ts';\nimport {\n  type DepPath,\n  type DependenciesField,\n  DEPENDENCIES_FIELDS,\n  type HoistedDependencies,\n  type ProjectId,\n  type ProjectRootDir,\n  type GlobalPkgDir,\n  type ProjectRootDirRealPath,\n  type WorkspaceDir,\n  type LockFileDir,\n  type ModulesDir,\n} from '../types/index.ts';\nimport { depPathToFilename } from '../dependency-path/index.ts';\nimport rimraf from '@zkochan/rimraf';\nimport difference from 'ramda/src/difference';\nimport equals from 'ramda/src/equals';\nimport mergeAll from 'ramda/src/mergeAll';\nimport pickAll from 'ramda/src/pickAll';\nimport {\n  removeDirectDependency,\n  removeIfEmpty,\n} from './removeDirectDependency.ts';\n\nexport async function prune<IP>(\n  importers: Array<{\n    binsDir: string;\n    id: ProjectId;\n    modulesDir: ModulesDir;\n    pruneDirectDependencies?: boolean | undefined;\n    removePackages?: string[] | undefined;\n    rootDir:\n      | ProjectRootDir\n      | ProjectRootDirRealPath\n      | GlobalPkgDir\n      | WorkspaceDir\n      | LockFileDir;\n  }>,\n  opts: {\n    dedupeDirectDeps?: boolean | undefined;\n    dryRun?: boolean | undefined;\n    include: { [dependenciesField in DependenciesField]: boolean };\n    hoistedDependencies: HoistedDependencies;\n    hoistedModulesDir?: ModulesDir | undefined;\n    publicHoistedModulesDir?: ModulesDir | undefined;\n    wantedLockfile: LockfileObject;\n    currentLockfile: LockfileObject;\n    pruneStore?: boolean | undefined;\n    pruneVirtualStore?: boolean | undefined;\n    skipped: Set<DepPath>;\n    virtualStoreDir: string;\n    virtualStoreDirMaxLength: number;\n    lockfileDir: string;\n    storeController: StoreController<PackageResponse, PackageResponse, IP>;\n  }\n): Promise<Set<string>> {\n  const wantedLockfile = filterLockfile(opts.wantedLockfile, {\n    include: opts.include,\n    skipped: opts.skipped,\n  });\n\n  const rootImporter =\n    wantedLockfile.importers?.['.' as ProjectId] ?? ({} as ProjectSnapshot);\n\n  const wantedRootPkgs = mergeDependencies(rootImporter);\n\n  await Promise.all(\n    importers.map(\n      async ({\n        binsDir,\n        id,\n        modulesDir,\n        pruneDirectDependencies,\n        removePackages,\n        rootDir,\n      }: {\n        binsDir: string;\n        id: ProjectId;\n        modulesDir: ModulesDir;\n        pruneDirectDependencies?: boolean | undefined;\n        removePackages?: string[] | undefined;\n        rootDir:\n          | ProjectRootDir\n          | ProjectRootDirRealPath\n          | GlobalPkgDir\n          | WorkspaceDir\n          | LockFileDir;\n      }): Promise<void> => {\n        const currentImporter =\n          opts.currentLockfile.importers?.[id] || ({} as ProjectSnapshot);\n\n        const currentPkgs = Object.entries(mergeDependencies(currentImporter));\n\n        const wantedPkgs = mergeDependencies(wantedLockfile.importers?.[id]);\n\n        const allCurrentPackages = new Set(\n          pruneDirectDependencies === true ||\n            typeof removePackages?.length === 'number'\n            ? ((await readModulesDir(modulesDir)) ?? [])\n            : []\n        );\n\n        const depsToRemove = new Set(\n          (removePackages ?? []).filter((removePackage: string): boolean => {\n            return allCurrentPackages.has(removePackage);\n          })\n        );\n\n        for (const [depName, depVersion] of currentPkgs) {\n          if (\n            typeof wantedPkgs[depName] === 'undefined' ||\n            wantedPkgs[depName] !== depVersion ||\n            (opts.dedupeDirectDeps === true &&\n              id !== '.' &&\n              wantedPkgs[depName] === wantedRootPkgs[depName])\n          ) {\n            depsToRemove.add(depName);\n          }\n        }\n\n        if (pruneDirectDependencies === true) {\n          const publiclyHoistedDeps = getPubliclyHoistedDependencies(\n            opts.hoistedDependencies\n          );\n\n          if (allCurrentPackages.size > 0) {\n            for (const currentPackage of allCurrentPackages) {\n              if (\n                typeof wantedPkgs[currentPackage] === 'undefined' &&\n                !publiclyHoistedDeps.has(currentPackage)\n              ) {\n                depsToRemove.add(currentPackage);\n              }\n            }\n          }\n        }\n\n        const removedFromScopes = new Set<string>();\n\n        await Promise.all(\n          Array.from(depsToRemove).map(\n            async (depName: string): Promise<void> => {\n              const scope = getScopeFromPackageName(depName);\n\n              if (typeof scope === 'string' && scope !== '') {\n                removedFromScopes.add(scope);\n              }\n\n              return removeDirectDependency(\n                {\n                  dependenciesField:\n                    typeof currentImporter.devDependencies?.[depName] !==\n                    'undefined'\n                      ? 'devDependencies'\n                      : typeof currentImporter.optionalDependencies?.[\n                            depName\n                          ] !== 'undefined'\n                        ? 'optionalDependencies'\n                        : typeof currentImporter.dependencies?.[depName] !==\n                            'undefined'\n                          ? 'dependencies'\n                          : undefined,\n                  name: depName,\n                },\n                {\n                  binsDir,\n                  dryRun: opts.dryRun,\n                  modulesDir,\n                  rootDir,\n                }\n              );\n            }\n          )\n        );\n\n        await Promise.all(\n          Array.from(removedFromScopes).map((scope) =>\n            removeIfEmpty(path.join(modulesDir, scope))\n          )\n        );\n\n        try {\n          await removeIfEmpty(modulesDir);\n        } catch {\n          // On some server setups we might not have permission to remove the node_modules directory.\n          // That's fine, just proceed.\n        }\n      }\n    )\n  );\n\n  const selectedImporterIds = importers.map((importer) => importer.id).sort();\n  // In case installation is done on a subset of importers,\n  // we may only prune dependencies that are used only by that subset of importers.\n  // Otherwise, we would break the node_modules.\n  const currentPkgIdsByDepPaths = equals.default(\n    selectedImporterIds,\n    Object.keys(opts.wantedLockfile.importers ?? {})\n  )\n    ? getPkgsDepPaths(opts.currentLockfile.packages ?? {}, opts.skipped)\n    : getPkgsDepPathsOwnedOnlyByImporters(\n        selectedImporterIds,\n        opts.currentLockfile,\n        opts.include,\n        opts.skipped\n      );\n\n  const wantedPkgIdsByDepPaths = getPkgsDepPaths(\n    wantedLockfile.packages ?? {},\n    opts.skipped\n  );\n\n  const orphanDepPaths = (\n    Object.keys(currentPkgIdsByDepPaths) as DepPath[]\n  ).filter((path: DepPath): boolean => {\n    return typeof wantedPkgIdsByDepPaths[path] === 'undefined';\n  });\n\n  const orphanPkgIds = new Set(\n    orphanDepPaths.map((path) => currentPkgIdsByDepPaths[path])\n  );\n\n  statsLogger.debug({\n    prefix: opts.lockfileDir,\n    removed: orphanPkgIds.size,\n  });\n\n  if (opts.dryRun !== true) {\n    if (\n      orphanDepPaths.length > 0 &&\n      opts.currentLockfile.packages != null &&\n      (opts.hoistedModulesDir != null || opts.publicHoistedModulesDir != null)\n    ) {\n      const prefix = path.join(opts.virtualStoreDir, '../..');\n\n      await Promise.all(\n        orphanDepPaths.map(async (orphanDepPath: DepPath): Promise<void> => {\n          if (opts.hoistedDependencies[orphanDepPath]) {\n            await Promise.all(\n              Object.entries(opts.hoistedDependencies[orphanDepPath]).map(\n                ([alias, hoistType]: [\n                  string,\n                  'public' | 'private',\n                ]): Promise<void> => {\n                  const modulesDir =\n                    hoistType === 'public'\n                      ? opts.publicHoistedModulesDir\n                      : opts.hoistedModulesDir;\n\n                  if (typeof modulesDir === 'undefined' || modulesDir === '') {\n                    return Promise.resolve();\n                  }\n\n                  return removeDirectDependency(\n                    {\n                      name: alias,\n                    },\n                    {\n                      binsDir: path.join(modulesDir, '.bin'),\n                      modulesDir,\n                      muteLogs: true,\n                      rootDir: prefix as ProjectRootDir,\n                    }\n                  );\n                }\n              )\n            );\n          }\n\n          delete opts.hoistedDependencies[orphanDepPath];\n        })\n      );\n    }\n\n    if (opts.pruneVirtualStore !== false) {\n      const _tryRemovePkg = tryRemovePkg.bind(\n        null,\n        opts.lockfileDir,\n        opts.virtualStoreDir\n      );\n\n      await Promise.all(\n        orphanDepPaths\n          .map((orphanDepPath: DepPath): string => {\n            return depPathToFilename(\n              orphanDepPath,\n              opts.virtualStoreDirMaxLength\n            );\n          })\n          .map(async (orphanDepPath: string): Promise<void> => {\n            return _tryRemovePkg(orphanDepPath);\n          })\n      );\n\n      const neededPkgs = new Set<string>(['node_modules']);\n\n      for (const depPath of Object.keys(opts.wantedLockfile.packages ?? {})) {\n        if (opts.skipped.has(depPath as DepPath)) {\n          continue;\n        }\n\n        neededPkgs.add(\n          depPathToFilename(depPath, opts.virtualStoreDirMaxLength)\n        );\n      }\n\n      const availablePkgs = await readVirtualStoreDir(\n        opts.virtualStoreDir,\n        opts.lockfileDir\n      );\n\n      await Promise.all(\n        availablePkgs\n          .filter((availablePkg: string): boolean => {\n            return neededPkgs.has(availablePkg) !== true;\n          })\n          .map(async (orphanDepPath: string): Promise<void> => {\n            return _tryRemovePkg(orphanDepPath);\n          })\n      );\n    }\n  }\n\n  return new Set(orphanDepPaths);\n}\n\nfunction getScopeFromPackageName(pkgName: string): string | undefined {\n  if (pkgName.startsWith('@')) {\n    return pkgName.substring(0, pkgName.indexOf('/'));\n  }\n\n  return undefined;\n}\n\nasync function readVirtualStoreDir(\n  virtualStoreDir: string,\n  lockfileDir: string\n): Promise<string[]> {\n  try {\n    return await fs.readdir(virtualStoreDir);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    if (err.code !== 'ENOENT') {\n      logger.warn({\n        error: err,\n        message: `Failed to read virtualStoreDir at \"${virtualStoreDir}\"`,\n        prefix: lockfileDir,\n      });\n    }\n\n    return [];\n  }\n}\n\nasync function tryRemovePkg(\n  lockfileDir: string,\n  virtualStoreDir: string,\n  pkgDir: string\n): Promise<void> {\n  const pathToRemove = path.join(virtualStoreDir, pkgDir);\n\n  removalLogger.debug(pathToRemove);\n\n  try {\n    await rimraf(pathToRemove);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    logger.warn({\n      error: err,\n      message: `Failed to remove \"${pathToRemove}\"`,\n      prefix: lockfileDir,\n    });\n  }\n}\n\nfunction mergeDependencies(projectSnapshot: ProjectSnapshot | undefined): {\n  [depName: string]: string;\n} {\n  return mergeAll.default<ResolvedDependencies>(\n    DEPENDENCIES_FIELDS.map(\n      (depType: DependenciesField): ResolvedDependencies => {\n        return projectSnapshot?.[depType] ?? {};\n      }\n    )\n  );\n}\n\nfunction getPkgsDepPaths(\n  packages: PackageSnapshots,\n  skipped: Set<string>\n): Record<DepPath, string> {\n  const acc: Record<DepPath, string> = {};\n\n  for (const [depPath, pkg] of Object.entries(packages)) {\n    if (skipped.has(depPath)) {\n      return acc;\n    }\n\n    acc[depPath as DepPath] = packageIdFromSnapshot(depPath as DepPath, pkg);\n  }\n\n  return acc;\n}\n\nfunction getPkgsDepPathsOwnedOnlyByImporters(\n  importerIds: ProjectId[],\n  lockfile: LockfileObject,\n  include: { [dependenciesField in DependenciesField]: boolean },\n  skipped: Set<DepPath>\n): Record<string, string> {\n  const selected = filterLockfileByImporters(lockfile, importerIds, {\n    failOnMissingDependencies: false,\n    include,\n    skipped,\n  });\n\n  const other = filterLockfileByImporters(\n    lockfile,\n    difference.default(\n      Object.keys(lockfile.importers ?? {}) as ProjectId[],\n      importerIds\n    ),\n    {\n      failOnMissingDependencies: false,\n      include,\n      skipped,\n    }\n  );\n\n  const packagesOfSelectedOnly: PackageSnapshots = pickAll.default<\n    PackageSnapshots | undefined,\n    PackageSnapshots\n  >(\n    difference.default(\n      Object.keys(selected.packages ?? {}),\n      Object.keys(other.packages ?? {})\n    ),\n    selected.packages\n  );\n\n  return getPkgsDepPaths(packagesOfSelectedOnly, skipped);\n}\n\nfunction getPubliclyHoistedDependencies(\n  hoistedDependencies: HoistedDependencies\n): Set<string> {\n  const publiclyHoistedDeps = new Set<string>();\n\n  for (const hoistedAliases of Object.values(hoistedDependencies)) {\n    for (const [alias, hoistType] of Object.entries(hoistedAliases)) {\n      if (hoistType === 'public') {\n        publiclyHoistedDeps.add(alias);\n      }\n    }\n  }\n\n  return publiclyHoistedDeps;\n}\n"],
  "mappings": "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",
  "names": ["path"]
}
