{
  "version": 3,
  "sources": ["../../../../src/packages/headless/lockfileToHoistedDepGraph.ts"],
  "sourcesContent": ["import { pathExists } from 'path-exists';\nimport path from 'node:path';\n\nimport {\n  nameVerFromPkgSnapshot,\n  packageIdFromSnapshot,\n  pkgSnapshotToResolution,\n} from '../lockfile.utils/index.ts';\nimport type { IncludedDependencies } from '../modules-yaml/index.ts';\nimport { packageIsInstallable } from '../package-is-installable/index.ts';\nimport { getPatchInfo } from '../patching.config/index.ts';\nimport { safeReadPackageJsonFromDir } from '../read-package-json/index.ts';\nimport type {\n  DepPath,\n  SupportedArchitectures,\n  ProjectId,\n  Registries,\n  LockFileDir,\n  ModulesDir,\n} from '../types/index.ts';\nimport type {\n  PackageResponse,\n  StoreController,\n} from '../store-controller-types/index.ts';\nimport {\n  hoist,\n  type HoistingLimits,\n  type HoisterResult,\n} from '../real-hoist/index.ts';\nimport * as dp from '../dependency-path/index.ts';\nimport type {\n  DependenciesGraph,\n  DepHierarchy,\n  DirectDependenciesByImporterId,\n  LockfileToDepGraphResult,\n} from '../deps.graph-builder/index.ts';\nimport type {\n  LockfileObject,\n  ProjectSnapshot,\n  PackageSnapshot,\n} from '../lockfile.types/index.ts';\nimport type { PatchGroupRecord } from '../patching.types/index.ts';\n\nexport type LockfileToHoistedDepGraphOptions = {\n  autoInstallPeers: boolean;\n  engineStrict: boolean;\n  force: boolean;\n  hoistingLimits: HoistingLimits;\n  externalDependencies?: Set<string> | undefined;\n  importerIds: string[];\n  include: IncludedDependencies;\n  ignoreScripts: boolean;\n  currentHoistedLocations?: Record<string, string[]> | undefined;\n  lockfileDir: LockFileDir;\n  modulesDir: ModulesDir;\n  nodeVersion?: string | undefined;\n  pnpmVersion?: string | undefined;\n  registries: Registries;\n  patchedDependencies?: PatchGroupRecord | undefined;\n  sideEffectsCacheRead: boolean;\n  skipped: Set<string>;\n  storeController: StoreController<\n    PackageResponse,\n    PackageResponse,\n    {\n      isBuilt: boolean;\n      importMethod?: string | undefined;\n    }\n  >;\n  storeDir: string;\n  virtualStoreDir: string;\n  supportedArchitectures?: SupportedArchitectures | undefined;\n};\n\nexport async function lockfileToHoistedDepGraph(\n  lockfile: LockfileObject,\n  currentLockfile: LockfileObject | null,\n  opts: LockfileToHoistedDepGraphOptions\n): Promise<LockfileToDepGraphResult> {\n  let prevGraph: DependenciesGraph | undefined;\n\n  if (typeof currentLockfile?.packages === 'undefined') {\n    prevGraph = {};\n  } else {\n    prevGraph = (\n      await _lockfileToHoistedDepGraph(currentLockfile, {\n        ...opts,\n        force: true,\n        skipped: new Set(),\n      })\n    ).graph;\n  }\n\n  const obj = await _lockfileToHoistedDepGraph(lockfile, opts);\n\n  return {\n    ...obj,\n    prevGraph,\n  };\n}\n\nasync function _lockfileToHoistedDepGraph(\n  lockfile: LockfileObject,\n  opts: LockfileToHoistedDepGraphOptions\n): Promise<Omit<LockfileToDepGraphResult, 'prevGraph'>> {\n  const tree = hoist(lockfile, {\n    hoistingLimits: opts.hoistingLimits,\n    externalDependencies: opts.externalDependencies,\n    autoInstallPeers: opts.autoInstallPeers,\n  });\n\n  const graph: DependenciesGraph = {};\n\n  const modulesDir: ModulesDir = path.join(\n    opts.lockfileDir,\n    opts.modulesDir\n  ) as ModulesDir;\n\n  const fetchDepsOpts = {\n    ...opts,\n    lockfile,\n    graph,\n    pkgLocationsByDepPath: {},\n    hoistedLocations: {},\n  };\n\n  const hierarchy = {\n    [opts.lockfileDir]: await fetchDeps(\n      fetchDepsOpts,\n      modulesDir,\n      tree.dependencies\n    ),\n  };\n\n  const directDependenciesByImporterId: DirectDependenciesByImporterId = {\n    '.': directDepsMap(Object.keys(hierarchy[opts.lockfileDir] ?? {}), graph),\n  };\n\n  const symlinkedDirectDependenciesByImporterId: DirectDependenciesByImporterId =\n    { '.': {} };\n\n  await Promise.all(\n    Array.from(tree.dependencies).map(\n      async (rootDep: HoisterResult): Promise<void> => {\n        const reference = Array.from(rootDep.references)[0];\n\n        if (\n          typeof reference !== 'undefined' &&\n          reference.startsWith('workspace:')\n        ) {\n          const importerId = reference.replace('workspace:', '') as ProjectId;\n\n          const projectDir = path.join(opts.lockfileDir, importerId);\n\n          const modulesDir: ModulesDir = path.join(\n            projectDir,\n            'node_modules'\n          ) as ModulesDir;\n\n          const nextHierarchy = await fetchDeps(\n            fetchDepsOpts,\n            modulesDir,\n            rootDep.dependencies\n          );\n\n          hierarchy[projectDir] = nextHierarchy;\n\n          const importer = lockfile.importers?.[importerId];\n\n          const importerDir = path.join(opts.lockfileDir, importerId);\n\n          if (typeof importer !== 'undefined') {\n            symlinkedDirectDependenciesByImporterId[importerId] =\n              pickLinkedDirectDeps(importer, importerDir, opts.include);\n          }\n\n          directDependenciesByImporterId[importerId] = directDepsMap(\n            Object.keys(nextHierarchy),\n            graph\n          );\n        }\n      }\n    )\n  );\n\n  return {\n    directDependenciesByImporterId,\n    graph,\n    hierarchy,\n    pkgLocationsByDepPath: fetchDepsOpts.pkgLocationsByDepPath,\n    symlinkedDirectDependenciesByImporterId,\n    hoistedLocations: fetchDepsOpts.hoistedLocations,\n  };\n}\n\nfunction directDepsMap(\n  directDepDirs: string[],\n  graph: DependenciesGraph\n): Record<string, string> {\n  const acc: Record<string, string> = {};\n\n  for (const dir of directDepDirs) {\n    const a = graph[dir]?.alias;\n\n    if (typeof a !== 'undefined') {\n      acc[a] = dir;\n    }\n  }\n\n  return acc;\n}\n\nfunction pickLinkedDirectDeps(\n  importer: ProjectSnapshot,\n  importerDir: string,\n  include: IncludedDependencies\n): Record<string, string> {\n  const rootDeps = {\n    ...(include.devDependencies ? importer.devDependencies : {}),\n    ...(include.dependencies ? importer.dependencies : {}),\n    ...(include.optionalDependencies ? importer.optionalDependencies : {}),\n  };\n\n  const directDeps: Record<string, string> = {};\n\n  for (const alias in rootDeps) {\n    const ref = rootDeps[alias];\n\n    if (ref?.startsWith('link:') === true) {\n      directDeps[alias] = path.resolve(importerDir, ref.slice(5));\n    }\n  }\n\n  return directDeps;\n}\n\nasync function fetchDeps(\n  opts: {\n    graph: DependenciesGraph;\n    lockfile: LockfileObject;\n    pkgLocationsByDepPath: Record<string, string[]>;\n    hoistedLocations: Record<string, string[]>;\n  } & LockfileToHoistedDepGraphOptions,\n  modules: ModulesDir,\n  deps: Set<HoisterResult>\n): Promise<DepHierarchy> {\n  const depHierarchy: Record<string, DepHierarchy> = {};\n\n  await Promise.all(\n    Array.from(deps).map(async (dep: HoisterResult): Promise<void> => {\n      const depPath = Array.from(dep.references)[0] as DepPath;\n\n      if (\n        opts.skipped.has(depPath) === true ||\n        depPath.startsWith('workspace:')\n      ) {\n        return;\n      }\n\n      const pkgSnapshot = opts.lockfile.packages?.[depPath];\n\n      if (!pkgSnapshot) {\n        // it is a link\n        return;\n      }\n\n      const { name: pkgName, version: pkgVersion } = nameVerFromPkgSnapshot(\n        depPath,\n        pkgSnapshot\n      );\n\n      const packageId = packageIdFromSnapshot(depPath, pkgSnapshot);\n\n      const pkgIdWithPatchHash = dp.getPkgIdWithPatchHash(depPath);\n\n      const pkg = {\n        name: pkgName,\n        version: pkgVersion,\n        engines: pkgSnapshot.engines,\n        cpu: pkgSnapshot.cpu,\n        os: pkgSnapshot.os,\n        libc: pkgSnapshot.libc,\n      };\n\n      if (\n        opts.force !== true &&\n        (await packageIsInstallable(packageId, pkg, {\n          engineStrict: opts.engineStrict,\n          lockfileDir: opts.lockfileDir,\n          nodeVersion: opts.nodeVersion,\n          optional: pkgSnapshot.optional === true,\n          supportedArchitectures: opts.supportedArchitectures,\n        })) === false\n      ) {\n        opts.skipped.add(depPath);\n\n        return;\n      }\n\n      const dir = path.join(modules, dep.name);\n\n      const depLocation = path.relative(opts.lockfileDir, dir);\n\n      const resolution = pkgSnapshotToResolution(\n        depPath,\n        pkgSnapshot,\n        opts.registries\n      );\n\n      let fetchResponse:\n        | PackageResponse\n        | {\n            filesIndexFile: string | undefined;\n          }\n        | undefined;\n\n      // We check for the existence of the package inside node_modules.\n      // It will only be missing if the user manually removed it.\n      // That shouldn't normally happen but Bit CLI does remove node_modules in component directories:\n      // https://github.com/teambit/bit/blob/5e1eed7cd122813ad5ea124df956ee89d661d770/scopes/dependencies/dependency-resolver/dependency-installer.ts#L169\n      //\n      // We also verify that the package that is present has the expected version.\n      // This check is required because there is no guarantee the modules manifest and current lockfile were\n      // successfully saved after node_modules was changed during installation.\n      const skipFetch =\n        opts.currentHoistedLocations?.[depPath]?.includes(depLocation) ===\n          true &&\n        (await dirHasPackageJsonWithVersion(\n          path.join(opts.lockfileDir, depLocation),\n          pkgVersion\n        ));\n\n      const pkgResolution = {\n        id: packageId,\n        resolution,\n      };\n\n      if (skipFetch) {\n        const { filesIndexFile } = opts.storeController.getFilesIndexFilePath({\n          ignoreScripts: opts.ignoreScripts,\n          pkg: pkgResolution,\n        });\n\n        fetchResponse = { filesIndexFile };\n      } else {\n        try {\n          const fr = opts.storeController.fetchPackage({\n            force: false,\n            lockfileDir: opts.lockfileDir,\n            ignoreScripts: opts.ignoreScripts,\n            pkg: pkgResolution,\n            expectedPkg: {\n              name: pkgName,\n              version: pkgVersion,\n            },\n          });\n\n          fetchResponse = fr instanceof Promise ? await fr : fr;\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        } catch (err: any) {\n          if (pkgSnapshot.optional === true) {\n            return;\n          }\n\n          throw err;\n        }\n      }\n\n      opts.graph[dir] = {\n        isBuilt: false,\n        alias: dep.name,\n        children: {},\n        depPath,\n        pkgIdWithPatchHash,\n        dir,\n        fetching:\n          'fetching' in fetchResponse ? fetchResponse.fetching : undefined,\n        filesIndexFile: fetchResponse.filesIndexFile,\n        hasBin: pkgSnapshot.hasBin === true,\n        hasBundledDependencies: pkgSnapshot.bundledDependencies != null,\n        modules,\n        name: pkgName,\n        optional: pkgSnapshot.optional === true,\n        optionalDependencies: new Set(\n          Object.keys(pkgSnapshot.optionalDependencies ?? {})\n        ),\n        patch: getPatchInfo(opts.patchedDependencies, pkgName, pkgVersion),\n      };\n\n      if (!opts.pkgLocationsByDepPath[depPath]) {\n        opts.pkgLocationsByDepPath[depPath] = [];\n      }\n\n      opts.pkgLocationsByDepPath[depPath].push(dir);\n\n      depHierarchy[dir] = await fetchDeps(\n        opts,\n        path.join(dir, 'node_modules') as ModulesDir,\n        dep.dependencies\n      );\n\n      if (!opts.hoistedLocations[depPath]) {\n        opts.hoistedLocations[depPath] = [];\n      }\n\n      opts.hoistedLocations[depPath].push(depLocation);\n\n      opts.graph[dir].children = getChildren(\n        pkgSnapshot,\n        opts.pkgLocationsByDepPath,\n        opts\n      );\n    })\n  );\n\n  return depHierarchy;\n}\n\nasync function dirHasPackageJsonWithVersion(\n  dir: string,\n  expectedVersion?: string | undefined\n): Promise<boolean> {\n  if (typeof expectedVersion === 'undefined') {\n    return pathExists(dir);\n  }\n\n  try {\n    const manifest = await safeReadPackageJsonFromDir(dir);\n    return manifest?.version === expectedVersion;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    if (err.code === 'ENOENT') {\n      return pathExists(dir);\n    }\n\n    throw err;\n  }\n}\n\nfunction getChildren(\n  pkgSnapshot: PackageSnapshot,\n  pkgLocationsByDepPath: Record<string, string[]>,\n  opts: { include: IncludedDependencies }\n): Record<string, string> {\n  const allDeps = {\n    ...pkgSnapshot.dependencies,\n    ...(opts.include.optionalDependencies\n      ? pkgSnapshot.optionalDependencies\n      : {}),\n  };\n\n  const children: Record<string, string> = {};\n\n  for (const [childName, childRef] of Object.entries(allDeps)) {\n    const childDepPath = dp.refToRelative(childRef, childName);\n\n    if (childDepPath && pkgLocationsByDepPath[childDepPath]) {\n      const location = pkgLocationsByDepPath[childDepPath][0];\n\n      if (typeof location === 'string') {\n        children[childName] = location;\n      }\n    }\n  }\n\n  return children;\n}\n"],
  "mappings": "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",
  "names": ["modulesDir"]
}
