{
  "version": 3,
  "sources": ["../../../../src/packages/hoist/index.ts"],
  "sourcesContent": ["import fs from 'node:fs';\nimport path from 'node:path';\nimport { linkLogger } from '../core-loggers/index.ts';\nimport { WANTED_LOCKFILE } from '../constants/index.ts';\nimport {\n  linkBinsOfPkgsByAliases,\n  type WarnFunction,\n} from '../link-bins/index.ts';\nimport { nameVerFromPkgSnapshot } from '../lockfile.utils/index.ts';\nimport {\n  lockfileWalker,\n  type LockfileWalkerStep,\n} from '../lockfile.walker/index.ts';\nimport { logger } from '../logger/index.ts';\nimport { createMatcher } from '../matcher/index.ts';\nimport type {\n  DepPath,\n  HoistedDependencies,\n  ModulesDir,\n  ProjectId,\n} from '../types/index.ts';\nimport { lexCompare } from '../util.lex-comparator/index.ts';\nimport * as dp from '../dependency-path/index.ts';\nimport isSubdir from 'is-subdir';\nimport mapObjIndexed from 'ramda/src/mapObjIndexed';\nimport resolveLinkTarget from 'resolve-link-target';\nimport symlinkDir from 'symlink-dir';\nimport type { LockfileObject } from '../lockfile.types/index.ts';\n\nconst hoistLogger = logger('hoist');\n\nexport interface HoistOpts extends GetHoistedDependenciesOpts {\n  extraNodePath?: string[] | undefined;\n  preferSymlinkedExecutables?: boolean | undefined;\n  virtualStoreDir: string;\n  virtualStoreDirMaxLength: number;\n}\n\nexport async function hoist(opts: HoistOpts): Promise<HoistedDependencies> {\n  const result = getHoistedDependencies(opts);\n\n  if (!result) {\n    return {};\n  }\n\n  const { hoistedDependencies, hoistedAliasesWithBins } = result;\n\n  await symlinkHoistedDependencies(hoistedDependencies, {\n    lockfile: opts.lockfile,\n    privateHoistedModulesDir: opts.privateHoistedModulesDir,\n    publicHoistedModulesDir: opts.publicHoistedModulesDir,\n    virtualStoreDir: opts.virtualStoreDir,\n    virtualStoreDirMaxLength: opts.virtualStoreDirMaxLength,\n    hoistedWorkspacePackages: opts.hoistedWorkspacePackages,\n  });\n\n  // Here we only link the bins of the privately hoisted modules.\n  // The bins of the publicly hoisted modules will be linked together with\n  // the bins of the project's direct dependencies.\n  // This is possible because the publicly hoisted modules\n  // are in the same directory as the regular dependencies.\n  await linkAllBins(opts.privateHoistedModulesDir, {\n    extraNodePaths: opts.extraNodePath,\n    hoistedAliasesWithBins,\n    preferSymlinkedExecutables: opts.preferSymlinkedExecutables,\n  });\n\n  return hoistedDependencies;\n}\n\nexport type GetHoistedDependenciesOpts = {\n  lockfile: LockfileObject;\n  importerIds?: ProjectId[] | undefined;\n  privateHoistPattern: string[];\n  privateHoistedModulesDir: ModulesDir;\n  publicHoistPattern: string[];\n  publicHoistedModulesDir: string;\n  hoistedWorkspacePackages?:\n    | Record<ProjectId, HoistedWorkspaceProject>\n    | undefined;\n};\n\nexport type HoistedWorkspaceProject = {\n  name: string;\n  dir: string;\n};\n\nexport function getHoistedDependencies(\n  opts: GetHoistedDependenciesOpts\n): HoistGraphResult | null {\n  if (opts.lockfile.packages == null) {\n    return null;\n  }\n\n  const { directDeps, step } = lockfileWalker(\n    opts.lockfile,\n    opts.importerIds ??\n      (Object.keys(opts.lockfile.importers ?? {}) as ProjectId[])\n  );\n\n  // We want to hoist all the workspace packages, not only those that are in the dependencies\n  // of any other workspace packages.\n  // That is why we can't just simply use the lockfile walker to include links to local workspace packages too.\n  // We have to explicitly include all the workspace packages.\n  const hoistedWorkspaceDeps: Record<string, ProjectId> = Object.fromEntries(\n    Object.entries(opts.hoistedWorkspacePackages ?? {}).map(\n      ([id, { name }]: [string, HoistedWorkspaceProject]): [\n        string,\n        ProjectId,\n      ] => {\n        return [name, id as ProjectId];\n      }\n    )\n  );\n\n  const deps: Dependency[] = [\n    {\n      children: {\n        ...hoistedWorkspaceDeps,\n        ...directDeps.reduce(\n          (acc, { alias, depPath }) => {\n            if (!acc[alias]) {\n              acc[alias] = depPath;\n            }\n            return acc;\n          },\n          {} as Record<string, DepPath>\n        ),\n      },\n      depPath: '',\n      depth: -1,\n    },\n    ...getDependencies(0, step),\n  ];\n\n  const getAliasHoistType = createGetAliasHoistType(\n    opts.publicHoistPattern,\n    opts.privateHoistPattern\n  );\n\n  return hoistGraph(\n    deps,\n    opts.lockfile.importers?.['.' as ProjectId]?.specifiers ?? {},\n    {\n      getAliasHoistType,\n      lockfile: opts.lockfile,\n    }\n  );\n}\n\ntype GetAliasHoistType = (alias: string) => 'private' | 'public' | false;\n\nfunction createGetAliasHoistType(\n  publicHoistPattern: string[],\n  privateHoistPattern: string[]\n): GetAliasHoistType {\n  const publicMatcher = createMatcher(publicHoistPattern);\n\n  const privateMatcher = createMatcher(privateHoistPattern);\n\n  return (alias: string): false | 'public' | 'private' => {\n    if (publicMatcher(alias)) {\n      return 'public';\n    }\n\n    if (privateMatcher(alias)) {\n      return 'private';\n    }\n\n    return false;\n  };\n}\n\ninterface LinkAllBinsOptions {\n  extraNodePaths?: string[] | undefined;\n  hoistedAliasesWithBins: string[];\n  preferSymlinkedExecutables?: boolean | undefined;\n}\n\nasync function linkAllBins(\n  modulesDir: ModulesDir,\n  opts: LinkAllBinsOptions\n): Promise<void> {\n  const bin = path.join(modulesDir, '.bin');\n\n  const warn: WarnFunction = (message, code) => {\n    if (code === 'BINARIES_CONFLICT') return;\n    logger.info({ message, prefix: path.join(modulesDir, '../..') });\n  };\n\n  try {\n    await linkBinsOfPkgsByAliases(opts.hoistedAliasesWithBins, bin, {\n      allowExoticManifests: true,\n      extraNodePaths: opts.extraNodePaths,\n      modulesDir,\n      preferSymlinkedExecutables: opts.preferSymlinkedExecutables,\n      warn,\n    });\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\n  } catch (_err: any) {\n    // Some packages generate their commands with lifecycle hooks.\n    // At this stage, such commands are not generated yet.\n    // For now, we don't hoist such generated commands.\n    // Related issue: https://github.com/pnpm/pnpm/issues/2071\n  }\n}\n\nfunction getDependencies(\n  depth: number,\n  step: LockfileWalkerStep\n): Dependency[] {\n  const deps: Dependency[] = [];\n\n  const nextSteps: LockfileWalkerStep[] = [];\n\n  for (const { pkgSnapshot, depPath, next } of step.dependencies) {\n    const allDeps: Record<string, string> = {\n      ...pkgSnapshot.dependencies,\n      ...pkgSnapshot.optionalDependencies,\n    };\n\n    deps.push({\n      children: mapObjIndexed.default(dp.refToRelative, allDeps) as Record<\n        string,\n        DepPath\n      >,\n      depPath,\n      depth,\n    });\n\n    nextSteps.push(next());\n  }\n\n  for (const depPath of step.missing) {\n    // It might make sense to fail if the depPath is not in the skipped list from .modules.yaml\n    // However, the skipped list currently contains package IDs, not dep paths.\n    logger.debug({\n      message: `No entry for \"${depPath}\" in ${WANTED_LOCKFILE}`,\n    });\n  }\n\n  return [...deps, ...nextSteps.flatMap(getDependencies.bind(null, depth + 1))];\n}\n\nexport type Dependency = {\n  children: Record<string, DepPath | ProjectId>;\n  depPath: string;\n  depth: number;\n};\n\ntype HoistGraphResult = {\n  hoistedDependencies: HoistedDependencies;\n  hoistedAliasesWithBins: string[];\n};\n\nfunction hoistGraph(\n  depNodes: Dependency[],\n  currentSpecifiers: Record<string, string>,\n  opts: {\n    getAliasHoistType: GetAliasHoistType;\n    lockfile: LockfileObject;\n  }\n): HoistGraphResult {\n  const hoistedAliases = new Set(Object.keys(currentSpecifiers));\n\n  const hoistedDependencies: HoistedDependencies = {};\n\n  const hoistedAliasesWithBins = new Set<string>();\n\n  // biome-ignore lint/complexity/noForEach: <explanation>\n  depNodes\n    // sort by depth and then alphabetically\n    .sort((a: Dependency, b: Dependency): number => {\n      const depthDiff = a.depth - b.depth;\n      return depthDiff === 0 ? lexCompare(a.depPath, b.depPath) : depthDiff;\n    })\n    // build the alias map and the id map\n    .forEach((depNode) => {\n      for (const [childAlias, childPath] of Object.entries<DepPath | ProjectId>(\n        depNode.children\n      )) {\n        const hoist = opts.getAliasHoistType(childAlias);\n\n        if (hoist === false) {\n          continue;\n        }\n\n        const childAliasNormalized = childAlias.toLowerCase();\n        // if this alias has already been taken, skip it\n\n        if (hoistedAliases.has(childAliasNormalized)) {\n          continue;\n        }\n\n        if (opts.lockfile.packages?.[childPath as DepPath]?.hasBin === true) {\n          hoistedAliasesWithBins.add(childAlias);\n        }\n\n        hoistedAliases.add(childAliasNormalized);\n\n        if (!hoistedDependencies[childPath]) {\n          hoistedDependencies[childPath] = {};\n        }\n\n        hoistedDependencies[childPath][childAlias] = hoist;\n      }\n    });\n\n  return {\n    hoistedDependencies,\n    hoistedAliasesWithBins: Array.from(hoistedAliasesWithBins),\n  };\n}\n\nasync function symlinkHoistedDependencies(\n  hoistedDependencies: HoistedDependencies,\n  opts: {\n    lockfile: LockfileObject;\n    privateHoistedModulesDir: string;\n    publicHoistedModulesDir: string;\n    virtualStoreDir: string;\n    virtualStoreDirMaxLength: number;\n    hoistedWorkspacePackages?:\n      | Record<string, HoistedWorkspaceProject>\n      | undefined;\n  }\n): Promise<void> {\n  const symlink = symlinkHoistedDependency.bind(null, opts);\n\n  await Promise.all(\n    Object.entries(hoistedDependencies).map(\n      async ([hoistedDepId, pkgAliases]: [\n        string,\n        Record<string, 'public' | 'private'>,\n      ]): Promise<void> => {\n        const pkgSnapshot = opts.lockfile.packages?.[hoistedDepId as DepPath];\n\n        let depLocation: string | undefined;\n\n        if (typeof pkgSnapshot === 'undefined') {\n          if (!opts.lockfile.importers?.[hoistedDepId as ProjectId]) {\n            // This dependency is probably a skipped optional dependency.\n            hoistLogger.debug({ hoistFailedFor: hoistedDepId });\n\n            return;\n          }\n\n          depLocation = opts.hoistedWorkspacePackages?.[hoistedDepId]?.dir;\n        } else {\n          const pkgName = nameVerFromPkgSnapshot(\n            hoistedDepId,\n            pkgSnapshot\n          ).name;\n\n          const modules = path.join(\n            opts.virtualStoreDir,\n            dp.depPathToFilename(hoistedDepId, opts.virtualStoreDirMaxLength),\n            'node_modules'\n          );\n\n          depLocation = path.join(modules, pkgName as string);\n        }\n\n        await Promise.all(\n          Object.entries(pkgAliases).map(\n            async ([pkgAlias, hoistType]: [\n              string,\n              'private' | 'public',\n            ]): Promise<void> => {\n              const targetDir =\n                hoistType === 'public'\n                  ? opts.publicHoistedModulesDir\n                  : opts.privateHoistedModulesDir;\n\n              const dest = path.join(targetDir, pkgAlias);\n\n              if (typeof depLocation !== 'undefined') {\n                return symlink(depLocation, dest);\n              }\n\n              return;\n            }\n          )\n        );\n      }\n    )\n  );\n}\n\nasync function symlinkHoistedDependency(\n  opts: { virtualStoreDir: string },\n  depLocation: string,\n  dest: string\n): Promise<void> {\n  try {\n    await symlinkDir(depLocation, dest, { overwrite: false });\n    linkLogger.debug({ target: dest, link: depLocation });\n    return;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    if (err.code !== 'EEXIST' && err.code !== 'EISDIR') throw err;\n  }\n\n  let existingSymlink: string | undefined;\n\n  try {\n    existingSymlink = await resolveLinkTarget(dest);\n  } catch {\n    hoistLogger.debug({\n      skipped: dest,\n      reason: 'a directory is present at the target location',\n    });\n\n    return;\n  }\n\n  if (!isSubdir(opts.virtualStoreDir, existingSymlink)) {\n    hoistLogger.debug({\n      skipped: dest,\n      existingSymlink,\n      reason: 'an external symlink is present at the target location',\n    });\n\n    return;\n  }\n\n  await fs.promises.unlink(dest);\n\n  await symlinkDir(depLocation, dest);\n\n  linkLogger.debug({ target: dest, link: depLocation });\n}\n"],
  "mappings": "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",
  "names": ["hoist"]
}
